Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const makePartialCurrentLockfile = !installsOnly && (
ctx.existsWantedLockfile && !ctx.existsCurrentLockfile ||
// TODO: this operation is quite expensive. We'll have to find a better solution to do this.
// maybe in pnpm v2 it won't be needed. See: https://github.com/pnpm/pnpm/issues/841
!equalLockfiles
)
const result = await installInContext(importersToInstall, ctx, {
...opts,
currentLockfileIsUpToDate,
makePartialCurrentLockfile,
update: opts.update || !installsOnly,
updateLockfileMinorVersion: true,
})
if (!opts.ignoreScripts) {
await runLifecycleHooksConcurrently(['install', 'postinstall', 'prepublish', 'prepare'],
importersToBeInstalled,
opts.childConcurrency,
scriptsOpts,
)
}
return result
}
}
})
return importers
}
}
const importersToInstall = [] as ImporterToUpdate[]
const importersToBeInstalled = ctx.importers.filter(({ mutation }) => mutation === 'install') as Array<{ buildIndex: number, rootDir: string, manifest: ImporterManifest, modulesDir: string }>
const scriptsOpts = {
extraBinPaths: opts.extraBinPaths,
rawConfig: opts.rawConfig,
stdio: opts.ownLifecycleHooksStdio,
unsafePerm: opts.unsafePerm || false,
}
if (!opts.ignoreScripts) {
await runLifecycleHooksConcurrently(
['preinstall'],
importersToBeInstalled,
opts.childConcurrency,
scriptsOpts,
)
}
// TODO: make it concurrent
for (const importer of ctx.importers) {
switch (importer.mutation) {
case 'uninstallSome':
importersToInstall.push({
pruneDirectDependencies: false,
...importer,
removePackages: importer.dependencyNames,
updatePackageManifest: true,
if (opts.ifPresent) return
throw new PnpmError('NO_SCRIPT', `Missing script: ${scriptName}`)
}
const lifecycleOpts = {
depPath: dir,
extraBinPaths: opts.extraBinPaths,
pkgRoot: dir,
rawConfig: opts.rawConfig,
rootNodeModulesDir: await realNodeModulesDir(dir),
stdio: 'inherit',
unsafePerm: true, // when running scripts explicitly, assume that they're trusted.
}
if (manifest.scripts?.[`pre${scriptName}`]) {
await runLifecycleHooks(`pre${scriptName}`, manifest, lifecycleOpts)
}
await runLifecycleHooks(scriptName, manifest, { ...lifecycleOpts, args: args.slice(1) })
if (manifest.scripts?.[`post${scriptName}`]) {
await runLifecycleHooks(`post${scriptName}`, manifest, lifecycleOpts)
}
return undefined
}
if (!pkg.package.manifest.scripts || !pkg.package.manifest.scripts[scriptName]) {
return
}
hasCommand++
try {
const lifecycleOpts = {
depPath: prefix,
extraBinPaths: opts.extraBinPaths,
pkgRoot: prefix,
rawConfig: opts.rawConfig,
rootNodeModulesDir: await realNodeModulesDir(prefix),
stdio,
unsafePerm: true, // when running scripts explicitly, assume that they're trusted.
}
if (pkg.package.manifest.scripts[`pre${scriptName}`]) {
await runLifecycleHooks(`pre${scriptName}`, pkg.package.manifest, lifecycleOpts)
}
await runLifecycleHooks(scriptName, pkg.package.manifest, { ...lifecycleOpts, args: passedThruArgs })
if (pkg.package.manifest.scripts[`post${scriptName}`]) {
await runLifecycleHooks(`post${scriptName}`, pkg.package.manifest, lifecycleOpts)
}
result.passes++
} catch (err) {
logger.info(err)
if (!opts.bail) {
result.fails.push({
error: err,
message: err.message,
prefix,
})
return
}
const lifecycleOpts = {
depPath: dir,
extraBinPaths: opts.extraBinPaths,
pkgRoot: dir,
rawConfig: opts.rawConfig,
rootNodeModulesDir: await realNodeModulesDir(dir),
stdio: 'inherit',
unsafePerm: true, // when running scripts explicitly, assume that they're trusted.
}
if (manifest.scripts?.[`pre${scriptName}`]) {
await runLifecycleHooks(`pre${scriptName}`, manifest, lifecycleOpts)
}
await runLifecycleHooks(scriptName, manifest, { ...lifecycleOpts, args: args.slice(1) })
if (manifest.scripts?.[`post${scriptName}`]) {
await runLifecycleHooks(`post${scriptName}`, manifest, lifecycleOpts)
}
return undefined
}
}
hasCommand++
try {
const lifecycleOpts = {
depPath: prefix,
extraBinPaths: opts.extraBinPaths,
pkgRoot: prefix,
rawConfig: opts.rawConfig,
rootNodeModulesDir: await realNodeModulesDir(prefix),
stdio,
unsafePerm: true, // when running scripts explicitly, assume that they're trusted.
}
if (pkg.package.manifest.scripts[`pre${scriptName}`]) {
await runLifecycleHooks(`pre${scriptName}`, pkg.package.manifest, lifecycleOpts)
}
await runLifecycleHooks(scriptName, pkg.package.manifest, { ...lifecycleOpts, args: passedThruArgs })
if (pkg.package.manifest.scripts[`post${scriptName}`]) {
await runLifecycleHooks(`post${scriptName}`, pkg.package.manifest, lifecycleOpts)
}
result.passes++
} catch (err) {
logger.info(err)
if (!opts.bail) {
result.fails.push({
error: err,
message: err.message,
prefix,
})
return
}
const pkgsThatWereRebuilt = await _rebuild(
{
pkgsToRebuild: new Set(idsToRebuild),
...ctx,
},
opts,
)
ctx.pendingBuilds = ctx.pendingBuilds.filter((relDepPath) => !pkgsThatWereRebuilt.has(relDepPath))
const scriptsOpts = {
extraBinPaths: ctx.extraBinPaths,
rawConfig: opts.rawConfig,
unsafePerm: opts.unsafePerm || false,
}
await runLifecycleHooksConcurrently(
['preinstall', 'install', 'postinstall', 'prepublish', 'prepare'],
ctx.importers,
opts.childConcurrency || 5,
scriptsOpts,
)
for (const { id, manifest } of ctx.importers) {
if (manifest?.scripts && (!opts.pending || ctx.pendingBuilds.includes(id))) {
ctx.pendingBuilds.splice(ctx.pendingBuilds.indexOf(id), 1)
}
}
await writeModulesYaml(ctx.rootModulesDir, {
...ctx.modulesFile,
hoistedAliases: ctx.hoistedAliases,
hoistPattern: ctx.hoistPattern,
included: ctx.include,
opts: {
extraBinPaths?: string[],
lockfileDir: string,
optional: boolean,
rawConfig: object,
rootNodeModulesDir: string,
sideEffectsCacheWrite: boolean,
storeController: StoreController,
unsafePerm: boolean,
warn: (message: string) => void,
}
) {
const depNode = depGraph[depPath]
try {
await linkBinsOfDependencies(depNode, depGraph, opts)
const hasSideEffects = await runPostinstallHooks({
depPath,
extraBinPaths: opts.extraBinPaths,
optional: depNode.optional,
pkgRoot: depNode.peripheralLocation,
prepare: depNode.prepare,
rawConfig: opts.rawConfig,
rootNodeModulesDir: opts.rootNodeModulesDir,
unsafePerm: opts.unsafePerm || false,
})
if (hasSideEffects && opts.sideEffectsCacheWrite) {
try {
await opts.storeController.upload(depNode.peripheralLocation, {
engine: ENGINE_NAME,
packageId: depNode.packageId,
})
} catch (err) {