mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-06 23:19:19 -04:00
@@ -1,4 +1,5 @@
|
||||
import logger from '@pnpm/logger'
|
||||
import { PackageJson } from '@pnpm/types'
|
||||
import chalk from 'chalk'
|
||||
import fs = require('fs')
|
||||
|
||||
@@ -14,8 +15,12 @@ export default (pnpmFilePath: string, prefix: string) => {
|
||||
}
|
||||
if (pnpmfile && pnpmfile.hooks && pnpmfile.hooks.readPackage) {
|
||||
const readPackage = pnpmfile.hooks.readPackage
|
||||
pnpmfile.hooks.readPackage = function (...args: any[]) { // tslint:disable-line
|
||||
const newPkg = readPackage(...args)
|
||||
pnpmfile.hooks.readPackage = function (pkg: PackageJson, ...args: any[]) { // tslint:disable-line
|
||||
pkg.dependencies = pkg.dependencies || {}
|
||||
pkg.devDependencies = pkg.devDependencies || {}
|
||||
pkg.optionalDependencies = pkg.optionalDependencies || {}
|
||||
pkg.peerDependencies = pkg.peerDependencies || {}
|
||||
const newPkg = readPackage(pkg, ...args)
|
||||
if (!newPkg) {
|
||||
const err = new Error(`readPackage hook did not return a package manifest object. Hook imported via ${pnpmFilePath}`)
|
||||
// tslint:disable:no-string-literal
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
} from '../utils'
|
||||
|
||||
const test = promisifyTape(tape)
|
||||
const testOnly = promisifyTape(tape.only)
|
||||
|
||||
test('readPackage hook', async (t: tape.Test) => {
|
||||
const project = prepare(t)
|
||||
@@ -378,3 +379,28 @@ test('pnpmfile: run afterAllResolved hook', async (t: tape.Test) => {
|
||||
t.equal(hookLog.hook, 'afterAllResolved', 'logged hook name')
|
||||
t.equal(hookLog.message, 'All resolved', 'logged the message')
|
||||
})
|
||||
|
||||
test('readPackage hook normalizes the package manifest', async (t: tape.Test) => {
|
||||
const project = prepare(t)
|
||||
|
||||
await fs.writeFile('pnpmfile.js', `
|
||||
'use strict'
|
||||
module.exports = {
|
||||
hooks: {
|
||||
readPackage (pkg) {
|
||||
if (pkg.name === 'dep-of-pkg-with-1-dep') {
|
||||
pkg.dependencies['is-positive'] = '*'
|
||||
pkg.optionalDependencies['is-negative'] = '*'
|
||||
pkg.peerDependencies['is-negative'] = '*'
|
||||
pkg.devDependencies['is-positive'] = '*'
|
||||
}
|
||||
return pkg
|
||||
}
|
||||
}
|
||||
}
|
||||
`, 'utf8')
|
||||
|
||||
await execPnpm('install', 'dep-of-pkg-with-1-dep')
|
||||
|
||||
t.pass('code in pnpmfile did not fail')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user