@coana-tech/cli 14.12.36 → 14.12.38

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
@@ -4287,7 +4287,7 @@ var require_safe_stable_stringify = __commonJS({
4287
4287
  return circularValue;
4288
4288
  }
4289
4289
  let res = "";
4290
- let join30 = ",";
4290
+ let join29 = ",";
4291
4291
  const originalIndentation = indentation;
4292
4292
  if (Array.isArray(value)) {
4293
4293
  if (value.length === 0) {
@@ -4301,7 +4301,7 @@ var require_safe_stable_stringify = __commonJS({
4301
4301
  indentation += spacer;
4302
4302
  res += `
4303
4303
  ${indentation}`;
4304
- join30 = `,
4304
+ join29 = `,
4305
4305
  ${indentation}`;
4306
4306
  }
4307
4307
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -4309,13 +4309,13 @@ ${indentation}`;
4309
4309
  for (; i7 < maximumValuesToStringify - 1; i7++) {
4310
4310
  const tmp2 = stringifyFnReplacer(String(i7), value, stack2, replacer, spacer, indentation);
4311
4311
  res += tmp2 !== void 0 ? tmp2 : "null";
4312
- res += join30;
4312
+ res += join29;
4313
4313
  }
4314
4314
  const tmp = stringifyFnReplacer(String(i7), value, stack2, replacer, spacer, indentation);
4315
4315
  res += tmp !== void 0 ? tmp : "null";
4316
4316
  if (value.length - 1 > maximumBreadth) {
4317
4317
  const removedKeys = value.length - maximumBreadth - 1;
4318
- res += `${join30}"... ${getItemCount(removedKeys)} not stringified"`;
4318
+ res += `${join29}"... ${getItemCount(removedKeys)} not stringified"`;
4319
4319
  }
4320
4320
  if (spacer !== "") {
4321
4321
  res += `
@@ -4336,7 +4336,7 @@ ${originalIndentation}`;
4336
4336
  let separator = "";
4337
4337
  if (spacer !== "") {
4338
4338
  indentation += spacer;
4339
- join30 = `,
4339
+ join29 = `,
4340
4340
  ${indentation}`;
4341
4341
  whitespace2 = " ";
4342
4342
  }
@@ -4350,13 +4350,13 @@ ${indentation}`;
4350
4350
  const tmp = stringifyFnReplacer(key2, value, stack2, replacer, spacer, indentation);
4351
4351
  if (tmp !== void 0) {
4352
4352
  res += `${separator}${strEscape(key2)}:${whitespace2}${tmp}`;
4353
- separator = join30;
4353
+ separator = join29;
4354
4354
  }
4355
4355
  }
4356
4356
  if (keyLength > maximumBreadth) {
4357
4357
  const removedKeys = keyLength - maximumBreadth;
4358
4358
  res += `${separator}"...":${whitespace2}"${getItemCount(removedKeys)} not stringified"`;
4359
- separator = join30;
4359
+ separator = join29;
4360
4360
  }
4361
4361
  if (spacer !== "" && separator.length > 1) {
4362
4362
  res = `
@@ -4397,7 +4397,7 @@ ${originalIndentation}`;
4397
4397
  }
4398
4398
  const originalIndentation = indentation;
4399
4399
  let res = "";
4400
- let join30 = ",";
4400
+ let join29 = ",";
4401
4401
  if (Array.isArray(value)) {
4402
4402
  if (value.length === 0) {
4403
4403
  return "[]";
@@ -4410,7 +4410,7 @@ ${originalIndentation}`;
4410
4410
  indentation += spacer;
4411
4411
  res += `
4412
4412
  ${indentation}`;
4413
- join30 = `,
4413
+ join29 = `,
4414
4414
  ${indentation}`;
4415
4415
  }
4416
4416
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -4418,13 +4418,13 @@ ${indentation}`;
4418
4418
  for (; i7 < maximumValuesToStringify - 1; i7++) {
4419
4419
  const tmp2 = stringifyArrayReplacer(String(i7), value[i7], stack2, replacer, spacer, indentation);
4420
4420
  res += tmp2 !== void 0 ? tmp2 : "null";
4421
- res += join30;
4421
+ res += join29;
4422
4422
  }
4423
4423
  const tmp = stringifyArrayReplacer(String(i7), value[i7], stack2, replacer, spacer, indentation);
4424
4424
  res += tmp !== void 0 ? tmp : "null";
4425
4425
  if (value.length - 1 > maximumBreadth) {
4426
4426
  const removedKeys = value.length - maximumBreadth - 1;
4427
- res += `${join30}"... ${getItemCount(removedKeys)} not stringified"`;
4427
+ res += `${join29}"... ${getItemCount(removedKeys)} not stringified"`;
4428
4428
  }
4429
4429
  if (spacer !== "") {
4430
4430
  res += `
@@ -4437,7 +4437,7 @@ ${originalIndentation}`;
4437
4437
  let whitespace2 = "";
4438
4438
  if (spacer !== "") {
4439
4439
  indentation += spacer;
4440
- join30 = `,
4440
+ join29 = `,
4441
4441
  ${indentation}`;
4442
4442
  whitespace2 = " ";
4443
4443
  }
@@ -4446,7 +4446,7 @@ ${indentation}`;
4446
4446
  const tmp = stringifyArrayReplacer(key2, value[key2], stack2, replacer, spacer, indentation);
4447
4447
  if (tmp !== void 0) {
4448
4448
  res += `${separator}${strEscape(key2)}:${whitespace2}${tmp}`;
4449
- separator = join30;
4449
+ separator = join29;
4450
4450
  }
4451
4451
  }
4452
4452
  if (spacer !== "" && separator.length > 1) {
@@ -4504,20 +4504,20 @@ ${originalIndentation}`;
4504
4504
  indentation += spacer;
4505
4505
  let res2 = `
4506
4506
  ${indentation}`;
4507
- const join31 = `,
4507
+ const join30 = `,
4508
4508
  ${indentation}`;
4509
4509
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
4510
4510
  let i7 = 0;
4511
4511
  for (; i7 < maximumValuesToStringify - 1; i7++) {
4512
4512
  const tmp2 = stringifyIndent(String(i7), value[i7], stack2, spacer, indentation);
4513
4513
  res2 += tmp2 !== void 0 ? tmp2 : "null";
4514
- res2 += join31;
4514
+ res2 += join30;
4515
4515
  }
4516
4516
  const tmp = stringifyIndent(String(i7), value[i7], stack2, spacer, indentation);
4517
4517
  res2 += tmp !== void 0 ? tmp : "null";
4518
4518
  if (value.length - 1 > maximumBreadth) {
4519
4519
  const removedKeys = value.length - maximumBreadth - 1;
4520
- res2 += `${join31}"... ${getItemCount(removedKeys)} not stringified"`;
4520
+ res2 += `${join30}"... ${getItemCount(removedKeys)} not stringified"`;
4521
4521
  }
4522
4522
  res2 += `
4523
4523
  ${originalIndentation}`;
@@ -4533,16 +4533,16 @@ ${originalIndentation}`;
4533
4533
  return '"[Object]"';
4534
4534
  }
4535
4535
  indentation += spacer;
4536
- const join30 = `,
4536
+ const join29 = `,
4537
4537
  ${indentation}`;
4538
4538
  let res = "";
4539
4539
  let separator = "";
4540
4540
  let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
4541
4541
  if (isTypedArrayWithEntries(value)) {
4542
- res += stringifyTypedArray(value, join30, maximumBreadth);
4542
+ res += stringifyTypedArray(value, join29, maximumBreadth);
4543
4543
  keys = keys.slice(value.length);
4544
4544
  maximumPropertiesToStringify -= value.length;
4545
- separator = join30;
4545
+ separator = join29;
4546
4546
  }
4547
4547
  if (deterministic) {
4548
4548
  keys = insertSort(keys);
@@ -4553,13 +4553,13 @@ ${indentation}`;
4553
4553
  const tmp = stringifyIndent(key2, value[key2], stack2, spacer, indentation);
4554
4554
  if (tmp !== void 0) {
4555
4555
  res += `${separator}${strEscape(key2)}: ${tmp}`;
4556
- separator = join30;
4556
+ separator = join29;
4557
4557
  }
4558
4558
  }
4559
4559
  if (keyLength > maximumBreadth) {
4560
4560
  const removedKeys = keyLength - maximumBreadth;
4561
4561
  res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
4562
- separator = join30;
4562
+ separator = join29;
4563
4563
  }
4564
4564
  if (separator !== "") {
4565
4565
  res = `
@@ -6126,7 +6126,7 @@ var require_buffer_list = __commonJS({
6126
6126
  }
6127
6127
  }, {
6128
6128
  key: "join",
6129
- value: function join30(s6) {
6129
+ value: function join29(s6) {
6130
6130
  if (this.length === 0) return "";
6131
6131
  var p3 = this.head;
6132
6132
  var ret = "" + p3.data;
@@ -19073,7 +19073,7 @@ var require_lodash = __commonJS({
19073
19073
  }
19074
19074
  return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
19075
19075
  });
19076
- function join30(array, separator) {
19076
+ function join29(array, separator) {
19077
19077
  return array == null ? "" : nativeJoin.call(array, separator);
19078
19078
  }
19079
19079
  function last2(array) {
@@ -20992,7 +20992,7 @@ var require_lodash = __commonJS({
20992
20992
  lodash16.isUndefined = isUndefined2;
20993
20993
  lodash16.isWeakMap = isWeakMap;
20994
20994
  lodash16.isWeakSet = isWeakSet;
20995
- lodash16.join = join30;
20995
+ lodash16.join = join29;
20996
20996
  lodash16.kebabCase = kebabCase;
20997
20997
  lodash16.last = last2;
20998
20998
  lodash16.lastIndexOf = lastIndexOf;
@@ -29988,7 +29988,7 @@ var require_builder = __commonJS({
29988
29988
  }
29989
29989
  };
29990
29990
  exports2.SeqBuilder = SeqBuilder;
29991
- function join30(first2, second, ...others) {
29991
+ function join29(first2, second, ...others) {
29992
29992
  const seq = new SeqBuilder(first2, second);
29993
29993
  if (!others.length) {
29994
29994
  return seq;
@@ -29997,7 +29997,7 @@ var require_builder = __commonJS({
29997
29997
  return res.join(query);
29998
29998
  }, seq);
29999
29999
  }
30000
- exports2.join = join30;
30000
+ exports2.join = join29;
30001
30001
  var SymBuilder = class extends AbstractBuilder {
30002
30002
  constructor(opts) {
30003
30003
  super();
@@ -190192,7 +190192,7 @@ var {
190192
190192
 
190193
190193
  // dist/index.js
190194
190194
  import { mkdir as mkdir3, readFile as readFile28, writeFile as writeFile11 } from "fs/promises";
190195
- import { dirname as dirname13, join as join29, resolve as resolve31 } from "path";
190195
+ import { dirname as dirname13, join as join28, resolve as resolve31 } from "path";
190196
190196
 
190197
190197
  // ../utils/src/tmp-file.ts
190198
190198
  import { rm, mkdtemp } from "fs/promises";
@@ -208005,22 +208005,36 @@ var NuGetSocketUpgradeManager = class {
208005
208005
  };
208006
208006
 
208007
208007
  // ../fixing-management/src/fixing-management/rust/cargo-socket-upgrade-manager.ts
208008
- import { basename as basename6, dirname as dirname9, join as join13, resolve as resolve19 } from "node:path";
208008
+ import { basename as basename6, dirname as dirname9, resolve as resolve19 } from "node:path";
208009
208009
  var import_toml_eslint_parser2 = __toESM(require_lib10(), 1);
208010
208010
  var import_picomatch3 = __toESM(require_picomatch2(), 1);
208011
208011
  var import_semver3 = __toESM(require_semver2(), 1);
208012
208012
  import assert6 from "node:assert";
208013
208013
  import { readFile as readFile18 } from "node:fs/promises";
208014
- import { existsSync as existsSync12 } from "node:fs";
208015
208014
  var CargoSocketUpgradeManager = class {
208016
208015
  constructor(rootDir) {
208017
208016
  this.rootDir = rootDir;
208018
208017
  }
208019
208018
  cargoTomlMatcher = (0, import_picomatch3.default)("Cargo.toml");
208020
208019
  cargoLockMatcher = (0, import_picomatch3.default)("Cargo.lock");
208021
- async applySocketArtifactUpgrades(_manifestFiles, upgrades, artifacts, rangeStyle) {
208022
- const tomlPatches = await this.collectCargoTomlPatches(upgrades, artifacts, rangeStyle);
208023
- const lockPatches = await this.collectCargoLockPatches(upgrades, artifacts);
208020
+ async applySocketArtifactUpgrades(manifestFiles, upgrades, artifacts, rangeStyle) {
208021
+ const tomlPatches = await asyncFlatMap(upgrades, async (upgrade) => {
208022
+ const artifact = artifacts[upgrade.idx];
208023
+ assert6(artifact.name);
208024
+ assert6(artifact.version);
208025
+ const directManifestFiles = i(artifact.manifestFiles?.map((ref) => ref.file) ?? []);
208026
+ return await asyncFlatMap(
208027
+ directManifestFiles.filter((manifestFile) => this.cargoTomlMatcher(basename6(manifestFile))),
208028
+ async (manifestFile) => this.handleCargoToml(manifestFile, upgrade, artifact, rangeStyle)
208029
+ );
208030
+ });
208031
+ const lockPatches = await asyncFlatMap(
208032
+ manifestFiles.filter((mf) => this.cargoLockMatcher(basename6(mf))),
208033
+ async (lockFile) => await asyncFlatMap(
208034
+ upgrades,
208035
+ async (upgrade) => this.handleCargoLock(lockFile, upgrade, artifacts[upgrade.idx])
208036
+ )
208037
+ );
208024
208038
  const successfulPatches = extractSuccessfulPatches(tomlPatches.concat(lockPatches));
208025
208039
  await applySocketPatchResults("RUST", this.rootDir, successfulPatches);
208026
208040
  await asyncForEach(
@@ -208033,42 +208047,6 @@ var CargoSocketUpgradeManager = class {
208033
208047
  }
208034
208048
  );
208035
208049
  }
208036
- /**
208037
- * Collect patches for Cargo.toml files (direct dependencies only)
208038
- */
208039
- async collectCargoTomlPatches(upgrades, artifacts, rangeStyle) {
208040
- return await asyncFlatMap(upgrades, async (upgrade) => {
208041
- const artifact = artifacts[upgrade.idx];
208042
- assert6(artifact.name);
208043
- assert6(artifact.version);
208044
- const directManifestFiles = i(artifact.manifestFiles?.map((ref) => ref.file) ?? []);
208045
- return await asyncFlatMap(
208046
- directManifestFiles.filter((manifestFile) => this.cargoTomlMatcher(basename6(manifestFile))),
208047
- async (manifestFile) => this.handleCargoToml(manifestFile, upgrade, artifact, rangeStyle)
208048
- );
208049
- });
208050
- }
208051
- /**
208052
- * Collect patches for Cargo.lock files (all dependencies)
208053
- */
208054
- async collectCargoLockPatches(upgrades, artifacts) {
208055
- return asyncFlatMap(upgrades, async (upgrade) => {
208056
- const artifact = artifacts[upgrade.idx];
208057
- assert6(artifact.name);
208058
- assert6(artifact.version);
208059
- const ancestorManifestFiles = i(
208060
- (artifact.manifestFiles?.map((ref) => ref.file) ?? []).concat(
208061
- artifact.toplevelAncestors?.flatMap(
208062
- (ancestorId) => artifacts.find((a5) => a5.id === ancestorId)?.manifestFiles?.map((ref) => ref.file) ?? []
208063
- ) ?? []
208064
- )
208065
- );
208066
- return asyncFlatMap(
208067
- ancestorManifestFiles.filter((manifestFile) => this.cargoTomlMatcher(basename6(manifestFile))).map((tomlFile) => join13(dirname9(tomlFile), "Cargo.lock")).filter((lockFile) => existsSync12(resolve19(this.rootDir, lockFile))),
208068
- async (lockFile) => this.handleCargoLock(lockFile, upgrade, artifact)
208069
- );
208070
- });
208071
- }
208072
208050
  /**
208073
208051
  * Handle Cargo.toml file updates for direct dependencies
208074
208052
  */
@@ -208193,13 +208171,6 @@ var CargoSocketUpgradeManager = class {
208193
208171
  }
208194
208172
  }
208195
208173
  }
208196
- if (patches.length === 0) {
208197
- patches.push({
208198
- success: false,
208199
- upgrades: [upgrade],
208200
- reason: `Could not find ${artifact.name} version ${artifact.version} in lock file ${lockFile}`
208201
- });
208202
- }
208203
208174
  return patches;
208204
208175
  }
208205
208176
  /**
@@ -208329,7 +208300,7 @@ async function applySocketUpgrades(ecosystem, rootDir, manifestFiles, upgrades,
208329
208300
 
208330
208301
  // dist/cli-apply-fix.js
208331
208302
  var import_lodash12 = __toESM(require_lodash(), 1);
208332
- import { existsSync as existsSync17 } from "fs";
208303
+ import { existsSync as existsSync16 } from "fs";
208333
208304
 
208334
208305
  // ../other-modules-communicator/src/other-modules-communicator.ts
208335
208306
  import { execFileSync } from "child_process";
@@ -208340,15 +208311,15 @@ import { resolve as resolve21 } from "path";
208340
208311
 
208341
208312
  // ../utils/dist/constants.js
208342
208313
  var import_lodash6 = __toESM(require_lodash(), 1);
208343
- import { dirname as dirname10, join as join15 } from "node:path";
208314
+ import { dirname as dirname10, join as join14 } from "node:path";
208344
208315
  import { fileURLToPath as fileURLToPath3 } from "node:url";
208345
208316
 
208346
208317
  // ../utils/dist/file-utils.js
208347
208318
  var import_lodash5 = __toESM(require_lodash(), 1);
208348
208319
  var import_micromatch = __toESM(require_micromatch(), 1);
208349
- import { existsSync as existsSync13 } from "fs";
208320
+ import { existsSync as existsSync12 } from "fs";
208350
208321
  import { access as access2, cp, readdir as readdir3, stat as stat2 } from "fs/promises";
208351
- import { basename as basename7, join as join14, relative as relative11, resolve as resolve20 } from "path";
208322
+ import { basename as basename7, join as join13, relative as relative11, resolve as resolve20 } from "path";
208352
208323
  var { uniq } = import_lodash5.default;
208353
208324
  var { isMatch } = import_micromatch.default;
208354
208325
  function* parents(dir) {
@@ -208377,10 +208348,10 @@ var COANA_ROOT = once2(() => {
208377
208348
  return coanaRoot;
208378
208349
  });
208379
208350
  var REPOS_PATH = once2(() => {
208380
- return process.env.REPOS_PATH ?? join15(COANA_ROOT(), "repos");
208351
+ return process.env.REPOS_PATH ?? join14(COANA_ROOT(), "repos");
208381
208352
  });
208382
208353
  var COANA_REPOS_PATH = once2(() => {
208383
- return process.env.COANA_REPOS_PATH ?? join15(REPOS_PATH(), "coana-tech");
208354
+ return process.env.COANA_REPOS_PATH ?? join14(REPOS_PATH(), "coana-tech");
208384
208355
  });
208385
208356
 
208386
208357
  // ../docker-management/src/constants.ts
@@ -208394,32 +208365,32 @@ var getImageTag = () => {
208394
208365
  };
208395
208366
 
208396
208367
  // ../docker-management/src/docker-spec.ts
208397
- import { join as join16 } from "path";
208368
+ import { join as join15 } from "path";
208398
208369
  var builderSpecs = [
208399
208370
  {
208400
208371
  name: "maven-builder",
208401
- file: join16("builders", "maven", "Dockerfile"),
208372
+ file: join15("builders", "maven", "Dockerfile"),
208402
208373
  isBuilder: true
208403
208374
  },
208404
208375
  {
208405
208376
  name: "python-builder",
208406
- file: join16("builders", "python", "Dockerfile"),
208377
+ file: join15("builders", "python", "Dockerfile"),
208407
208378
  isBuilder: true
208408
208379
  },
208409
208380
  {
208410
208381
  name: "go-builder",
208411
- file: join16("builders", "go", "Dockerfile"),
208382
+ file: join15("builders", "go", "Dockerfile"),
208412
208383
  isBuilder: true
208413
208384
  }
208414
208385
  ];
208415
208386
  var packageManagerDockerSpecs = [
208416
208387
  {
208417
208388
  name: "npm-package-managers",
208418
- file: join16("package-management", "npm", "Dockerfile")
208389
+ file: join15("package-management", "npm", "Dockerfile")
208419
208390
  },
208420
208391
  {
208421
208392
  name: "maven-package-managers",
208422
- file: join16("package-management", "maven", "Dockerfile"),
208393
+ file: join15("package-management", "maven", "Dockerfile"),
208423
208394
  variants: {
208424
208395
  jdk8: {
208425
208396
  JDK_URL_AMD64: "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u442-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u442b06.tar.gz",
@@ -208444,57 +208415,57 @@ var packageManagerDockerSpecs = [
208444
208415
  },
208445
208416
  {
208446
208417
  name: "pip-package-managers",
208447
- file: join16("package-management", "pip", "Dockerfile"),
208418
+ file: join15("package-management", "pip", "Dockerfile"),
208448
208419
  from: {
208449
208420
  name: "python-builder"
208450
208421
  }
208451
208422
  },
208452
208423
  {
208453
208424
  name: "go-package-manager",
208454
- file: join16("package-management", "go", "Dockerfile"),
208425
+ file: join15("package-management", "go", "Dockerfile"),
208455
208426
  from: {
208456
208427
  name: "go-builder"
208457
208428
  }
208458
208429
  },
208459
208430
  {
208460
208431
  name: "nuget-package-manager",
208461
- file: join16("package-management", "nuget", "Dockerfile")
208432
+ file: join15("package-management", "nuget", "Dockerfile")
208462
208433
  },
208463
208434
  {
208464
208435
  name: "cargo-package-manager",
208465
- file: join16("package-management", "cargo", "Dockerfile")
208436
+ file: join15("package-management", "cargo", "Dockerfile")
208466
208437
  }
208467
208438
  ];
208468
208439
  var reachabilityAnalyzerDockerSpecs = [
208469
208440
  {
208470
208441
  name: "jelly-analyzer",
208471
- file: join16("reachability-analyzers", "jelly", "Dockerfile")
208442
+ file: join15("reachability-analyzers", "jelly", "Dockerfile")
208472
208443
  },
208473
208444
  {
208474
208445
  name: "alucard-analyzer",
208475
- file: join16("reachability-analyzers", "alucard", "Dockerfile")
208446
+ file: join15("reachability-analyzers", "alucard", "Dockerfile")
208476
208447
  },
208477
208448
  {
208478
208449
  name: "mambalade-analyzer",
208479
- file: join16("reachability-analyzers", "mambalade", "Dockerfile"),
208450
+ file: join15("reachability-analyzers", "mambalade", "Dockerfile"),
208480
208451
  from: {
208481
208452
  name: "python-builder"
208482
208453
  }
208483
208454
  },
208484
208455
  {
208485
208456
  name: "goana-analyzer",
208486
- file: join16("reachability-analyzers", "goana", "Dockerfile"),
208457
+ file: join15("reachability-analyzers", "goana", "Dockerfile"),
208487
208458
  from: {
208488
208459
  name: "go-builder"
208489
208460
  }
208490
208461
  },
208491
208462
  {
208492
208463
  name: "cocoa-analyzer",
208493
- file: join16("reachability-analyzers", "cocoa", "Dockerfile")
208464
+ file: join15("reachability-analyzers", "cocoa", "Dockerfile")
208494
208465
  },
208495
208466
  {
208496
208467
  name: "rustica-analyzer",
208497
- file: join16("reachability-analyzers", "rustica", "Dockerfile")
208468
+ file: join15("reachability-analyzers", "rustica", "Dockerfile")
208498
208469
  }
208499
208470
  ];
208500
208471
  function getAllPackageManagerSpecs() {
@@ -209091,15 +209062,15 @@ async function detectVariantMaven(projectDir) {
209091
209062
  }
209092
209063
 
209093
209064
  // ../docker-management/src/maven/gradle-version-detector.ts
209094
- import { existsSync as existsSync14 } from "fs";
209095
- import { join as join17 } from "path";
209065
+ import { existsSync as existsSync13 } from "fs";
209066
+ import { join as join16 } from "path";
209096
209067
  import { readFile as readFile20 } from "fs/promises";
209097
209068
  async function detectVariantGradle(projectDir) {
209098
209069
  return sanitizeJvmVariant("GRADLE", projectDir, await detect(projectDir));
209099
209070
  }
209100
209071
  async function detect(projectDir) {
209101
- const gradleWrapperPropertiesPath = join17(projectDir, "gradle", "wrapper", "gradle-wrapper.properties");
209102
- const gradleWrapperProperties = existsSync14(gradleWrapperPropertiesPath) ? (await readFile20(gradleWrapperPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
209072
+ const gradleWrapperPropertiesPath = join16(projectDir, "gradle", "wrapper", "gradle-wrapper.properties");
209073
+ const gradleWrapperProperties = existsSync13(gradleWrapperPropertiesPath) ? (await readFile20(gradleWrapperPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
209103
209074
  if (!gradleWrapperProperties) return void 0;
209104
209075
  const distributionUrlRegex = /.*gradle-(\d+(\.\d+(\.\d+)?)?)/;
209105
209076
  for (const prop2 of gradleWrapperProperties) {
@@ -209113,15 +209084,15 @@ async function detect(projectDir) {
209113
209084
  }
209114
209085
 
209115
209086
  // ../docker-management/src/maven/sbt-version-detector.ts
209116
- import { existsSync as existsSync15 } from "fs";
209117
- import { join as join18 } from "path";
209087
+ import { existsSync as existsSync14 } from "fs";
209088
+ import { join as join17 } from "path";
209118
209089
  import { readFile as readFile21 } from "fs/promises";
209119
209090
  async function detectVariantSbt(projectDir) {
209120
209091
  return sanitizeJvmVariant("SBT", projectDir, await detect2(projectDir));
209121
209092
  }
209122
209093
  async function detect2(projectDir) {
209123
- const sbtBuildPropertiesPath = join18(projectDir, "project", "build.properties");
209124
- const sbtBuildProperties = existsSync15(sbtBuildPropertiesPath) ? (await readFile21(sbtBuildPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
209094
+ const sbtBuildPropertiesPath = join17(projectDir, "project", "build.properties");
209095
+ const sbtBuildProperties = existsSync14(sbtBuildPropertiesPath) ? (await readFile21(sbtBuildPropertiesPath, "utf-8")).split("\n").map((line) => line.trim()).filter((line) => !line.startsWith("#")).filter((line) => line) : void 0;
209125
209096
  if (!sbtBuildProperties) return void 0;
209126
209097
  for (const prop2 of sbtBuildProperties) {
209127
209098
  const [key, value] = prop2.split("=");
@@ -209237,14 +209208,14 @@ var import_lodash11 = __toESM(require_lodash(), 1);
209237
209208
  import { rmSync } from "fs";
209238
209209
  import { mkdir, readFile as readFile22, writeFile as writeFile8 } from "fs/promises";
209239
209210
  import { platform } from "os";
209240
- import { join as join21, posix as posix2, relative as relative13, sep as sep3 } from "path";
209211
+ import { join as join20, posix as posix2, relative as relative13, sep as sep3 } from "path";
209241
209212
 
209242
209213
  // ../utils/src/file-utils.ts
209243
209214
  var import_lodash8 = __toESM(require_lodash(), 1);
209244
209215
  var import_micromatch2 = __toESM(require_micromatch(), 1);
209245
- import { existsSync as existsSync16 } from "fs";
209216
+ import { existsSync as existsSync15 } from "fs";
209246
209217
  import { access as access3, cp as cp2, readdir as readdir4, stat as stat3 } from "fs/promises";
209247
- import { basename as basename8, join as join19, relative as relative12, resolve as resolve22 } from "path";
209218
+ import { basename as basename8, join as join18, relative as relative12, resolve as resolve22 } from "path";
209248
209219
  var { uniq: uniq2 } = import_lodash8.default;
209249
209220
  var { isMatch: isMatch2 } = import_micromatch2.default;
209250
209221
  function* parents2(dir) {
@@ -209261,8 +209232,8 @@ function findParent2(dir, predicate, wholePath) {
209261
209232
  }
209262
209233
  async function getFilesRelative(dir, excludeDirs) {
209263
209234
  async function helper(subDir, arrayOfFiles) {
209264
- for (const item of await readdir4(join19(dir, subDir), { withFileTypes: true })) {
209265
- const itemPath = join19(subDir, item.name);
209235
+ for (const item of await readdir4(join18(dir, subDir), { withFileTypes: true })) {
209236
+ const itemPath = join18(subDir, item.name);
209266
209237
  if (item.isDirectory()) {
209267
209238
  if (!excludeDirs?.includes(item.name)) await helper(itemPath, arrayOfFiles);
209268
209239
  } else if (item.isFile()) {
@@ -209492,7 +209463,7 @@ import { resolve as resolve23 } from "path";
209492
209463
 
209493
209464
  // ../utils/src/constants.ts
209494
209465
  var import_lodash9 = __toESM(require_lodash(), 1);
209495
- import { dirname as dirname11, join as join20 } from "node:path";
209466
+ import { dirname as dirname11, join as join19 } from "node:path";
209496
209467
  import { fileURLToPath as fileURLToPath4 } from "node:url";
209497
209468
  var { once: once4 } = import_lodash9.default;
209498
209469
  var fileName2 = fileURLToPath4(import.meta.url);
@@ -209505,10 +209476,10 @@ var COANA_ROOT2 = once4(() => {
209505
209476
  return coanaRoot;
209506
209477
  });
209507
209478
  var REPOS_PATH2 = once4(() => {
209508
- return process.env.REPOS_PATH ?? join20(COANA_ROOT2(), "repos");
209479
+ return process.env.REPOS_PATH ?? join19(COANA_ROOT2(), "repos");
209509
209480
  });
209510
209481
  var COANA_REPOS_PATH2 = once4(() => {
209511
- return process.env.COANA_REPOS_PATH ?? join20(REPOS_PATH2(), "coana-tech");
209482
+ return process.env.COANA_REPOS_PATH ?? join19(REPOS_PATH2(), "coana-tech");
209512
209483
  });
209513
209484
  var REQUIREMENTS_FILES_SEARCH_DEPTH = 2;
209514
209485
 
@@ -209597,7 +209568,7 @@ var OtherModulesCommunicator = class {
209597
209568
  return "Running reachability analysis on package registry package";
209598
209569
  }
209599
209570
  }
209600
- return `${_cmdStr()}: (${ecosystem}) ${relative13(this.rootWorkingDir, join21(subprojectPath, workspacePath)) || "."}`;
209571
+ return `${_cmdStr()}: (${ecosystem}) ${relative13(this.rootWorkingDir, join20(subprojectPath, workspacePath)) || "."}`;
209601
209572
  }
209602
209573
  getProjectPath(subprojectPath) {
209603
209574
  return this.options.runWithoutDocker ? subprojectPath : posix2.resolve("/project", relative13(this.rootWorkingDir, subprojectPath).replaceAll(sep3, posix2.sep));
@@ -209646,7 +209617,7 @@ var OtherModulesCommunicator = class {
209646
209617
  async runPackageManagerCommandWithOutput(commandName, packageManagerName, subprojectPath, args2 = [], extraDockerArgs, env) {
209647
209618
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
209648
209619
  const outputFileName = `${v4_default()}-${commandName}-output.json`;
209649
- const outputFilePathThisProcess = join21(tmpDir, outputFileName);
209620
+ const outputFilePathThisProcess = join20(tmpDir, outputFileName);
209650
209621
  const outputFilePathOtherProcess = this.options.runWithoutDocker ? outputFilePathThisProcess : posix2.join(TMP_DIR_IN_DOCKER, outputFileName);
209651
209622
  await this.runPackageManagerCommand(
209652
209623
  commandName,
@@ -209711,7 +209682,7 @@ var OtherModulesCommunicator = class {
209711
209682
  async runReachabilityAnalyzerCommandWithOutput(commandName, ecosystem, subprojectPath, workspacePath, args2, env) {
209712
209683
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
209713
209684
  const outputFileName = `${v4_default()}-${commandName}-output.json`;
209714
- const outputFilePathThisProcess = join21(tmpDir, outputFileName);
209685
+ const outputFilePathThisProcess = join20(tmpDir, outputFileName);
209715
209686
  const outputFilePathOtherProcess = this.options.runWithoutDocker ? outputFilePathThisProcess : posix2.join(TMP_DIR_IN_DOCKER, outputFileName);
209716
209687
  await this.runReachabilityAnalyzerCommand(
209717
209688
  commandName,
@@ -209748,7 +209719,7 @@ var OtherModulesCommunicator = class {
209748
209719
  if (providedOptions.type === "providee") {
209749
209720
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
209750
209721
  const providerFileName = "provider.json";
209751
- const providerFileThisProcess = join21(tmpDir, providerFileName);
209722
+ const providerFileThisProcess = join20(tmpDir, providerFileName);
209752
209723
  const providerFileOtherProcess = this.options.runWithoutDocker ? providerFileThisProcess : posix2.join(TMP_DIR_IN_DOCKER, providerFileName);
209753
209724
  await writeFile8(providerFileThisProcess, JSON.stringify(providedOptions.provider));
209754
209725
  return ["--provider", providerFileOtherProcess];
@@ -209792,7 +209763,7 @@ var OtherModulesCommunicator = class {
209792
209763
  async runReachabilityAnalysis(subprojectPath, workspacePath, workspaceData, ecosystem, vulnerabilities, reachabilityAnalysisOptions, otherAnalysisOptions) {
209793
209764
  const tmpDir = await this.getTmpDirForSubproject(subprojectPath);
209794
209765
  const inputFileName = `${v4_default()}-runReachabilityAnalysis-input.json`;
209795
- const inputFileThisProcess = join21(tmpDir, inputFileName);
209766
+ const inputFileThisProcess = join20(tmpDir, inputFileName);
209796
209767
  const inputFileOtherProcess = this.options.runWithoutDocker ? inputFileThisProcess : posix2.join(TMP_DIR_IN_DOCKER, inputFileName);
209797
209768
  await writeFile8(
209798
209769
  inputFileThisProcess,
@@ -209834,7 +209805,7 @@ var setUpGoModuleCache = once6(async () => {
209834
209805
  execFileSync("chmod", ["--recursive", "+rw", tmpDir]);
209835
209806
  rmSync(tmpDir, { recursive: true, force: true });
209836
209807
  });
209837
- const [upper, work] = [join21(tmpDir, "upper"), join21(tmpDir, "work")];
209808
+ const [upper, work] = [join20(tmpDir, "upper"), join20(tmpDir, "work")];
209838
209809
  for (const dir of [upper, work]) await mkdir(dir);
209839
209810
  const o7 = await execNeverFail(
209840
209811
  cmdt`docker volume create --driver local --opt type=overlay
@@ -210427,7 +210398,7 @@ async function verifyFixes(fixes, otherModulesCommunicator, rootPath) {
210427
210398
  if (pathsForEachFixIdData.length !== new Set(pathsForEachFixIdData).size) {
210428
210399
  throw new Error("Multiple fix IDs found for the same subproject, workspace and ecosystem");
210429
210400
  }
210430
- const subprojectsNotFound = uniq3(fixes.filter(({ vulnerabilityInstance: v }) => !existsSync17(resolve24(rootPath, v.subprojectPath))).map(({ vulnerabilityInstance: v }) => `${v.subprojectPath}:${v.ecosystem}`));
210401
+ const subprojectsNotFound = uniq3(fixes.filter(({ vulnerabilityInstance: v }) => !existsSync16(resolve24(rootPath, v.subprojectPath))).map(({ vulnerabilityInstance: v }) => `${v.subprojectPath}:${v.ecosystem}`));
210431
210402
  if (subprojectsNotFound.length > 0) {
210432
210403
  throw new Error(`Cannot find the following subprojects: ${subprojectsNotFound.join(", ")}`);
210433
210404
  }
@@ -211230,15 +211201,15 @@ import { relative as relative15, resolve as resolve28 } from "path";
211230
211201
  // ../project-management/src/project-management/ecosystem-management/ecosystem-manager.ts
211231
211202
  var import_micromatch3 = __toESM(require_micromatch2(), 1);
211232
211203
  import { readdir as readdir6 } from "fs/promises";
211233
- import { join as join24, relative as relative14, resolve as resolve27 } from "path";
211204
+ import { join as join23, relative as relative14, resolve as resolve27 } from "path";
211234
211205
 
211235
211206
  // ../project-management/src/project-management/ecosystem-management/ecosystem-specs.ts
211236
- import { existsSync as existsSync19 } from "fs";
211207
+ import { existsSync as existsSync18 } from "fs";
211237
211208
  import { readdir as readdir5, readFile as readFile25 } from "fs/promises";
211238
- import { join as join23, sep as sep4 } from "path";
211209
+ import { join as join22, sep as sep4 } from "path";
211239
211210
 
211240
211211
  // ../utils/src/pip-utils.ts
211241
- import { existsSync as existsSync18 } from "fs";
211212
+ import { existsSync as existsSync17 } from "fs";
211242
211213
  import { readFile as readFile24 } from "fs/promises";
211243
211214
  import { resolve as resolve26 } from "path";
211244
211215
  import util4 from "util";
@@ -211249,7 +211220,7 @@ var import_semver5 = __toESM(require_semver2(), 1);
211249
211220
  import { execFileSync as execFileSync2 } from "child_process";
211250
211221
  import { constants as constants2 } from "fs";
211251
211222
  import { access as access4, readFile as readFile23 } from "fs/promises";
211252
- import { join as join22, resolve as resolve25 } from "path";
211223
+ import { join as join21, resolve as resolve25 } from "path";
211253
211224
  import util3 from "util";
211254
211225
  var { once: once7 } = import_lodash13.default;
211255
211226
  var systemPython = once7(() => {
@@ -211302,7 +211273,7 @@ var specs = {
211302
211273
  [
211303
211274
  /^(pyproject.toml|setup.py|requirements.*\.txt)/,
211304
211275
  async (projectDir) => {
211305
- const isPythonProject = await exists(join23(projectDir, "pyproject.toml")) || await exists(join23(projectDir, "setup.py")) && await isSetupPySetuptools(join23(projectDir, "setup.py"));
211276
+ const isPythonProject = await exists(join22(projectDir, "pyproject.toml")) || await exists(join22(projectDir, "setup.py")) && await isSetupPySetuptools(join22(projectDir, "setup.py"));
211306
211277
  if (isPythonProject) {
211307
211278
  properPythonProjects.push(projectDir + sep4);
211308
211279
  return "PIP_REQUIREMENTS";
@@ -211325,7 +211296,7 @@ var specs = {
211325
211296
  [
211326
211297
  "uv.lock",
211327
211298
  async (projectDir) => {
211328
- if (await exists(join23(projectDir, "pyproject.toml"))) {
211299
+ if (await exists(join22(projectDir, "pyproject.toml"))) {
211329
211300
  logger.warn("uv is not supported yet, using plain pyproject.toml as a fallback");
211330
211301
  return "PIP_REQUIREMENTS";
211331
211302
  } else logger.error("uv.lock found without pyproject.toml");
@@ -211346,8 +211317,8 @@ function getEcosystemSpecs(ecosystems) {
211346
211317
  }
211347
211318
  function packageManagerIfPackageJSONExistsAndValid(packageManager) {
211348
211319
  return async (projectDir) => {
211349
- if (!existsSync19(join23(projectDir, "package.json"))) return void 0;
211350
- const packageJSONPath = join23(projectDir, "package.json");
211320
+ if (!existsSync18(join22(projectDir, "package.json"))) return void 0;
211321
+ const packageJSONPath = join22(projectDir, "package.json");
211351
211322
  try {
211352
211323
  JSON.parse(await readFile25(packageJSONPath, "utf-8"));
211353
211324
  return packageManager;
@@ -211404,7 +211375,7 @@ var EcosystemManager = class _EcosystemManager {
211404
211375
  const resolvedProjectDir = resolve27(mainProjectDir, relativeProjectDir);
211405
211376
  if (config3.includeDirs.length > 0)
211406
211377
  workspacePaths = workspacePaths.filter(
211407
- (workspacePath) => isMatch3(relative14(mainProjectDir, join24(resolvedProjectDir, workspacePath)), config3.includeDirs)
211378
+ (workspacePath) => isMatch3(relative14(mainProjectDir, join23(resolvedProjectDir, workspacePath)), config3.includeDirs)
211408
211379
  );
211409
211380
  workspacePaths.filter((workspacePath) => workspacePath !== ".").forEach((workspacePath) => projectDirsAlreadyCovered.push(resolve27(resolvedProjectDir, workspacePath)));
211410
211381
  if (workspacePaths.length > 0)
@@ -211432,7 +211403,7 @@ var EcosystemManager = class _EcosystemManager {
211432
211403
  }
211433
211404
  }
211434
211405
  for (const dir of directoriesToTraverse) {
211435
- await recHelper(join24(projectDir, dir), true);
211406
+ await recHelper(join23(projectDir, dir), true);
211436
211407
  }
211437
211408
  }
211438
211409
  async function getPackageManagerName(projectDir, foundProjectFiles, foundLockFiles) {
@@ -211461,7 +211432,7 @@ var EcosystemManager = class _EcosystemManager {
211461
211432
  const filesAndDirectories = await readdir6(projectDir, { withFileTypes: true });
211462
211433
  for (const dirent of filesAndDirectories) {
211463
211434
  const fileOrDirectory = dirent.name;
211464
- const fullPath = join24(projectDir, fileOrDirectory);
211435
+ const fullPath = join23(projectDir, fileOrDirectory);
211465
211436
  if (dirent.isDirectory()) {
211466
211437
  if (shouldIgnoreDir(fileOrDirectory) || shouldIgnoreDueToExcludeDirsOrChangedFiles(config3, fullPath))
211467
211438
  continue;
@@ -211488,7 +211459,7 @@ var EcosystemManager = class _EcosystemManager {
211488
211459
  packageManagerName,
211489
211460
  subprojectPath,
211490
211461
  workspacePaths: workspacePaths.filter(
211491
- (workspacePath) => !shouldIgnoreDueToExcludeDirsOrChangedFiles(this.config, join24(subprojectPath, workspacePath))
211462
+ (workspacePath) => !shouldIgnoreDueToExcludeDirsOrChangedFiles(this.config, join23(subprojectPath, workspacePath))
211492
211463
  )
211493
211464
  }));
211494
211465
  }
@@ -211715,7 +211686,7 @@ var kleur_default = $;
211715
211686
  // dist/cli-core.js
211716
211687
  var import_lodash15 = __toESM(require_lodash(), 1);
211717
211688
  import os from "os";
211718
- import { join as join27, relative as relative16, resolve as resolve30 } from "path";
211689
+ import { join as join26, relative as relative16, resolve as resolve30 } from "path";
211719
211690
 
211720
211691
  // ../utils/src/dashboard-api/shared-api.ts
211721
211692
  var DashboardAPI = class {
@@ -212034,16 +212005,16 @@ function isVulnChainWithParentsMap(v) {
212034
212005
  var DEFAULT_REPORT_FILENAME_BASE = "coana-report";
212035
212006
 
212036
212007
  // dist/internal/exclude-dirs-from-configuration-files.js
212037
- import { existsSync as existsSync20 } from "fs";
212008
+ import { existsSync as existsSync19 } from "fs";
212038
212009
  import { readFile as readFile26 } from "fs/promises";
212039
212010
  import { basename as basename9, resolve as resolve29 } from "path";
212040
212011
  var import_yaml2 = __toESM(require_dist11(), 1);
212041
212012
  async function inferExcludeDirsFromConfigurationFiles(rootWorkingDir) {
212042
212013
  const socketYmlConfigFile = resolve29(rootWorkingDir, "socket.yml");
212043
- if (existsSync20(socketYmlConfigFile))
212014
+ if (existsSync19(socketYmlConfigFile))
212044
212015
  return inferExcludeDirsFromSocketConfig(socketYmlConfigFile);
212045
212016
  const socketYamlConfigFile = resolve29(rootWorkingDir, "socket.yaml");
212046
- if (existsSync20(socketYamlConfigFile))
212017
+ if (existsSync19(socketYamlConfigFile))
212047
212018
  return inferExcludeDirsFromSocketConfig(socketYamlConfigFile);
212048
212019
  return void 0;
212049
212020
  }
@@ -212165,7 +212136,7 @@ function transformToVulnChainNode(dependencyTree) {
212165
212136
  // dist/internal/socket-mode-helpers-socket-dependency-trees.js
212166
212137
  var import_packageurl_js = __toESM(require_packageurl_js(), 1);
212167
212138
  var import_picomatch4 = __toESM(require_picomatch2(), 1);
212168
- import { basename as basename10, dirname as dirname12, join as join25, sep as sep5 } from "path";
212139
+ import { basename as basename10, dirname as dirname12, join as join24, sep as sep5 } from "path";
212169
212140
  var REQUIREMENTS_FILES_SEARCH_DEPTH2 = 3;
212170
212141
  function inferWorkspaceFromManifestPath(ecosystem, manifestPath, properPythonProjects) {
212171
212142
  switch (ecosystem) {
@@ -212285,7 +212256,7 @@ async function fetchArtifactsFromSocket(rootWorkingDirectory, manifestsTarHash,
212285
212256
  for (const file of allFiles) {
212286
212257
  const base = basename10(file);
212287
212258
  const workspaceDir = dirname12(file) || ".";
212288
- if (base === "pyproject.toml" || base === "setup.py" && await isSetupPySetuptools(join25(rootWorkingDirectory, file))) {
212259
+ if (base === "pyproject.toml" || base === "setup.py" && await isSetupPySetuptools(join24(rootWorkingDirectory, file))) {
212289
212260
  if (!properPythonProjects.includes(workspaceDir)) {
212290
212261
  properPythonProjects.push(workspaceDir);
212291
212262
  }
@@ -212328,18 +212299,26 @@ async function fetchArtifactsFromSocket(rootWorkingDirectory, manifestsTarHash,
212328
212299
  break;
212329
212300
  }
212330
212301
  }
212331
- let manifestAndWorkspace = manifestFiles.map((manifestFile) => [
212332
- manifestFile,
212333
- inferWorkspaceFromManifestPath(ecosystem, manifestFile, properPythonProjects)
212334
- ]).filter(([, workspace]) => workspace !== void 0);
212335
- if (manifestAndWorkspace.length === 0) {
212336
- manifestAndWorkspace = manifestFiles.map((manifestFile) => [manifestFile, inferProjectFromManifestPath(ecosystem, manifestFile)]).filter(([, workspace]) => workspace !== void 0);
212302
+ const workspaceToManifestFiles = {};
212303
+ manifestFiles.forEach((manifestFile) => {
212304
+ const workspace = inferWorkspaceFromManifestPath(ecosystem, manifestFile, properPythonProjects);
212305
+ if (!workspace)
212306
+ return;
212307
+ (workspaceToManifestFiles[workspace] ??= []).push(manifestFile);
212308
+ });
212309
+ if (Object.keys(workspaceToManifestFiles).length === 0) {
212310
+ manifestFiles.forEach((manifestFile) => {
212311
+ const workspace = inferProjectFromManifestPath(ecosystem, manifestFile);
212312
+ if (!workspace)
212313
+ return;
212314
+ (workspaceToManifestFiles[workspace] ??= []).push(manifestFile);
212315
+ });
212337
212316
  }
212338
- if (manifestAndWorkspace.length === 0 && artifact.vulnerabilities && artifact.vulnerabilities.length > 0) {
212317
+ if (Object.keys(workspaceToManifestFiles).length === 0 && artifact.vulnerabilities && artifact.vulnerabilities.length > 0) {
212339
212318
  const purl = new import_packageurl_js.PackageURL(artifact.type, artifact.namespace, artifact.name, artifact.version, artifact.qualifiers).toString();
212340
212319
  purlsFailedToFindWorkspace.add(purl);
212341
212320
  }
212342
- for (const [manifestFile, workspace] of manifestAndWorkspace) {
212321
+ for (const [workspace, manifestFiles2] of Object.entries(workspaceToManifestFiles)) {
212343
212322
  if (!ecosystemToWorkspaceToAnalysisData[ecosystem]) {
212344
212323
  ecosystemToWorkspaceToAnalysisData[ecosystem] = {};
212345
212324
  }
@@ -212348,21 +212327,18 @@ async function fetchArtifactsFromSocket(rootWorkingDirectory, manifestsTarHash,
212348
212327
  type: "socket",
212349
212328
  data: {
212350
212329
  type: ecosystem,
212351
- manifestFiles: [],
212330
+ manifestFiles: manifestFiles2,
212352
212331
  artifacts: []
212353
212332
  }
212354
212333
  };
212355
212334
  }
212356
212335
  const workspaceData = ecosystemToWorkspaceToAnalysisData[ecosystem][workspace];
212357
212336
  if (workspaceData.type === "socket") {
212358
- if (!workspaceData.data.manifestFiles.includes(manifestFile)) {
212359
- workspaceData.data.manifestFiles.push(manifestFile);
212360
- }
212361
212337
  workspaceData.data.artifacts.push(artifact);
212362
212338
  }
212363
212339
  }
212364
212340
  if (artifact.vulnerabilities && artifact.vulnerabilities.length > 0) {
212365
- for (const workspace of i5(manifestAndWorkspace.map(([, workspace2]) => workspace2))) {
212341
+ for (const workspace of Object.keys(workspaceToManifestFiles)) {
212366
212342
  for (const vuln of artifact.vulnerabilities) {
212367
212343
  const vulnerability = {
212368
212344
  url: vuln.ghsaId,
@@ -226140,8 +226116,8 @@ var { root: root2 } = static_exports;
226140
226116
 
226141
226117
  // ../utils/src/maven-utils.ts
226142
226118
  var import_lodash14 = __toESM(require_lodash(), 1);
226143
- import { existsSync as existsSync21, readdirSync as readdirSync4, statSync as statSync3 } from "fs";
226144
- import { join as join26 } from "path";
226119
+ import { existsSync as existsSync20, readdirSync as readdirSync4, statSync as statSync3 } from "fs";
226120
+ import { join as join25 } from "path";
226145
226121
  var { memoize: memoize3 } = import_lodash14.default;
226146
226122
  var memoizedParseShellArgs = memoize3(parseShellArgs);
226147
226123
  var MAVEN_PUBLIC_REPOSITORIES = [
@@ -227512,7 +227488,7 @@ async function onlineScan(dependencyTree, apiKey, timeout) {
227512
227488
  }
227513
227489
 
227514
227490
  // dist/version.js
227515
- var version2 = "14.12.36";
227491
+ var version2 = "14.12.38";
227516
227492
 
227517
227493
  // dist/cli-core.js
227518
227494
  var { mapValues, omit, partition, pick } = import_lodash15.default;
@@ -227617,7 +227593,7 @@ var CliCore = class {
227617
227593
  }
227618
227594
  }
227619
227595
  async main() {
227620
- this.coanaLogPath = join27(await createTmpDirectory("coana-cli-"), "coana-log.txt");
227596
+ this.coanaLogPath = join26(await createTmpDirectory("coana-cli-"), "coana-log.txt");
227621
227597
  logger.initWinstonLogger(this.options.debug, this.coanaLogPath);
227622
227598
  logger.silent = this.options.silent;
227623
227599
  try {
@@ -228199,7 +228175,7 @@ async function getGitDataToMetadataIfAvailable(rootWorkingDirectory) {
228199
228175
  }
228200
228176
 
228201
228177
  // dist/cli-upgrade-purl.js
228202
- import { join as join28, relative as relative17 } from "node:path";
228178
+ import { join as join27, relative as relative17 } from "node:path";
228203
228179
  var import_packageurl_js2 = __toESM(require_packageurl_js(), 1);
228204
228180
  var ECOSYSTEMS_WITH_SOCKET_UPGRADES = ["NPM", "MAVEN", "NUGET", "GO", "RUST"];
228205
228181
  async function upgradePurl(path2, upgrades, options, logFile, cliFixRunId) {
@@ -228293,7 +228269,7 @@ ${upgrades.map((upgrade) => ` ${upgrade.purl} -> ${upgrade.upgradeVersion}`).joi
228293
228269
  const subprojectPromiseQueue = new PromiseQueue(Number(options.concurrency));
228294
228270
  supportedSubprojects.forEach((subproject) => {
228295
228271
  subprojectPromiseQueue.enqueueTask(async () => {
228296
- const workspacePathsMatchingGlob = subproject.workspacePaths.filter((wsPath) => minimatch(join28(subproject.subprojectPath, wsPath), options.globPattern ?? "**"));
228272
+ const workspacePathsMatchingGlob = subproject.workspacePaths.filter((wsPath) => minimatch(join27(subproject.subprojectPath, wsPath), options.globPattern ?? "**"));
228297
228273
  if (workspacePathsMatchingGlob.length === 0)
228298
228274
  return;
228299
228275
  logger.info(`Found workspaces for subproject ${subproject.subprojectPath}${options.globPattern ? `matching glob ${options.globPattern}` : ""}:
@@ -228322,7 +228298,7 @@ ${workspacePathsMatchingGlob.map((wsPath) => ` ${wsPath}`).join("\n")}`);
228322
228298
  });
228323
228299
  if (vulnerabilityFixes.length === 0)
228324
228300
  return;
228325
- logger.info(`Found ${vulnerabilityFixes.length} ${vulnerabilityFixes.length === 1 ? "dependency" : "dependencies"} matching upgrade specs for ${join28(subproject.subprojectPath, wsPath)}`);
228301
+ logger.info(`Found ${vulnerabilityFixes.length} ${vulnerabilityFixes.length === 1 ? "dependency" : "dependencies"} matching upgrade specs for ${join27(subproject.subprojectPath, wsPath)}`);
228326
228302
  workspaceToFixes[wsPath] = [
228327
228303
  {
228328
228304
  fixId: "dummy",
@@ -228343,7 +228319,7 @@ ${workspacePathsMatchingGlob.map((wsPath) => ` ${wsPath}`).join("\n")}`);
228343
228319
  }
228344
228320
  }
228345
228321
  var signalFixApplied = (_fixId, subprojectPath, workspacePath, vulnerabilityFixes) => {
228346
- logger.info(`Successfully upgraded purls for: ${join28(subprojectPath, workspacePath)}`);
228322
+ logger.info(`Successfully upgraded purls for: ${join27(subprojectPath, workspacePath)}`);
228347
228323
  logger.info(`Upgraded:
228348
228324
  ${vulnerabilityFixes.map((fix) => ` ${fix.dependencyName} from ${fix.currentVersion} to ${fix.fixedVersion}`).join("\n")}`);
228349
228325
  };
@@ -228540,7 +228516,7 @@ var upgradePurls = new Command();
228540
228516
  upgradePurls.name("upgrade-purls").argument("<path>", "File system path to the folder containing the project").argument("<specs...>", "Package upgrade specifications in the format 'purl -> newVersion' (e.g., 'pkg:maven/io.micrometer/micrometer-core@1.10.9 -> 1.15.0')").option("-g, --glob <pattern>", "Glob pattern to filter workspaces by absolute file path").option("-c, --concurrency <concurrency>", "Set the maximum number of concurrent reachability analysis runs. It's recommended to choose a concurrency level that ensures that each analysis run has at least the --memory-limit amount of memory available.", "1").option("-d, --debug", "Enable debug logging", false).option("-s, --silent", "Silence all debug/warning output", false).option("--silent-spinner", "Silence spinner", "CI" in process.env || !process.stdin.isTTY).option("--range-style <style>", 'Range style to use for the output. Currently only "pin" is supported and it only works for npm.').addOption(new Option("--run-without-docker", "Run package managers without using docker").default(process.env.RUN_WITHOUT_DOCKER === "true").hideHelp()).addOption(new Option("--socket-mode", "Use Socket for computing dependency trees").default(process.env.SOCKET_MODE === "true").hideHelp()).version(version2).action(async (path2, specs2, options) => {
228541
228517
  process.env.DOCKER_IMAGE_TAG ??= version2;
228542
228518
  await withTmpDirectory("upgrade-purls", async (tmpDir) => {
228543
- const logFile = join29(tmpDir, "upgrade-purls.log");
228519
+ const logFile = join28(tmpDir, "upgrade-purls.log");
228544
228520
  logger.initWinstonLogger(options.debug, logFile);
228545
228521
  const upgradeSpecs = specs2.map((spec) => {
228546
228522
  const [purl, upgradeVersion] = spec.split("->").map((s6) => s6.trim());
@@ -228567,7 +228543,7 @@ computeFixesAndUpgradePurlsCmd.name("compute-fixes-and-upgrade-purls").argument(
228567
228543
  throw new Error('Range style must be "pin"');
228568
228544
  }
228569
228545
  await withTmpDirectory("compute-fixes-and-upgrade-purls", async (tmpDir) => {
228570
- const logFile = join29(tmpDir, "compute-fixes-and-upgrade-purls.log");
228546
+ const logFile = join28(tmpDir, "compute-fixes-and-upgrade-purls.log");
228571
228547
  logger.initWinstonLogger(options.debug, logFile);
228572
228548
  const output = await computeFixesAndUpgradePurls(path2, options, logFile);
228573
228549
  if (options.outputFile) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coana-tech/cli",
3
- "version": "14.12.36",
3
+ "version": "14.12.38",
4
4
  "description": "Coana CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -74735,8 +74735,6 @@ var DotnetCodeAwareVulnerabilityScanner = class _DotnetCodeAwareVulnerabilitySca
74735
74735
  if (!vulnerablePathsForClass)
74736
74736
  continue;
74737
74737
  classStacks.push(...vulnerablePathsForClass.map((vulnPath) => {
74738
- if (vulnPath.length < 2)
74739
- throw new Error("The path should always have length at least two.");
74740
74738
  return vulnPath.map(({ fullyQualifiedName, confidence, packageId }) => ({
74741
74739
  package: appPackageIds.has(packageId) ? "<app>" : prettyPrintNugetDependency(parsePackageUrlToNugetDependency(packageId)),
74742
74740
  class: fullyQualifiedName,
@@ -88595,8 +88593,6 @@ var JavaCodeAwareVulnerabilityScanner = class _JavaCodeAwareVulnerabilityScanner
88595
88593
  if (!vulnerablePathsForClass)
88596
88594
  continue;
88597
88595
  classStacks.push(...vulnerablePathsForClass.map((vulnPath) => {
88598
- if (vulnPath.length < 2)
88599
- throw new Error("The path should always have length at least two.");
88600
88596
  return vulnPath.map(({ fullyQualifiedName, confidence, packageId }) => ({
88601
88597
  package: appPackageIds.has(packageId) ? "<app>" : prettyPrintMavenDependency(parsePackageUrlToMavenDependency(packageId)),
88602
88598
  class: fullyQualifiedName,
@@ -88630,25 +88626,24 @@ function inferWorkspaceFromManifestPath(manifestFile) {
88630
88626
  }
88631
88627
  async function convertDependencyChain2(dependencyChain, tmpDir) {
88632
88628
  async function downloadMavenArtifacts(groupId, artifactId, version3) {
88633
- const artifactPaths = [];
88634
88629
  const packageDir = getPathToPackage(tmpDir, groupId, artifactId, version3);
88635
88630
  await mkdir2(packageDir, { recursive: true });
88636
88631
  const repositories = await findRepositoriesForMavenPackageAndVersion(groupId, artifactId, version3);
88637
- if (!repositories?.length)
88638
- throw Error("No repository found for package");
88639
- for (const repository of repositories) {
88632
+ for (const repository of repositories ?? []) {
88640
88633
  const packageUrl = getUrlForPackage2(repository, groupId, artifactId, version3);
88641
88634
  const artifacts = await findArtifactsForPackageInRemoteRepository(repository, groupId, artifactId, version3);
88642
88635
  if (!artifacts)
88643
88636
  continue;
88644
- await asyncForEach(artifacts, async (artifact) => {
88637
+ const artifactPaths = await asyncMap(artifacts, async (artifact) => {
88645
88638
  const artifactUrl = `${packageUrl.endsWith("/") ? packageUrl.slice(0, -1) : packageUrl}/${artifact}`;
88646
88639
  const artifactFile = join14(packageDir, artifact);
88647
- await downloadFile(artifactUrl, artifactFile);
88648
- artifactPaths.push(artifactFile);
88640
+ const success = await downloadFile(artifactUrl, artifactFile);
88641
+ return success ? artifactFile : void 0;
88649
88642
  }, 4);
88643
+ if (artifactPaths.every((f2) => f2 !== void 0))
88644
+ return artifactPaths;
88650
88645
  }
88651
- return artifactPaths;
88646
+ return void 0;
88652
88647
  }
88653
88648
  const mavenDependencyChain = await asyncMap(dependencyChain, async (dep) => {
88654
88649
  const [groupId, artifactId] = dep.packageName.split(":");
@@ -88664,8 +88659,10 @@ async function convertSocketArtifacts2(artifacts, tmpDir) {
88664
88659
  const artifactFile = getPathToArtifact(tmpDir, groupId, artifactId, type, classifier, version3);
88665
88660
  await mkdir2(dirname4(artifactFile), { recursive: true });
88666
88661
  const repositories = await findRepositoriesForMavenPackageAndVersion(groupId, artifactId, version3);
88667
- if (!repositories?.length)
88668
- throw Error("No repository found for package");
88662
+ if (!repositories?.length) {
88663
+ logger.warn(`Failed to find repository for maven package ${[groupId, artifactId, type, classifier, version3].filter(Boolean).join(":")}`);
88664
+ return void 0;
88665
+ }
88669
88666
  for (const repository of repositories) {
88670
88667
  const artifactUrl = getUrlForArtifact(repository, groupId, artifactId, type, classifier, version3);
88671
88668
  if (!artifactUrl)
@@ -88674,6 +88671,7 @@ async function convertSocketArtifacts2(artifacts, tmpDir) {
88674
88671
  if (succeeded)
88675
88672
  return [artifactFile];
88676
88673
  }
88674
+ logger.warn(`Failed to download maven package ${[groupId, artifactId, type, classifier, version3].filter(Boolean).join(":")}, repositories tried: ${repositories}`);
88677
88675
  return void 0;
88678
88676
  }
88679
88677
  const deps = {};
@@ -96279,8 +96277,6 @@ var RustCodeAwareVulnerabilityScanner = class _RustCodeAwareVulnerabilityScanner
96279
96277
  if (!vulnerablePathsForClass)
96280
96278
  continue;
96281
96279
  classStacks.push(...vulnerablePathsForClass.map((vulnPath) => {
96282
- if (vulnPath.length < 2)
96283
- throw new Error("The path should always have length at least two.");
96284
96280
  return vulnPath.map(({ fullyQualifiedName, confidence, packageId }) => ({
96285
96281
  package: appPackageIds.has(packageId) ? "<app>" : prettyPrintRustDependency(parsePackageUrlToRustDependency(packageId)),
96286
96282
  class: fullyQualifiedName,
@@ -96328,14 +96324,19 @@ async function convertSocketArtifacts3(artifacts, tmpDir) {
96328
96324
  const packageFile = join19(tmpDir, `${packageName.toLocaleLowerCase()}-${version3.toLocaleLowerCase()}.crate`);
96329
96325
  const success = await downloadFile(packageUrl, packageFile);
96330
96326
  if (!success) {
96331
- logger.error(`Could not download crate ${packageName}@${version3} from crates.io`);
96332
- throw Error("Failed to download crate");
96327
+ logger.warn(`Could not download crate ${packageName}@${version3} from crates.io`);
96328
+ return void 0;
96329
+ }
96330
+ try {
96331
+ await execAndLogOnFailure(["tar", "-xzf", packageFile], tmpDir);
96332
+ const packageDir = join19(tmpDir, `${packageName.toLocaleLowerCase()}-${version3.toLocaleLowerCase()}`);
96333
+ const cargoTomlPath = join19(packageDir, "Cargo.toml");
96334
+ const depCrateInfo = await getCrateInfo(cargoTomlPath);
96335
+ return [depCrateInfo.lib];
96336
+ } catch (e) {
96337
+ logger.warn(`Error extracting crate ${packageName}@${version3}: ${e.message ?? "Unknown error"}`);
96338
+ return void 0;
96333
96339
  }
96334
- await execAndLogOnFailure(["tar", "-xzf", packageFile], tmpDir);
96335
- const packageDir = join19(tmpDir, `${packageName.toLocaleLowerCase()}-${version3.toLocaleLowerCase()}`);
96336
- const cargoTomlPath = join19(packageDir, "Cargo.toml");
96337
- const depCrateInfo = await getCrateInfo(cargoTomlPath);
96338
- return [depCrateInfo.lib];
96339
96340
  }
96340
96341
  const deps = {};
96341
96342
  await asyncForEach(artifacts, async (artifact) => {