@coana-tech/cli 15.2.6 → 15.2.8

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.
package/cli.mjs CHANGED
@@ -225628,13 +225628,39 @@ var PnpmFixingManager = class extends NpmEcosystemFixingManager {
225628
225628
  if (result.error) {
225629
225629
  logger.debug("finalize fixes stdout", result.stdout);
225630
225630
  logger.debug("finalize fixes stderr", result.stderr);
225631
- throw result.error;
225631
+ const trustErrorMessage = buildPnpmTrustDowngradeMessage(`${result.stdout}
225632
+ ${result.stderr}`);
225633
+ if (trustErrorMessage !== void 0) throw new Error(trustErrorMessage);
225634
+ throw new Error(buildPnpmFinalizeFailureMessage(result.stdout, result.stderr, result.error.message));
225632
225635
  }
225633
225636
  logger.info(
225634
225637
  `Run 'pnpm install' in '${relative7(this.rootDir, this.subprojectPath) || "."}' to install the updated dependencies`
225635
225638
  );
225636
225639
  }
225637
225640
  };
225641
+ function parsePnpmTrustDowngrade(output) {
225642
+ const match2 = output.match(/ERR_PNPM_TRUST_DOWNGRADE[^\n]*?"([^"]+)"/);
225643
+ return match2 ? { packageRef: match2[1] } : void 0;
225644
+ }
225645
+ function buildPnpmFinalizeFailureMessage(stdout, stderr, fallbackMessage) {
225646
+ const combined = [stderr.trim(), stdout.trim()].filter(Boolean).join("\n").trim();
225647
+ return combined ? `${fallbackMessage}
225648
+
225649
+ pnpm output:
225650
+ ${combined}` : fallbackMessage;
225651
+ }
225652
+ function buildPnpmTrustDowngradeMessage(output) {
225653
+ const parsed = parsePnpmTrustDowngrade(output);
225654
+ if (!parsed) return void 0;
225655
+ const { packageRef } = parsed;
225656
+ return `pnpm refused to update the lockfile due to a trust-downgrade on "${packageRef}" (ERR_PNPM_TRUST_DOWNGRADE). This usually means the package lost its npm provenance attestation between releases \u2014 often a publishing-workflow regression rather than a real supply-chain incident.
225657
+
225658
+ To unblock the fix, edit pnpm-workspace.yaml at the workspace root (the same file your \`trustPolicy: no-downgrade\` setting lives in) and either:
225659
+ \u2022 set \`trustPolicy: off\` to disable the check entirely, or
225660
+ \u2022 keep the policy on and allow just this release via:
225661
+ trustPolicyExclude:
225662
+ - '${packageRef}'`;
225663
+ }
225638
225664
  function getVersionNumber(version4) {
225639
225665
  const pnpmLockVersionSuffix = /((\d+)\.(\d+)\.(\d+)((-((\d|[a-zA-Z]|\.)+)){0,1})((\+((\d|\.)+)){0,1}))(_|\()(.+)/;
225640
225666
  const match2 = version4.match(pnpmLockVersionSuffix);
@@ -234564,14 +234590,14 @@ function getEcosystemsFromManifestFileNames(fileNames) {
234564
234590
  }
234565
234591
  return [...ecosystems];
234566
234592
  }
234567
- async function validateExternalDependencies(ecosystems, command, manifestFileNames) {
234593
+ async function validateExternalDependencies(ecosystems, command, manifestFileNames, packageManagers) {
234568
234594
  const checks = [];
234569
234595
  const ecosystemSet = new Set(ecosystems);
234570
234596
  if (ecosystemSet.has("NPM")) {
234571
- checks.push(...getNpmChecks(command, manifestFileNames));
234597
+ checks.push(...getNpmChecks(command, manifestFileNames, packageManagers));
234572
234598
  }
234573
234599
  if (ecosystemSet.has("PIP")) {
234574
- checks.push(...getPipChecks(command, manifestFileNames));
234600
+ checks.push(...getPipChecks(command, manifestFileNames, packageManagers));
234575
234601
  }
234576
234602
  if (ecosystemSet.has("MAVEN") && command === "run") {
234577
234603
  checks.push(checkJavaAvailable());
@@ -234611,9 +234637,10 @@ async function validateExternalDependencies(ecosystems, command, manifestFileNam
234611
234637
  throw new Error(message2);
234612
234638
  }
234613
234639
  }
234614
- function getNpmChecks(command, manifestFileNames) {
234640
+ function getNpmChecks(command, manifestFileNames, packageManagers) {
234615
234641
  const checks = [];
234616
234642
  const nexe = isNexeMode();
234643
+ const isAllowed = (pm) => !packageManagers || packageManagers.includes(pm);
234617
234644
  if (command === "run") {
234618
234645
  checks.push(Promise.resolve(checkNodeVersion(20)));
234619
234646
  if (!nexe) {
@@ -234621,21 +234648,22 @@ function getNpmChecks(command, manifestFileNames) {
234621
234648
  }
234622
234649
  } else {
234623
234650
  const files = manifestFileNames ?? [];
234624
- if (files.some((f5) => f5.endsWith("package-lock.json")) && !nexe) {
234651
+ if (files.some((f5) => f5.endsWith("package-lock.json")) && !nexe && isAllowed("NPM")) {
234625
234652
  checks.push(checkTool("npm", "NPM", "Required for NPM dependency management. Install from https://nodejs.org"));
234626
234653
  }
234627
- if (files.some((f5) => f5.endsWith("pnpm-lock.yaml"))) {
234654
+ if (files.some((f5) => f5.endsWith("pnpm-lock.yaml")) && isAllowed("PNPM")) {
234628
234655
  checks.push(checkTool("pnpm", "NPM", "Required for pnpm dependency management. Install from https://pnpm.io"));
234629
234656
  }
234630
- if (files.some((f5) => f5.endsWith("yarn.lock"))) {
234657
+ if (files.some((f5) => f5.endsWith("yarn.lock")) && isAllowed("YARN")) {
234631
234658
  checks.push(checkTool("yarn", "NPM", "Required for Yarn dependency management. Install from https://yarnpkg.com"));
234632
234659
  }
234633
234660
  }
234634
234661
  return checks;
234635
234662
  }
234636
- function getPipChecks(command, manifestFileNames) {
234663
+ function getPipChecks(command, manifestFileNames, packageManagers) {
234637
234664
  const checks = [];
234638
234665
  const nexe = isNexeMode();
234666
+ const isAllowed = (pm) => !packageManagers || packageManagers.includes(pm);
234639
234667
  if (command === "run") {
234640
234668
  checks.push(checkEitherTool("python3", "python", "Python (PIP)", "python3 (or python)", "Required for Python dependency management. Install from https://python.org"));
234641
234669
  if (!nexe) {
@@ -234643,7 +234671,7 @@ function getPipChecks(command, manifestFileNames) {
234643
234671
  }
234644
234672
  } else {
234645
234673
  const files = manifestFileNames ?? [];
234646
- if (files.some((f5) => f5.endsWith("uv.lock")) && !nexe) {
234674
+ if (files.some((f5) => f5.endsWith("uv.lock")) && !nexe && isAllowed("UV")) {
234647
234675
  checks.push(checkTool("uv", "Python (PIP)", "Required for Python dependency management. Install from https://docs.astral.sh/uv/"));
234648
234676
  }
234649
234677
  }
@@ -234745,7 +234773,7 @@ ${Array.from(upgrades).map(([idx, upgradeVersion]) => ` ${prettyPrintPurlUpgrade
234745
234773
  }
234746
234774
  const detectedEcosystems = Array.from(ecosystemToSocketArtifactUpgrades.keys());
234747
234775
  if (!options.disableExternalToolChecks) {
234748
- await validateExternalDependencies(detectedEcosystems, "compute-fixes-and-upgrade-purls", manifestFiles);
234776
+ await validateExternalDependencies(detectedEcosystems, "compute-fixes-and-upgrade-purls", manifestFiles, options.packageManagers);
234749
234777
  }
234750
234778
  let anyErrors = false;
234751
234779
  let anySkipped = false;
@@ -252321,7 +252349,7 @@ async function onlineScan(dependencyTree, apiKey, timeout) {
252321
252349
  }
252322
252350
 
252323
252351
  // dist/version.js
252324
- var version3 = "15.2.6";
252352
+ var version3 = "15.2.8";
252325
252353
 
252326
252354
  // dist/cli-core.js
252327
252355
  var { mapValues, omit, partition, pickBy: pickBy2 } = import_lodash15.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coana-tech/cli",
3
- "version": "15.2.6",
3
+ "version": "15.2.8",
4
4
  "description": "Coana CLI",
5
5
  "type": "module",
6
6
  "bin": {