@coana-tech/cli 15.2.0 → 15.2.2

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
@@ -14563,8 +14563,8 @@ var require_follow_redirects = __commonJS({
14563
14563
  }
14564
14564
  return parsed;
14565
14565
  }
14566
- function resolveUrl(relative23, base) {
14567
- return useNativeURL ? new URL3(relative23, base) : parseUrl(url2.resolve(base, relative23));
14566
+ function resolveUrl(relative25, base) {
14567
+ return useNativeURL ? new URL3(relative25, base) : parseUrl(url2.resolve(base, relative25));
14568
14568
  }
14569
14569
  function validateUrl(input) {
14570
14570
  if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) {
@@ -17420,7 +17420,7 @@ var require_safe_stable_stringify = __commonJS({
17420
17420
  return circularValue;
17421
17421
  }
17422
17422
  let res = "";
17423
- let join36 = ",";
17423
+ let join35 = ",";
17424
17424
  const originalIndentation = indentation;
17425
17425
  if (Array.isArray(value2)) {
17426
17426
  if (value2.length === 0) {
@@ -17434,7 +17434,7 @@ var require_safe_stable_stringify = __commonJS({
17434
17434
  indentation += spacer;
17435
17435
  res += `
17436
17436
  ${indentation}`;
17437
- join36 = `,
17437
+ join35 = `,
17438
17438
  ${indentation}`;
17439
17439
  }
17440
17440
  const maximumValuesToStringify = Math.min(value2.length, maximumBreadth);
@@ -17442,13 +17442,13 @@ ${indentation}`;
17442
17442
  for (; i7 < maximumValuesToStringify - 1; i7++) {
17443
17443
  const tmp2 = stringifyFnReplacer(String(i7), value2, stack2, replacer, spacer, indentation);
17444
17444
  res += tmp2 !== void 0 ? tmp2 : "null";
17445
- res += join36;
17445
+ res += join35;
17446
17446
  }
17447
17447
  const tmp = stringifyFnReplacer(String(i7), value2, stack2, replacer, spacer, indentation);
17448
17448
  res += tmp !== void 0 ? tmp : "null";
17449
17449
  if (value2.length - 1 > maximumBreadth) {
17450
17450
  const removedKeys = value2.length - maximumBreadth - 1;
17451
- res += `${join36}"... ${getItemCount(removedKeys)} not stringified"`;
17451
+ res += `${join35}"... ${getItemCount(removedKeys)} not stringified"`;
17452
17452
  }
17453
17453
  if (spacer !== "") {
17454
17454
  res += `
@@ -17469,7 +17469,7 @@ ${originalIndentation}`;
17469
17469
  let separator = "";
17470
17470
  if (spacer !== "") {
17471
17471
  indentation += spacer;
17472
- join36 = `,
17472
+ join35 = `,
17473
17473
  ${indentation}`;
17474
17474
  whitespace2 = " ";
17475
17475
  }
@@ -17483,13 +17483,13 @@ ${indentation}`;
17483
17483
  const tmp = stringifyFnReplacer(key2, value2, stack2, replacer, spacer, indentation);
17484
17484
  if (tmp !== void 0) {
17485
17485
  res += `${separator}${strEscape(key2)}:${whitespace2}${tmp}`;
17486
- separator = join36;
17486
+ separator = join35;
17487
17487
  }
17488
17488
  }
17489
17489
  if (keyLength > maximumBreadth) {
17490
17490
  const removedKeys = keyLength - maximumBreadth;
17491
17491
  res += `${separator}"...":${whitespace2}"${getItemCount(removedKeys)} not stringified"`;
17492
- separator = join36;
17492
+ separator = join35;
17493
17493
  }
17494
17494
  if (spacer !== "" && separator.length > 1) {
17495
17495
  res = `
@@ -17530,7 +17530,7 @@ ${originalIndentation}`;
17530
17530
  }
17531
17531
  const originalIndentation = indentation;
17532
17532
  let res = "";
17533
- let join36 = ",";
17533
+ let join35 = ",";
17534
17534
  if (Array.isArray(value2)) {
17535
17535
  if (value2.length === 0) {
17536
17536
  return "[]";
@@ -17543,7 +17543,7 @@ ${originalIndentation}`;
17543
17543
  indentation += spacer;
17544
17544
  res += `
17545
17545
  ${indentation}`;
17546
- join36 = `,
17546
+ join35 = `,
17547
17547
  ${indentation}`;
17548
17548
  }
17549
17549
  const maximumValuesToStringify = Math.min(value2.length, maximumBreadth);
@@ -17551,13 +17551,13 @@ ${indentation}`;
17551
17551
  for (; i7 < maximumValuesToStringify - 1; i7++) {
17552
17552
  const tmp2 = stringifyArrayReplacer(String(i7), value2[i7], stack2, replacer, spacer, indentation);
17553
17553
  res += tmp2 !== void 0 ? tmp2 : "null";
17554
- res += join36;
17554
+ res += join35;
17555
17555
  }
17556
17556
  const tmp = stringifyArrayReplacer(String(i7), value2[i7], stack2, replacer, spacer, indentation);
17557
17557
  res += tmp !== void 0 ? tmp : "null";
17558
17558
  if (value2.length - 1 > maximumBreadth) {
17559
17559
  const removedKeys = value2.length - maximumBreadth - 1;
17560
- res += `${join36}"... ${getItemCount(removedKeys)} not stringified"`;
17560
+ res += `${join35}"... ${getItemCount(removedKeys)} not stringified"`;
17561
17561
  }
17562
17562
  if (spacer !== "") {
17563
17563
  res += `
@@ -17570,7 +17570,7 @@ ${originalIndentation}`;
17570
17570
  let whitespace2 = "";
17571
17571
  if (spacer !== "") {
17572
17572
  indentation += spacer;
17573
- join36 = `,
17573
+ join35 = `,
17574
17574
  ${indentation}`;
17575
17575
  whitespace2 = " ";
17576
17576
  }
@@ -17579,7 +17579,7 @@ ${indentation}`;
17579
17579
  const tmp = stringifyArrayReplacer(key2, value2[key2], stack2, replacer, spacer, indentation);
17580
17580
  if (tmp !== void 0) {
17581
17581
  res += `${separator}${strEscape(key2)}:${whitespace2}${tmp}`;
17582
- separator = join36;
17582
+ separator = join35;
17583
17583
  }
17584
17584
  }
17585
17585
  if (spacer !== "" && separator.length > 1) {
@@ -17637,20 +17637,20 @@ ${originalIndentation}`;
17637
17637
  indentation += spacer;
17638
17638
  let res2 = `
17639
17639
  ${indentation}`;
17640
- const join37 = `,
17640
+ const join36 = `,
17641
17641
  ${indentation}`;
17642
17642
  const maximumValuesToStringify = Math.min(value2.length, maximumBreadth);
17643
17643
  let i7 = 0;
17644
17644
  for (; i7 < maximumValuesToStringify - 1; i7++) {
17645
17645
  const tmp2 = stringifyIndent(String(i7), value2[i7], stack2, spacer, indentation);
17646
17646
  res2 += tmp2 !== void 0 ? tmp2 : "null";
17647
- res2 += join37;
17647
+ res2 += join36;
17648
17648
  }
17649
17649
  const tmp = stringifyIndent(String(i7), value2[i7], stack2, spacer, indentation);
17650
17650
  res2 += tmp !== void 0 ? tmp : "null";
17651
17651
  if (value2.length - 1 > maximumBreadth) {
17652
17652
  const removedKeys = value2.length - maximumBreadth - 1;
17653
- res2 += `${join37}"... ${getItemCount(removedKeys)} not stringified"`;
17653
+ res2 += `${join36}"... ${getItemCount(removedKeys)} not stringified"`;
17654
17654
  }
17655
17655
  res2 += `
17656
17656
  ${originalIndentation}`;
@@ -17666,16 +17666,16 @@ ${originalIndentation}`;
17666
17666
  return '"[Object]"';
17667
17667
  }
17668
17668
  indentation += spacer;
17669
- const join36 = `,
17669
+ const join35 = `,
17670
17670
  ${indentation}`;
17671
17671
  let res = "";
17672
17672
  let separator = "";
17673
17673
  let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
17674
17674
  if (isTypedArrayWithEntries(value2)) {
17675
- res += stringifyTypedArray(value2, join36, maximumBreadth);
17675
+ res += stringifyTypedArray(value2, join35, maximumBreadth);
17676
17676
  keys = keys.slice(value2.length);
17677
17677
  maximumPropertiesToStringify -= value2.length;
17678
- separator = join36;
17678
+ separator = join35;
17679
17679
  }
17680
17680
  if (deterministic) {
17681
17681
  keys = insertSort(keys);
@@ -17686,13 +17686,13 @@ ${indentation}`;
17686
17686
  const tmp = stringifyIndent(key2, value2[key2], stack2, spacer, indentation);
17687
17687
  if (tmp !== void 0) {
17688
17688
  res += `${separator}${strEscape(key2)}: ${tmp}`;
17689
- separator = join36;
17689
+ separator = join35;
17690
17690
  }
17691
17691
  }
17692
17692
  if (keyLength > maximumBreadth) {
17693
17693
  const removedKeys = keyLength - maximumBreadth;
17694
17694
  res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
17695
- separator = join36;
17695
+ separator = join35;
17696
17696
  }
17697
17697
  if (separator !== "") {
17698
17698
  res = `
@@ -19259,7 +19259,7 @@ var require_buffer_list = __commonJS({
19259
19259
  }
19260
19260
  }, {
19261
19261
  key: "join",
19262
- value: function join36(s6) {
19262
+ value: function join35(s6) {
19263
19263
  if (this.length === 0) return "";
19264
19264
  var p3 = this.head;
19265
19265
  var ret = "" + p3.data;
@@ -30493,7 +30493,7 @@ var require_lodash = __commonJS({
30493
30493
  }
30494
30494
  return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
30495
30495
  });
30496
- function join36(array, separator) {
30496
+ function join35(array, separator) {
30497
30497
  return array == null ? "" : nativeJoin.call(array, separator);
30498
30498
  }
30499
30499
  function last2(array) {
@@ -32412,7 +32412,7 @@ var require_lodash = __commonJS({
32412
32412
  lodash16.isUndefined = isUndefined2;
32413
32413
  lodash16.isWeakMap = isWeakMap;
32414
32414
  lodash16.isWeakSet = isWeakSet;
32415
- lodash16.join = join36;
32415
+ lodash16.join = join35;
32416
32416
  lodash16.kebabCase = kebabCase;
32417
32417
  lodash16.last = last2;
32418
32418
  lodash16.lastIndexOf = lastIndexOf;
@@ -46046,7 +46046,7 @@ var require_builder = __commonJS({
46046
46046
  }
46047
46047
  };
46048
46048
  exports2.SeqBuilder = SeqBuilder;
46049
- function join36(first2, second, ...others) {
46049
+ function join35(first2, second, ...others) {
46050
46050
  const seq = new SeqBuilder(first2, second);
46051
46051
  if (!others.length) {
46052
46052
  return seq;
@@ -46055,7 +46055,7 @@ var require_builder = __commonJS({
46055
46055
  return res.join(query);
46056
46056
  }, seq);
46057
46057
  }
46058
- exports2.join = join36;
46058
+ exports2.join = join35;
46059
46059
  var SymBuilder = class extends AbstractBuilder {
46060
46060
  constructor(opts) {
46061
46061
  super();
@@ -69980,16 +69980,16 @@ var require_lockfile = __commonJS({
69980
69980
  if (process.platform === "win32") {
69981
69981
  yield fsSymlink(src, dest, "junction");
69982
69982
  } else {
69983
- let relative23;
69983
+ let relative25;
69984
69984
  try {
69985
- relative23 = (_path2 || _load_path()).default.relative((_fs || _load_fs()).default.realpathSync((_path2 || _load_path()).default.dirname(dest)), (_fs || _load_fs()).default.realpathSync(src));
69985
+ relative25 = (_path2 || _load_path()).default.relative((_fs || _load_fs()).default.realpathSync((_path2 || _load_path()).default.dirname(dest)), (_fs || _load_fs()).default.realpathSync(src));
69986
69986
  } catch (err) {
69987
69987
  if (err.code !== "ENOENT") {
69988
69988
  throw err;
69989
69989
  }
69990
- relative23 = (_path2 || _load_path()).default.relative((_path2 || _load_path()).default.dirname(dest), src);
69990
+ relative25 = (_path2 || _load_path()).default.relative((_path2 || _load_path()).default.dirname(dest), src);
69991
69991
  }
69992
- yield fsSymlink(relative23 || ".", dest);
69992
+ yield fsSymlink(relative25 || ".", dest);
69993
69993
  }
69994
69994
  });
69995
69995
  return function symlink2(_x24, _x25) {
@@ -70016,17 +70016,17 @@ var require_lockfile = __commonJS({
70016
70016
  _ref28 = _i14.value;
70017
70017
  }
70018
70018
  const name2 = _ref28;
70019
- const relative23 = relativeDir ? (_path2 || _load_path()).default.join(relativeDir, name2) : name2;
70019
+ const relative25 = relativeDir ? (_path2 || _load_path()).default.join(relativeDir, name2) : name2;
70020
70020
  const loc = (_path2 || _load_path()).default.join(dir, name2);
70021
70021
  const stat6 = yield lstat3(loc);
70022
70022
  files.push({
70023
- relative: relative23,
70023
+ relative: relative25,
70024
70024
  basename: name2,
70025
70025
  absolute: loc,
70026
70026
  mtime: +stat6.mtime
70027
70027
  });
70028
70028
  if (stat6.isDirectory()) {
70029
- files = files.concat(yield walk(loc, relative23, ignoreBasenames));
70029
+ files = files.concat(yield walk(loc, relative25, ignoreBasenames));
70030
70030
  }
70031
70031
  }
70032
70032
  return files;
@@ -199710,7 +199710,7 @@ var {
199710
199710
  // dist/index.js
199711
199711
  import { mkdir as mkdir7, mkdtemp as mkdtemp2, readFile as readFile38, rm as rm4, writeFile as writeFile17 } from "fs/promises";
199712
199712
  import { tmpdir as tmpdir5 } from "os";
199713
- import { dirname as dirname27, join as join35, resolve as resolve44 } from "path";
199713
+ import { dirname as dirname27, join as join34, resolve as resolve44 } from "path";
199714
199714
 
199715
199715
  // ../../node_modules/.pnpm/remeda@2.14.0/node_modules/remeda/dist/chunk-ANXBDSUI.js
199716
199716
  var s = { done: false, hasNext: false };
@@ -223680,10 +223680,10 @@ var Ignore = class {
223680
223680
  ignored(p3) {
223681
223681
  const fullpath = p3.fullpath();
223682
223682
  const fullpaths = `${fullpath}/`;
223683
- const relative23 = p3.relative() || ".";
223684
- const relatives = `${relative23}/`;
223683
+ const relative25 = p3.relative() || ".";
223684
+ const relatives = `${relative25}/`;
223685
223685
  for (const m4 of this.relative) {
223686
- if (m4.match(relative23) || m4.match(relatives))
223686
+ if (m4.match(relative25) || m4.match(relatives))
223687
223687
  return true;
223688
223688
  }
223689
223689
  for (const m4 of this.absolute) {
@@ -223694,9 +223694,9 @@ var Ignore = class {
223694
223694
  }
223695
223695
  childrenIgnored(p3) {
223696
223696
  const fullpath = p3.fullpath() + "/";
223697
- const relative23 = (p3.relative() || ".") + "/";
223697
+ const relative25 = (p3.relative() || ".") + "/";
223698
223698
  for (const m4 of this.relativeChildren) {
223699
- if (m4.match(relative23))
223699
+ if (m4.match(relative25))
223700
223700
  return true;
223701
223701
  }
223702
223702
  for (const m4 of this.absoluteChildren) {
@@ -229111,7 +229111,7 @@ var NuGetSocketUpgradeManager = class {
229111
229111
  };
229112
229112
 
229113
229113
  // ../fixing-management/src/fixing-management/rust/cargo-socket-upgrade-manager.ts
229114
- import { dirname as dirname18, relative as relative13, resolve as resolve28 } from "node:path";
229114
+ import { dirname as dirname18, relative as relative14, resolve as resolve28 } from "node:path";
229115
229115
  var import_picomatch6 = __toESM(require_picomatch2(), 1);
229116
229116
  var import_semver5 = __toESM(require_semver2(), 1);
229117
229117
  import assert12 from "node:assert";
@@ -229119,7 +229119,7 @@ import { readFile as readFile24, writeFile as writeFile10 } from "node:fs/promis
229119
229119
 
229120
229120
  // ../utils/src/cargo-utils.ts
229121
229121
  import { readFile as readFile23 } from "node:fs/promises";
229122
- import { dirname as dirname17, resolve as resolve27 } from "node:path";
229122
+ import { dirname as dirname17, relative as relative13, resolve as resolve27 } from "node:path";
229123
229123
  var import_picomatch5 = __toESM(require_picomatch2(), 1);
229124
229124
  async function getCargoTomlFilesForCargoLockFile(rootDir, cargoLockFile, cargoTomlFiles) {
229125
229125
  const lockDir = dirname17(cargoLockFile);
@@ -229148,7 +229148,10 @@ async function getCargoTomlFilesForCargoLockFile(rootDir, cargoLockFile, cargoTo
229148
229148
  const matcher = (0, import_picomatch5.default)(memberPatterns, {
229149
229149
  ignore: excludePatterns
229150
229150
  });
229151
- const memberTomlFiles = cargoTomlFiles.filter((file) => matcher(dirname17(file) || "."));
229151
+ const absLockDir = resolve27(rootDir, lockDir);
229152
+ const memberTomlFiles = cargoTomlFiles.filter(
229153
+ (file) => matcher(relative13(absLockDir, resolve27(rootDir, dirname17(file))) || ".")
229154
+ );
229152
229155
  return { rootTomlFile, memberTomlFiles };
229153
229156
  }
229154
229157
 
@@ -229263,14 +229266,14 @@ var CargoSocketUpgradeManager = class {
229263
229266
  await writeFile10(path9, content);
229264
229267
  ctxt.statusUpdater?.({
229265
229268
  status: "success",
229266
- file: relative13(this.rootDir, path9),
229269
+ file: relative14(this.rootDir, path9),
229267
229270
  message: "File restored",
229268
229271
  artifacts: i3(artifacts)
229269
229272
  });
229270
229273
  } catch (e) {
229271
229274
  ctxt.statusUpdater?.({
229272
229275
  status: "error",
229273
- file: relative13(this.rootDir, path9),
229276
+ file: relative14(this.rootDir, path9),
229274
229277
  message: "Could not restore file",
229275
229278
  artifacts: i3(artifacts)
229276
229279
  });
@@ -229470,7 +229473,7 @@ ${newDependencyLine}`
229470
229473
 
229471
229474
  // ../fixing-management/src/fixing-management/pip/pip-socket-upgrade-manager.ts
229472
229475
  var import_picomatch8 = __toESM(require_picomatch2(), 1);
229473
- import { dirname as dirname20, join as join19, resolve as resolve31 } from "node:path";
229476
+ import { dirname as dirname20, resolve as resolve31 } from "node:path";
229474
229477
  import assert13 from "node:assert";
229475
229478
  import { readFile as readFile27 } from "node:fs/promises";
229476
229479
 
@@ -229826,7 +229829,7 @@ function createPep508VersionPatches(file, idx, requirement, oldVersion, upgradeV
229826
229829
  // ../utils/src/pip-utils.ts
229827
229830
  import { existsSync as existsSync19 } from "node:fs";
229828
229831
  import { readFile as readFile26 } from "node:fs/promises";
229829
- import { dirname as dirname19, resolve as resolve30 } from "node:path";
229832
+ import { dirname as dirname19, resolve as resolve30, relative as relative15 } from "node:path";
229830
229833
  import util4 from "node:util";
229831
229834
 
229832
229835
  // ../utils/src/python-versions-manager.ts
@@ -229887,7 +229890,10 @@ async function getPyprojectTomlFilesForLockFile(rootDir, uvLockfile, pyprojectFi
229887
229890
  const matcher = (0, import_picomatch7.default)(memberPatterns, {
229888
229891
  ignore: excludePatterns
229889
229892
  });
229890
- const memberTomlFiles = pyprojectFiles.filter((file) => matcher(dirname19(file) || "."));
229893
+ const absLockDir = resolve30(rootDir, lockDir);
229894
+ const memberTomlFiles = pyprojectFiles.filter(
229895
+ (file) => matcher(relative15(absLockDir, resolve30(rootDir, dirname19(file))) || ".")
229896
+ );
229891
229897
  return { rootTomlFile, memberTomlFiles };
229892
229898
  }
229893
229899
 
@@ -229906,82 +229912,43 @@ var PipSocketUpgradeManager = class {
229906
229912
  uvLockMatcher = (0, import_picomatch8.default)("uv.lock", { basename: true });
229907
229913
  poetryLockMatcher = (0, import_picomatch8.default)("poetry.lock", { basename: true });
229908
229914
  async applySocketArtifactUpgrades(ctxt) {
229909
- const pyprojectTomlFiles = ctxt.manifestFiles.filter((f5) => this.pyprojectTomlMatcher(f5));
229910
229915
  const patches = [];
229911
229916
  const uvLockFilesToValidate = /* @__PURE__ */ new Set();
229912
- const lockFileToDepTree = /* @__PURE__ */ new Map();
229917
+ const patchedNamesByLockFile = /* @__PURE__ */ new Map();
229918
+ const pyprojectTomlFiles = ctxt.manifestFiles.filter((f5) => this.pyprojectTomlMatcher(f5));
229919
+ const uvLockFiles = ctxt.manifestFiles.filter((f5) => this.uvLockMatcher(f5));
229920
+ const lockFileToRootToml = /* @__PURE__ */ new Map();
229921
+ for (const lockFile of uvLockFiles) {
229922
+ const tomlFiles = await getPyprojectTomlFilesForLockFile(this.rootDir, lockFile, pyprojectTomlFiles);
229923
+ if (!tomlFiles) continue;
229924
+ lockFileToRootToml.set(lockFile, tomlFiles.rootTomlFile);
229925
+ }
229913
229926
  const poetryLockArtifacts = /* @__PURE__ */ new Map();
229914
229927
  for (const [idx, upgradeVersion] of ctxt.upgrades) {
229915
229928
  const artifact = ctxt.artifacts[idx];
229916
229929
  assert13(artifact.name);
229917
229930
  assert13(artifact.version);
229918
- const packageName = normalizePackageName(artifact.name);
229919
229931
  const directRequirementsTxts = /* @__PURE__ */ new Set();
229920
229932
  for (const mf of artifact.manifestFiles ?? []) {
229921
229933
  if (this.requirementsTxtMatcher(mf.file)) {
229922
229934
  if (ctxt.wsFilter && !ctxt.wsFilter(dirname20(mf.file) || ".")) continue;
229923
229935
  directRequirementsTxts.add(mf.file);
229924
229936
  patches.push(...await this.createRequirementsTxtDirectDependencyPatches(mf, idx, upgradeVersion, ctxt));
229937
+ } else if (this.pyprojectTomlMatcher(mf.file)) {
229938
+ if (ctxt.wsFilter && !ctxt.wsFilter(dirname20(mf.file) || ".")) continue;
229939
+ patches.push(...await this.createPyprojectTomlDirectDependencyPatches(mf.file, idx, upgradeVersion, ctxt));
229925
229940
  } else if (this.uvLockMatcher(mf.file)) {
229926
- const tomlFiles = await getPyprojectTomlFilesForLockFile(this.rootDir, mf.file, pyprojectTomlFiles);
229927
- if (!tomlFiles) {
229928
- ctxt.statusUpdater?.({
229929
- status: "error",
229930
- file: mf.file,
229931
- artifacts: [idx],
229932
- message: "No pyproject.toml found for uv.lock"
229933
- });
229934
- continue;
229935
- }
229936
- const { rootTomlFile, memberTomlFiles } = tomlFiles;
229937
- let depTree = lockFileToDepTree.get(mf.file);
229938
- if (!depTree) {
229939
- depTree = await buildDependencyTreesFromUvLock(this.rootDir, mf.file);
229940
- if (depTree) {
229941
- lockFileToDepTree.set(mf.file, depTree);
229942
- } else {
229943
- ctxt.statusUpdater?.({
229944
- status: "error",
229945
- file: mf.file,
229946
- artifacts: [idx],
229947
- message: "Failed to parse uv.lock"
229948
- });
229949
- continue;
229950
- }
229951
- }
229952
- const lookupKey = getPackageKey(packageName, artifact.version);
229953
- for (const [projectDir, projectInfo] of depTree) {
229954
- if (ctxt.wsFilter && !ctxt.wsFilter(projectDir)) continue;
229955
- const nodesByNameVersion = /* @__PURE__ */ new Map();
229956
- for (const [, node] of projectInfo.nodes) {
229957
- const key = getPackageKey(node.packageName, node.version);
229958
- const existing = nodesByNameVersion.get(key) ?? [];
229959
- existing.push(node);
229960
- nodesByNameVersion.set(key, existing);
229961
- }
229962
- const matchingNodes = nodesByNameVersion.get(lookupKey) ?? [];
229963
- const isDirectDep = matchingNodes.some((node) => projectInfo.direct.has(node.nodeKey));
229964
- if (isDirectDep) {
229965
- const tomlFile = [rootTomlFile, ...memberTomlFiles ?? []].find(
229966
- (f5) => (dirname20(f5) || ".") === projectDir
229967
- );
229968
- if (tomlFile) {
229969
- patches.push(
229970
- ...await this.createPyprojectTomlDirectDependencyPatches(tomlFile, idx, upgradeVersion, ctxt)
229971
- );
229972
- } else {
229973
- ctxt.statusUpdater?.({
229974
- status: "error",
229975
- file: mf.file,
229976
- artifacts: [idx],
229977
- message: `No pyproject.toml found for project at ${projectDir}`
229978
- });
229979
- }
229980
- }
229981
- }
229982
229941
  patches.push(...await this.createUvLockPatches(mf.file, idx, upgradeVersion, ctxt));
229983
229942
  uvLockFilesToValidate.add(mf.file);
229984
- patches.push(...await this.createOverrideDependencyUpdatePatches(rootTomlFile, idx, upgradeVersion, ctxt));
229943
+ const namesSet = patchedNamesByLockFile.get(mf.file) ?? /* @__PURE__ */ new Set();
229944
+ namesSet.add(normalizePackageName(artifact.name));
229945
+ patchedNamesByLockFile.set(mf.file, namesSet);
229946
+ const rootTomlFile = lockFileToRootToml.get(mf.file);
229947
+ if (rootTomlFile) {
229948
+ patches.push(
229949
+ ...await this.createOverrideDependencyUpdatePatches(rootTomlFile, idx, upgradeVersion, ctxt)
229950
+ );
229951
+ }
229985
229952
  } else if (this.poetryLockMatcher(mf.file)) {
229986
229953
  const existing = poetryLockArtifacts.get(mf.file) ?? [];
229987
229954
  existing.push(idx);
@@ -230028,7 +229995,14 @@ var PipSocketUpgradeManager = class {
230028
229995
  }
230029
229996
  }
230030
229997
  await this.removeDuplicateUvLockEntries(lockFile, ctxt);
230031
- const result = await execNeverFail2(["uv", "lock"], dirname20(resolve31(this.rootDir, lockFile)));
229998
+ const refreshFlags = Array.from(patchedNamesByLockFile.get(lockFile) ?? []).flatMap((name2) => [
229999
+ "--refresh-package",
230000
+ name2
230001
+ ]);
230002
+ const result = await execNeverFail2(
230003
+ ["uv", "lock", ...refreshFlags],
230004
+ dirname20(resolve31(this.rootDir, lockFile))
230005
+ );
230032
230006
  if (result.error) {
230033
230007
  logger.debug("update lockfile stdout", result.stdout);
230034
230008
  logger.debug("update lockfile stderr", result.stderr);
@@ -230566,113 +230540,6 @@ function parseSourceString(source) {
230566
230540
  }
230567
230541
  return void 0;
230568
230542
  }
230569
- async function buildDependencyTreesFromUvLock(rootDir, uvLockFile) {
230570
- let lockToml;
230571
- try {
230572
- const lockContent = await readFile27(resolve31(rootDir, uvLockFile), "utf-8");
230573
- lockToml = parseTOML2(lockContent);
230574
- } catch {
230575
- return void 0;
230576
- }
230577
- if (!lockToml) return void 0;
230578
- const packages = lockToml.package;
230579
- if (!(packages instanceof TOMLArray)) return void 0;
230580
- const nodes = /* @__PURE__ */ new Map();
230581
- const nameToFullKeys = /* @__PURE__ */ new Map();
230582
- const nameVersionToFullKeys = /* @__PURE__ */ new Map();
230583
- const localProjectNodeKeys = /* @__PURE__ */ new Map();
230584
- for (const pkg of packages) {
230585
- if (!(pkg instanceof TOMLTable)) continue;
230586
- const nameScalar = pkg.name;
230587
- const versionScalar = pkg.version;
230588
- const source = pkg.source;
230589
- if (!(nameScalar instanceof TOMLScalar) || !(versionScalar instanceof TOMLScalar)) continue;
230590
- if (typeof nameScalar[value] !== "string" || typeof versionScalar[value] !== "string") continue;
230591
- const pkgName = nameScalar[value];
230592
- const pkgVersion = versionScalar[value];
230593
- const pkgSource = source instanceof TOMLTable ? parseSourceString(source) : void 0;
230594
- const nodeKey = getPackageKey(pkgName, pkgVersion, pkgSource);
230595
- const normalizedName = normalizePackageName(pkgName);
230596
- const node = {
230597
- packageName: normalizedName,
230598
- version: pkgVersion,
230599
- nodeKey,
230600
- deps: /* @__PURE__ */ new Set()
230601
- // Populated in pass 2
230602
- };
230603
- if (!nodes.has(nodeKey)) {
230604
- nodes.set(nodeKey, node);
230605
- }
230606
- const fullKeys = nameToFullKeys.get(normalizedName) ?? [];
230607
- fullKeys.push(nodeKey);
230608
- nameToFullKeys.set(normalizedName, fullKeys);
230609
- const nameVersionKey = `${normalizedName}==${pkgVersion}`;
230610
- const nameVersionFullKeys = nameVersionToFullKeys.get(nameVersionKey) ?? [];
230611
- nameVersionFullKeys.push(nodeKey);
230612
- nameVersionToFullKeys.set(nameVersionKey, nameVersionFullKeys);
230613
- if (source instanceof TOMLTable) {
230614
- const virtualPath = source.virtual;
230615
- const editablePath = source.editable;
230616
- if (virtualPath instanceof TOMLScalar && typeof virtualPath[value] === "string") {
230617
- localProjectNodeKeys.set(join19(dirname20(uvLockFile), virtualPath[value]), nodeKey);
230618
- } else if (editablePath instanceof TOMLScalar && typeof editablePath[value] === "string") {
230619
- localProjectNodeKeys.set(join19(dirname20(uvLockFile), editablePath[value]), nodeKey);
230620
- }
230621
- }
230622
- }
230623
- for (const pkg of packages) {
230624
- if (!(pkg instanceof TOMLTable)) continue;
230625
- const nameScalar = pkg.name;
230626
- const versionScalar = pkg.version;
230627
- const source = pkg.source;
230628
- if (!(nameScalar instanceof TOMLScalar) || !(versionScalar instanceof TOMLScalar)) continue;
230629
- if (typeof nameScalar[value] !== "string" || typeof versionScalar[value] !== "string") continue;
230630
- const pkgSource = source instanceof TOMLTable ? parseSourceString(source) : void 0;
230631
- const nodeKey = getPackageKey(nameScalar[value], versionScalar[value], pkgSource);
230632
- const node = nodes.get(nodeKey);
230633
- if (!node) continue;
230634
- const depsArray = pkg.dependencies;
230635
- if (!(depsArray instanceof TOMLArray)) continue;
230636
- for (const dep of depsArray) {
230637
- if (!(dep instanceof TOMLTable)) continue;
230638
- const depNameScalar = dep.name;
230639
- if (!(depNameScalar instanceof TOMLScalar) || typeof depNameScalar[value] !== "string") continue;
230640
- const depName = depNameScalar[value];
230641
- const depVersionScalar = dep.version;
230642
- const depSource = dep.source;
230643
- let resolvedKeys;
230644
- if (depVersionScalar instanceof TOMLScalar && typeof depVersionScalar[value] === "string" && depSource instanceof TOMLTable) {
230645
- const depSourceStr = parseSourceString(depSource);
230646
- resolvedKeys = [getPackageKey(depName, depVersionScalar[value], depSourceStr)];
230647
- } else if (depVersionScalar instanceof TOMLScalar && typeof depVersionScalar[value] === "string") {
230648
- const nameVersionKey = `${normalizePackageName(depName)}==${depVersionScalar[value]}`;
230649
- resolvedKeys = nameVersionToFullKeys.get(nameVersionKey) ?? [];
230650
- } else {
230651
- resolvedKeys = nameToFullKeys.get(normalizePackageName(depName)) ?? [];
230652
- }
230653
- for (const key of resolvedKeys) {
230654
- node.deps.add(key);
230655
- }
230656
- }
230657
- }
230658
- const localProjectNodeKeySet = new Set(localProjectNodeKeys.values());
230659
- const result = /* @__PURE__ */ new Map();
230660
- for (const [projectDir, projectNodeKey] of localProjectNodeKeys.entries()) {
230661
- const projectNode = nodes.get(projectNodeKey);
230662
- if (!projectNode) {
230663
- result.set(projectDir, { direct: /* @__PURE__ */ new Set(), nodes });
230664
- continue;
230665
- }
230666
- const resolvedDirect = /* @__PURE__ */ new Set();
230667
- for (const depKey of projectNode.deps) {
230668
- if (!localProjectNodeKeySet.has(depKey)) {
230669
- resolvedDirect.add(depKey);
230670
- }
230671
- }
230672
- result.set(projectDir, { direct: resolvedDirect, nodes });
230673
- }
230674
- return result;
230675
- }
230676
230543
  function satisfiestVersionSpecs(version4, versionSpec) {
230677
230544
  return pipVersionSatisfiesConstraints(
230678
230545
  version4,
@@ -230681,14 +230548,14 @@ function satisfiestVersionSpecs(version4, versionSpec) {
230681
230548
  }
230682
230549
 
230683
230550
  // ../fixing-management/src/fixing-management/rubygems/rubygems-socket-upgrade-manager.ts
230684
- import { dirname as dirname22, relative as relative15, resolve as resolve33 } from "node:path";
230551
+ import { dirname as dirname22, relative as relative17, resolve as resolve33 } from "node:path";
230685
230552
  var import_picomatch9 = __toESM(require_picomatch2(), 1);
230686
230553
  import assert14 from "node:assert";
230687
230554
 
230688
230555
  // ../fixing-management/src/fixing-management/rubygems/gemfile-utils.ts
230689
230556
  var import_good_enough_parser4 = __toESM(require_cjs(), 1);
230690
230557
  init_ruby_lang();
230691
- import { resolve as resolve32, dirname as dirname21, relative as relative14 } from "node:path";
230558
+ import { resolve as resolve32, dirname as dirname21, relative as relative16 } from "node:path";
230692
230559
  import { existsSync as existsSync20, readFileSync as readFileSync5, readdirSync as readdirSync4 } from "node:fs";
230693
230560
  init_gemspec_utils();
230694
230561
  var booleanQuery2 = import_good_enough_parser4.query.alt(
@@ -230797,13 +230664,13 @@ var evalGemfileQuery = import_good_enough_parser4.query.sym("eval_gemfile").join
230797
230664
  ctx.exprEndOffset = void 0;
230798
230665
  if (ctx.depth > 50) {
230799
230666
  logger.warn(
230800
- `Recursion limit hit while evaluating gemfile: ${relative14(ctx.gemfile.rootDir, resolve32(ctx.gemfile.rootDir, ctx.gemfile.file))}`
230667
+ `Recursion limit hit while evaluating gemfile: ${relative16(ctx.gemfile.rootDir, resolve32(ctx.gemfile.rootDir, ctx.gemfile.file))}`
230801
230668
  );
230802
230669
  return ctx;
230803
230670
  }
230804
230671
  if (pathEvaluated === void 0) return ctx;
230805
230672
  const rootDir = ctx.gemfile.rootDir;
230806
- const file = relative14(rootDir, resolve32(rootDir, dirname21(ctx.gemfile.file), pathEvaluated));
230673
+ const file = relative16(rootDir, resolve32(rootDir, dirname21(ctx.gemfile.file), pathEvaluated));
230807
230674
  if (!existsSync20(resolve32(rootDir, file))) return ctx;
230808
230675
  const sourceText = readFileSync5(resolve32(rootDir, file), "utf-8");
230809
230676
  const parser2 = import_good_enough_parser4.lang.createLang(lang3);
@@ -230856,7 +230723,7 @@ var gemspecQuery = import_good_enough_parser4.query.sym("gemspec").opt(
230856
230723
  ).handler((ctx) => {
230857
230724
  if (ctx.depth > 50) {
230858
230725
  logger.warn(
230859
- `Recursion limit hit while evaluating gemspec: ${relative14(ctx.gemfile.rootDir, resolve32(ctx.gemfile.rootDir, ctx.gemfile.file))}`
230726
+ `Recursion limit hit while evaluating gemspec: ${relative16(ctx.gemfile.rootDir, resolve32(ctx.gemfile.rootDir, ctx.gemfile.file))}`
230860
230727
  );
230861
230728
  ctx.currentGem = void 0;
230862
230729
  return ctx;
@@ -230895,7 +230762,7 @@ var gemspecQuery = import_good_enough_parser4.query.sym("gemspec").opt(
230895
230762
  if (gemspecFiles.length === 0) return ctx;
230896
230763
  const gemspecFile = gemspecFiles[0];
230897
230764
  const gemspecFullPath = resolve32(searchDir, gemspecFile);
230898
- const gemspecRelativePath = relative14(rootDir, gemspecFullPath);
230765
+ const gemspecRelativePath = relative16(rootDir, gemspecFullPath);
230899
230766
  try {
230900
230767
  const sourceText = readFileSync5(gemspecFullPath, "utf-8");
230901
230768
  const gemspec = parseGemspec(rootDir, gemspecRelativePath, sourceText);
@@ -231271,7 +231138,7 @@ var RubygemsSocketUpgradeManager = class {
231271
231138
  });
231272
231139
  continue;
231273
231140
  }
231274
- const gemfileName = relative15(this.rootDir, resolve33(this.rootDir, dirname22(mf.file), "Gemfile"));
231141
+ const gemfileName = relative17(this.rootDir, resolve33(this.rootDir, dirname22(mf.file), "Gemfile"));
231275
231142
  gemfileToLockfile.set(gemfileName, mf.file);
231276
231143
  if (pathGems.length > 0) {
231277
231144
  const { gemspecPatches, gemfilePatches } = await this.handleGemspecDependency(
@@ -231350,14 +231217,14 @@ var RubygemsSocketUpgradeManager = class {
231350
231217
  await writeFile11(path9, content);
231351
231218
  ctxt.statusUpdater?.({
231352
231219
  status: "success",
231353
- file: relative15(this.rootDir, path9),
231220
+ file: relative17(this.rootDir, path9),
231354
231221
  message: "File restored",
231355
231222
  artifacts: i3(artifacts)
231356
231223
  });
231357
231224
  } catch (e) {
231358
231225
  ctxt.statusUpdater?.({
231359
231226
  status: "error",
231360
- file: relative15(this.rootDir, path9),
231227
+ file: relative17(this.rootDir, path9),
231361
231228
  message: "Could not restore file",
231362
231229
  artifacts: i3(artifacts)
231363
231230
  });
@@ -231614,7 +231481,7 @@ import { resolve as resolve35 } from "path";
231614
231481
 
231615
231482
  // ../utils/dist/constants.js
231616
231483
  var import_lodash8 = __toESM(require_lodash(), 1);
231617
- import { dirname as dirname23, join as join21 } from "node:path";
231484
+ import { dirname as dirname23, join as join20 } from "node:path";
231618
231485
  import { fileURLToPath as fileURLToPath3 } from "node:url";
231619
231486
 
231620
231487
  // ../utils/dist/file-utils.js
@@ -231622,7 +231489,7 @@ var import_lodash7 = __toESM(require_lodash(), 1);
231622
231489
  var import_micromatch2 = __toESM(require_micromatch(), 1);
231623
231490
  import { existsSync as existsSync21 } from "fs";
231624
231491
  import { access as access4, cp as cp3, readdir as readdir4, stat as stat4 } from "fs/promises";
231625
- import { basename as basename9, join as join20, relative as relative16, resolve as resolve34 } from "path";
231492
+ import { basename as basename9, join as join19, relative as relative18, resolve as resolve34 } from "path";
231626
231493
  var { uniq: uniq2 } = import_lodash7.default;
231627
231494
  var { isMatch: isMatch2 } = import_micromatch2.default;
231628
231495
  function* parents2(dir) {
@@ -231651,10 +231518,10 @@ var COANA_ROOT = once3(() => {
231651
231518
  return coanaRoot;
231652
231519
  });
231653
231520
  var REPOS_PATH = once3(() => {
231654
- return process.env.REPOS_PATH ?? join21(COANA_ROOT(), "repos");
231521
+ return process.env.REPOS_PATH ?? join20(COANA_ROOT(), "repos");
231655
231522
  });
231656
231523
  var COANA_REPOS_PATH = once3(() => {
231657
- return process.env.COANA_REPOS_PATH ?? join21(REPOS_PATH(), "coana-tech");
231524
+ return process.env.COANA_REPOS_PATH ?? join20(REPOS_PATH(), "coana-tech");
231658
231525
  });
231659
231526
 
231660
231527
  // ../docker-management/src/constants.ts
@@ -231668,32 +231535,32 @@ var getImageTag = () => {
231668
231535
  };
231669
231536
 
231670
231537
  // ../docker-management/src/docker-spec.ts
231671
- import { join as join22 } from "path";
231538
+ import { join as join21 } from "path";
231672
231539
  var builderSpecs = [
231673
231540
  {
231674
231541
  name: "maven-builder",
231675
- file: join22("builders", "maven", "Dockerfile"),
231542
+ file: join21("builders", "maven", "Dockerfile"),
231676
231543
  isBuilder: true
231677
231544
  },
231678
231545
  {
231679
231546
  name: "python-builder",
231680
- file: join22("builders", "python", "Dockerfile"),
231547
+ file: join21("builders", "python", "Dockerfile"),
231681
231548
  isBuilder: true
231682
231549
  },
231683
231550
  {
231684
231551
  name: "go-builder",
231685
- file: join22("builders", "go", "Dockerfile"),
231552
+ file: join21("builders", "go", "Dockerfile"),
231686
231553
  isBuilder: true
231687
231554
  }
231688
231555
  ];
231689
231556
  var packageManagerDockerSpecs = [
231690
231557
  {
231691
231558
  name: "npm-package-managers",
231692
- file: join22("package-management", "npm", "Dockerfile")
231559
+ file: join21("package-management", "npm", "Dockerfile")
231693
231560
  },
231694
231561
  {
231695
231562
  name: "maven-package-managers",
231696
- file: join22("package-management", "maven", "Dockerfile"),
231563
+ file: join21("package-management", "maven", "Dockerfile"),
231697
231564
  variants: {
231698
231565
  jdk8: {
231699
231566
  JDK_URL_AMD64: "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u442-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u442b06.tar.gz",
@@ -231718,57 +231585,57 @@ var packageManagerDockerSpecs = [
231718
231585
  },
231719
231586
  {
231720
231587
  name: "pip-package-managers",
231721
- file: join22("package-management", "pip", "Dockerfile"),
231588
+ file: join21("package-management", "pip", "Dockerfile"),
231722
231589
  from: {
231723
231590
  name: "python-builder"
231724
231591
  }
231725
231592
  },
231726
231593
  {
231727
231594
  name: "go-package-manager",
231728
- file: join22("package-management", "go", "Dockerfile"),
231595
+ file: join21("package-management", "go", "Dockerfile"),
231729
231596
  from: {
231730
231597
  name: "go-builder"
231731
231598
  }
231732
231599
  },
231733
231600
  {
231734
231601
  name: "nuget-package-manager",
231735
- file: join22("package-management", "nuget", "Dockerfile")
231602
+ file: join21("package-management", "nuget", "Dockerfile")
231736
231603
  },
231737
231604
  {
231738
231605
  name: "cargo-package-manager",
231739
- file: join22("package-management", "cargo", "Dockerfile")
231606
+ file: join21("package-management", "cargo", "Dockerfile")
231740
231607
  }
231741
231608
  ];
231742
231609
  var reachabilityAnalyzerDockerSpecs = [
231743
231610
  {
231744
231611
  name: "jelly-analyzer",
231745
- file: join22("reachability-analyzers", "jelly", "Dockerfile")
231612
+ file: join21("reachability-analyzers", "jelly", "Dockerfile")
231746
231613
  },
231747
231614
  {
231748
231615
  name: "alucard-analyzer",
231749
- file: join22("reachability-analyzers", "alucard", "Dockerfile")
231616
+ file: join21("reachability-analyzers", "alucard", "Dockerfile")
231750
231617
  },
231751
231618
  {
231752
231619
  name: "mambalade-analyzer",
231753
- file: join22("reachability-analyzers", "mambalade", "Dockerfile"),
231620
+ file: join21("reachability-analyzers", "mambalade", "Dockerfile"),
231754
231621
  from: {
231755
231622
  name: "python-builder"
231756
231623
  }
231757
231624
  },
231758
231625
  {
231759
231626
  name: "goana-analyzer",
231760
- file: join22("reachability-analyzers", "goana", "Dockerfile"),
231627
+ file: join21("reachability-analyzers", "goana", "Dockerfile"),
231761
231628
  from: {
231762
231629
  name: "go-builder"
231763
231630
  }
231764
231631
  },
231765
231632
  {
231766
231633
  name: "cocoa-analyzer",
231767
- file: join22("reachability-analyzers", "cocoa", "Dockerfile")
231634
+ file: join21("reachability-analyzers", "cocoa", "Dockerfile")
231768
231635
  },
231769
231636
  {
231770
231637
  name: "rustica-analyzer",
231771
- file: join22("reachability-analyzers", "rustica", "Dockerfile")
231638
+ file: join21("reachability-analyzers", "rustica", "Dockerfile")
231772
231639
  }
231773
231640
  ];
231774
231641
  function getAllPackageManagerSpecs() {
@@ -232061,13 +231928,13 @@ async function detectVariantMaven(projectDir) {
232061
231928
 
232062
231929
  // ../docker-management/src/maven/gradle-version-detector.ts
232063
231930
  import { existsSync as existsSync22 } from "fs";
232064
- import { join as join23 } from "path";
231931
+ import { join as join22 } from "path";
232065
231932
  import { readFile as readFile30 } from "fs/promises";
232066
231933
  async function detectVariantGradle(projectDir) {
232067
231934
  return sanitizeJvmVariant("GRADLE", projectDir, await detect(projectDir));
232068
231935
  }
232069
231936
  async function detect(projectDir) {
232070
- const gradleWrapperPropertiesPath = join23(projectDir, "gradle", "wrapper", "gradle-wrapper.properties");
231937
+ const gradleWrapperPropertiesPath = join22(projectDir, "gradle", "wrapper", "gradle-wrapper.properties");
232071
231938
  const gradleWrapperProperties = existsSync22(gradleWrapperPropertiesPath) ? (await readFile30(gradleWrapperPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
232072
231939
  if (!gradleWrapperProperties) return void 0;
232073
231940
  const distributionUrlRegex = /.*gradle-(\d+(\.\d+(\.\d+)?)?)/;
@@ -232083,13 +231950,13 @@ async function detect(projectDir) {
232083
231950
 
232084
231951
  // ../docker-management/src/maven/sbt-version-detector.ts
232085
231952
  import { existsSync as existsSync23 } from "fs";
232086
- import { join as join24 } from "path";
231953
+ import { join as join23 } from "path";
232087
231954
  import { readFile as readFile31 } from "fs/promises";
232088
231955
  async function detectVariantSbt(projectDir) {
232089
231956
  return sanitizeJvmVariant("SBT", projectDir, await detect2(projectDir));
232090
231957
  }
232091
231958
  async function detect2(projectDir) {
232092
- const sbtBuildPropertiesPath = join24(projectDir, "project", "build.properties");
231959
+ const sbtBuildPropertiesPath = join23(projectDir, "project", "build.properties");
232093
231960
  const sbtBuildProperties = existsSync23(sbtBuildPropertiesPath) ? (await readFile31(sbtBuildPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
232094
231961
  if (!sbtBuildProperties) return void 0;
232095
231962
  for (const prop2 of sbtBuildProperties) {
@@ -232207,7 +232074,7 @@ import { rmSync } from "fs";
232207
232074
  import { mkdir as mkdir5, readFile as readFile32, writeFile as writeFile12 } from "fs/promises";
232208
232075
  import assert15 from "node:assert";
232209
232076
  import { platform as platform8 } from "os";
232210
- import { join as join27, posix as posix2, relative as relative18, sep as sep3 } from "path";
232077
+ import { join as join26, posix as posix2, relative as relative20, sep as sep3 } from "path";
232211
232078
 
232212
232079
  // ../web-compat-utils/dist/analysis-error-keys.js
232213
232080
  var InstallError = class extends Error {
@@ -232222,10 +232089,10 @@ var InstallError = class extends Error {
232222
232089
  // ../utils/src/tmp-file.ts
232223
232090
  import { rm, mkdtemp, cp as cp4, lstat as lstat2 } from "fs/promises";
232224
232091
  import { tmpdir as tmpdir4 } from "os";
232225
- import { join as join25, relative as relative17, sep as sep2, extname as extname2 } from "path";
232092
+ import { join as join24, relative as relative19, sep as sep2, extname as extname2 } from "path";
232226
232093
  async function createTmpDirectory(prefix) {
232227
232094
  try {
232228
- const tmpDir = await mkdtemp(join25(tmpdir4(), prefix));
232095
+ const tmpDir = await mkdtemp(join24(tmpdir4(), prefix));
232229
232096
  return tmpDir;
232230
232097
  } catch (err) {
232231
232098
  console.log("Error creating tmp directory", err);
@@ -232259,7 +232126,7 @@ async function copyForNpmAnalysis(srcDir, prefix) {
232259
232126
  verbatimSymlinks: true,
232260
232127
  // Preserve symlinks as symlinks instead of dereferencing them
232261
232128
  filter: async (src) => {
232262
- const relativePath = relative17(srcDir, src);
232129
+ const relativePath = relative19(srcDir, src);
232263
232130
  if (relativePath === "") return true;
232264
232131
  const pathSegments = relativePath.split(sep2);
232265
232132
  if (pathSegments.some((segment) => EXCLUDED_DIRECTORIES.has(segment))) {
@@ -232500,7 +232367,7 @@ import { resolve as resolve36 } from "path";
232500
232367
 
232501
232368
  // ../utils/src/constants.ts
232502
232369
  var import_lodash10 = __toESM(require_lodash(), 1);
232503
- import { dirname as dirname24, join as join26 } from "node:path";
232370
+ import { dirname as dirname24, join as join25 } from "node:path";
232504
232371
  import { fileURLToPath as fileURLToPath4 } from "node:url";
232505
232372
  var { once: once5 } = import_lodash10.default;
232506
232373
  var fileName2 = fileURLToPath4(import.meta.url);
@@ -232513,10 +232380,10 @@ var COANA_ROOT2 = once5(() => {
232513
232380
  return coanaRoot;
232514
232381
  });
232515
232382
  var REPOS_PATH2 = once5(() => {
232516
- return process.env.REPOS_PATH ?? join26(COANA_ROOT2(), "repos");
232383
+ return process.env.REPOS_PATH ?? join25(COANA_ROOT2(), "repos");
232517
232384
  });
232518
232385
  var COANA_REPOS_PATH2 = once5(() => {
232519
- return process.env.COANA_REPOS_PATH ?? join26(REPOS_PATH2(), "coana-tech");
232386
+ return process.env.COANA_REPOS_PATH ?? join25(REPOS_PATH2(), "coana-tech");
232520
232387
  });
232521
232388
  var REQUIREMENTS_FILES_SEARCH_DEPTH = 2;
232522
232389
 
@@ -232555,7 +232422,7 @@ var { memoize, once: once7, take } = import_lodash12.default;
232555
232422
  async function getReachabilityAnalyzersScriptPath() {
232556
232423
  if (isNexeMode()) {
232557
232424
  const extractedPath = await extractTool("reachability-analyzers", "reachability-analyzers-cli.mjs");
232558
- return join27(extractedPath, "reachability-analyzers-cli.mjs");
232425
+ return join26(extractedPath, "reachability-analyzers-cli.mjs");
232559
232426
  }
232560
232427
  return REACHABILITY_ANALYZERS_SCRIPT_PATH();
232561
232428
  }
@@ -232643,7 +232510,7 @@ var OtherModulesCommunicator = class {
232643
232510
  }
232644
232511
  if (cmd === "getWorkspacePathsMultipleSubprojects")
232645
232512
  return `${_cmdStr()}: (${packageManagerName}) ${abbreviateList(subprojects, 10)}`;
232646
- return `${_cmdStr()}: (${packageManagerName}) ${relative18(this.rootWorkingDir, subprojectPath) || "."}`;
232513
+ return `${_cmdStr()}: (${packageManagerName}) ${relative20(this.rootWorkingDir, subprojectPath) || "."}`;
232647
232514
  }
232648
232515
  getSpinnerTextForReachabilityAnalyzerCommand(cmd, ecosystem, subprojectPath, workspacePath) {
232649
232516
  function _cmdStr() {
@@ -232658,10 +232525,10 @@ var OtherModulesCommunicator = class {
232658
232525
  return "Running reachability analysis on package registry package";
232659
232526
  }
232660
232527
  }
232661
- return `${_cmdStr()}: (${ecosystem}) ${relative18(this.rootWorkingDir, join27(subprojectPath, workspacePath)) || "."}`;
232528
+ return `${_cmdStr()}: (${ecosystem}) ${relative20(this.rootWorkingDir, join26(subprojectPath, workspacePath)) || "."}`;
232662
232529
  }
232663
232530
  getProjectPath(subprojectPath) {
232664
- return this.options.runWithoutDocker ? subprojectPath : posix2.resolve("/project", relative18(this.rootWorkingDir, subprojectPath).replaceAll(sep3, posix2.sep));
232531
+ return this.options.runWithoutDocker ? subprojectPath : posix2.resolve("/project", relative20(this.rootWorkingDir, subprojectPath).replaceAll(sep3, posix2.sep));
232665
232532
  }
232666
232533
  // options shared between package-management and reachability-analyzers
232667
232534
  commonOptions = once7(
@@ -232707,7 +232574,7 @@ var OtherModulesCommunicator = class {
232707
232574
  async runPackageManagerCommandWithOutput(commandName, packageManagerName, subprojectPath, args2 = [], extraDockerArgs, env) {
232708
232575
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
232709
232576
  const outputFileName = `${v4_default()}-${commandName}-output.json`;
232710
- const outputFilePathThisProcess = join27(tmpDir, outputFileName);
232577
+ const outputFilePathThisProcess = join26(tmpDir, outputFileName);
232711
232578
  const outputFilePathOtherProcess = this.options.runWithoutDocker ? outputFilePathThisProcess : posix2.join(TMP_DIR_IN_DOCKER, outputFileName);
232712
232579
  await this.runPackageManagerCommand(
232713
232580
  commandName,
@@ -232745,8 +232612,8 @@ var OtherModulesCommunicator = class {
232745
232612
  if (isNexeMode()) {
232746
232613
  const baseDir = getExtractionBaseDir();
232747
232614
  env.COANA_ROOT = baseDir;
232748
- env.REPOS_PATH = join27(baseDir, "repos");
232749
- env.COANA_REPOS_PATH = join27(baseDir, "repos", "coana-tech");
232615
+ env.REPOS_PATH = join26(baseDir, "repos");
232616
+ env.COANA_REPOS_PATH = join26(baseDir, "repos", "coana-tech");
232750
232617
  env.REACHABILITY_ANALYZERS_SCRIPT_PATH = scriptPath;
232751
232618
  }
232752
232619
  return Spinner.instance().wrap(
@@ -232784,7 +232651,7 @@ var OtherModulesCommunicator = class {
232784
232651
  async runReachabilityAnalyzerCommandWithOutput(commandName, ecosystem, subprojectPath, workspacePath, args2, env, rootWorkingDirOverride, displaySubprojectPath, extraDockerArgs) {
232785
232652
  const tmpDir = await this.getTmpDirForSubproject(displaySubprojectPath ?? subprojectPath);
232786
232653
  const outputFileName = `${v4_default()}-${commandName}-output.json`;
232787
- const outputFilePathThisProcess = join27(tmpDir, outputFileName);
232654
+ const outputFilePathThisProcess = join26(tmpDir, outputFileName);
232788
232655
  const outputFilePathOtherProcess = this.options.runWithoutDocker ? outputFilePathThisProcess : posix2.join(TMP_DIR_IN_DOCKER, outputFileName);
232789
232656
  await this.runReachabilityAnalyzerCommand(
232790
232657
  commandName,
@@ -232821,7 +232688,7 @@ var OtherModulesCommunicator = class {
232821
232688
  "getWorkspacePathsMultipleSubprojects",
232822
232689
  packageManagerName,
232823
232690
  this.rootWorkingDir,
232824
- subprojectPaths.map((subprojectPath) => relative18(this.rootWorkingDir, subprojectPath) || ".")
232691
+ subprojectPaths.map((subprojectPath) => relative20(this.rootWorkingDir, subprojectPath) || ".")
232825
232692
  );
232826
232693
  }
232827
232694
  async getProvidedArgsForSubproject(subprojectPath, providedOptions) {
@@ -232829,7 +232696,7 @@ var OtherModulesCommunicator = class {
232829
232696
  if (providedOptions.type === "providee") {
232830
232697
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
232831
232698
  const providerFileName = "provider.json";
232832
- const providerFileThisProcess = join27(tmpDir, providerFileName);
232699
+ const providerFileThisProcess = join26(tmpDir, providerFileName);
232833
232700
  const providerFileOtherProcess = this.options.runWithoutDocker ? providerFileThisProcess : posix2.join(TMP_DIR_IN_DOCKER, providerFileName);
232834
232701
  await writeFile12(providerFileThisProcess, JSON.stringify(providedOptions.provider));
232835
232702
  return ["--provider", providerFileOtherProcess];
@@ -232876,7 +232743,7 @@ var OtherModulesCommunicator = class {
232876
232743
  await extractAllToolsForNexeMode();
232877
232744
  }
232878
232745
  const inputFileName = `${v4_default()}-installDependencies-input.json`;
232879
- const inputFileThisProcess = join27(tmpDir, inputFileName);
232746
+ const inputFileThisProcess = join26(tmpDir, inputFileName);
232880
232747
  const inputFileOtherProcess = this.options.runWithoutDocker ? inputFileThisProcess : posix2.join(TMP_DIR_IN_DOCKER, inputFileName);
232881
232748
  const preinstallDirOtherProcess = this.options.runWithoutDocker ? preinstallDir : PREINSTALL_DIR_IN_DOCKER;
232882
232749
  const extraDockerArgs = this.options.runWithoutDocker ? void 0 : ["-v", `${preinstallDir}:${PREINSTALL_DIR_IN_DOCKER}`];
@@ -232911,7 +232778,7 @@ var OtherModulesCommunicator = class {
232911
232778
  await extractAllToolsForNexeMode();
232912
232779
  }
232913
232780
  const inputFileName = `${v4_default()}-runReachabilityAnalysis-input.json`;
232914
- const inputFileThisProcess = join27(tmpDir, inputFileName);
232781
+ const inputFileThisProcess = join26(tmpDir, inputFileName);
232915
232782
  const inputFileOtherProcess = this.options.runWithoutDocker ? inputFileThisProcess : posix2.join(TMP_DIR_IN_DOCKER, inputFileName);
232916
232783
  const preinstallDirOtherProcess = preinstallDir ? this.options.runWithoutDocker ? preinstallDir : PREINSTALL_DIR_IN_DOCKER : void 0;
232917
232784
  const extraDockerArgs = preinstallDir && !this.options.runWithoutDocker ? ["-v", `${preinstallDir}:${PREINSTALL_DIR_IN_DOCKER}`] : void 0;
@@ -232959,7 +232826,7 @@ var setUpGoModuleCache = once7(async () => {
232959
232826
  execFileSync2("chmod", ["--recursive", "+rw", tmpDir]);
232960
232827
  rmSync(tmpDir, { recursive: true, force: true });
232961
232828
  });
232962
- const [upper, work] = [join27(tmpDir, "upper"), join27(tmpDir, "work")];
232829
+ const [upper, work] = [join26(tmpDir, "upper"), join26(tmpDir, "work")];
232963
232830
  for (const dir of [upper, work]) await mkdir5(dir);
232964
232831
  const o7 = await execNeverFail2(
232965
232832
  cmdt`docker volume create --driver local --opt type=overlay
@@ -234210,21 +234077,21 @@ function getVulnerabilitiesFromReport(report) {
234210
234077
  var import_packageurl_js = __toESM(require_packageurl_js(), 1);
234211
234078
 
234212
234079
  // dist/cli-upgrade-purl.js
234213
- import { join as join30, relative as relative21, resolve as resolve40 } from "node:path";
234080
+ import { join as join29, relative as relative23, resolve as resolve40 } from "node:path";
234214
234081
  var import_picomatch10 = __toESM(require_picomatch2(), 1);
234215
234082
 
234216
234083
  // ../project-management/src/project-management/project-manager.ts
234217
- import { relative as relative20, resolve as resolve39 } from "path";
234084
+ import { relative as relative22, resolve as resolve39 } from "path";
234218
234085
 
234219
234086
  // ../project-management/src/project-management/ecosystem-management/ecosystem-manager.ts
234220
234087
  var import_micromatch3 = __toESM(require_micromatch2(), 1);
234221
234088
  import { readdir as readdir6 } from "fs/promises";
234222
- import { join as join29, relative as relative19, resolve as resolve38 } from "path";
234089
+ import { join as join28, relative as relative21, resolve as resolve38 } from "path";
234223
234090
 
234224
234091
  // ../project-management/src/project-management/ecosystem-management/ecosystem-specs.ts
234225
234092
  import { existsSync as existsSync25 } from "fs";
234226
234093
  import { readdir as readdir5, readFile as readFile33 } from "fs/promises";
234227
- import { join as join28, sep as sep4 } from "path";
234094
+ import { join as join27, sep as sep4 } from "path";
234228
234095
  var specs = {
234229
234096
  NPM: [
234230
234097
  /* @__PURE__ */ new Map([["package.json", packageManagerIfPackageJSONExistsAndValid("NPM")]]),
@@ -234255,7 +234122,7 @@ var specs = {
234255
234122
  [
234256
234123
  /^(pyproject.toml|setup.py|requirements.*\.txt)/,
234257
234124
  async (projectDir) => {
234258
- const isPythonProject = await exists(join28(projectDir, "pyproject.toml")) || await exists(join28(projectDir, "setup.py")) && await isSetupPySetuptools(join28(projectDir, "setup.py"));
234125
+ const isPythonProject = await exists(join27(projectDir, "pyproject.toml")) || await exists(join27(projectDir, "setup.py")) && await isSetupPySetuptools(join27(projectDir, "setup.py"));
234259
234126
  if (isPythonProject) {
234260
234127
  properPythonProjects.push(projectDir + sep4);
234261
234128
  return "PIP_REQUIREMENTS";
@@ -234278,7 +234145,7 @@ var specs = {
234278
234145
  [
234279
234146
  "uv.lock",
234280
234147
  async (projectDir) => {
234281
- if (await exists(join28(projectDir, "pyproject.toml"))) {
234148
+ if (await exists(join27(projectDir, "pyproject.toml"))) {
234282
234149
  logger.warn("uv is not supported yet, using plain pyproject.toml as a fallback");
234283
234150
  return "PIP_REQUIREMENTS";
234284
234151
  } else logger.error("uv.lock found without pyproject.toml");
@@ -234299,8 +234166,8 @@ function getEcosystemSpecs(ecosystems) {
234299
234166
  }
234300
234167
  function packageManagerIfPackageJSONExistsAndValid(packageManager) {
234301
234168
  return async (projectDir) => {
234302
- if (!existsSync25(join28(projectDir, "package.json"))) return void 0;
234303
- const packageJSONPath = join28(projectDir, "package.json");
234169
+ if (!existsSync25(join27(projectDir, "package.json"))) return void 0;
234170
+ const packageJSONPath = join27(projectDir, "package.json");
234304
234171
  try {
234305
234172
  JSON.parse(await readFile33(packageJSONPath, "utf-8"));
234306
234173
  return packageManager;
@@ -234357,7 +234224,7 @@ var EcosystemManager = class _EcosystemManager {
234357
234224
  const resolvedProjectDir = resolve38(mainProjectDir, relativeProjectDir);
234358
234225
  if (config3.includeDirs.length > 0)
234359
234226
  workspacePaths = workspacePaths.filter(
234360
- (workspacePath) => isMatch3(relative19(mainProjectDir, join29(resolvedProjectDir, workspacePath)), config3.includeDirs)
234227
+ (workspacePath) => isMatch3(relative21(mainProjectDir, join28(resolvedProjectDir, workspacePath)), config3.includeDirs)
234361
234228
  );
234362
234229
  workspacePaths.filter((workspacePath) => workspacePath !== ".").forEach((workspacePath) => projectDirsAlreadyCovered.push(resolve38(resolvedProjectDir, workspacePath)));
234363
234230
  if (workspacePaths.length > 0)
@@ -234385,7 +234252,7 @@ var EcosystemManager = class _EcosystemManager {
234385
234252
  }
234386
234253
  }
234387
234254
  for (const dir of directoriesToTraverse) {
234388
- await recHelper(join29(projectDir, dir), true);
234255
+ await recHelper(join28(projectDir, dir), true);
234389
234256
  }
234390
234257
  }
234391
234258
  async function getPackageManagerName(projectDir, foundProjectFiles, foundLockFiles) {
@@ -234398,7 +234265,7 @@ var EcosystemManager = class _EcosystemManager {
234398
234265
  return typeof packageManagerNameProvider === "function" ? await packageManagerNameProvider(projectDir) : packageManagerNameProvider;
234399
234266
  } catch (e) {
234400
234267
  if (e instanceof InvalidProjectFileError) {
234401
- const projectDirRelative = relative19(mainProjectDir, projectDir) || ".";
234268
+ const projectDirRelative = relative21(mainProjectDir, projectDir) || ".";
234402
234269
  logger.error(
234403
234270
  `Invalid ${e.fileName} file in ${projectDirRelative}. If the project is intentionally invalid, and you want Coana to skip it in the scan, then add "--exclude-dirs ${projectDirRelative}" to the Coana command.`
234404
234271
  );
@@ -234414,7 +234281,7 @@ var EcosystemManager = class _EcosystemManager {
234414
234281
  const filesAndDirectories = await readdir6(projectDir, { withFileTypes: true });
234415
234282
  for (const dirent of filesAndDirectories) {
234416
234283
  const fileOrDirectory = dirent.name;
234417
- const fullPath = join29(projectDir, fileOrDirectory);
234284
+ const fullPath = join28(projectDir, fileOrDirectory);
234418
234285
  if (dirent.isDirectory()) {
234419
234286
  if (shouldIgnoreDir(fileOrDirectory) || shouldIgnoreDueToExcludeDirsOrChangedFiles(config3, fullPath))
234420
234287
  continue;
@@ -234441,7 +234308,7 @@ var EcosystemManager = class _EcosystemManager {
234441
234308
  packageManagerName,
234442
234309
  subprojectPath,
234443
234310
  workspacePaths: workspacePaths.filter(
234444
- (workspacePath) => !shouldIgnoreDueToExcludeDirsOrChangedFiles(this.config, join29(subprojectPath, workspacePath))
234311
+ (workspacePath) => !shouldIgnoreDueToExcludeDirsOrChangedFiles(this.config, join28(subprojectPath, workspacePath))
234445
234312
  )
234446
234313
  }));
234447
234314
  }
@@ -234490,13 +234357,13 @@ function shouldIgnoreDir(dir) {
234490
234357
  return dirsToIgnore.includes(dir);
234491
234358
  }
234492
234359
  function shouldIgnoreDueToExcludeDirsOrChangedFiles({ mainProjectDir, excludeDirs, changedFiles }, fullPath) {
234493
- const relativeToProjectDir = relative19(mainProjectDir, fullPath) || ".";
234360
+ const relativeToProjectDir = relative21(mainProjectDir, fullPath) || ".";
234494
234361
  return !!(isMatch3(relativeToProjectDir, excludeDirs) || changedFiles && !changedFiles.some((changedFile) => changedFile.startsWith(relativeToProjectDir)));
234495
234362
  }
234496
234363
  function shouldIncludeWorkspaceForAnalysis(config3, workspaceFullPath) {
234497
234364
  if (shouldIgnoreDueToExcludeDirsOrChangedFiles(config3, workspaceFullPath)) return false;
234498
234365
  if (config3.includeDirs.length > 0) {
234499
- const relPath = relative19(config3.mainProjectDir, workspaceFullPath);
234366
+ const relPath = relative21(config3.mainProjectDir, workspaceFullPath);
234500
234367
  if (!isMatch3(relPath, config3.includeDirs)) return false;
234501
234368
  }
234502
234369
  return true;
@@ -234546,7 +234413,7 @@ var ProjectManager = class _ProjectManager {
234546
234413
  if (subprojects.length === 0) return void 0;
234547
234414
  return ` ${ecosystem}:
234548
234415
  ${subprojects.map(
234549
- ({ subprojectPath, workspacePaths }) => ` ${relative20(this.projectDir, subprojectPath) || ". (Root)"}${workspacePaths.length > 1 || workspacePaths[0] !== "." ? ` (${workspacePaths.length} ${ecosystem === "MAVEN" ? "modules" : "workspaces"})` : ""}`
234416
+ ({ subprojectPath, workspacePaths }) => ` ${relative22(this.projectDir, subprojectPath) || ". (Root)"}${workspacePaths.length > 1 || workspacePaths[0] !== "." ? ` (${workspacePaths.length} ${ecosystem === "MAVEN" ? "modules" : "workspaces"})` : ""}`
234550
234417
  ).join("\n")}`;
234551
234418
  }).filter((line) => line).join("\n");
234552
234419
  const detailsString = Object.entries(this.ecosystemToEcosystemManager).map(([ecosystem, manager]) => {
@@ -234554,7 +234421,7 @@ ${subprojects.map(
234554
234421
  if (subprojects.length === 0) return void 0;
234555
234422
  const subprojectsString = subprojects.map(({ subprojectPath, workspacePaths, packageManagerName }) => {
234556
234423
  if (workspacePaths.length === 1 && workspacePaths[0] === ".") return void 0;
234557
- return ` ${relative20(this.projectDir, subprojectPath) || ". (Root)"}
234424
+ return ` ${relative22(this.projectDir, subprojectPath) || ". (Root)"}
234558
234425
  ${workspacePaths.map((ws) => ` ${ws === "." ? ". (Root)" : ws} - ${packageManagerName}`).join("\n")}`;
234559
234426
  }).filter((line) => line).join("\n");
234560
234427
  if (!subprojectsString) return void 0;
@@ -234869,7 +234736,7 @@ ${Array.from(upgrades).map(([idx, upgradeVersion]) => ` ${prettyPrintPurlUpgrade
234869
234736
  warn: "\u26A0\uFE0F",
234870
234737
  error: "\u274C"
234871
234738
  };
234872
- logger.info(`${statusIcons[update3.status]} ${update3.message} \u2500 ${relative21(rootDir, resolve40(rootDir, update3.file))}`);
234739
+ logger.info(`${statusIcons[update3.status]} ${update3.message} \u2500 ${relative23(rootDir, resolve40(rootDir, update3.file))}`);
234873
234740
  update3.artifacts.forEach((idx, i7) => {
234874
234741
  logger.info(`${" ".repeat(3)}${i7 === update3.artifacts.length - 1 ? "\u2514\u2500" : "\u251C\u2500"} ${prettyPrintSocketFactArtifactUpgrade(artifacts[idx], upgrades2.get(idx))}`);
234875
234742
  });
@@ -234937,7 +234804,7 @@ ${total}/${total} workspaces were upgraded successfully.`));
234937
234804
  const subprojectPromiseQueue = new PromiseQueue(Number(options.concurrency));
234938
234805
  supportedSubprojects.forEach((subproject) => {
234939
234806
  subprojectPromiseQueue.enqueueTask(async () => {
234940
- const workspacePathsMatchingGlob = subproject.workspacePaths.filter((wsPath) => wsFilter(relative21(rootDir, resolve40(rootDir, subproject.subprojectPath, wsPath)) || "."));
234807
+ const workspacePathsMatchingGlob = subproject.workspacePaths.filter((wsPath) => wsFilter(relative23(rootDir, resolve40(rootDir, subproject.subprojectPath, wsPath)) || "."));
234941
234808
  if (workspacePathsMatchingGlob.length === 0)
234942
234809
  return;
234943
234810
  const filterDescription = options.include !== void 0 || options.exclude !== void 0 ? `matching filters ${options.include ? `include: [${options.include.join(", ")}]` : ""}${options.include && options.exclude ? " " : ""}${options.exclude ? `exclude: [${options.exclude.join(", ")}]` : ""}` : "";
@@ -234967,7 +234834,7 @@ ${workspacePathsMatchingGlob.map((wsPath) => ` ${wsPath}`).join("\n")}`);
234967
234834
  });
234968
234835
  if (vulnerabilityFixes.length === 0)
234969
234836
  return;
234970
- logger.info(`Found ${vulnerabilityFixes.length} ${vulnerabilityFixes.length === 1 ? "dependency" : "dependencies"} matching upgrade specs for ${join30(subproject.subprojectPath, wsPath)}`);
234837
+ logger.info(`Found ${vulnerabilityFixes.length} ${vulnerabilityFixes.length === 1 ? "dependency" : "dependencies"} matching upgrade specs for ${join29(subproject.subprojectPath, wsPath)}`);
234971
234838
  workspaceToFixes[wsPath] = [
234972
234839
  {
234973
234840
  fixId: "dummy",
@@ -234979,7 +234846,7 @@ ${workspacePathsMatchingGlob.map((wsPath) => ` ${wsPath}`).join("\n")}`);
234979
234846
  logger.info(`No dependencies matching upgrade specs found for subproject ${subproject.subprojectPath}`);
234980
234847
  return;
234981
234848
  }
234982
- await applySecurityFixes(subproject.packageManagerName, rootDir, relative21(rootDir, subproject.subprojectPath) || ".", otherModulesCommunicator, workspaceToFixes, fixingData, signalFixApplied);
234849
+ await applySecurityFixes(subproject.packageManagerName, rootDir, relative23(rootDir, subproject.subprojectPath) || ".", otherModulesCommunicator, workspaceToFixes, fixingData, signalFixApplied);
234983
234850
  });
234984
234851
  });
234985
234852
  await subprojectPromiseQueue.onIdle();
@@ -234988,7 +234855,7 @@ ${workspacePathsMatchingGlob.map((wsPath) => ` ${wsPath}`).join("\n")}`);
234988
234855
  }
234989
234856
  }
234990
234857
  var signalFixApplied = (_fixId, subprojectPath, workspacePath, vulnerabilityFixes) => {
234991
- logger.info(`Successfully upgraded purls for: ${join30(subprojectPath, workspacePath)}`);
234858
+ logger.info(`Successfully upgraded purls for: ${join29(subprojectPath, workspacePath)}`);
234992
234859
  logger.info(`Upgraded:
234993
234860
  ${vulnerabilityFixes.map((fix) => ` ${fix.dependencyName} from ${fix.currentVersion} to ${fix.fixedVersion}`).join("\n")}`);
234994
234861
  };
@@ -235395,7 +235262,7 @@ import { existsSync as existsSync30, writeFileSync as writeFileSync3 } from "fs"
235395
235262
  import { mkdir as mkdir6, rm as rm3, writeFile as writeFile15 } from "fs/promises";
235396
235263
  var import_lodash15 = __toESM(require_lodash(), 1);
235397
235264
  import os2 from "os";
235398
- import { join as join34, relative as relative22, resolve as resolve42 } from "path";
235265
+ import { join as join33, relative as relative24, resolve as resolve42 } from "path";
235399
235266
 
235400
235267
  // ../utils/src/dashboard-api/shared-api.ts
235401
235268
  var DashboardAPI = class {
@@ -236289,7 +236156,7 @@ async function inferExcludeDirsFromSocketConfig(socketConfigFile) {
236289
236156
  var import_fast_glob = __toESM(require_out4(), 1);
236290
236157
  var import_ignore3 = __toESM(require_ignore(), 1);
236291
236158
  import { readFile as readFile36 } from "fs/promises";
236292
- import { join as join31 } from "path";
236159
+ import { join as join30 } from "path";
236293
236160
  var DEFAULT_IGNORE_PATTERNS = [
236294
236161
  "**/node_modules/**",
236295
236162
  "**/.git/**",
@@ -236303,7 +236170,7 @@ var DEFAULT_IGNORE_PATTERNS = [
236303
236170
  ];
236304
236171
  async function loadGitignore(rootDir) {
236305
236172
  try {
236306
- const gitignorePath = join31(rootDir, ".gitignore");
236173
+ const gitignorePath = join30(rootDir, ".gitignore");
236307
236174
  const content = await readFile36(gitignorePath, "utf-8");
236308
236175
  return (0, import_ignore3.default)().add(content);
236309
236176
  } catch {
@@ -236488,7 +236355,7 @@ function transformToVulnChainNode(dependencyTree) {
236488
236355
  }
236489
236356
 
236490
236357
  // dist/internal/socket-mode-helpers-socket-dependency-trees.js
236491
- import { basename as basename13, dirname as dirname26, join as join32, sep as sep5 } from "path";
236358
+ import { basename as basename13, dirname as dirname26, join as join31, sep as sep5 } from "path";
236492
236359
  var REQUIREMENTS_FILES_SEARCH_DEPTH2 = 3;
236493
236360
  var venvExcludes = [
236494
236361
  "venv",
@@ -236613,7 +236480,7 @@ async function fetchArtifactsFromSocket(rootWorkingDirectory, manifestsTarHash,
236613
236480
  for (const file of allFiles) {
236614
236481
  const base = basename13(file);
236615
236482
  const workspaceDir = dirname26(file) || ".";
236616
- if (base === "pyproject.toml" || base === "setup.py" && await isSetupPySetuptools(join32(rootWorkingDirectory, file))) {
236483
+ if (base === "pyproject.toml" || base === "setup.py" && await isSetupPySetuptools(join31(rootWorkingDirectory, file))) {
236617
236484
  if (!properPythonProjects.includes(workspaceDir)) {
236618
236485
  properPythonProjects.push(workspaceDir);
236619
236486
  }
@@ -239182,10 +239049,10 @@ function compareDocumentPosition(nodeA, nodeB) {
239182
239049
  function uniqueSort(nodes) {
239183
239050
  nodes = nodes.filter((node, i7, arr) => !arr.includes(node, i7 + 1));
239184
239051
  nodes.sort((a4, b) => {
239185
- const relative23 = compareDocumentPosition(a4, b);
239186
- if (relative23 & DocumentPosition.PRECEDING) {
239052
+ const relative25 = compareDocumentPosition(a4, b);
239053
+ if (relative25 & DocumentPosition.PRECEDING) {
239187
239054
  return -1;
239188
- } else if (relative23 & DocumentPosition.FOLLOWING) {
239055
+ } else if (relative25 & DocumentPosition.FOLLOWING) {
239189
239056
  return 1;
239190
239057
  }
239191
239058
  return 0;
@@ -251044,7 +250911,7 @@ var { root: root2 } = static_exports;
251044
250911
  // ../utils/src/maven-utils.ts
251045
250912
  var import_lodash14 = __toESM(require_lodash(), 1);
251046
250913
  import { existsSync as existsSync29, readdirSync as readdirSync5, statSync as statSync5 } from "fs";
251047
- import { join as join33 } from "path";
250914
+ import { join as join32 } from "path";
251048
250915
 
251049
250916
  // ../utils/src/download-utils.ts
251050
250917
  import { existsSync as existsSync28 } from "fs";
@@ -252415,7 +252282,7 @@ async function onlineScan(dependencyTree, apiKey, timeout) {
252415
252282
  }
252416
252283
 
252417
252284
  // dist/version.js
252418
- var version3 = "15.2.0";
252285
+ var version3 = "15.2.2";
252419
252286
 
252420
252287
  // dist/cli-core.js
252421
252288
  var { mapValues, omit, partition, pickBy: pickBy2 } = import_lodash15.default;
@@ -252592,8 +252459,8 @@ var CliCore = class {
252592
252459
  }
252593
252460
  async main() {
252594
252461
  const tmpDir = await createTmpDirectory("coana-cli-");
252595
- this.coanaLogPath = join34(tmpDir, "coana-log.txt");
252596
- this.coanaSocketPath = join34(tmpDir, "coana.sock");
252462
+ this.coanaLogPath = join33(tmpDir, "coana-log.txt");
252463
+ this.coanaSocketPath = join33(tmpDir, "coana.sock");
252597
252464
  if (this.options.socketMode) {
252598
252465
  logger.enableStreamBuffering();
252599
252466
  }
@@ -252787,7 +252654,7 @@ var CliCore = class {
252787
252654
  if (!isEcosystemToAnalyze) {
252788
252655
  logger.info(`Skipping reachability analysis for ecosystem ${getPurlType(ecosystem)} since it is not included in the list of ecosystems to analyze.`);
252789
252656
  }
252790
- const ecosystemPreinstallDir = preinstallDir ? join34(preinstallDir, ecosystem) : void 0;
252657
+ const ecosystemPreinstallDir = preinstallDir ? join33(preinstallDir, ecosystem) : void 0;
252791
252658
  const { vulnerabilities, diagnostics, timings } = await this.runReachabilityAnalysisForWorkspaces(
252792
252659
  workspaceToAnalysisData,
252793
252660
  ecosystemToWorkspaceToVulnerabilities[ecosystem] ?? {},
@@ -252930,7 +252797,7 @@ var CliCore = class {
252930
252797
  const { reachabilitySupport, traditionalScaSupport, noSupport } = manager.getSubprojectsWithWorkspacePaths();
252931
252798
  await this.dashboardAPI.registerSubprojects([...reachabilitySupport, ...traditionalScaSupport, ...noSupport].map((sp) => ({
252932
252799
  ...sp,
252933
- subprojectPath: relative22(this.rootWorkingDirectory, sp.subprojectPath) || "."
252800
+ subprojectPath: relative24(this.rootWorkingDirectory, sp.subprojectPath) || "."
252934
252801
  })), this.reportId, this.apiKey);
252935
252802
  for (const unsupported of noSupport)
252936
252803
  logger.warn(unsupported.unsupportedMsg);
@@ -252959,7 +252826,7 @@ var CliCore = class {
252959
252826
  await this.spinner.succeed();
252960
252827
  } catch (error) {
252961
252828
  if (this.options.ignoreFailingWorkspaces) {
252962
- const relativeSubprojectPath = relative22(this.rootWorkingDirectory, subprojectAndWsPath.subprojectPath) || ".";
252829
+ const relativeSubprojectPath = relative24(this.rootWorkingDirectory, subprojectAndWsPath.subprojectPath) || ".";
252963
252830
  this.failedSubprojects.push({
252964
252831
  subproject: relativeSubprojectPath,
252965
252832
  error: error.message || "Unknown error"
@@ -253018,7 +252885,7 @@ Subproject: ${subproject}`);
253018
252885
  }
253019
252886
  async updateSpinnerTextOnNewSubproject(subprojectAndWsPath, numberSubprojects, index2) {
253020
252887
  this.spinner.start();
253021
- const relativeSubprojectPath = relative22(this.rootWorkingDirectory, subprojectAndWsPath.subprojectPath) || ".";
252888
+ const relativeSubprojectPath = relative24(this.rootWorkingDirectory, subprojectAndWsPath.subprojectPath) || ".";
253022
252889
  await this.spinner.setText(numberSubprojects > 1 ? `Processing subproject ${relativeSubprojectPath} (${index2 + 1}/${numberSubprojects})${+this.options.concurrency > 1 ? `. May process up to ${+this.options.concurrency - 1} other workspaces in parallel` : ""}` : `Processing ${relativeSubprojectPath}`);
253023
252890
  }
253024
252891
  async initialize() {
@@ -253101,7 +252968,7 @@ Subproject: ${subproject}`);
253101
252968
  return workspaceToAugmentedVulnerabilities[workspacePath] !== void 0;
253102
252969
  }).map((workspacePath) => {
253103
252970
  return {
253104
- subprojectPath: relative22(this.rootWorkingDirectory, subprojectPath) || ".",
252971
+ subprojectPath: relative24(this.rootWorkingDirectory, subprojectPath) || ".",
253105
252972
  workspacePath,
253106
252973
  directDependencies: projectInfo[workspacePath].dataForAnalysis.directDependenciesMap ?? {},
253107
252974
  vulnerabilities: workspaceToAugmentedVulnerabilities[workspacePath],
@@ -253178,7 +253045,7 @@ Subproject: ${subproject}`);
253178
253045
  }
253179
253046
  try {
253180
253047
  const perProjectEcosystems = ["PIP", "RUBYGEMS", "COMPOSER"];
253181
- const effectivePreinstallDir = preinstallDir && perProjectEcosystems.includes(ecosystem) ? join34(preinstallDir, workspacePath.replace(/\//g, "_")) : preinstallDir;
253048
+ const effectivePreinstallDir = preinstallDir && perProjectEcosystems.includes(ecosystem) ? join33(preinstallDir, workspacePath.replace(/\//g, "_")) : preinstallDir;
253182
253049
  const resAndDiagnostics = await this.runReachabilityAnalysis(
253183
253050
  otherModulesCommunicator,
253184
253051
  effectiveSubprojectPath,
@@ -253303,11 +253170,11 @@ Subproject: ${subproject}`);
253303
253170
  for (const [ecosystem, workspaceToAnalysisData] of Object.entries(ecosystemToWorkspaceToAnalysisData)) {
253304
253171
  if (ecosystem === "GO" && this.options.reachContinueOnInstallErrors)
253305
253172
  continue;
253306
- const ecosystemDir = join34(preinstallDir, ecosystem);
253173
+ const ecosystemDir = join33(preinstallDir, ecosystem);
253307
253174
  await mkdir6(ecosystemDir, { recursive: true });
253308
253175
  for (const [workspace, analysisData] of Object.entries(workspaceToAnalysisData)) {
253309
253176
  const perProjectEcosystems = ["PIP", "RUBYGEMS", "COMPOSER"];
253310
- const installDir = perProjectEcosystems.includes(ecosystem) ? join34(ecosystemDir, workspace.replace(/\//g, "_")) : ecosystemDir;
253177
+ const installDir = perProjectEcosystems.includes(ecosystem) ? join33(ecosystemDir, workspace.replace(/\//g, "_")) : ecosystemDir;
253311
253178
  if (installDir !== ecosystemDir) {
253312
253179
  await mkdir6(installDir, { recursive: true });
253313
253180
  }
@@ -253516,7 +253383,7 @@ Subproject: ${subproject}`);
253516
253383
  async sendProgress(type, isStartEvent, subprojectPath, workspacePath) {
253517
253384
  await this.dashboardAPI.registerCLIProgress({
253518
253385
  type,
253519
- ...subprojectPath ? { subprojectPath: relative22(this.rootWorkingDirectory, subprojectPath) || "." } : {},
253386
+ ...subprojectPath ? { subprojectPath: relative24(this.rootWorkingDirectory, subprojectPath) || "." } : {},
253520
253387
  ...workspacePath ? { workspacePath } : {}
253521
253388
  }, isStartEvent, this.reportId, this.apiKey);
253522
253389
  }
@@ -253573,7 +253440,7 @@ Subproject: ${subproject}`);
253573
253440
  dependencyTree: workspaceToPlainDependencyTree[workspacePath],
253574
253441
  ecosystem: workspaceToPlainDependencyTree[workspacePath].ecosystem ?? "NPM",
253575
253442
  workspacePath,
253576
- subprojectPath: relative22(rootWorkingDirectory, subprojectPath) || "."
253443
+ subprojectPath: relative24(rootWorkingDirectory, subprojectPath) || "."
253577
253444
  }));
253578
253445
  if (this.options.socketMode) {
253579
253446
  this.reportDependencyTrees = workspacePaths.map((workspacePath) => ({
@@ -253581,7 +253448,7 @@ Subproject: ${subproject}`);
253581
253448
  dependencyTree: projectInfo[workspacePath].dataForAnalysis.data.dependencyTree,
253582
253449
  ecosystem: projectInfo[workspacePath].dataForAnalysis.data.dependencyTree.ecosystem ?? "NPM",
253583
253450
  workspacePath,
253584
- subprojectPath: relative22(rootWorkingDirectory, subprojectPath) || "."
253451
+ subprojectPath: relative24(rootWorkingDirectory, subprojectPath) || "."
253585
253452
  }));
253586
253453
  }
253587
253454
  if (this.shareWithDashboard)
@@ -253597,7 +253464,7 @@ Subproject: ${subproject}`);
253597
253464
  } catch (e) {
253598
253465
  logger.error(`Scanning for vulnerabilities failed for subproject ${subprojectPath} in workspace ${workspacePath}`);
253599
253466
  if (this.options.ignoreFailingWorkspaces) {
253600
- const relativeSubprojectPath = relative22(this.rootWorkingDirectory, subprojectPath) || ".";
253467
+ const relativeSubprojectPath = relative24(this.rootWorkingDirectory, subprojectPath) || ".";
253601
253468
  this.failedWorkspaces.push({
253602
253469
  subproject: relativeSubprojectPath,
253603
253470
  workspace: workspacePath,
@@ -253616,7 +253483,7 @@ Subproject: ${subproject}`);
253616
253483
  }
253617
253484
  };
253618
253485
  function getRelativeSubprojectPath(subprojectPath, projectDir) {
253619
- return relative22(projectDir, subprojectPath) || ".";
253486
+ return relative24(projectDir, subprojectPath) || ".";
253620
253487
  }
253621
253488
  function getDependencyType(vulnChainDetails, codeAwareScanResults, directDependencies, reachability) {
253622
253489
  if (reachability === "UNREACHABLE" || reachability === "UNKNOWN") {
@@ -253841,8 +253708,8 @@ computeFixesAndUpgradePurlsCmd.name("compute-fixes-and-upgrade-purls").argument(
253841
253708
  }
253842
253709
  options.purlTypes = options.purlTypes?.map((t4) => t4.toLowerCase());
253843
253710
  options.packageManagers = normalizeAndValidatePackageManagers(options.packageManagers);
253844
- const tmpDir = await mkdtemp2(join35(tmpdir5(), "compute-fixes-and-upgrade-purls-"));
253845
- const logFile = join35(tmpDir, "compute-fixes-and-upgrade-purls.log");
253711
+ const tmpDir = await mkdtemp2(join34(tmpdir5(), "compute-fixes-and-upgrade-purls-"));
253712
+ const logFile = join34(tmpDir, "compute-fixes-and-upgrade-purls.log");
253846
253713
  logger.initWinstonLogger(options.debug, logFile);
253847
253714
  try {
253848
253715
  if (options.minimumReleaseAge) {