* chore(release): 11.28.9, pacquet 12.16.0, pnpr 0.1.0-alpha.17, get-pnpm 0.0.10 * docs(release): curate the 11.28.9, 12.16.0, and pnpr alpha.17 release notes - Add a lead line to each page and group the patch entries by what the reader was doing, with security fixes first. - Merge the duplicate strictSsl/localAddress entries and the repeat-install setting entries into one list per page. - pnpr: split the removals into commands, flag aliases, and camelCase config keys, and say that pnpr no longer serves PUT /-/pnpm/v1/publish, so batch publishing needs pnpm 11.28.9 or 12.16.0. - Drop the "Updated dependencies: get-pnpm" line from the pnpm v12 page and list the get-pnpm credential fix first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@pnpm/exec.lifecycle
Package lifecycle hook runner
Installation
pnpm add @pnpm/logger @pnpm/exec.lifecycle
Usage
import { readFile } from 'node:fs/promises'
import path from 'node:path'
import { runLifecycleHook, runPostinstallHooks } from '@pnpm/exec.lifecycle'
const targetPkgRoot = path.resolve('node_modules/target-pkg')
const pkg = JSON.parse(await readFile(path.join(targetPkgRoot, 'package.json'), 'utf8'))
// Run a specific hook
await runLifecycleHook('preinstall', pkg, {
depPath: 'target-pkg@1.0.0',
pkgRoot: targetPkgRoot,
rootModulesDir: path.resolve('node_modules'),
unsafePerm: true,
})
// Run all install hooks
await runPostinstallHooks({
depPath: 'target-pkg@1.0.0',
pkgRoot: targetPkgRoot,
rootModulesDir: path.resolve('node_modules'),
unsafePerm: true,
})
API
runLifecycleHook(stage, packageManifest, opts): Promise<boolean>
runPostinstallHooks(opts): Promise<boolean>
License
MIT