pnpm 7.27.1 → 7.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -200,11 +200,11 @@ included:
200
200
  injectedDeps: {}
201
201
  layoutVersion: 5
202
202
  nodeLinker: hoisted
203
- packageManager: pnpm@7.27.0
203
+ packageManager: pnpm@7.28.0-0
204
204
  pendingBuilds:
205
205
  - /node-gyp/9.3.1
206
206
  - /encoding/0.1.13
207
- prunedAt: Sat, 18 Feb 2023 02:16:44 GMT
207
+ prunedAt: Sat, 25 Feb 2023 16:36:44 GMT
208
208
  publicHoistPattern:
209
209
  - '*eslint*'
210
210
  - '*prettier*'
package/dist/pnpm.cjs CHANGED
@@ -3244,7 +3244,7 @@ var require_lib4 = __commonJS({
3244
3244
  var load_json_file_1 = __importDefault3(require_load_json_file());
3245
3245
  var defaultManifest = {
3246
3246
  name: "pnpm" != null && true ? "pnpm" : "pnpm",
3247
- version: "7.27.1" != null && true ? "7.27.1" : "0.0.0"
3247
+ version: "7.28.0" != null && true ? "7.28.0" : "0.0.0"
3248
3248
  };
3249
3249
  var pkgJson;
3250
3250
  if (require.main == null) {
@@ -45992,15 +45992,16 @@ var require_recursiveSummary = __commonJS({
45992
45992
  exports2.throwOnCommandFail = void 0;
45993
45993
  var error_1 = require_lib8();
45994
45994
  var RecursiveFailError = class extends error_1.PnpmError {
45995
- constructor(command, recursiveSummary) {
45996
- super("RECURSIVE_FAIL", `"${command}" failed in ${recursiveSummary.fails.length} packages`);
45997
- this.fails = recursiveSummary.fails;
45998
- this.passes = recursiveSummary.passes;
45995
+ constructor(command, recursiveSummary, failures) {
45996
+ super("RECURSIVE_FAIL", `"${command}" failed in ${failures.length} packages`);
45997
+ this.failures = failures;
45998
+ this.passes = Object.values(recursiveSummary).filter(({ status }) => status === "passed").length;
45999
45999
  }
46000
46000
  };
46001
46001
  function throwOnCommandFail(command, recursiveSummary) {
46002
- if (recursiveSummary.fails.length > 0) {
46003
- throw new RecursiveFailError(command, recursiveSummary);
46002
+ const failures = Object.values(recursiveSummary).filter(({ status }) => status === "failure");
46003
+ if (failures.length > 0) {
46004
+ throw new RecursiveFailError(command, recursiveSummary, failures);
46004
46005
  }
46005
46006
  }
46006
46007
  exports2.throwOnCommandFail = throwOnCommandFail;
@@ -112421,13 +112422,14 @@ var require_gitMergeFile = __commonJS({
112421
112422
  exports2.isDiff = exports2.autofixMergeConflicts = void 0;
112422
112423
  var merge_lockfile_changes_1 = require_lib83();
112423
112424
  var js_yaml_1 = __importDefault3(require_js_yaml());
112425
+ var inlineSpecifiersLockfileConverters_1 = require_inlineSpecifiersLockfileConverters();
112424
112426
  var MERGE_CONFLICT_PARENT = "|||||||";
112425
112427
  var MERGE_CONFLICT_END = ">>>>>>>";
112426
112428
  var MERGE_CONFLICT_THEIRS = "=======";
112427
112429
  var MERGE_CONFLICT_OURS = "<<<<<<<";
112428
112430
  function autofixMergeConflicts(fileContent) {
112429
112431
  const { ours, theirs } = parseMergeFile(fileContent);
112430
- return (0, merge_lockfile_changes_1.mergeLockfileChanges)(js_yaml_1.default.load(ours), js_yaml_1.default.load(theirs));
112432
+ return (0, merge_lockfile_changes_1.mergeLockfileChanges)((0, inlineSpecifiersLockfileConverters_1.revertFromInlineSpecifiersFormatIfNecessary)(js_yaml_1.default.load(ours)), (0, inlineSpecifiersLockfileConverters_1.revertFromInlineSpecifiersFormatIfNecessary)(js_yaml_1.default.load(theirs)));
112431
112433
  }
112432
112434
  exports2.autofixMergeConflicts = autofixMergeConflicts;
112433
112435
  function parseMergeFile(fileContent) {
@@ -112549,24 +112551,23 @@ var require_read = __commonJS({
112549
112551
  hadConflicts: false
112550
112552
  };
112551
112553
  }
112552
- let lockfileFile;
112554
+ let lockfile;
112553
112555
  let hadConflicts;
112554
112556
  try {
112555
- lockfileFile = js_yaml_1.default.load(lockfileRawContent);
112557
+ lockfile = (0, inlineSpecifiersLockfileConverters_1.revertFromInlineSpecifiersFormatIfNecessary)(convertFromLockfileFileMutable(js_yaml_1.default.load(lockfileRawContent)));
112556
112558
  hadConflicts = false;
112557
112559
  } catch (err) {
112558
112560
  if (!opts.autofixMergeConflicts || !(0, gitMergeFile_1.isDiff)(lockfileRawContent)) {
112559
112561
  throw new error_1.PnpmError("BROKEN_LOCKFILE", `The lockfile at "${lockfilePath}" is broken: ${err.message}`);
112560
112562
  }
112561
112563
  hadConflicts = true;
112562
- lockfileFile = (0, gitMergeFile_1.autofixMergeConflicts)(lockfileRawContent);
112564
+ lockfile = convertFromLockfileFileMutable((0, gitMergeFile_1.autofixMergeConflicts)(lockfileRawContent));
112563
112565
  logger_1.lockfileLogger.info({
112564
112566
  message: `Merge conflict detected in ${constants_1.WANTED_LOCKFILE} and successfully merged`,
112565
112567
  prefix
112566
112568
  });
112567
112569
  }
112568
- if (lockfileFile) {
112569
- const lockfile = (0, inlineSpecifiersLockfileConverters_1.revertFromInlineSpecifiersFormatIfNecessary)(convertFromLockfileFileMutable(lockfileFile));
112570
+ if (lockfile) {
112570
112571
  const lockfileSemver = (0, comver_to_semver_1.default)((lockfile.lockfileVersion ?? 0).toString());
112571
112572
  if (!opts.wantedVersions || opts.wantedVersions.length === 0 || opts.wantedVersions.some((wantedVersion) => {
112572
112573
  if (semver_12.default.major(lockfileSemver) !== semver_12.default.major((0, comver_to_semver_1.default)(wantedVersion)))
@@ -113593,7 +113594,8 @@ var require_getPkgInfo2 = __commonJS({
113593
113594
  license: manifest.license,
113594
113595
  author: manifest.author,
113595
113596
  homepage: manifest.homepage,
113596
- repository: (manifest.repository && (typeof manifest.repository === "string" ? manifest.repository : manifest.repository.url)) ?? void 0
113597
+ repository: (manifest.repository && (typeof manifest.repository === "string" ? manifest.repository : manifest.repository.url)) ?? void 0,
113598
+ path: pkg.path
113597
113599
  };
113598
113600
  }
113599
113601
  exports2.getPkgInfo = getPkgInfo;
@@ -113640,7 +113642,8 @@ var require_renderJson = __commonJS({
113640
113642
  alias: node.alias,
113641
113643
  from: node.name,
113642
113644
  version: node.version,
113643
- resolved: node.resolved
113645
+ resolved: node.resolved,
113646
+ path: node.path
113644
113647
  };
113645
113648
  if (Object.keys(subDependencies).length > 0) {
113646
113649
  dep.dependencies = subDependencies;
@@ -113807,6 +113810,9 @@ ${depsLabel}
113807
113810
  if (pkg.homepage) {
113808
113811
  labelLines.push(pkg.homepage);
113809
113812
  }
113813
+ if (pkg.path) {
113814
+ labelLines.push(pkg.path);
113815
+ }
113810
113816
  return {
113811
113817
  label: labelLines.join("\n"),
113812
113818
  nodes
@@ -121330,6 +121336,10 @@ var require_config2 = __commonJS({
121330
121336
  description: "Sets the configuration in the global config file",
121331
121337
  name: "--global",
121332
121338
  shortAlias: "-g"
121339
+ },
121340
+ {
121341
+ description: 'When set to "project", the .npmrc file at the nearest package.json will be used',
121342
+ name: "--location <project|global>"
121333
121343
  }
121334
121344
  ]
121335
121345
  }
@@ -121352,6 +121362,8 @@ var require_config2 = __commonJS({
121352
121362
  }
121353
121363
  if (opts.location) {
121354
121364
  opts.global = opts.location === "global";
121365
+ } else if (opts.cliOptions["global"] == null) {
121366
+ opts.global = true;
121355
121367
  }
121356
121368
  switch (params[0]) {
121357
121369
  case "set": {
@@ -125993,7 +126005,7 @@ var require_implementation2 = __commonJS({
125993
126005
  const warn = (message2) => {
125994
126006
  logger_1.logger.info({ message: message2, prefix: opts.dir });
125995
126007
  };
125996
- const groups = chunks.map((chunk) => chunk.filter((depPath) => ctx.pkgsToRebuild.has(depPath)).map((depPath) => async () => {
126008
+ const groups = chunks.map((chunk) => chunk.filter((depPath) => ctx.pkgsToRebuild.has(depPath) && !ctx.skipped.has(depPath)).map((depPath) => async () => {
125997
126009
  const pkgSnapshot = pkgSnapshots[depPath];
125998
126010
  const pkgInfo = (0, lockfile_utils_1.nameVerFromPkgSnapshot)(depPath, pkgSnapshot);
125999
126011
  const pkgRoots = opts.nodeLinker === "hoisted" ? (ctx.modulesFile?.hoistedLocations?.[depPath] ?? []).map((hoistedLocation) => path_1.default.join(opts.lockfileDir, hoistedLocation)) : [path_1.default.join(ctx.virtualStoreDir, dp.depPathToFilename(depPath), "node_modules", pkgInfo.name)];
@@ -126200,10 +126212,7 @@ var require_recursive = __commonJS({
126200
126212
  storeDir: store.dir,
126201
126213
  workspacePackages
126202
126214
  });
126203
- const result2 = {
126204
- fails: [],
126205
- passes: 0
126206
- };
126215
+ const result2 = {};
126207
126216
  const memReadLocalConfig = (0, mem_1.default)(config_1.readLocalConfig);
126208
126217
  async function getImporters() {
126209
126218
  const importers = [];
@@ -126237,6 +126246,7 @@ var require_recursive = __commonJS({
126237
126246
  if (opts.ignoredPackages?.has(rootDir)) {
126238
126247
  return;
126239
126248
  }
126249
+ result2[rootDir] = { status: "running" };
126240
126250
  const localConfig = await memReadLocalConfig(rootDir);
126241
126251
  await rebuild([
126242
126252
  {
@@ -126254,15 +126264,16 @@ var require_recursive = __commonJS({
126254
126264
  ...localConfig
126255
126265
  }
126256
126266
  });
126257
- result2.passes++;
126267
+ result2[rootDir].status = "passed";
126258
126268
  } catch (err) {
126259
126269
  logger_1.logger.info(err);
126260
126270
  if (!opts.bail) {
126261
- result2.fails.push({
126271
+ result2[rootDir] = {
126272
+ status: "failure",
126262
126273
  error: err,
126263
126274
  message: err.message,
126264
126275
  prefix: rootDir
126265
- });
126276
+ };
126266
126277
  return;
126267
126278
  }
126268
126279
  err["prefix"] = rootDir;
@@ -176607,7 +176618,16 @@ var require_lib129 = __commonJS({
176607
176618
  storeDir: opts.storeDir,
176608
176619
  virtualStoreDir
176609
176620
  });
176610
- await (0, lockfile_file_1.writeCurrentLockfile)(virtualStoreDir, filteredLockfile);
176621
+ if (opts.useLockfile) {
176622
+ await (0, lockfile_file_1.writeLockfiles)({
176623
+ wantedLockfileDir: opts.lockfileDir,
176624
+ currentLockfileDir: virtualStoreDir,
176625
+ wantedLockfile,
176626
+ currentLockfile: filteredLockfile
176627
+ });
176628
+ } else {
176629
+ await (0, lockfile_file_1.writeCurrentLockfile)(virtualStoreDir, filteredLockfile);
176630
+ }
176611
176631
  }
176612
176632
  await Promise.all(depNodes.map(({ finishing }) => finishing));
176613
176633
  core_loggers_1.summaryLogger.debug({ prefix: lockfileDir });
@@ -180501,7 +180521,9 @@ var require_resolveDependencies = __commonJS({
180501
180521
  return missingPeers;
180502
180522
  }
180503
180523
  function pkgIsLeaf(pkg) {
180504
- return (0, isEmpty_1.default)(pkg.dependencies ?? {}) && (0, isEmpty_1.default)(pkg.optionalDependencies ?? {}) && (0, isEmpty_1.default)(pkg.peerDependencies ?? {});
180524
+ return (0, isEmpty_1.default)(pkg.dependencies ?? {}) && (0, isEmpty_1.default)(pkg.optionalDependencies ?? {}) && (0, isEmpty_1.default)(pkg.peerDependencies ?? {}) && // Package manifests can declare peerDependenciesMeta without declaring
180525
+ // peerDependencies. peerDependenciesMeta implies the later.
180526
+ (0, isEmpty_1.default)(pkg.peerDependenciesMeta ?? {});
180505
180527
  }
180506
180528
  function getResolvedPackage(options) {
180507
180529
  const peerDependencies = peerDependenciesWithoutOwn(options.pkg);
@@ -192318,7 +192340,7 @@ var require_lib137 = __commonJS({
192318
192340
  function parsePkgSelector(selector) {
192319
192341
  const wantedDep = (0, parse_wanted_dependency_1.parseWantedDependency)(selector);
192320
192342
  if (!wantedDep.alias) {
192321
- throw new error_1.PnpmError("INVALID_OVERRIDE_SELECTOR", `Cannot parse the "${selector}" selector in the overrides`);
192343
+ throw new error_1.PnpmError("INVALID_SELECTOR", `Cannot parse the "${selector}" selector`);
192322
192344
  }
192323
192345
  return {
192324
192346
  name: wantedDep.alias,
@@ -192328,6 +192350,23 @@ var require_lib137 = __commonJS({
192328
192350
  }
192329
192351
  });
192330
192352
 
192353
+ // ../hooks/read-package-hook/lib/isSubRange.js
192354
+ var require_isSubRange = __commonJS({
192355
+ "../hooks/read-package-hook/lib/isSubRange.js"(exports2) {
192356
+ "use strict";
192357
+ var __importDefault3 = exports2 && exports2.__importDefault || function(mod) {
192358
+ return mod && mod.__esModule ? mod : { "default": mod };
192359
+ };
192360
+ Object.defineProperty(exports2, "__esModule", { value: true });
192361
+ exports2.isSubRange = void 0;
192362
+ var semver_12 = __importDefault3(require_semver2());
192363
+ function isSubRange(superRange, subRange) {
192364
+ return !superRange || subRange === superRange || semver_12.default.validRange(subRange) != null && semver_12.default.validRange(superRange) != null && semver_12.default.subset(subRange, superRange);
192365
+ }
192366
+ exports2.isSubRange = isSubRange;
192367
+ }
192368
+ });
192369
+
192331
192370
  // ../hooks/read-package-hook/lib/createVersionsOverrider.js
192332
192371
  var require_createVersionsOverrider = __commonJS({
192333
192372
  "../hooks/read-package-hook/lib/createVersionsOverrider.js"(exports2) {
@@ -192338,12 +192377,15 @@ var require_createVersionsOverrider = __commonJS({
192338
192377
  Object.defineProperty(exports2, "__esModule", { value: true });
192339
192378
  exports2.createVersionsOverrider = void 0;
192340
192379
  var path_1 = __importDefault3(require("path"));
192380
+ var semver_12 = __importDefault3(require_semver2());
192341
192381
  var partition_1 = __importDefault3(require_partition4());
192382
+ var error_1 = require_lib8();
192342
192383
  var parse_overrides_1 = require_lib137();
192343
192384
  var normalize_path_1 = __importDefault3(require_normalize_path());
192344
- var semver_12 = __importDefault3(require_semver2());
192385
+ var isSubRange_1 = require_isSubRange();
192345
192386
  function createVersionsOverrider(overrides, rootDir) {
192346
- const [versionOverrides, genericVersionOverrides] = (0, partition_1.default)(({ parentPkg }) => parentPkg != null, (0, parse_overrides_1.parseOverrides)(overrides).map((override) => {
192387
+ const parsedOverrides = tryParseOverrides(overrides);
192388
+ const [versionOverrides, genericVersionOverrides] = (0, partition_1.default)(({ parentPkg }) => parentPkg != null, parsedOverrides.map((override) => {
192347
192389
  let linkTarget;
192348
192390
  if (override.newPref.startsWith("link:")) {
192349
192391
  linkTarget = path_1.default.join(rootDir, override.newPref.substring(5));
@@ -192368,6 +192410,13 @@ var require_createVersionsOverrider = __commonJS({
192368
192410
  };
192369
192411
  }
192370
192412
  exports2.createVersionsOverrider = createVersionsOverrider;
192413
+ function tryParseOverrides(overrides) {
192414
+ try {
192415
+ return (0, parse_overrides_1.parseOverrides)(overrides);
192416
+ } catch (e) {
192417
+ throw new error_1.PnpmError("INVALID_OVERRIDES_SELECTOR", `${e.message} in pnpm.overrides`);
192418
+ }
192419
+ }
192371
192420
  function overrideDepsOfPkg({ manifest, dir }, versionOverrides) {
192372
192421
  if (manifest.dependencies != null)
192373
192422
  overrideDeps(versionOverrides, manifest.dependencies, dir);
@@ -192382,7 +192431,7 @@ var require_createVersionsOverrider = __commonJS({
192382
192431
  const actual = deps[versionOverride.targetPkg.name];
192383
192432
  if (actual == null)
192384
192433
  continue;
192385
- if (!isSubRange(versionOverride.targetPkg.pref, actual))
192434
+ if (!(0, isSubRange_1.isSubRange)(versionOverride.targetPkg.pref, actual))
192386
192435
  continue;
192387
192436
  if (versionOverride.linkTarget && dir) {
192388
192437
  deps[versionOverride.targetPkg.name] = `link:${(0, normalize_path_1.default)(path_1.default.relative(dir, versionOverride.linkTarget))}`;
@@ -192395,9 +192444,6 @@ var require_createVersionsOverrider = __commonJS({
192395
192444
  deps[versionOverride.targetPkg.name] = versionOverride.newPref;
192396
192445
  }
192397
192446
  }
192398
- function isSubRange(superRange, subRange) {
192399
- return !superRange || subRange === superRange || semver_12.default.validRange(subRange) != null && semver_12.default.validRange(superRange) != null && semver_12.default.subset(subRange, superRange);
192400
- }
192401
192447
  }
192402
192448
  });
192403
192449
 
@@ -192410,16 +192456,26 @@ var require_createPeerDependencyPatcher = __commonJS({
192410
192456
  };
192411
192457
  Object.defineProperty(exports2, "__esModule", { value: true });
192412
192458
  exports2.createPeerDependencyPatcher = void 0;
192413
- var matcher_1 = require_lib19();
192459
+ var semver_12 = __importDefault3(require_semver2());
192414
192460
  var isEmpty_1 = __importDefault3(require_isEmpty2());
192461
+ var error_1 = require_lib8();
192462
+ var parse_overrides_1 = require_lib137();
192463
+ var matcher_1 = require_lib19();
192464
+ var isSubRange_1 = require_isSubRange();
192415
192465
  function createPeerDependencyPatcher(peerDependencyRules) {
192416
192466
  const ignoreMissingPatterns = [...new Set(peerDependencyRules.ignoreMissing ?? [])];
192417
192467
  const ignoreMissingMatcher = (0, matcher_1.createMatcher)(ignoreMissingPatterns);
192418
192468
  const allowAnyPatterns = [...new Set(peerDependencyRules.allowAny ?? [])];
192419
192469
  const allowAnyMatcher = (0, matcher_1.createMatcher)(allowAnyPatterns);
192470
+ const { allowedVersionsMatchAll, allowedVersionsByParentPkgName } = parseAllowedVersions(peerDependencyRules.allowedVersions ?? {});
192471
+ const _getAllowedVersionsByParentPkg = getAllowedVersionsByParentPkg.bind(null, allowedVersionsByParentPkgName);
192420
192472
  return (pkg) => {
192421
192473
  if ((0, isEmpty_1.default)(pkg.peerDependencies))
192422
192474
  return pkg;
192475
+ const allowedVersions = {
192476
+ ...allowedVersionsMatchAll,
192477
+ ..._getAllowedVersionsByParentPkg(pkg)
192478
+ };
192423
192479
  for (const [peerName, peerVersion] of Object.entries(pkg.peerDependencies ?? {})) {
192424
192480
  if (ignoreMissingMatcher(peerName) && !pkg.peerDependenciesMeta?.[peerName]?.optional) {
192425
192481
  pkg.peerDependenciesMeta = pkg.peerDependenciesMeta ?? {};
@@ -192437,9 +192493,8 @@ var require_createPeerDependencyPatcher = __commonJS({
192437
192493
  pkg.peerDependencies[peerName] = "*";
192438
192494
  continue;
192439
192495
  }
192440
- const allowedVersions = parseVersions(peerDependencyRules.allowedVersions[peerName]);
192441
192496
  const currentVersions = parseVersions(pkg.peerDependencies[peerName]);
192442
- allowedVersions.forEach((allowedVersion) => {
192497
+ allowedVersions[peerName].forEach((allowedVersion) => {
192443
192498
  if (!currentVersions.includes(allowedVersion)) {
192444
192499
  currentVersions.push(allowedVersion);
192445
192500
  }
@@ -192450,6 +192505,49 @@ var require_createPeerDependencyPatcher = __commonJS({
192450
192505
  };
192451
192506
  }
192452
192507
  exports2.createPeerDependencyPatcher = createPeerDependencyPatcher;
192508
+ function parseAllowedVersions(allowedVersions) {
192509
+ const overrides = tryParseAllowedVersions(allowedVersions);
192510
+ const allowedVersionsMatchAll = {};
192511
+ const allowedVersionsByParentPkgName = {};
192512
+ for (const { parentPkg, targetPkg, newPref } of overrides) {
192513
+ const ranges = parseVersions(newPref);
192514
+ if (!parentPkg) {
192515
+ allowedVersionsMatchAll[targetPkg.name] = ranges;
192516
+ continue;
192517
+ }
192518
+ if (!allowedVersionsByParentPkgName[parentPkg.name]) {
192519
+ allowedVersionsByParentPkgName[parentPkg.name] = [];
192520
+ }
192521
+ allowedVersionsByParentPkgName[parentPkg.name].push({
192522
+ parentPkg,
192523
+ targetPkg,
192524
+ ranges
192525
+ });
192526
+ }
192527
+ return {
192528
+ allowedVersionsMatchAll,
192529
+ allowedVersionsByParentPkgName
192530
+ };
192531
+ }
192532
+ function tryParseAllowedVersions(allowedVersions) {
192533
+ try {
192534
+ return (0, parse_overrides_1.parseOverrides)(allowedVersions ?? {});
192535
+ } catch (err) {
192536
+ throw new error_1.PnpmError("INVALID_ALLOWED_VERSION_SELECTOR", `${err.message} in pnpm.peerDependencyRules.allowedVersions`);
192537
+ }
192538
+ }
192539
+ function getAllowedVersionsByParentPkg(allowedVersionsByParentPkgName, pkg) {
192540
+ if (!pkg.name || !allowedVersionsByParentPkgName[pkg.name])
192541
+ return {};
192542
+ return allowedVersionsByParentPkgName[pkg.name].reduce((acc, { targetPkg, parentPkg, ranges }) => {
192543
+ if (!pkg.peerDependencies[targetPkg.name])
192544
+ return acc;
192545
+ if (!parentPkg.pref || pkg.version && ((0, isSubRange_1.isSubRange)(parentPkg.pref, pkg.version) || semver_12.default.satisfies(pkg.version, parentPkg.pref))) {
192546
+ acc[targetPkg.name] = ranges;
192547
+ }
192548
+ return acc;
192549
+ }, {});
192550
+ }
192453
192551
  function parseVersions(versions) {
192454
192552
  return versions.split("||").map((v) => v.trim());
192455
192553
  }
@@ -193281,6 +193379,7 @@ var require_install = __commonJS({
193281
193379
  });
193282
193380
  }
193283
193381
  if (opts.lockfileOnly) {
193382
+ await (0, lockfile_file_1.writeWantedLockfile)(ctx.lockfileDir, ctx.wantedLockfile);
193284
193383
  return projects.map((mutatedProject) => ctx.projects[mutatedProject.rootDir]);
193285
193384
  }
193286
193385
  if (!ctx.existsWantedLockfile) {
@@ -194558,10 +194657,7 @@ var require_recursive2 = __commonJS({
194558
194657
  forceHoistPattern: typeof opts.rawLocalConfig?.["hoist-pattern"] !== "undefined" || typeof opts.rawLocalConfig?.["hoist"] !== "undefined",
194559
194658
  forceShamefullyHoist: typeof opts.rawLocalConfig?.["shamefully-hoist"] !== "undefined"
194560
194659
  });
194561
- const result2 = {
194562
- fails: [],
194563
- passes: 0
194564
- };
194660
+ const result2 = {};
194565
194661
  const memReadLocalConfig = (0, mem_1.default)(config_1.readLocalConfig);
194566
194662
  const updateToLatest = opts.update && opts.latest;
194567
194663
  const includeDirect = opts.includeDirect ?? {
@@ -194708,6 +194804,7 @@ var require_recursive2 = __commonJS({
194708
194804
  if (opts.ignoredPackages?.has(rootDir)) {
194709
194805
  return;
194710
194806
  }
194807
+ result2[rootDir] = { status: "running" };
194711
194808
  const { manifest, writeProjectManifest } = manifestsByPath[rootDir];
194712
194809
  let currentInput = [...params];
194713
194810
  if (updateMatch != null) {
@@ -194774,15 +194871,16 @@ var require_recursive2 = __commonJS({
194774
194871
  if (opts.save !== false) {
194775
194872
  await writeProjectManifest(newManifest);
194776
194873
  }
194777
- result2.passes++;
194874
+ result2[rootDir].status = "passed";
194778
194875
  } catch (err) {
194779
194876
  logger_1.logger.info(err);
194780
194877
  if (!opts.bail) {
194781
- result2.fails.push({
194878
+ result2[rootDir] = {
194879
+ status: "failure",
194782
194880
  error: err,
194783
194881
  message: err.message,
194784
194882
  prefix: rootDir
194785
- });
194883
+ };
194786
194884
  return;
194787
194885
  }
194788
194886
  err["prefix"] = rootDir;
@@ -194796,7 +194894,7 @@ var require_recursive2 = __commonJS({
194796
194894
  }, []);
194797
194895
  }
194798
194896
  throwOnFail(result2);
194799
- if (!result2.passes && cmdFullName === "update" && opts.depth === 0) {
194897
+ if (!Object.values(result2).filter(({ status }) => status === "passed").length && cmdFullName === "update" && opts.depth === 0) {
194800
194898
  throw new error_1.PnpmError("NO_PACKAGE_IN_DEPENDENCIES", "None of the specified packages were found in the dependencies of any of the projects.");
194801
194899
  }
194802
194900
  return true;
@@ -218634,19 +218732,23 @@ var require_patchCommit = __commonJS({
218634
218732
  const patchContent = await diffFolders(srcDir, userDir);
218635
218733
  const patchFileName = pkgNameAndVersion.replace("/", "__");
218636
218734
  await fs_1.default.promises.writeFile(path_1.default.join(patchesDir, `${patchFileName}.patch`), patchContent, "utf8");
218637
- let { manifest, writeProjectManifest } = await (0, read_project_manifest_1.tryReadProjectManifest)(lockfileDir);
218638
- if (!manifest) {
218639
- manifest = {};
218640
- }
218641
- if (!manifest.pnpm) {
218642
- manifest.pnpm = {
218735
+ const { writeProjectManifest, manifest } = await (0, read_project_manifest_1.tryReadProjectManifest)(lockfileDir);
218736
+ const rootProjectManifest = opts.rootProjectManifest ?? manifest ?? {};
218737
+ if (!rootProjectManifest.pnpm) {
218738
+ rootProjectManifest.pnpm = {
218643
218739
  patchedDependencies: {}
218644
218740
  };
218645
- } else if (!manifest.pnpm.patchedDependencies) {
218646
- manifest.pnpm.patchedDependencies = {};
218741
+ } else if (!rootProjectManifest.pnpm.patchedDependencies) {
218742
+ rootProjectManifest.pnpm.patchedDependencies = {};
218743
+ }
218744
+ rootProjectManifest.pnpm.patchedDependencies[pkgNameAndVersion] = `patches/${patchFileName}.patch`;
218745
+ await writeProjectManifest(rootProjectManifest);
218746
+ if (opts?.selectedProjectsGraph?.[lockfileDir]) {
218747
+ opts.selectedProjectsGraph[lockfileDir].package.manifest = rootProjectManifest;
218748
+ }
218749
+ if (opts?.allProjectsGraph?.[lockfileDir].package.manifest) {
218750
+ opts.allProjectsGraph[lockfileDir].package.manifest = rootProjectManifest;
218647
218751
  }
218648
- manifest.pnpm.patchedDependencies[pkgNameAndVersion] = `patches/${patchFileName}.patch`;
218649
- await writeProjectManifest(manifest);
218650
218752
  return plugin_commands_installation_1.install.handler(opts);
218651
218753
  }
218652
218754
  exports2.handler = handler;
@@ -219102,10 +219204,6 @@ var require_runRecursive = __commonJS({
219102
219204
  selectedProjectsGraph: opts.selectedProjectsGraph
219103
219205
  });
219104
219206
  }
219105
- const result2 = {
219106
- fails: [],
219107
- passes: 0
219108
- };
219109
219207
  const limitRun = (0, p_limit_12.default)(opts.workspaceConcurrency ?? 4);
219110
219208
  const stdio = !opts.stream && (opts.workspaceConcurrency === 1 || packageChunks.length === 1 && packageChunks[0].length === 1) ? "inherit" : "pipe";
219111
219209
  const existsPnp = existsInDir_1.existsInDir.bind(null, ".pnp.cjs");
@@ -219117,6 +219215,7 @@ var require_runRecursive = __commonJS({
219117
219215
  throw new error_1.PnpmError("RECURSIVE_RUN_NO_SCRIPT", `Missing script "${scriptName}" in packages: ${missingScriptPackages.join(", ")}`);
219118
219216
  }
219119
219217
  }
219218
+ const result2 = (0, exec_1.createEmptyRecursiveSummary)(packageChunks);
219120
219219
  for (const chunk of packageChunks) {
219121
219220
  const selectedScripts = chunk.map((prefix) => {
219122
219221
  const pkg = opts.selectedProjectsGraph[prefix];
@@ -219128,6 +219227,8 @@ var require_runRecursive = __commonJS({
219128
219227
  if (!pkg.package.manifest.scripts?.[scriptName2] || process.env.npm_lifecycle_event === scriptName2 && process.env.PNPM_SCRIPT_SRC_DIR === prefix) {
219129
219228
  return;
219130
219229
  }
219230
+ result2[prefix].status = "running";
219231
+ const startTime = process.hrtime();
219131
219232
  hasCommand++;
219132
219233
  try {
219133
219234
  const lifecycleOpts = {
@@ -219153,19 +219254,26 @@ var require_runRecursive = __commonJS({
219153
219254
  }
219154
219255
  const _runScript = run_1.runScript.bind(null, { manifest: pkg.package.manifest, lifecycleOpts, runScriptOptions: { enablePrePostScripts: opts.enablePrePostScripts ?? false }, passedThruArgs });
219155
219256
  await _runScript(scriptName2);
219156
- result2.passes++;
219257
+ result2[prefix].status = "passed";
219258
+ result2[prefix].duration = (0, exec_1.getExecutionDuration)(startTime);
219157
219259
  } catch (err) {
219158
219260
  logger_1.logger.info(err);
219261
+ result2[prefix] = {
219262
+ status: "failure",
219263
+ duration: (0, exec_1.getExecutionDuration)(startTime),
219264
+ error: err,
219265
+ message: err.message,
219266
+ prefix
219267
+ };
219159
219268
  if (!opts.bail) {
219160
- result2.fails.push({
219161
- error: err,
219162
- message: err.message,
219163
- prefix
219164
- });
219165
219269
  return;
219166
219270
  }
219167
219271
  err["code"] = "ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL";
219168
219272
  err["prefix"] = prefix;
219273
+ opts.reportSummary && await (0, exec_1.writeRecursiveSummary)({
219274
+ dir: opts.workspaceDir ?? opts.dir,
219275
+ summary: result2
219276
+ });
219169
219277
  throw err;
219170
219278
  }
219171
219279
  })));
@@ -219181,6 +219289,10 @@ var require_runRecursive = __commonJS({
219181
219289
  });
219182
219290
  }
219183
219291
  }
219292
+ opts.reportSummary && await (0, exec_1.writeRecursiveSummary)({
219293
+ dir: opts.workspaceDir ?? opts.dir,
219294
+ summary: result2
219295
+ });
219184
219296
  (0, cli_utils_1.throwOnCommandFail)("pnpm recursive run", result2);
219185
219297
  }
219186
219298
  exports2.runRecursive = runRecursive;
@@ -219207,7 +219319,7 @@ var require_run = __commonJS({
219207
219319
  return mod && mod.__esModule ? mod : { "default": mod };
219208
219320
  };
219209
219321
  Object.defineProperty(exports2, "__esModule", { value: true });
219210
- exports2.runScript = exports2.handler = exports2.help = exports2.commandNames = exports2.completion = exports2.cliOptionsTypes = exports2.rcOptionsTypes = exports2.shorthands = exports2.SEQUENTIAL_OPTION_HELP = exports2.RESUME_FROM_OPTION_HELP = exports2.PARALLEL_OPTION_HELP = exports2.IF_PRESENT_OPTION_HELP = exports2.IF_PRESENT_OPTION = void 0;
219322
+ exports2.runScript = exports2.handler = exports2.help = exports2.commandNames = exports2.completion = exports2.cliOptionsTypes = exports2.rcOptionsTypes = exports2.shorthands = exports2.REPORT_SUMMARY_OPTION_HELP = exports2.SEQUENTIAL_OPTION_HELP = exports2.RESUME_FROM_OPTION_HELP = exports2.PARALLEL_OPTION_HELP = exports2.IF_PRESENT_OPTION_HELP = exports2.IF_PRESENT_OPTION = void 0;
219211
219323
  var path_1 = __importDefault3(require("path"));
219212
219324
  var p_limit_12 = __importDefault3(require_p_limit());
219213
219325
  var cli_utils_1 = require_lib27();
@@ -219240,6 +219352,10 @@ var require_run = __commonJS({
219240
219352
  description: "Run the specified scripts one by one",
219241
219353
  name: "--sequential"
219242
219354
  };
219355
+ exports2.REPORT_SUMMARY_OPTION_HELP = {
219356
+ description: 'Save the execution results of every package to "pnpm-exec-summary.json". Useful to inspect the execution time and status of each package.',
219357
+ name: "--report-summary"
219358
+ };
219243
219359
  exports2.shorthands = {
219244
219360
  parallel: [
219245
219361
  "--workspace-concurrency=Infinity",
@@ -219273,7 +219389,8 @@ var require_run = __commonJS({
219273
219389
  ...exports2.IF_PRESENT_OPTION,
219274
219390
  recursive: Boolean,
219275
219391
  reverse: Boolean,
219276
- "resume-from": String
219392
+ "resume-from": String,
219393
+ "report-summary": Boolean
219277
219394
  };
219278
219395
  }
219279
219396
  exports2.cliOptionsTypes = cliOptionsTypes;
@@ -219307,7 +219424,8 @@ var require_run = __commonJS({
219307
219424
  exports2.PARALLEL_OPTION_HELP,
219308
219425
  exports2.RESUME_FROM_OPTION_HELP,
219309
219426
  ...common_cli_options_help_1.UNIVERSAL_OPTIONS,
219310
- exports2.SEQUENTIAL_OPTION_HELP
219427
+ exports2.SEQUENTIAL_OPTION_HELP,
219428
+ exports2.REPORT_SUMMARY_OPTION_HELP
219311
219429
  ]
219312
219430
  },
219313
219431
  common_cli_options_help_1.FILTERING
@@ -219496,7 +219614,8 @@ var require_exec = __commonJS({
219496
219614
  return mod && mod.__esModule ? mod : { "default": mod };
219497
219615
  };
219498
219616
  Object.defineProperty(exports2, "__esModule", { value: true });
219499
- exports2.handler = exports2.getResumedPackageChunks = exports2.help = exports2.cliOptionsTypes = exports2.rcOptionsTypes = exports2.commandNames = exports2.shorthands = void 0;
219617
+ exports2.handler = exports2.getExecutionDuration = exports2.createEmptyRecursiveSummary = exports2.writeRecursiveSummary = exports2.getResumedPackageChunks = exports2.help = exports2.cliOptionsTypes = exports2.rcOptionsTypes = exports2.commandNames = exports2.shorthands = void 0;
219618
+ var path_1 = __importDefault3(require("path"));
219500
219619
  var cli_utils_1 = require_lib27();
219501
219620
  var config_1 = require_lib21();
219502
219621
  var lifecycle_1 = require_lib58();
@@ -219511,6 +219630,7 @@ var require_exec = __commonJS({
219511
219630
  var makeEnv_1 = require_makeEnv();
219512
219631
  var run_1 = require_run();
219513
219632
  var error_1 = require_lib8();
219633
+ var write_json_file_1 = __importDefault3(require_write_json_file());
219514
219634
  exports2.shorthands = {
219515
219635
  parallel: run_1.shorthands.parallel,
219516
219636
  c: "--shell-mode"
@@ -219526,7 +219646,8 @@ var require_exec = __commonJS({
219526
219646
  "workspace-concurrency"
219527
219647
  ], config_1.types),
219528
219648
  "shell-mode": Boolean,
219529
- "resume-from": String
219649
+ "resume-from": String,
219650
+ "report-summary": Boolean
219530
219651
  };
219531
219652
  }
219532
219653
  exports2.rcOptionsTypes = rcOptionsTypes;
@@ -219554,7 +219675,8 @@ var require_exec = __commonJS({
219554
219675
  name: "--shell-mode",
219555
219676
  shortAlias: "-c"
219556
219677
  },
219557
- run_1.RESUME_FROM_OPTION_HELP
219678
+ run_1.RESUME_FROM_OPTION_HELP,
219679
+ run_1.REPORT_SUMMARY_OPTION_HELP
219558
219680
  ]
219559
219681
  }
219560
219682
  ],
@@ -219572,15 +219694,29 @@ var require_exec = __commonJS({
219572
219694
  return chunks.slice(chunkPosition);
219573
219695
  }
219574
219696
  exports2.getResumedPackageChunks = getResumedPackageChunks;
219697
+ async function writeRecursiveSummary(opts) {
219698
+ await (0, write_json_file_1.default)(path_1.default.join(opts.dir, "pnpm-exec-summary.json"), {
219699
+ executionStatus: opts.summary
219700
+ });
219701
+ }
219702
+ exports2.writeRecursiveSummary = writeRecursiveSummary;
219703
+ function createEmptyRecursiveSummary(chunks) {
219704
+ return chunks.flat().reduce((acc, prefix) => {
219705
+ acc[prefix] = { status: "queued" };
219706
+ return acc;
219707
+ }, {});
219708
+ }
219709
+ exports2.createEmptyRecursiveSummary = createEmptyRecursiveSummary;
219710
+ function getExecutionDuration(start) {
219711
+ const end = process.hrtime(start);
219712
+ return (end[0] * 1e9 + end[1]) / 1e6;
219713
+ }
219714
+ exports2.getExecutionDuration = getExecutionDuration;
219575
219715
  async function handler(opts, params) {
219576
219716
  if (params[0] === "--") {
219577
219717
  params.shift();
219578
219718
  }
219579
219719
  const limitRun = (0, p_limit_12.default)(opts.workspaceConcurrency ?? 4);
219580
- const result2 = {
219581
- fails: [],
219582
- passes: 0
219583
- };
219584
219720
  let chunks;
219585
219721
  if (opts.recursive) {
219586
219722
  chunks = opts.sort ? (0, sort_packages_1.sortPackages)(opts.selectedProjectsGraph) : [Object.keys(opts.selectedProjectsGraph).sort()];
@@ -219609,11 +219745,14 @@ var require_exec = __commonJS({
219609
219745
  selectedProjectsGraph: opts.selectedProjectsGraph
219610
219746
  });
219611
219747
  }
219748
+ const result2 = createEmptyRecursiveSummary(chunks);
219612
219749
  const existsPnp = existsInDir_1.existsInDir.bind(null, ".pnp.cjs");
219613
219750
  const workspacePnpPath = opts.workspaceDir && await existsPnp(opts.workspaceDir);
219614
219751
  let exitCode = 0;
219615
219752
  for (const chunk of chunks) {
219616
219753
  await Promise.all(chunk.map(async (prefix) => limitRun(async () => {
219754
+ result2[prefix].status = "running";
219755
+ const startTime = process.hrtime();
219617
219756
  try {
219618
219757
  const pnpPath = workspacePnpPath ?? await existsPnp(prefix);
219619
219758
  const extraEnv = {
@@ -219637,29 +219776,40 @@ var require_exec = __commonJS({
219637
219776
  stdio: "inherit",
219638
219777
  shell: opts.shellMode ?? false
219639
219778
  });
219640
- result2.passes++;
219779
+ result2[prefix].status = "passed";
219780
+ result2[prefix].duration = getExecutionDuration(startTime);
219641
219781
  } catch (err) {
219642
219782
  if (!opts.recursive && typeof err.exitCode === "number") {
219643
219783
  exitCode = err.exitCode;
219644
219784
  return;
219645
219785
  }
219646
219786
  logger_1.logger.info(err);
219787
+ result2[prefix] = {
219788
+ status: "failure",
219789
+ duration: getExecutionDuration(startTime),
219790
+ error: err,
219791
+ message: err.message,
219792
+ prefix
219793
+ };
219647
219794
  if (!opts.bail) {
219648
- result2.fails.push({
219649
- error: err,
219650
- message: err.message,
219651
- prefix
219652
- });
219653
219795
  return;
219654
219796
  }
219655
219797
  if (!err["code"]?.startsWith("ERR_PNPM_")) {
219656
219798
  err["code"] = "ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL";
219657
219799
  }
219658
219800
  err["prefix"] = prefix;
219801
+ opts.reportSummary && await writeRecursiveSummary({
219802
+ dir: opts.lockfileDir ?? opts.dir,
219803
+ summary: result2
219804
+ });
219659
219805
  throw err;
219660
219806
  }
219661
219807
  })));
219662
219808
  }
219809
+ opts.reportSummary && await writeRecursiveSummary({
219810
+ dir: opts.lockfileDir ?? opts.dir,
219811
+ summary: result2
219812
+ });
219663
219813
  (0, cli_utils_1.throwOnCommandFail)("pnpm recursive exec", result2);
219664
219814
  return { exitCode };
219665
219815
  }
@@ -226456,7 +226606,7 @@ var require_main2 = __commonJS({
226456
226606
  } catch (err) {
226457
226607
  }
226458
226608
  }
226459
- if ((cmd === "install" || cmd === "import" || cmd === "dedupe") && typeof workspaceDir === "string") {
226609
+ if ((cmd === "install" || cmd === "import" || cmd === "dedupe" || cmd === "patch-commit") && typeof workspaceDir === "string") {
226460
226610
  cliOptions["recursive"] = true;
226461
226611
  config.recursive = true;
226462
226612
  if (!config.recursiveInstall && !config.filter && !config.filterProd) {
@@ -226510,7 +226660,9 @@ var require_main2 = __commonJS({
226510
226660
  config.workspaceDir = wsDir;
226511
226661
  }
226512
226662
  let { output, exitCode } = await (async () => {
226513
- await new Promise((resolve) => setTimeout(() => resolve(), 0));
226663
+ await new Promise((resolve) => setTimeout(() => {
226664
+ resolve();
226665
+ }, 0));
226514
226666
  if (config.updateNotifier !== false && !ci_info_1.isCI && !selfUpdate && !config.offline && !config.preferOffline && !config.fallbackCommandUsed && (cmd === "install" || cmd === "add")) {
226515
226667
  (0, checkForUpdates_1.checkForUpdates)(config).catch(() => {
226516
226668
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pnpm",
3
3
  "description": "Fast, disk space efficient package manager",
4
- "version": "7.27.1",
4
+ "version": "7.28.0",
5
5
  "bin": {
6
6
  "pnpm": "bin/pnpm.cjs",
7
7
  "pnpx": "bin/pnpx.cjs"
@@ -163,7 +163,7 @@
163
163
  "scripts": {
164
164
  "bundle": "cross-var esbuild lib/pnpm.js --bundle --platform=node --outfile=dist/pnpm.cjs --external:node-gyp --define:process.env.npm_package_name=\\\"$npm_package_name\\\" --define:process.env.npm_package_version=\\\"$npm_package_version\\\"",
165
165
  "start": "tsc --watch",
166
- "lint": "eslint src/**/*.ts test/**/*.ts",
166
+ "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
167
167
  "registry-mock": "registry-mock",
168
168
  "test:jest": "jest",
169
169
  "pretest:e2e": "rimraf node_modules/.bin/pnpm",