diff --git a/packages/pnpm/src/cmd/import.ts b/packages/pnpm/src/cmd/import.ts index c5d7a979f5..f141481e03 100644 --- a/packages/pnpm/src/cmd/import.ts +++ b/packages/pnpm/src/cmd/import.ts @@ -1,10 +1,10 @@ import { WANTED_LOCKFILE } from '@pnpm/constants' -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import loadJsonFile from 'load-json-file' import path = require('path') import rimraf = require('rimraf-then') import { install } from 'supi' import createStoreController from '../createStoreController' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' export default async function installCmd ( @@ -26,7 +26,7 @@ export default async function installCmd ( store: store.path, storeController: store.ctrl, } - await install(await readPackageJsonFromDir(opts.prefix), installOpts) + await install(await readImporterManifestFromDir(opts.prefix), installOpts) } async function readNpmLockfile (prefix: string) { diff --git a/packages/pnpm/src/cmd/install.ts b/packages/pnpm/src/cmd/install.ts index d4c234c1fb..a5ba9e6a66 100644 --- a/packages/pnpm/src/cmd/install.ts +++ b/packages/pnpm/src/cmd/install.ts @@ -1,8 +1,4 @@ -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' -import { - getSaveType, - safeReadPackageFromDir, -} from '@pnpm/utils' +import { getSaveType } from '@pnpm/utils' import { install, mutateModules, @@ -12,6 +8,7 @@ import writePkg = require('write-pkg') import createStoreController from '../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../findWorkspacePackages' import getPinnedVersion from '../getPinnedVersion' +import { readImporterManifestFromDir, safeReadImporterManifestFromDir } from '../readImporterManifest' import requireHooks from '../requireHooks' import { PnpmOptions } from '../types' import updateToLatestSpecsFromManifest, { createLatestSpecs } from '../updateToLatestSpecsFromManifest' @@ -57,7 +54,7 @@ export default async function installCmd ( storeController: store.ctrl, } - let manifest = await safeReadPackageFromDir(opts.prefix) + let manifest = await safeReadImporterManifestFromDir(opts.prefix) if (manifest === null) { if (opts.update) { const err = new Error('No package.json found') @@ -115,7 +112,7 @@ export default async function installCmd ( [ { buildIndex: 0, - manifest: await readPackageJsonFromDir(opts.prefix), + manifest: await readImporterManifestFromDir(opts.prefix), prefix: opts.prefix, }, ], { diff --git a/packages/pnpm/src/cmd/link.ts b/packages/pnpm/src/cmd/link.ts index d2ca4b70c8..6abba7d1e2 100644 --- a/packages/pnpm/src/cmd/link.ts +++ b/packages/pnpm/src/cmd/link.ts @@ -1,5 +1,4 @@ import { StoreController } from '@pnpm/package-store' -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { safeReadPackageFromDir } from '@pnpm/utils' import pLimit = require('p-limit') import path = require('path') @@ -15,6 +14,7 @@ import { import { cached as createStoreController } from '../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../findWorkspacePackages' import getConfigs from '../getConfigs' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' const installLimit = pLimit(4) @@ -77,7 +77,7 @@ export default async ( pkgPaths.map((prefix) => installLimit(async () => { const s = await createStoreController(storeControllerCache, opts) await install( - await readPackageJsonFromDir(prefix), { + await readImporterManifestFromDir(prefix), { ...await getConfigs( { ...opts.cliArgs, prefix }, { @@ -94,7 +94,7 @@ export default async ( ) await link(pkgPaths, path.join(cwd, 'node_modules'), { ...linkOpts, - manifest: await readPackageJsonFromDir(cwd), + manifest: await readImporterManifestFromDir(cwd), }) await Promise.all( diff --git a/packages/pnpm/src/cmd/prune.ts b/packages/pnpm/src/cmd/prune.ts index e83aa9cdc2..13355a2625 100644 --- a/packages/pnpm/src/cmd/prune.ts +++ b/packages/pnpm/src/cmd/prune.ts @@ -1,6 +1,6 @@ -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { InstallOptions, mutateModules } from 'supi' import createStoreController from '../createStoreController' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' export default async (input: string[], opts: PnpmOptions) => { @@ -8,7 +8,7 @@ export default async (input: string[], opts: PnpmOptions) => { return mutateModules([ { buildIndex: 0, - manifest: await readPackageJsonFromDir(process.cwd()), + manifest: await readImporterManifestFromDir(process.cwd()), mutation: 'install', prefix: process.cwd(), pruneDirectDependencies: true, diff --git a/packages/pnpm/src/cmd/rebuild.ts b/packages/pnpm/src/cmd/rebuild.ts index 6dd2a745d0..89cb82dc23 100644 --- a/packages/pnpm/src/cmd/rebuild.ts +++ b/packages/pnpm/src/cmd/rebuild.ts @@ -1,9 +1,9 @@ -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { rebuild, rebuildPkgs, } from 'supi' import createStoreController from '../createStoreController' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' export default async function ( @@ -22,7 +22,7 @@ export default async function ( [ { buildIndex: 0, - manifest: await readPackageJsonFromDir(rebuildOpts.prefix), + manifest: await readImporterManifestFromDir(rebuildOpts.prefix), prefix: rebuildOpts.prefix, }, ], @@ -32,7 +32,7 @@ export default async function ( await rebuildPkgs( [ { - manifest: await readPackageJsonFromDir(rebuildOpts.prefix), + manifest: await readImporterManifestFromDir(rebuildOpts.prefix), prefix: rebuildOpts.prefix, }, ], diff --git a/packages/pnpm/src/cmd/recursive/index.ts b/packages/pnpm/src/cmd/recursive/index.ts index facc3181a4..7437f3cfd6 100644 --- a/packages/pnpm/src/cmd/recursive/index.ts +++ b/packages/pnpm/src/cmd/recursive/index.ts @@ -1,5 +1,4 @@ import logger from '@pnpm/logger' -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { DependencyManifest, ImporterManifest } from '@pnpm/types' import { getSaveType } from '@pnpm/utils' import camelcaseKeys = require('camelcase-keys') @@ -30,6 +29,7 @@ import getCommandFullName from '../../getCommandFullName' import getPinnedVersion from '../../getPinnedVersion' import { scopeLogger } from '../../loggers' import parsePackageSelector, { PackageSelector } from '../../parsePackageSelectors' +import { readImporterManifestFromDir } from '../../readImporterManifest' import requireHooks from '../../requireHooks' import { PnpmOptions } from '../../types' import updateToLatestSpecsFromManifest, { createLatestSpecs } from '../../updateToLatestSpecsFromManifest' @@ -207,7 +207,7 @@ export async function recursive ( prefixes.map(async (prefix) => { importers.push({ buildIndex, - manifest: await readPackageJsonFromDir(prefix), + manifest: await readImporterManifestFromDir(prefix), prefix, }) }) @@ -232,7 +232,7 @@ export async function recursive ( const mutation = cmdFullName === 'uninstall' ? 'uninstallSome' : (input.length === 0 && !updateToLatest ? 'install' : 'installSome') const mutatedImporters = await Promise.all(importers.map(async ({ buildIndex, prefix }) => { const localConfigs = await memReadLocalConfigs(prefix) - const manifest = await readPackageJsonFromDir(prefix) + const manifest = await readImporterManifestFromDir(prefix) const shamefullyFlatten = typeof localConfigs.shamefullyFlatten === 'boolean' ? localConfigs.shamefullyFlatten : opts.shamefullyFlatten @@ -302,7 +302,7 @@ export async function recursive ( return } - const manifest = await readPackageJsonFromDir(prefix) + const manifest = await readImporterManifestFromDir(prefix) let currentInput = [...input] if (updateToLatest) { if (!currentInput || !currentInput.length) { @@ -398,7 +398,7 @@ export async function recursive ( [ { buildIndex: 0, - manifest: await readPackageJsonFromDir(prefix), + manifest: await readImporterManifestFromDir(prefix), prefix, }, ], diff --git a/packages/pnpm/src/cmd/uninstall.ts b/packages/pnpm/src/cmd/uninstall.ts index f546a5f1a6..542c20b373 100644 --- a/packages/pnpm/src/cmd/uninstall.ts +++ b/packages/pnpm/src/cmd/uninstall.ts @@ -1,4 +1,3 @@ -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { mutateModules, uninstall, @@ -6,6 +5,7 @@ import { import writePkg = require('write-pkg') import createStoreController from '../createStoreController' import findWorkspacePackages, { arrayOfLocalPackagesToMap } from '../findWorkspacePackages' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' export default async function uninstallCmd ( @@ -18,7 +18,7 @@ export default async function uninstallCmd ( storeController: store.ctrl, }) if (opts.lockfileDirectory === opts.prefix) { - const manifest = await uninstall(await readPackageJsonFromDir(opts.prefix), input, uninstallOpts) + const manifest = await uninstall(await readImporterManifestFromDir(opts.prefix), input, uninstallOpts) await writePkg(opts.prefix, manifest) return } @@ -30,7 +30,7 @@ export default async function uninstallCmd ( { bin: opts.bin, dependencyNames: input, - manifest: await readPackageJsonFromDir(opts.prefix), + manifest: await readImporterManifestFromDir(opts.prefix), mutation: 'uninstallSome', prefix: opts.prefix, }, diff --git a/packages/pnpm/src/cmd/unlink.ts b/packages/pnpm/src/cmd/unlink.ts index 2a8ebf063d..298d478805 100644 --- a/packages/pnpm/src/cmd/unlink.ts +++ b/packages/pnpm/src/cmd/unlink.ts @@ -1,6 +1,6 @@ -import { fromDir as readPackageJsonFromDir } from '@pnpm/read-package-json' import { mutateModules } from 'supi' import createStoreController from '../createStoreController' +import { readImporterManifestFromDir } from '../readImporterManifest' import { PnpmOptions } from '../types' export default async function (input: string[], opts: PnpmOptions) { @@ -14,7 +14,7 @@ export default async function (input: string[], opts: PnpmOptions) { return mutateModules([ { dependencyNames: input, - manifest: await readPackageJsonFromDir(opts.prefix), + manifest: await readImporterManifestFromDir(opts.prefix), mutation: 'unlinkSome', prefix: opts.prefix, }, @@ -22,7 +22,7 @@ export default async function (input: string[], opts: PnpmOptions) { } return mutateModules([ { - manifest: await readPackageJsonFromDir(opts.prefix), + manifest: await readImporterManifestFromDir(opts.prefix), mutation: 'unlink', prefix: opts.prefix, }, diff --git a/packages/pnpm/src/readImporterManifest.ts b/packages/pnpm/src/readImporterManifest.ts new file mode 100644 index 0000000000..9dace5f774 --- /dev/null +++ b/packages/pnpm/src/readImporterManifest.ts @@ -0,0 +1,24 @@ +import { ImporterManifest } from '@pnpm/types' +import loadJsonFile from 'load-json-file' +import path = require('path') + +export async function readImporterManifest (filename: string) { + return loadJsonFile(filename) +} + +export async function readImporterManifestFromDir (dir: string) { + return readImporterManifest(path.join(dir, 'package.json')) +} + +export async function safeReadImporterManifest (filename: string): Promise { + try { + return await readImporterManifest(filename) + } catch (err) { + if (err['code'] !== 'ENOENT') throw err + return null + } +} + +export function safeReadImporterManifestFromDir (dir: string) { + return safeReadImporterManifest(path.join(dir, 'package.json')) +}