diff --git a/packages/pnpm/src/cmd/install.ts b/packages/pnpm/src/cmd/install.ts index 43bba29570..eb373b3d2a 100644 --- a/packages/pnpm/src/cmd/install.ts +++ b/packages/pnpm/src/cmd/install.ts @@ -1,5 +1,4 @@ import PnpmError from '@pnpm/error' -import { getSaveType } from '@pnpm/utils' import { install, mutateModules, @@ -8,6 +7,7 @@ import { import createStoreController from '../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../findWorkspacePackages' import getPinnedVersion from '../getPinnedVersion' +import getSaveType from '../getSaveType' import { readImporterManifestOnly, tryReadImporterManifest } from '../readImporterManifest' import requireHooks from '../requireHooks' import { PnpmOptions } from '../types' diff --git a/packages/pnpm/src/cmd/link.ts b/packages/pnpm/src/cmd/link.ts index a1638205d8..a8ade62e41 100644 --- a/packages/pnpm/src/cmd/link.ts +++ b/packages/pnpm/src/cmd/link.ts @@ -13,6 +13,7 @@ import { import { cached as createStoreController } from '../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../findWorkspacePackages' import getConfig from '../getConfig' +import getSaveType from '../getSaveType' import readImporterManifest, { readImporterManifestOnly, tryReadImporterManifest, @@ -42,6 +43,7 @@ export default async ( localPackages, store: store.path, storeController: store.ctrl, + targetDependenciesField: getSaveType(opts), }) // pnpm link @@ -68,8 +70,8 @@ export default async ( const pkgsFoundInWorkspace = workspacePackages.filter((pkg) => pkgNames.includes(pkg.manifest.name)) pkgsFoundInWorkspace.forEach((pkgFromWorkspace) => pkgPaths.push(pkgFromWorkspace.path)) - if (pkgsFoundInWorkspace.length && !linkOpts.saveDev && !linkOpts.saveProd && !linkOpts.saveOptional) { - linkOpts.saveProd = true + if (pkgsFoundInWorkspace.length && !linkOpts.targetDependenciesField) { + linkOpts.targetDependenciesField = 'dependencies' } globalPkgNames = pkgNames.filter((pkgName) => !pkgsFoundInWorkspace.some((pkgFromWorkspace) => pkgFromWorkspace.manifest.name === pkgName)) diff --git a/packages/pnpm/src/cmd/recursive/index.ts b/packages/pnpm/src/cmd/recursive/index.ts index aa2c2c4065..e3c563f2f7 100644 --- a/packages/pnpm/src/cmd/recursive/index.ts +++ b/packages/pnpm/src/cmd/recursive/index.ts @@ -1,7 +1,6 @@ import PnpmError from '@pnpm/error' import logger from '@pnpm/logger' import { DependencyManifest, ImporterManifest, PackageManifest } from '@pnpm/types' -import { getSaveType } from '@pnpm/utils' import camelcaseKeys = require('camelcase-keys') import graphSequencer = require('graph-sequencer') import isSubdir = require('is-subdir') @@ -11,7 +10,6 @@ import pFilter = require('p-filter') import pLimit from 'p-limit' import path = require('path') import createPkgGraph, { PackageNode } from 'pkgs-graph' -import R = require('ramda') import readIniFile = require('read-ini-file') import { addDependenciesToPackage, @@ -26,6 +24,7 @@ import createStoreController from '../../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../../findWorkspacePackages' import getCommandFullName from '../../getCommandFullName' import getPinnedVersion from '../../getPinnedVersion' +import getSaveType from '../../getSaveType' import { scopeLogger } from '../../loggers' import parsePackageSelector, { PackageSelector } from '../../parsePackageSelectors' import requireHooks from '../../requireHooks' @@ -197,7 +196,6 @@ export async function recursive ( && pkgs.length === allPkgs.length, store: store.path, storeController, - targetDependenciesField: getSaveType(opts), forceHoistPattern: typeof opts.rawLocalConfig['hoist-pattern'] !== 'undefined' || typeof opts.rawLocalConfig['hoist'] !== 'undefined', forceIndependentLeaves: typeof opts.rawLocalConfig['independent-leaves'] !== 'undefined', @@ -273,7 +271,7 @@ export async function recursive ( manifest, mutation, prefix, - targetDependenciesField: getSaveType(installOpts), + targetDependenciesField: getSaveType(opts), } as MutatedImporter) return case 'installSome': @@ -288,7 +286,7 @@ export async function recursive ( savePrefix: typeof localConfig.savePrefix === 'string' ? localConfig.savePrefix : opts.savePrefix, }), prefix, - targetDependenciesField: getSaveType(installOpts), + targetDependenciesField: getSaveType(opts), } as MutatedImporter) return case 'install': diff --git a/packages/pnpm/src/getSaveType.ts b/packages/pnpm/src/getSaveType.ts new file mode 100644 index 0000000000..5dfbab9787 --- /dev/null +++ b/packages/pnpm/src/getSaveType.ts @@ -0,0 +1,9 @@ +import { Config } from '@pnpm/config' +import { DependenciesField } from '@pnpm/types' + +export default function getSaveType (opts: Pick): DependenciesField | undefined { + if (opts.saveDev) return 'devDependencies' + if (opts.saveOptional) return 'optionalDependencies' + if (opts.saveProd) return 'dependencies' + return undefined +} diff --git a/packages/supi/src/link/index.ts b/packages/supi/src/link/index.ts index 05029335ad..50c337aa10 100644 --- a/packages/supi/src/link/index.ts +++ b/packages/supi/src/link/index.ts @@ -19,9 +19,6 @@ import { DependencyManifest, ImporterManifest, } from '@pnpm/types' -import { - getSaveType, -} from '@pnpm/utils' import normalize = require('normalize-path') import path = require('path') import pathAbsolute = require('path-absolute') @@ -47,7 +44,6 @@ export default async function link ( if (reporter) { streamParser.on('data', reporter) } - maybeOpts.saveProd = maybeOpts.saveProd === true const opts = await extendOptions(maybeOpts) const ctx = await getContextForSingleImporter(opts.manifest, { ...opts, @@ -58,7 +54,6 @@ export default async function link ( const currentLockfile = R.clone(ctx.currentLockfile) const linkedPkgs: Array<{path: string, manifest: DependencyManifest, alias: string}> = [] const specsToUpsert = [] as Array<{name: string, pref: string, saveType: DependenciesField}> - const saveType = getSaveType(opts) for (const linkFrom of linkFromPkgs) { let linkFromPath: string @@ -75,7 +70,7 @@ export default async function link ( pref: getPref(manifest.name, manifest.name, manifest.version, { pinnedVersion: opts.pinnedVersion, }), - saveType: (saveType || ctx.manifest && guessDependencyType(manifest.name, ctx.manifest)) as DependenciesField, + saveType: (opts.targetDependenciesField || ctx.manifest && guessDependencyType(manifest.name, ctx.manifest)) as DependenciesField, }) const packagePath = normalize(path.relative(opts.prefix, linkFromPath)) @@ -128,7 +123,7 @@ export default async function link ( // TODO: cover with test that linking reports with correct dependency types const stu = specsToUpsert.find((s) => s.name === manifest.name) await symlinkDirectRootDependency(path, destModules, alias, { - fromDependenciesField: stu && stu.saveType || saveType, + fromDependenciesField: stu && stu.saveType || opts.targetDependenciesField, linkedPackage: manifest, prefix: opts.prefix, }) @@ -140,7 +135,7 @@ export default async function link ( }) let newPkg!: ImporterManifest - if (opts.saveDev || opts.saveProd || opts.saveOptional) { + if (opts.targetDependenciesField) { newPkg = await save(opts.prefix, opts.manifest, specsToUpsert) for (const { name } of specsToUpsert) { updatedWantedLockfile.importers[importerId].specifiers[name] = getSpecFromPackageManifest(newPkg, name) diff --git a/packages/supi/src/link/options.ts b/packages/supi/src/link/options.ts index c4d3016dde..3a1590b35f 100644 --- a/packages/supi/src/link/options.ts +++ b/packages/supi/src/link/options.ts @@ -1,5 +1,9 @@ import { StoreController } from '@pnpm/store-controller-types' -import { ImporterManifest, Registries } from '@pnpm/types' +import { + DependenciesField, + ImporterManifest, + Registries, +} from '@pnpm/types' import { DEFAULT_REGISTRIES, normalizeRegistries } from '@pnpm/utils' import path = require('path') import { ReporterFunction } from '../types' @@ -11,15 +15,13 @@ interface StrictLinkOptions { useLockfile: boolean, lockfileDirectory: string, pinnedVersion: 'major' | 'minor' | 'patch', - saveProd: boolean, - saveDev: boolean, - saveOptional: boolean, storeController: StoreController, manifest: ImporterManifest, prefix: string, registries: Registries, store: string, reporter: ReporterFunction, + targetDependenciesField?: DependenciesField, hoistPattern: string[] | undefined, forceHoistPattern: boolean, diff --git a/packages/utils/src/getSaveType.ts b/packages/utils/src/getSaveType.ts deleted file mode 100644 index 8ae0b086f7..0000000000 --- a/packages/utils/src/getSaveType.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DependenciesField, PnpmOptions } from '@pnpm/types' - -export default function getSaveType (opts: PnpmOptions): DependenciesField | undefined { - if (opts.saveDev) return 'devDependencies' - if (opts.saveOptional) return 'optionalDependencies' - if (opts.saveProd) return 'dependencies' - return undefined -} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 14749c374c..60378e89c3 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,5 +1,4 @@ import getAllDependenciesFromPackage from './getAllDependenciesFromPackage' -import getSaveType from './getSaveType' import normalizeRegistries, { DEFAULT_REGISTRIES } from './normalizeRegistries' import pickRegistryForPackage from './pickRegistryForPackage' import realNodeModulesDir from './realNodeModulesDir' @@ -10,7 +9,6 @@ export const readPackage = safeReadPackage export { DEFAULT_REGISTRIES, getAllDependenciesFromPackage, - getSaveType, normalizeRegistries, pickRegistryForPackage, realNodeModulesDir,