cognium-dev 4.9.9 → 4.9.11

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.
Files changed (2) hide show
  1. package/dist/cli.js +309 -309
  2. package/package.json +3 -3
package/dist/cli.js CHANGED
@@ -5,7 +5,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
5
5
  // src/cli.ts
6
6
  import { readFileSync, existsSync, writeFileSync } from "fs";
7
7
  import { stat as stat2, readdir as readdir2 } from "fs/promises";
8
- import { join as join2, dirname as dirname3, extname, resolve as resolve2, relative as relative4, basename } from "path";
8
+ import { join as join2, dirname as dirname2, extname, resolve, relative as relative3, basename } from "path";
9
9
  import { createRequire as createRequire2 } from "module";
10
10
 
11
11
  // ../../node_modules/web-tree-sitter/web-tree-sitter.js
@@ -3232,7 +3232,7 @@ var Query = class {
3232
3232
  }
3233
3233
  };
3234
3234
 
3235
- // ../circle-ir/dist/core/parser.js
3235
+ // node_modules/circle-ir/dist/core/parser.js
3236
3236
  var nodeModules = null;
3237
3237
  var moduleDir = null;
3238
3238
  async function getNodeModules() {
@@ -3472,7 +3472,7 @@ async function getDefaultLanguagePath(language) {
3472
3472
  }
3473
3473
  return `wasm/tree-sitter-${language}.wasm`;
3474
3474
  }
3475
- // ../circle-ir/dist/core/extractors/meta.js
3475
+ // node_modules/circle-ir/dist/core/extractors/meta.js
3476
3476
  function extractMeta(code, tree, filePath, language) {
3477
3477
  const loc = countLinesOfCode(code);
3478
3478
  const hash = computeHash(code);
@@ -3554,7 +3554,7 @@ function extractPackage(tree, language) {
3554
3554
  }
3555
3555
  return null;
3556
3556
  }
3557
- // ../circle-ir/dist/core/extractors/types.js
3557
+ // node_modules/circle-ir/dist/core/extractors/types.js
3558
3558
  function detectLanguage(tree) {
3559
3559
  const root = tree.rootNode;
3560
3560
  const jsNodeTypes = new Set([
@@ -5222,7 +5222,7 @@ function findChildByType(node, type) {
5222
5222
  }
5223
5223
  return null;
5224
5224
  }
5225
- // ../circle-ir/dist/core/extractors/calls.js
5225
+ // node_modules/circle-ir/dist/core/extractors/calls.js
5226
5226
  function detectLanguageFromTree(tree, cache) {
5227
5227
  const rustStructs = getNodesFromCache(tree.rootNode, "struct_item", cache);
5228
5228
  const rustImpls = getNodesFromCache(tree.rootNode, "impl_item", cache);
@@ -5338,6 +5338,27 @@ var CSHARP_COMMAND_EXECUTE_METHODS = new Set([
5338
5338
  "ExecuteReaderAsync",
5339
5339
  "ExecuteNonQueryAsync"
5340
5340
  ]);
5341
+ var CSHARP_RECEIVER_URL_METHODS = new Set([
5342
+ "GetAsync",
5343
+ "PostAsync",
5344
+ "PutAsync",
5345
+ "PatchAsync",
5346
+ "DeleteAsync",
5347
+ "HeadAsync",
5348
+ "GetStringAsync",
5349
+ "GetByteArrayAsync",
5350
+ "GetStreamAsync",
5351
+ "GetJsonAsync"
5352
+ ]);
5353
+ var CSHARP_HEADER_RECEIVER_RE = /(^|\.)Headers$/;
5354
+ function csharpBareName(node) {
5355
+ if (node.type === "generic_name") {
5356
+ const id = node.childForFieldName("name") ?? node.namedChild(0);
5357
+ if (id)
5358
+ return getNodeText(id);
5359
+ }
5360
+ return getNodeText(node);
5361
+ }
5341
5362
  function extractCSharpCalls(tree, cache) {
5342
5363
  const calls = [];
5343
5364
  const typeMap = buildCSharpReceiverTypeMap(tree, cache);
@@ -5349,16 +5370,22 @@ function extractCSharpCalls(tree, cache) {
5349
5370
  if (fn?.type === "member_access_expression") {
5350
5371
  const nameNode = fn.childForFieldName("name");
5351
5372
  const exprNode = fn.childForFieldName("expression");
5352
- methodName = nameNode ? getNodeText(nameNode) : "unknown";
5373
+ methodName = nameNode ? csharpBareName(nameNode) : "unknown";
5353
5374
  receiver = exprNode ? getNodeText(exprNode) : null;
5354
5375
  } else if (fn) {
5355
- methodName = getNodeText(fn);
5376
+ methodName = csharpBareName(fn);
5356
5377
  }
5357
5378
  const argsNode = inv.childForFieldName("arguments");
5358
5379
  let args2 = argsNode ? extractCSharpArguments(argsNode) : [];
5359
5380
  if (receiver && CSHARP_COMMAND_EXECUTE_METHODS.has(methodName)) {
5360
5381
  args2 = [{ position: 0, expression: receiver, variable: receiver, literal: null, value: null }, ...args2];
5361
5382
  }
5383
+ if (methodName === "Add" && receiver && CSHARP_HEADER_RECEIVER_RE.test(receiver)) {
5384
+ methodName = "AddHeader";
5385
+ }
5386
+ if (receiver && args2.length === 0 && CSHARP_RECEIVER_URL_METHODS.has(methodName)) {
5387
+ args2 = [{ position: 0, expression: receiver, variable: receiver, literal: null, value: null }];
5388
+ }
5362
5389
  calls.push({
5363
5390
  method_name: methodName,
5364
5391
  receiver,
@@ -5374,7 +5401,7 @@ function extractCSharpCalls(tree, cache) {
5374
5401
  const typeNode = creation.childForFieldName("type");
5375
5402
  const argsNode = creation.childForFieldName("arguments");
5376
5403
  calls.push({
5377
- method_name: typeNode ? getNodeText(typeNode) : "unknown",
5404
+ method_name: typeNode ? csharpBareName(typeNode) : "unknown",
5378
5405
  receiver: null,
5379
5406
  receiver_type: null,
5380
5407
  receiver_type_fqn: null,
@@ -5387,6 +5414,41 @@ function extractCSharpCalls(tree, cache) {
5387
5414
  const assignments = getNodesFromCache(tree.rootNode, "assignment_expression", cache);
5388
5415
  for (const asn of assignments) {
5389
5416
  const left = asn.childForFieldName("left");
5417
+ if (left?.type === "element_access_expression") {
5418
+ const target = left.childForFieldName("expression");
5419
+ const right2 = asn.childForFieldName("right");
5420
+ if (!target || !right2)
5421
+ continue;
5422
+ if (!CSHARP_HEADER_RECEIVER_RE.test(getNodeText(target)))
5423
+ continue;
5424
+ const subscript = left.childForFieldName("subscript") ?? left.namedChild(1);
5425
+ const rhsText2 = getNodeText(right2);
5426
+ calls.push({
5427
+ method_name: "AddHeader",
5428
+ receiver: getNodeText(target),
5429
+ receiver_type: null,
5430
+ receiver_type_fqn: null,
5431
+ arguments: [
5432
+ {
5433
+ position: 0,
5434
+ expression: subscript ? getNodeText(subscript) : "",
5435
+ variable: null,
5436
+ literal: subscript ? getNodeText(subscript) : null,
5437
+ value: null
5438
+ },
5439
+ {
5440
+ position: 1,
5441
+ expression: rhsText2,
5442
+ variable: right2.type === "identifier" ? rhsText2 : null,
5443
+ literal: right2.type === "string_literal" ? rhsText2 : null,
5444
+ value: null
5445
+ }
5446
+ ],
5447
+ location: { line: asn.startPosition.row + 1, column: asn.startPosition.column },
5448
+ in_method: findEnclosingMethod(asn)
5449
+ });
5450
+ continue;
5451
+ }
5390
5452
  if (left?.type !== "member_access_expression")
5391
5453
  continue;
5392
5454
  const nameNode = left.childForFieldName("name");
@@ -7274,7 +7336,7 @@ function extractGoTypeLastSegment(typeNode) {
7274
7336
  }
7275
7337
  return null;
7276
7338
  }
7277
- // ../circle-ir/dist/core/extractors/imports.js
7339
+ // node_modules/circle-ir/dist/core/extractors/imports.js
7278
7340
  function detectLanguage2(tree) {
7279
7341
  const root = tree.rootNode;
7280
7342
  const jsNodeTypes = new Set([
@@ -7961,7 +8023,7 @@ function findGoChildByType(node, type) {
7961
8023
  }
7962
8024
  return null;
7963
8025
  }
7964
- // ../circle-ir/dist/core/extractors/exports.js
8026
+ // node_modules/circle-ir/dist/core/extractors/exports.js
7965
8027
  function extractExports(types) {
7966
8028
  const exports = [];
7967
8029
  for (const type of types) {
@@ -8014,7 +8076,7 @@ function getVisibilityFromModifiers(modifiers) {
8014
8076
  }
8015
8077
  return "package";
8016
8078
  }
8017
- // ../circle-ir/dist/core/extractors/cfg.js
8079
+ // node_modules/circle-ir/dist/core/extractors/cfg.js
8018
8080
  function detectLanguage3(tree) {
8019
8081
  const root = tree.rootNode;
8020
8082
  const jsNodeTypes = new Set([
@@ -8663,7 +8725,7 @@ function isGoStatement(node) {
8663
8725
  ]);
8664
8726
  return goStatementTypes.has(node.type);
8665
8727
  }
8666
- // ../circle-ir/dist/core/extractors/dfg.js
8728
+ // node_modules/circle-ir/dist/core/extractors/dfg.js
8667
8729
  function detectLanguage4(tree) {
8668
8730
  const root = tree.rootNode;
8669
8731
  const jsNodeTypes = new Set([
@@ -10184,7 +10246,7 @@ function extractGoAddressableVarName(node) {
10184
10246
  }
10185
10247
  return null;
10186
10248
  }
10187
- // ../circle-ir/dist/core/extractors/runtime-registrations.js
10249
+ // node_modules/circle-ir/dist/core/extractors/runtime-registrations.js
10188
10250
  var HTTP_VERB_METHODS = new Set([
10189
10251
  "get",
10190
10252
  "post",
@@ -10932,7 +10994,7 @@ function parseDistributedSliceAttribute(attrItem) {
10932
10994
  }
10933
10995
  };
10934
10996
  }
10935
- // ../circle-ir/dist/analysis/config-loader.js
10997
+ // node_modules/circle-ir/dist/analysis/config-loader.js
10936
10998
  var DEFAULT_SOURCES = [
10937
10999
  { method: "getParameter", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
10938
11000
  { method: "getParameterValues", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
@@ -12474,6 +12536,17 @@ var DEFAULT_SINKS = [
12474
12536
  { method: "ExecuteSqlRawAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12475
12537
  { method: "FromSqlRaw", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12476
12538
  { method: "FromSqlRawAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12539
+ { method: "Query", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12540
+ { method: "QueryAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12541
+ { method: "QueryFirst", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12542
+ { method: "QueryFirstAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12543
+ { method: "QueryFirstOrDefault", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12544
+ { method: "QueryFirstOrDefaultAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12545
+ { method: "QuerySingle", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12546
+ { method: "QuerySingleOrDefault", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12547
+ { method: "QueryMultiple", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12548
+ { method: "Execute", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12549
+ { method: "ExecuteAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12477
12550
  { method: "CommandText", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12478
12551
  { method: "Filter", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
12479
12552
  { method: "ExecuteScalar", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
@@ -12515,12 +12588,16 @@ var DEFAULT_SINKS = [
12515
12588
  { method: "DeleteAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12516
12589
  { method: "GetStringAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12517
12590
  { method: "GetByteArrayAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12591
+ { method: "GetJsonAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12592
+ { method: "PatchAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12593
+ { method: "HeadAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12518
12594
  { method: "GetStreamAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12519
12595
  { method: "SendAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12520
12596
  { method: "DownloadString", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12521
12597
  { method: "DownloadData", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12522
12598
  { method: "DownloadFile", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [1], languages: ["csharp"] },
12523
12599
  { method: "Create", class: "WebRequest", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12600
+ { method: "RestClient", class: "constructor", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
12524
12601
  { method: "EvaluateAsync", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12525
12602
  { method: "RunAsync", class: "CSharpScript", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
12526
12603
  { method: "Load", class: "Assembly", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
@@ -12538,6 +12615,7 @@ var DEFAULT_SINKS = [
12538
12615
  { method: "Write", class: "Response", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
12539
12616
  { method: "HtmlString", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
12540
12617
  { method: "MarkupString", class: "constructor", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
12618
+ { method: "Content", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
12541
12619
  { method: "Format", class: "String", type: "format_string", cwe: "CWE-134", severity: "medium", arg_positions: [0], languages: ["csharp"] },
12542
12620
  { method: "DirectorySearcher", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
12543
12621
  { method: "DirectoryEntry", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
@@ -12546,12 +12624,18 @@ var DEFAULT_SINKS = [
12546
12624
  { method: "AddHeader", type: "crlf", cwe: "CWE-113", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12547
12625
  { method: "AppendHeader", type: "crlf", cwe: "CWE-113", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12548
12626
  { method: "Parse", class: "BsonDocument", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0], languages: ["csharp"] },
12627
+ { method: "BsonJavaScript", class: "constructor", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0], languages: ["csharp"] },
12549
12628
  { method: "LogInformation", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12550
12629
  { method: "LogWarning", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12551
12630
  { method: "LogError", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12552
12631
  { method: "LogDebug", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12553
12632
  { method: "LogCritical", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12554
12633
  { method: "LogTrace", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
12634
+ { method: "IsMatch", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12635
+ { method: "Match", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12636
+ { method: "Matches", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12637
+ { method: "Replace", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
12638
+ { method: "Regex", class: "constructor", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [0], languages: ["csharp"] },
12555
12639
  { method: "Log", class: "ILogger", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [1], languages: ["csharp"] },
12556
12640
  { method: "SelectSingleNode", type: "xpath_injection", cwe: "CWE-643", severity: "high", arg_positions: [0], languages: ["csharp"] },
12557
12641
  { method: "SelectNodes", type: "xpath_injection", cwe: "CWE-643", severity: "high", arg_positions: [0], languages: ["csharp"] },
@@ -12691,6 +12775,8 @@ var DEFAULT_SANITIZERS = [
12691
12775
  { method: "encodeToString", removes: ["sql_injection", "command_injection", "xss", "path_traversal", "code_injection"] },
12692
12776
  { method: "encodeHexString", removes: ["sql_injection", "command_injection", "xss", "path_traversal", "code_injection"] },
12693
12777
  { method: "encodeForURL", removes: ["xss", "ssrf", "open_redirect"] },
12778
+ { method: "IsLocalUrl", removes: ["open_redirect"] },
12779
+ { method: "LocalRedirect", removes: ["open_redirect"] },
12694
12780
  { method: "encodeURL", removes: ["xss", "ssrf", "open_redirect"] },
12695
12781
  { method: "urlEncode", removes: ["xss", "ssrf", "open_redirect"] },
12696
12782
  { method: "escapeUrl", removes: ["xss", "ssrf", "open_redirect"] },
@@ -13011,7 +13097,7 @@ var DEFAULT_HEADER_RULES = [
13011
13097
  note: "Fires when the value is not a string literal (likely reflected from request)"
13012
13098
  }
13013
13099
  ];
13014
- // ../circle-ir/dist/analysis/arg-type-resolver.js
13100
+ // node_modules/circle-ir/dist/analysis/arg-type-resolver.js
13015
13101
  function findEnclosingType(callInMethod, types) {
13016
13102
  if (!callInMethod)
13017
13103
  return null;
@@ -13089,7 +13175,7 @@ function isArgvContainerType(rawType) {
13089
13175
  return /^(?:List|ArrayList|LinkedList|Collection|Iterable|Deque|Queue)\s*<\s*(?:String|CharSequence|java\.lang\.String)\b/.test(s);
13090
13176
  }
13091
13177
 
13092
- // ../circle-ir/dist/analysis/taint-matcher.js
13178
+ // node_modules/circle-ir/dist/analysis/taint-matcher.js
13093
13179
  var PYTHON_TAINTED_PATTERNS = [
13094
13180
  { pattern: /\brequest\.args\b/, sourceType: "http_param" },
13095
13181
  { pattern: /\brequest\.form\b/, sourceType: "http_body" },
@@ -15094,7 +15180,7 @@ function formatSanitizerMethod(call) {
15094
15180
  return `${call.method_name}()`;
15095
15181
  }
15096
15182
 
15097
- // ../circle-ir/dist/analysis/unresolved.js
15183
+ // node_modules/circle-ir/dist/analysis/unresolved.js
15098
15184
  function detectUnresolved(calls, types, dfg) {
15099
15185
  const unresolved = [];
15100
15186
  unresolved.push(...detectVirtualDispatch(calls));
@@ -15258,7 +15344,7 @@ function formatCallCode(call) {
15258
15344
  }
15259
15345
  return `${call.method_name}(${args2})`;
15260
15346
  }
15261
- // ../circle-ir/dist/analysis/non-executable-lines.js
15347
+ // node_modules/circle-ir/dist/analysis/non-executable-lines.js
15262
15348
  function isNonExecutableSourceLine(sourceCode, line, language) {
15263
15349
  if (!sourceCode || line < 1)
15264
15350
  return false;
@@ -15318,7 +15404,7 @@ function isNonExecutablePython(trimmed) {
15318
15404
  return false;
15319
15405
  }
15320
15406
 
15321
- // ../circle-ir/dist/analysis/sanitizer-index.js
15407
+ // node_modules/circle-ir/dist/analysis/sanitizer-index.js
15322
15408
  var SANITIZER_SET_CACHE = new WeakMap;
15323
15409
  function getSanitizesSet(san) {
15324
15410
  let s = SANITIZER_SET_CACHE.get(san);
@@ -15332,7 +15418,7 @@ function sanitizerCoversSink(san, sinkType) {
15332
15418
  return getSanitizesSet(san).has(sinkType);
15333
15419
  }
15334
15420
 
15335
- // ../circle-ir/dist/analysis/dfg-walk.js
15421
+ // node_modules/circle-ir/dist/analysis/dfg-walk.js
15336
15422
  var walkBackwardDefsMemo = new WeakMap;
15337
15423
  function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
15338
15424
  const maxHops = options.maxHops ?? 32;
@@ -15385,15 +15471,15 @@ function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
15385
15471
  return result;
15386
15472
  }
15387
15473
 
15388
- // ../circle-ir/dist/analysis/findings.js
15474
+ // node_modules/circle-ir/dist/analysis/findings.js
15389
15475
  function canSourceReachSink(sourceType, sinkType) {
15390
15476
  const sourceToSinkMapping = {
15391
- http_param: ["sql_injection", "command_injection", "path_traversal", "xss", "xpath_injection", "ldap_injection", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15477
+ http_param: ["sql_injection", "command_injection", "path_traversal", "xss", "xpath_injection", "ldap_injection", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "xxe", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15392
15478
  http_body: ["sql_injection", "command_injection", "deserialization", "xxe", "xss", "code_injection", "mybatis_mapper_call", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15393
15479
  http_header: ["sql_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15394
15480
  http_cookie: ["sql_injection", "xss", "mybatis_mapper_call", "code_injection", "crlf", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15395
15481
  http_path: ["path_traversal", "sql_injection", "ssrf", "mybatis_mapper_call", "open_redirect", "trust_boundary", "xss", "log_injection", "format_string", "prompt_injection"],
15396
- http_query: ["sql_injection", "command_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15482
+ http_query: ["sql_injection", "command_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "xxe", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
15397
15483
  io_input: ["command_injection", "path_traversal", "deserialization", "xxe", "code_injection", "xss", "ssrf", "log_injection", "format_string", "prompt_injection"],
15398
15484
  env_input: ["command_injection", "path_traversal"],
15399
15485
  db_input: ["xss", "sql_injection", "log_injection"],
@@ -15416,7 +15502,7 @@ function sourceSemanticsAllowed(source, sinkType) {
15416
15502
  return true;
15417
15503
  }
15418
15504
 
15419
- // ../circle-ir/dist/analysis/findings-instrumentation.js
15505
+ // node_modules/circle-ir/dist/analysis/findings-instrumentation.js
15420
15506
  var instrumentEnabled = false;
15421
15507
  function setFindingsInstrumentation(enabled) {
15422
15508
  instrumentEnabled = enabled;
@@ -15479,7 +15565,7 @@ function emitFindingsInstrumentation(filePath, findings, taint) {
15479
15565
  };
15480
15566
  console.error(`[findings-summary] ${JSON.stringify(summary)}`);
15481
15567
  }
15482
- // ../circle-ir/dist/graph/code-graph.js
15568
+ // node_modules/circle-ir/dist/graph/code-graph.js
15483
15569
  class CodeGraph {
15484
15570
  ir;
15485
15571
  constructor(ir) {
@@ -15689,7 +15775,7 @@ class CodeGraph {
15689
15775
  return result;
15690
15776
  }
15691
15777
  }
15692
- // ../circle-ir/dist/resolution/type-hierarchy.js
15778
+ // node_modules/circle-ir/dist/resolution/type-hierarchy.js
15693
15779
  class TypeHierarchyResolver {
15694
15780
  types = new Map;
15695
15781
  nameToFqn = new Map;
@@ -16261,7 +16347,7 @@ function registerCommonLibraries(resolver) {
16261
16347
  resolver.registerFactoryReturnType("HttpClients", "createSystem", "org.apache.http.impl.client.CloseableHttpClient");
16262
16348
  resolver.registerFactoryReturnType("HttpClients", "createMinimal", "org.apache.http.impl.client.MinimalHttpClient");
16263
16349
  }
16264
- // ../circle-ir/dist/resolution/symbol-table.js
16350
+ // node_modules/circle-ir/dist/resolution/symbol-table.js
16265
16351
  class SymbolTable {
16266
16352
  exports = new Map;
16267
16353
  nameToFqns = new Map;
@@ -16484,7 +16570,7 @@ class SymbolTable {
16484
16570
  return "package";
16485
16571
  }
16486
16572
  }
16487
- // ../circle-ir/dist/resolution/cross-file.js
16573
+ // node_modules/circle-ir/dist/resolution/cross-file.js
16488
16574
  function buildFileIndex(ir) {
16489
16575
  const callsByLine = new Map;
16490
16576
  for (const c of ir.calls) {
@@ -17572,7 +17658,7 @@ class CrossFileResolver {
17572
17658
  return this.fieldTaintInfo.get(`${typeFqn}.${fieldName}`);
17573
17659
  }
17574
17660
  }
17575
- // ../circle-ir/dist/graph/project-graph.js
17661
+ // node_modules/circle-ir/dist/graph/project-graph.js
17576
17662
  class ProjectGraph {
17577
17663
  files = new Map;
17578
17664
  _symbolTable = null;
@@ -17624,7 +17710,7 @@ class ProjectGraph {
17624
17710
  return this._resolver;
17625
17711
  }
17626
17712
  }
17627
- // ../circle-ir/dist/graph/analysis-pass.js
17713
+ // node_modules/circle-ir/dist/graph/analysis-pass.js
17628
17714
  class AnalysisPipeline {
17629
17715
  passes = [];
17630
17716
  add(pass) {
@@ -17671,7 +17757,7 @@ class AnalysisPipeline {
17671
17757
  return { results, findings };
17672
17758
  }
17673
17759
  }
17674
- // ../circle-ir/dist/analysis/taint-propagation.js
17760
+ // node_modules/circle-ir/dist/analysis/taint-propagation.js
17675
17761
  function buildSanitizersByLine(sanitizers) {
17676
17762
  const out2 = new Map;
17677
17763
  for (const san of sanitizers) {
@@ -17970,7 +18056,7 @@ function buildTaintFlow(source, sink, taintInfo) {
17970
18056
  confidence: taintInfo.confidence * 0.9
17971
18057
  };
17972
18058
  }
17973
- // ../circle-ir/dist/analysis/constant-propagation/ast-utils.js
18059
+ // node_modules/circle-ir/dist/analysis/constant-propagation/ast-utils.js
17974
18060
  function isKnown(cv) {
17975
18061
  return cv.type !== "unknown";
17976
18062
  }
@@ -17987,7 +18073,7 @@ function getNodeLine(node) {
17987
18073
  return node.startPosition.row + 1;
17988
18074
  }
17989
18075
 
17990
- // ../circle-ir/dist/analysis/constant-propagation/evaluator.js
18076
+ // node_modules/circle-ir/dist/analysis/constant-propagation/evaluator.js
17991
18077
  class ExpressionEvaluator {
17992
18078
  source;
17993
18079
  getSymbol;
@@ -18257,7 +18343,7 @@ class ExpressionEvaluator {
18257
18343
  }
18258
18344
  }
18259
18345
 
18260
- // ../circle-ir/dist/analysis/constant-propagation/patterns.js
18346
+ // node_modules/circle-ir/dist/analysis/constant-propagation/patterns.js
18261
18347
  var TAINT_PATTERNS = [
18262
18348
  "request.getParameter",
18263
18349
  "request.getHeader",
@@ -18452,7 +18538,7 @@ var PROPAGATOR_METHODS = new Set([
18452
18538
  "decodeRequestString"
18453
18539
  ]);
18454
18540
 
18455
- // ../circle-ir/dist/analysis/constant-propagation/propagator.js
18541
+ // node_modules/circle-ir/dist/analysis/constant-propagation/propagator.js
18456
18542
  class ConstantPropagator {
18457
18543
  symbols = new Map;
18458
18544
  tainted = new Set;
@@ -20309,7 +20395,7 @@ class ConstantPropagator {
20309
20395
  }
20310
20396
  }
20311
20397
 
20312
- // ../circle-ir/dist/analysis/constant-propagation/index.js
20398
+ // node_modules/circle-ir/dist/analysis/constant-propagation/index.js
20313
20399
  function analyzeConstantPropagation(tree, sourceCode, options = {}) {
20314
20400
  const propagator = new ConstantPropagator;
20315
20401
  return propagator.analyze(tree, sourceCode, options.additionalTaintPatterns ?? [], options.sanitizerMethods ?? [], options.taintedParameters ?? []);
@@ -20397,7 +20483,7 @@ function normalizeCondition(cond) {
20397
20483
  }
20398
20484
  return normalized;
20399
20485
  }
20400
- // ../circle-ir/dist/utils/logger.js
20486
+ // node_modules/circle-ir/dist/utils/logger.js
20401
20487
  var LOG_LEVELS = {
20402
20488
  trace: 0,
20403
20489
  debug: 1,
@@ -20469,7 +20555,7 @@ var logger = {
20469
20555
  }
20470
20556
  };
20471
20557
 
20472
- // ../circle-ir/dist/analysis/per-file-finding-cap.js
20558
+ // node_modules/circle-ir/dist/analysis/per-file-finding-cap.js
20473
20559
  var DEFAULT_PER_FILE_FINDING_CAP = 1000;
20474
20560
  var SATURATED_FILE_RULE_ID = "saturated-file";
20475
20561
  function applyPerFileFindingCap(filePath, findings, cap) {
@@ -20505,7 +20591,7 @@ function applyPerFileFindingCap(filePath, findings, cap) {
20505
20591
  return [advisory];
20506
20592
  }
20507
20593
 
20508
- // ../circle-ir/dist/analysis/confidence-filter.js
20594
+ // node_modules/circle-ir/dist/analysis/confidence-filter.js
20509
20595
  function applyConfidenceFilter(findings, includeSpeculative) {
20510
20596
  if (includeSpeculative)
20511
20597
  return findings;
@@ -20515,7 +20601,7 @@ function isHighConfidence(finding) {
20515
20601
  return finding.confidence === undefined || finding.confidence === "high";
20516
20602
  }
20517
20603
 
20518
- // ../circle-ir/dist/analysis/library-api-surface-downgrade.js
20604
+ // node_modules/circle-ir/dist/analysis/library-api-surface-downgrade.js
20519
20605
  var LIBRARY_API_SURFACE_TAG = "library-api-surface:caller-responsibility";
20520
20606
  function applyLibraryApiSurfaceDowngrade(findings) {
20521
20607
  return findings.map((f) => {
@@ -20532,7 +20618,7 @@ function applyLibraryApiSurfaceDowngrade(findings) {
20532
20618
  });
20533
20619
  }
20534
20620
 
20535
- // ../circle-ir/dist/analysis/note-coalescer.js
20621
+ // node_modules/circle-ir/dist/analysis/note-coalescer.js
20536
20622
  var CLICKJACKING_PAIR = new Set(["missing-x-frame-options", "missing-csp-frame-ancestors"]);
20537
20623
  function levelRank(level) {
20538
20624
  return level === "error" ? 0 : level === "warning" ? 1 : 2;
@@ -20596,7 +20682,7 @@ function coalesceNoteLevelFindings(findings) {
20596
20682
  return out2;
20597
20683
  }
20598
20684
 
20599
- // ../circle-ir/dist/analysis/entry-point-detection.js
20685
+ // node_modules/circle-ir/dist/analysis/entry-point-detection.js
20600
20686
  var TIER_1_METHOD_ANNOTATIONS = new Set([
20601
20687
  "RequestMapping",
20602
20688
  "GetMapping",
@@ -21253,7 +21339,7 @@ function methodIsRuntimeRegistrationHandler(method, regs) {
21253
21339
  return false;
21254
21340
  }
21255
21341
 
21256
- // ../circle-ir/dist/analysis/require-entry-path.js
21342
+ // node_modules/circle-ir/dist/analysis/require-entry-path.js
21257
21343
  var RULE_ID_REQUIRE_ENTRY_PATH = "require-entry-path";
21258
21344
  var MAX_VISITED_METHODS = 2000;
21259
21345
  var TAINT_FLOW_RULE_IDS = new Set([
@@ -21642,7 +21728,7 @@ function normalizeDisabled(input) {
21642
21728
  return new Set(input);
21643
21729
  }
21644
21730
 
21645
- // ../circle-ir/dist/analysis/project-profile-transform.js
21731
+ // node_modules/circle-ir/dist/analysis/project-profile-transform.js
21646
21732
  var DOWNGRADE_ELIGIBLE_RULE_IDS = new Set([
21647
21733
  "code_injection",
21648
21734
  "template_injection",
@@ -21704,7 +21790,7 @@ function applyProjectProfileTransform(findings, resolveProfile) {
21704
21790
  });
21705
21791
  }
21706
21792
 
21707
- // ../circle-ir/dist/languages/registry.js
21793
+ // node_modules/circle-ir/dist/languages/registry.js
21708
21794
  class DefaultLanguageRegistry {
21709
21795
  plugins = new Map;
21710
21796
  extensionMap = new Map;
@@ -21751,7 +21837,7 @@ function registerLanguage(plugin) {
21751
21837
  function getLanguagePlugin(language) {
21752
21838
  return getLanguageRegistry().get(language);
21753
21839
  }
21754
- // ../circle-ir/dist/languages/plugins/base.js
21840
+ // node_modules/circle-ir/dist/languages/plugins/base.js
21755
21841
  class BaseLanguagePlugin {
21756
21842
  parser = null;
21757
21843
  async initialize(parser) {
@@ -21812,7 +21898,7 @@ class BaseLanguagePlugin {
21812
21898
  }
21813
21899
  }
21814
21900
 
21815
- // ../circle-ir/dist/languages/plugins/java.js
21901
+ // node_modules/circle-ir/dist/languages/plugins/java.js
21816
21902
  class JavaPlugin extends BaseLanguagePlugin {
21817
21903
  id = "java";
21818
21904
  name = "Java";
@@ -22069,7 +22155,7 @@ class JavaPlugin extends BaseLanguagePlugin {
22069
22155
  }
22070
22156
  }
22071
22157
 
22072
- // ../circle-ir/dist/languages/plugins/javascript.js
22158
+ // node_modules/circle-ir/dist/languages/plugins/javascript.js
22073
22159
  class JavaScriptPlugin extends BaseLanguagePlugin {
22074
22160
  id = "javascript";
22075
22161
  name = "JavaScript/TypeScript";
@@ -22735,7 +22821,7 @@ class JavaScriptPlugin extends BaseLanguagePlugin {
22735
22821
  }
22736
22822
  }
22737
22823
 
22738
- // ../circle-ir/dist/languages/plugins/python.js
22824
+ // node_modules/circle-ir/dist/languages/plugins/python.js
22739
22825
  class PythonPlugin extends BaseLanguagePlugin {
22740
22826
  id = "python";
22741
22827
  name = "Python";
@@ -23011,7 +23097,7 @@ class PythonPlugin extends BaseLanguagePlugin {
23011
23097
  }
23012
23098
  }
23013
23099
 
23014
- // ../circle-ir/dist/languages/plugins/rust.js
23100
+ // node_modules/circle-ir/dist/languages/plugins/rust.js
23015
23101
  class RustPlugin extends BaseLanguagePlugin {
23016
23102
  id = "rust";
23017
23103
  name = "Rust";
@@ -23170,13 +23256,6 @@ class RustPlugin extends BaseLanguagePlugin {
23170
23256
  severity: "high",
23171
23257
  argPositions: [0]
23172
23258
  },
23173
- {
23174
- method: "format!",
23175
- type: "format_string",
23176
- cwe: "CWE-134",
23177
- severity: "medium",
23178
- argPositions: [0]
23179
- },
23180
23259
  {
23181
23260
  method: "from_raw_parts",
23182
23261
  type: "unsafe_memory",
@@ -23251,7 +23330,7 @@ class RustPlugin extends BaseLanguagePlugin {
23251
23330
  }
23252
23331
  }
23253
23332
 
23254
- // ../circle-ir/dist/languages/plugins/bash.js
23333
+ // node_modules/circle-ir/dist/languages/plugins/bash.js
23255
23334
  class BashPlugin extends BaseLanguagePlugin {
23256
23335
  id = "bash";
23257
23336
  name = "Bash/Shell";
@@ -23457,7 +23536,7 @@ class BashPlugin extends BaseLanguagePlugin {
23457
23536
  }
23458
23537
  }
23459
23538
 
23460
- // ../circle-ir/dist/languages/plugins/html.js
23539
+ // node_modules/circle-ir/dist/languages/plugins/html.js
23461
23540
  class HtmlPlugin extends BaseLanguagePlugin {
23462
23541
  id = "html";
23463
23542
  name = "HTML";
@@ -23522,7 +23601,7 @@ class HtmlPlugin extends BaseLanguagePlugin {
23522
23601
  }
23523
23602
  }
23524
23603
 
23525
- // ../circle-ir/dist/languages/plugins/vue.js
23604
+ // node_modules/circle-ir/dist/languages/plugins/vue.js
23526
23605
  class VuePlugin extends BaseLanguagePlugin {
23527
23606
  id = "vue";
23528
23607
  name = "Vue";
@@ -23587,7 +23666,7 @@ class VuePlugin extends BaseLanguagePlugin {
23587
23666
  }
23588
23667
  }
23589
23668
 
23590
- // ../circle-ir/dist/languages/plugins/go.js
23669
+ // node_modules/circle-ir/dist/languages/plugins/go.js
23591
23670
  class GoPlugin extends BaseLanguagePlugin {
23592
23671
  id = "go";
23593
23672
  name = "Go";
@@ -24236,7 +24315,7 @@ class GoPlugin extends BaseLanguagePlugin {
24236
24315
  }
24237
24316
  }
24238
24317
 
24239
- // ../circle-ir/dist/languages/plugins/csharp.js
24318
+ // node_modules/circle-ir/dist/languages/plugins/csharp.js
24240
24319
  class CSharpPlugin extends BaseLanguagePlugin {
24241
24320
  id = "csharp";
24242
24321
  name = "C#";
@@ -24295,7 +24374,7 @@ class CSharpPlugin extends BaseLanguagePlugin {
24295
24374
  }
24296
24375
  }
24297
24376
 
24298
- // ../circle-ir/dist/languages/plugins/index.js
24377
+ // node_modules/circle-ir/dist/languages/plugins/index.js
24299
24378
  function registerBuiltinPlugins() {
24300
24379
  registerLanguage(new JavaPlugin);
24301
24380
  registerLanguage(new JavaScriptPlugin);
@@ -24307,7 +24386,7 @@ function registerBuiltinPlugins() {
24307
24386
  registerLanguage(new GoPlugin);
24308
24387
  registerLanguage(new CSharpPlugin);
24309
24388
  }
24310
- // ../circle-ir/dist/analysis/passes/cross-file-pass.js
24389
+ // node_modules/circle-ir/dist/analysis/passes/cross-file-pass.js
24311
24390
  class CrossFilePass {
24312
24391
  run(projectGraph, sourceLines, options = {}) {
24313
24392
  const resolver = projectGraph.resolver;
@@ -24633,7 +24712,7 @@ function findCrossInstanceAliasingPaths(projectGraph, _sourceLines) {
24633
24712
  return paths;
24634
24713
  }
24635
24714
 
24636
- // ../circle-ir/dist/analysis/html/html-extractor.js
24715
+ // node_modules/circle-ir/dist/analysis/html/html-extractor.js
24637
24716
  var EVENT_HANDLER_ATTRS = new Set([
24638
24717
  "onclick",
24639
24718
  "ondblclick",
@@ -24788,7 +24867,7 @@ function stripQuotes2(text) {
24788
24867
  return text;
24789
24868
  }
24790
24869
 
24791
- // ../circle-ir/dist/analysis/html/html-attribute-security-pass.js
24870
+ // node_modules/circle-ir/dist/analysis/html/html-attribute-security-pass.js
24792
24871
  function runHtmlAttributeSecurityChecks(rootNode, filePath) {
24793
24872
  const findings = [];
24794
24873
  walkForSecurityChecks(rootNode, filePath, findings);
@@ -25014,7 +25093,7 @@ function truncate(s, maxLen) {
25014
25093
  return s.length > maxLen ? s.slice(0, maxLen) + "..." : s;
25015
25094
  }
25016
25095
 
25017
- // ../circle-ir/dist/analysis/html/vue-template-xss-pass.js
25096
+ // node_modules/circle-ir/dist/analysis/html/vue-template-xss-pass.js
25018
25097
  var DANGEROUS_BINDINGS = new Set([
25019
25098
  "v-html",
25020
25099
  "v-bind:innerhtml",
@@ -25134,7 +25213,7 @@ function collectTaintedNames(blocks) {
25134
25213
  return names;
25135
25214
  }
25136
25215
 
25137
- // ../circle-ir/dist/analysis/html/html-merge.js
25216
+ // node_modules/circle-ir/dist/analysis/html/html-merge.js
25138
25217
  function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
25139
25218
  const allTypes = [];
25140
25219
  const allCalls = [];
@@ -25284,7 +25363,7 @@ function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
25284
25363
  };
25285
25364
  }
25286
25365
 
25287
- // ../circle-ir/dist/analysis/passes/taint-matcher-pass.js
25366
+ // node_modules/circle-ir/dist/analysis/passes/taint-matcher-pass.js
25288
25367
  class TaintMatcherPass {
25289
25368
  name = "taint-matcher";
25290
25369
  category = "security";
@@ -25345,7 +25424,7 @@ class TaintMatcherPass {
25345
25424
  }
25346
25425
  }
25347
25426
 
25348
- // ../circle-ir/dist/analysis/passes/constant-propagation-pass.js
25427
+ // node_modules/circle-ir/dist/analysis/passes/constant-propagation-pass.js
25349
25428
  class ConstantPropagationPass {
25350
25429
  tree;
25351
25430
  name = "constant-propagation";
@@ -25375,7 +25454,7 @@ class ConstantPropagationPass {
25375
25454
  }
25376
25455
  }
25377
25456
 
25378
- // ../circle-ir/dist/analysis/passes/language-sources-pass.js
25457
+ // node_modules/circle-ir/dist/analysis/passes/language-sources-pass.js
25379
25458
  var JS_DOM_XSS_SINKS = [
25380
25459
  { pattern: /\.innerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
25381
25460
  { pattern: /\.outerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
@@ -26134,12 +26213,21 @@ function findCSharpRequestSources(sourceCode, language) {
26134
26213
  const requestReadRe = /\bRequest\s*\.\s*(?:Query|Form|Headers|Cookies|QueryString|RouteValues|Body|Files|Params)\b/;
26135
26214
  const consoleReadRe = /\bConsole\s*\.\s*ReadLine\s*\(/;
26136
26215
  const envReadRe = /\bEnvironment\s*\.\s*GetEnvironmentVariables?\s*(?:\(|\[)/;
26216
+ const formFileParams = new Set;
26217
+ const formFileDeclRe = /\bIFormFile\s+([A-Za-z_]\w*)/g;
26218
+ for (const line of lines) {
26219
+ const re = new RegExp(formFileDeclRe.source, "g");
26220
+ let d;
26221
+ while ((d = re.exec(line)) !== null)
26222
+ formFileParams.add(d[1]);
26223
+ }
26224
+ const formFileReadRe = formFileParams.size > 0 ? new RegExp(`\\b(?:${[...formFileParams].join("|")})\\s*\\.\\s*(?:FileName|ContentType)\\b`) : null;
26137
26225
  for (let i2 = 0;i2 < lines.length; i2++) {
26138
26226
  const m = assignRe.exec(lines[i2]);
26139
26227
  if (!m)
26140
26228
  continue;
26141
26229
  const [, varName, rhs] = m;
26142
- const type = requestReadRe.test(rhs) ? "http_param" : consoleReadRe.test(rhs) ? "io_input" : envReadRe.test(rhs) ? "env_input" : null;
26230
+ const type = requestReadRe.test(rhs) ? "http_param" : formFileReadRe?.test(rhs) ? "http_param" : consoleReadRe.test(rhs) ? "io_input" : envReadRe.test(rhs) ? "env_input" : null;
26143
26231
  if (!type)
26144
26232
  continue;
26145
26233
  const lineNumber = i2 + 1;
@@ -32423,7 +32511,7 @@ function findJsTemplateInjectionSstiFindings(code, file) {
32423
32511
  return findings;
32424
32512
  }
32425
32513
 
32426
- // ../circle-ir/dist/analysis/passes/source-semantics-pass.js
32514
+ // node_modules/circle-ir/dist/analysis/passes/source-semantics-pass.js
32427
32515
  var DEMO_PATH_RE = /(?:^|\/)(?:demo|example|examples|samples|integration-tests|integration_tests)(?:\/|$)/i;
32428
32516
  var CONST_STRING_ASSIGN_RE = /^\s*(?:final\s+|static\s+final\s+)?[A-Za-z_][\w.<>\[\]]*\s+[A-Za-z_]\w*\s*=\s*"[^"]*"\s*;?\s*$/;
32429
32517
  var STATIC_FINAL_RE = /^\s*(?:public\s+|private\s+|protected\s+)?static\s+final\s+/;
@@ -32511,7 +32599,7 @@ class SourceSemanticsPass {
32511
32599
  }
32512
32600
  }
32513
32601
 
32514
- // ../circle-ir/dist/analysis/passes/library-profile-source-gate-pass.js
32602
+ // node_modules/circle-ir/dist/analysis/passes/library-profile-source-gate-pass.js
32515
32603
  var SPECULATIVE_SOURCE_TYPES = new Set([
32516
32604
  "interprocedural_param",
32517
32605
  "constructor_field"
@@ -32566,7 +32654,7 @@ class LibraryProfileSourceGatePass {
32566
32654
  }
32567
32655
  }
32568
32656
 
32569
- // ../circle-ir/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js
32657
+ // node_modules/circle-ir/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js
32570
32658
  var MYBATIS_SQL_ANNOTATIONS = new Set([
32571
32659
  "Select",
32572
32660
  "Update",
@@ -32793,7 +32881,7 @@ class MyBatisAnnotationSqlSinkPass {
32793
32881
  }
32794
32882
  }
32795
32883
 
32796
- // ../circle-ir/dist/analysis/passes/sink-filter-pass.js
32884
+ // node_modules/circle-ir/dist/analysis/passes/sink-filter-pass.js
32797
32885
  function escapeReSf(s) {
32798
32886
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
32799
32887
  }
@@ -34597,7 +34685,7 @@ function isXPathQuoteEscapedOnLine(lineText, varName) {
34597
34685
  return seen > 0;
34598
34686
  }
34599
34687
 
34600
- // ../circle-ir/dist/analysis/passes/sink-semantics-pass.js
34688
+ // node_modules/circle-ir/dist/analysis/passes/sink-semantics-pass.js
34601
34689
  function buildRegistry(entries) {
34602
34690
  const registry = new Map;
34603
34691
  for (const entry of entries) {
@@ -34645,7 +34733,7 @@ class SinkSemanticsPass {
34645
34733
  }
34646
34734
  }
34647
34735
 
34648
- // ../circle-ir/dist/analysis/dependency-versions.js
34736
+ // node_modules/circle-ir/dist/analysis/dependency-versions.js
34649
34737
  function resolveFastjsonFromPom(pomXml) {
34650
34738
  if (!pomXml)
34651
34739
  return null;
@@ -34823,7 +34911,7 @@ function fileConfiguresSnakeYamlSafely(source) {
34823
34911
  return false;
34824
34912
  }
34825
34913
 
34826
- // ../circle-ir/dist/analysis/passes/deserialization-safety-gate-pass.js
34914
+ // node_modules/circle-ir/dist/analysis/passes/deserialization-safety-gate-pass.js
34827
34915
  var FASTJSON_METHODS = new Set(["parseObject", "parse"]);
34828
34916
  var FASTJSON_CLASSES = new Set(["JSON", "JSONObject"]);
34829
34917
  var JACKSON_METHODS = new Set(["readValue", "convertValue", "treeToValue"]);
@@ -34900,7 +34988,7 @@ class DeserializationSafetyGatePass {
34900
34988
  }
34901
34989
  }
34902
34990
 
34903
- // ../circle-ir/dist/analysis/passes/prompt-injection-safety-gate-pass.js
34991
+ // node_modules/circle-ir/dist/analysis/passes/prompt-injection-safety-gate-pass.js
34904
34992
  function isDelimiterLiteral(lit) {
34905
34993
  const s = lit.trim();
34906
34994
  if (s.length === 0)
@@ -35143,7 +35231,7 @@ class PromptInjectionSafetyGatePass {
35143
35231
  }
35144
35232
  }
35145
35233
 
35146
- // ../circle-ir/dist/analysis/passes/speculative-prompt-param-source-pass.js
35234
+ // node_modules/circle-ir/dist/analysis/passes/speculative-prompt-param-source-pass.js
35147
35235
  function returnOrAssignRhs(text) {
35148
35236
  const t = text.trim();
35149
35237
  const ret = t.match(/^return\s+(.+?);?$/);
@@ -35269,7 +35357,7 @@ class SpeculativePromptParamSourcePass {
35269
35357
  }
35270
35358
  }
35271
35359
 
35272
- // ../circle-ir/dist/analysis/passes/cli-main-reflection-suppress-pass.js
35360
+ // node_modules/circle-ir/dist/analysis/passes/cli-main-reflection-suppress-pass.js
35273
35361
  var REFLECTION_SINK_METHODS = new Set([
35274
35362
  "forName",
35275
35363
  "newInstance",
@@ -35457,7 +35545,7 @@ class CliMainReflectionSuppressPass {
35457
35545
  }
35458
35546
  }
35459
35547
 
35460
- // ../circle-ir/dist/analysis/passes/library-profile-sink-gate-pass.js
35548
+ // node_modules/circle-ir/dist/analysis/passes/library-profile-sink-gate-pass.js
35461
35549
  var DROPPED_SINK_TYPES = new Set([
35462
35550
  "log_injection"
35463
35551
  ]);
@@ -35563,7 +35651,7 @@ class LibraryProfileCwe22PathGatePass {
35563
35651
  }
35564
35652
  }
35565
35653
 
35566
- // ../circle-ir/dist/analysis/passes/library-profile-xss-gate-pass.js
35654
+ // node_modules/circle-ir/dist/analysis/passes/library-profile-xss-gate-pass.js
35567
35655
  var XSS_NON_HTML_OUTPUT_CLASSES = new Set([
35568
35656
  "StringBuilder",
35569
35657
  "StringBuffer",
@@ -35644,7 +35732,7 @@ class LibraryProfileXssGatePass {
35644
35732
  }
35645
35733
  }
35646
35734
 
35647
- // ../circle-ir/dist/analysis/passes/taint-propagation-pass.js
35735
+ // node_modules/circle-ir/dist/analysis/passes/taint-propagation-pass.js
35648
35736
  class TaintPropagationPass {
35649
35737
  name = "taint-propagation";
35650
35738
  category = "security";
@@ -36874,7 +36962,7 @@ function pickScopedSource(sources, sinkLine, methodName, types, taintedVar) {
36874
36962
  return sources[0];
36875
36963
  }
36876
36964
 
36877
- // ../circle-ir/dist/analysis/interprocedural.js
36965
+ // node_modules/circle-ir/dist/analysis/interprocedural.js
36878
36966
  function analyzeInterprocedural2(graphOrTypes, callsOrSources, dfgOrSinks, sourcesOrSanitizers, sinksOrOptions, sanitizersArg, optionsArg = {}) {
36879
36967
  let graph;
36880
36968
  let sources;
@@ -37388,7 +37476,7 @@ function findTaintBridges2(result) {
37388
37476
  return bridges;
37389
37477
  }
37390
37478
 
37391
- // ../circle-ir/dist/analysis/passes/interprocedural-pass.js
37479
+ // node_modules/circle-ir/dist/analysis/passes/interprocedural-pass.js
37392
37480
  class InterproceduralPass {
37393
37481
  name = "interprocedural";
37394
37482
  category = "security";
@@ -37594,7 +37682,7 @@ class InterproceduralPass {
37594
37682
  }
37595
37683
  }
37596
37684
 
37597
- // ../circle-ir/dist/analysis/passes/dead-code-pass.js
37685
+ // node_modules/circle-ir/dist/analysis/passes/dead-code-pass.js
37598
37686
  class DeadCodePass {
37599
37687
  name = "dead-code";
37600
37688
  category = "reliability";
@@ -37670,7 +37758,7 @@ class DeadCodePass {
37670
37758
  }
37671
37759
  }
37672
37760
 
37673
- // ../circle-ir/dist/analysis/passes/missing-await-pass.js
37761
+ // node_modules/circle-ir/dist/analysis/passes/missing-await-pass.js
37674
37762
  var ASYNC_METHODS = new Set([
37675
37763
  "readFile",
37676
37764
  "writeFile",
@@ -37749,7 +37837,7 @@ class MissingAwaitPass {
37749
37837
  }
37750
37838
  }
37751
37839
 
37752
- // ../circle-ir/dist/analysis/passes/n-plus-one-pass.js
37840
+ // node_modules/circle-ir/dist/analysis/passes/n-plus-one-pass.js
37753
37841
  var HIGH_CONFIDENCE_DB_METHODS = new Set([
37754
37842
  "executeQuery",
37755
37843
  "executeUpdate",
@@ -37872,7 +37960,7 @@ class NPlusOnePass {
37872
37960
  }
37873
37961
  }
37874
37962
 
37875
- // ../circle-ir/dist/analysis/passes/missing-public-doc-pass.js
37963
+ // node_modules/circle-ir/dist/analysis/passes/missing-public-doc-pass.js
37876
37964
  var TEST_PATH_RE = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
37877
37965
  var UTIL_DIR_RE = /[/](utils?|helpers?|internal|private|common|shared)[/]/i;
37878
37966
  function hasDocCommentBefore(lines, startLine) {
@@ -37979,7 +38067,7 @@ class MissingPublicDocPass {
37979
38067
  }
37980
38068
  }
37981
38069
 
37982
- // ../circle-ir/dist/analysis/passes/todo-in-prod-pass.js
38070
+ // node_modules/circle-ir/dist/analysis/passes/todo-in-prod-pass.js
37983
38071
  var TEST_PATH_RE2 = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
37984
38072
  var MARKER_RE = /(?:\/\/|#|--|^\s*\*)\s*(TODO|FIXME|HACK|XXX)\b/i;
37985
38073
  function markerSeverity(marker) {
@@ -38025,7 +38113,7 @@ class TodoInProdPass {
38025
38113
  }
38026
38114
  }
38027
38115
 
38028
- // ../circle-ir/dist/analysis/passes/string-concat-loop-pass.js
38116
+ // node_modules/circle-ir/dist/analysis/passes/string-concat-loop-pass.js
38029
38117
  var CONCAT_RE = /\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\+=/;
38030
38118
  var NUMERIC_VAR_RE = /^(i|j|k|n|m|x|y|z|count|sum|total|size|index|len|length|num|idx|score|counter|offset|pos|col|row|result|ret|value|acc|bits|byte|bytes|flag|flags|step|delta|diff|dist|min|max|avg|mean|page|line|err|error)$/i;
38031
38119
  var NUMERIC_SUFFIX_RE = /(Count|Sum|Total|Size|Index|Length|Offset|Position|Score|Counter|Num|Amount|Val|Idx|Len|Max|Min|Avg|Delta|Diff|Step|Flag|Flags|Bits|Byte|Bytes|Calls|Items|Nodes|Edges|Blocks|Lines|Chars|Entries|Records|Rows)$/;
@@ -38088,7 +38176,7 @@ class StringConcatLoopPass {
38088
38176
  }
38089
38177
  }
38090
38178
 
38091
- // ../circle-ir/dist/analysis/passes/sync-io-async-pass.js
38179
+ // node_modules/circle-ir/dist/analysis/passes/sync-io-async-pass.js
38092
38180
  var BLOCKING_METHODS = new Set([
38093
38181
  "sleep"
38094
38182
  ]);
@@ -38149,7 +38237,7 @@ class SyncIoAsyncPass {
38149
38237
  }
38150
38238
  }
38151
38239
 
38152
- // ../circle-ir/dist/analysis/passes/unchecked-return-pass.js
38240
+ // node_modules/circle-ir/dist/analysis/passes/unchecked-return-pass.js
38153
38241
  var MUST_CHECK_HIGH = new Set([
38154
38242
  "createNewFile",
38155
38243
  "mkdir",
@@ -38222,7 +38310,7 @@ class UncheckedReturnPass {
38222
38310
  }
38223
38311
  }
38224
38312
 
38225
- // ../circle-ir/dist/analysis/passes/null-deref-pass.js
38313
+ // node_modules/circle-ir/dist/analysis/passes/null-deref-pass.js
38226
38314
  var NULL_EXPR_RE = /^\s*(null|None|undefined)\s*$/;
38227
38315
  function escRe(s) {
38228
38316
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -38304,7 +38392,7 @@ class NullDerefPass {
38304
38392
  }
38305
38393
  }
38306
38394
 
38307
- // ../circle-ir/dist/analysis/passes/resource-leak-pass.js
38395
+ // node_modules/circle-ir/dist/analysis/passes/resource-leak-pass.js
38308
38396
  function escapeRegex2(s) {
38309
38397
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
38310
38398
  }
@@ -38581,7 +38669,7 @@ class ResourceLeakPass {
38581
38669
  }
38582
38670
  }
38583
38671
 
38584
- // ../circle-ir/dist/graph/scope-graph.js
38672
+ // node_modules/circle-ir/dist/graph/scope-graph.js
38585
38673
  function hasDeclKeyword(lineText, language) {
38586
38674
  switch (language) {
38587
38675
  case "java":
@@ -38621,7 +38709,7 @@ class ScopeGraph {
38621
38709
  }
38622
38710
  }
38623
38711
 
38624
- // ../circle-ir/dist/analysis/passes/variable-shadowing-pass.js
38712
+ // node_modules/circle-ir/dist/analysis/passes/variable-shadowing-pass.js
38625
38713
  var SKIP_NAMES = new Set([
38626
38714
  "let",
38627
38715
  "const",
@@ -38779,7 +38867,7 @@ class VariableShadowingPass {
38779
38867
  }
38780
38868
  }
38781
38869
 
38782
- // ../circle-ir/dist/analysis/passes/leaked-global-pass.js
38870
+ // node_modules/circle-ir/dist/analysis/passes/leaked-global-pass.js
38783
38871
  var SKIP_NAMES2 = new Set([
38784
38872
  "_",
38785
38873
  "e",
@@ -38866,7 +38954,7 @@ class LeakedGlobalPass {
38866
38954
  }
38867
38955
  }
38868
38956
 
38869
- // ../circle-ir/dist/analysis/passes/unused-variable-pass.js
38957
+ // node_modules/circle-ir/dist/analysis/passes/unused-variable-pass.js
38870
38958
  var SKIP_NAMES3 = new Set([
38871
38959
  "_",
38872
38960
  "unused",
@@ -39011,7 +39099,7 @@ class UnusedVariablePass {
39011
39099
  }
39012
39100
  }
39013
39101
 
39014
- // ../circle-ir/dist/analysis/passes/dependency-fan-out-pass.js
39102
+ // node_modules/circle-ir/dist/analysis/passes/dependency-fan-out-pass.js
39015
39103
  var DEFAULT_THRESHOLD = 20;
39016
39104
 
39017
39105
  class DependencyFanOutPass {
@@ -39043,7 +39131,7 @@ class DependencyFanOutPass {
39043
39131
  }
39044
39132
  }
39045
39133
 
39046
- // ../circle-ir/dist/analysis/passes/stale-doc-ref-pass.js
39134
+ // node_modules/circle-ir/dist/analysis/passes/stale-doc-ref-pass.js
39047
39135
  var DOC_BLOCK_RE = /\/\*\*([\s\S]*?)\*\//g;
39048
39136
  var LINK_RE = /\{@link\s+([\w.#]+)/g;
39049
39137
  var SEE_RE = /@see\s+([\w.#]+)/g;
@@ -39122,7 +39210,7 @@ class StaleDocRefPass {
39122
39210
  }
39123
39211
  }
39124
39212
 
39125
- // ../circle-ir/dist/analysis/passes/infinite-loop-pass.js
39213
+ // node_modules/circle-ir/dist/analysis/passes/infinite-loop-pass.js
39126
39214
  var EXIT_KEYWORDS = /\b(return|throw|raise|break|System\.exit|process\.exit|os\._exit|exit!\()\b/;
39127
39215
  var ITERATOR_LOOP_PATTERNS = [
39128
39216
  /\bfor\s*\([^)]*\s+of\s+/,
@@ -39241,7 +39329,7 @@ class InfiniteLoopPass {
39241
39329
  }
39242
39330
  }
39243
39331
 
39244
- // ../circle-ir/dist/analysis/passes/deep-inheritance-pass.js
39332
+ // node_modules/circle-ir/dist/analysis/passes/deep-inheritance-pass.js
39245
39333
  var DEPTH_THRESHOLD = 5;
39246
39334
  var CYCLE_GUARD = 20;
39247
39335
 
@@ -39304,7 +39392,7 @@ class DeepInheritancePass {
39304
39392
  }
39305
39393
  }
39306
39394
 
39307
- // ../circle-ir/dist/analysis/passes/redundant-loop-pass.js
39395
+ // node_modules/circle-ir/dist/analysis/passes/redundant-loop-pass.js
39308
39396
  var LENGTH_PATTERN = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:length|size\(\)|count\(\))/g;
39309
39397
  var LENGTH_PATTERN_METHODS = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:size\(\)|count\(\))/g;
39310
39398
  var OBJECT_STATIC_PATTERN = /\bObject\s*\.\s*(?:keys|values|entries)\s*\(\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*\)/g;
@@ -39427,7 +39515,7 @@ class RedundantLoopPass {
39427
39515
  }
39428
39516
  }
39429
39517
 
39430
- // ../circle-ir/dist/analysis/passes/unbounded-collection-pass.js
39518
+ // node_modules/circle-ir/dist/analysis/passes/unbounded-collection-pass.js
39431
39519
  var GROW_METHODS = {
39432
39520
  java: new Set(["add", "put", "offer", "push", "addAll", "addFirst", "addLast", "enqueue", "insert"]),
39433
39521
  javascript: new Set(["push", "set", "add", "unshift", "append", "prepend"]),
@@ -39551,7 +39639,7 @@ class UnboundedCollectionPass {
39551
39639
  }
39552
39640
  }
39553
39641
 
39554
- // ../circle-ir/dist/analysis/passes/serial-await-pass.js
39642
+ // node_modules/circle-ir/dist/analysis/passes/serial-await-pass.js
39555
39643
  var AWAIT_ASSIGN_RE = /(?:const|let|var)?\s*(\w+)\s*=\s*await\s/;
39556
39644
  var AWAIT_RE = /\bawait\s/;
39557
39645
 
@@ -39647,7 +39735,7 @@ class SerialAwaitPass {
39647
39735
  }
39648
39736
  }
39649
39737
 
39650
- // ../circle-ir/dist/analysis/passes/react-inline-jsx-pass.js
39738
+ // node_modules/circle-ir/dist/analysis/passes/react-inline-jsx-pass.js
39651
39739
  var JSX_COMPONENT_RE = /<[A-Z][A-Za-z0-9]*/;
39652
39740
  var INLINE_OBJECT_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{\{/g;
39653
39741
  var INLINE_ARROW_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{(?:\(|[A-Za-z_$]).*?=>/g;
@@ -39751,7 +39839,7 @@ class ReactInlineJsxPass {
39751
39839
  }
39752
39840
  }
39753
39841
 
39754
- // ../circle-ir/dist/graph/exception-flow-graph.js
39842
+ // node_modules/circle-ir/dist/graph/exception-flow-graph.js
39755
39843
  class ExceptionFlowGraph2 {
39756
39844
  pairs;
39757
39845
  catchEntryIds;
@@ -39802,7 +39890,7 @@ class ExceptionFlowGraph2 {
39802
39890
  }
39803
39891
  }
39804
39892
 
39805
- // ../circle-ir/dist/analysis/passes/swallowed-exception-pass.js
39893
+ // node_modules/circle-ir/dist/analysis/passes/swallowed-exception-pass.js
39806
39894
  var MEANINGFUL_ACTION_RE = /\b(throw|raise|log|logger|console\.(error|warn|log|debug|info)|System\.(out|err)\.|print(?:ln|f)?|warn|error|debug|info|fatal|LOGGER|LOG|logging\.(warning|error|debug|info|critical))\b|\breturn\s+\S/;
39807
39895
 
39808
39896
  class SwallowedExceptionPass {
@@ -39900,7 +39988,7 @@ class SwallowedExceptionPass {
39900
39988
  }
39901
39989
  }
39902
39990
 
39903
- // ../circle-ir/dist/analysis/passes/broad-catch-pass.js
39991
+ // node_modules/circle-ir/dist/analysis/passes/broad-catch-pass.js
39904
39992
  var JAVA_BROAD_RE = /catch\s*\(\s*(Exception|Throwable|RuntimeException|Error)\s/;
39905
39993
  var PYTHON_BROAD_RE = /^\s*except\s*:|except\s+(Exception|BaseException)\b/;
39906
39994
 
@@ -39956,7 +40044,7 @@ class BroadCatchPass {
39956
40044
  }
39957
40045
  }
39958
40046
 
39959
- // ../circle-ir/dist/analysis/passes/unhandled-exception-pass.js
40047
+ // node_modules/circle-ir/dist/analysis/passes/unhandled-exception-pass.js
39960
40048
  var JS_THROW_RE = /^\s*throw\s+/;
39961
40049
  var PYTHON_RAISE_RE = /^\s*raise\b/;
39962
40050
  function isValidationThrow(lines, throwLine) {
@@ -40126,7 +40214,7 @@ class UnhandledExceptionPass {
40126
40214
  }
40127
40215
  }
40128
40216
 
40129
- // ../circle-ir/dist/analysis/passes/double-close-pass.js
40217
+ // node_modules/circle-ir/dist/analysis/passes/double-close-pass.js
40130
40218
  var RESOURCE_CTORS2 = new Set([
40131
40219
  "FileInputStream",
40132
40220
  "FileOutputStream",
@@ -40241,7 +40329,7 @@ class DoubleClosePass {
40241
40329
  }
40242
40330
  }
40243
40331
 
40244
- // ../circle-ir/dist/analysis/passes/use-after-close-pass.js
40332
+ // node_modules/circle-ir/dist/analysis/passes/use-after-close-pass.js
40245
40333
  var RESOURCE_CTORS3 = new Set([
40246
40334
  "FileInputStream",
40247
40335
  "FileOutputStream",
@@ -40349,7 +40437,7 @@ class UseAfterClosePass {
40349
40437
  }
40350
40438
  }
40351
40439
 
40352
- // ../circle-ir/dist/graph/dominator-graph.js
40440
+ // node_modules/circle-ir/dist/graph/dominator-graph.js
40353
40441
  function computeRPO(cfg, entryId) {
40354
40442
  const outgoing = new Map;
40355
40443
  for (const edge of cfg.edges) {
@@ -40514,7 +40602,7 @@ class DominatorGraph2 {
40514
40602
  }
40515
40603
  }
40516
40604
 
40517
- // ../circle-ir/dist/analysis/passes/cleanup-verify-pass.js
40605
+ // node_modules/circle-ir/dist/analysis/passes/cleanup-verify-pass.js
40518
40606
  var RESOURCE_CTORS4 = new Set([
40519
40607
  "FileInputStream",
40520
40608
  "FileOutputStream",
@@ -40639,7 +40727,7 @@ class CleanupVerifyPass {
40639
40727
  }
40640
40728
  }
40641
40729
 
40642
- // ../circle-ir/dist/analysis/passes/missing-override-pass.js
40730
+ // node_modules/circle-ir/dist/analysis/passes/missing-override-pass.js
40643
40731
  class MissingOverridePass {
40644
40732
  name = "missing-override";
40645
40733
  category = "maintainability";
@@ -40726,7 +40814,7 @@ class MissingOverridePass {
40726
40814
  }
40727
40815
  }
40728
40816
 
40729
- // ../circle-ir/dist/analysis/passes/unused-interface-method-pass.js
40817
+ // node_modules/circle-ir/dist/analysis/passes/unused-interface-method-pass.js
40730
40818
  class UnusedInterfaceMethodPass {
40731
40819
  name = "unused-interface-method";
40732
40820
  category = "maintainability";
@@ -40769,7 +40857,7 @@ class UnusedInterfaceMethodPass {
40769
40857
  }
40770
40858
  }
40771
40859
 
40772
- // ../circle-ir/dist/analysis/passes/blocking-main-thread-pass.js
40860
+ // node_modules/circle-ir/dist/analysis/passes/blocking-main-thread-pass.js
40773
40861
  var HTTP_DECORATORS = new Set([
40774
40862
  "Get",
40775
40863
  "Post",
@@ -40872,7 +40960,7 @@ class BlockingMainThreadPass {
40872
40960
  }
40873
40961
  }
40874
40962
 
40875
- // ../circle-ir/dist/analysis/passes/excessive-allocation-pass.js
40963
+ // node_modules/circle-ir/dist/analysis/passes/excessive-allocation-pass.js
40876
40964
  var ALLOC_PATTERNS = {
40877
40965
  javascript: /\bnew\s+(Array|Map|Set|Object|WeakMap|WeakSet|Error|RegExp|Date|Buffer|Uint8Array|Int8Array|Float32Array|ArrayBuffer)\s*[(<]|\bArray\.from\s*\(|\bstructuredClone\s*\(|\bObject\.create\s*\(/,
40878
40966
  typescript: /\bnew\s+(Array|Map|Set|Object|WeakMap|WeakSet|Error|RegExp|Date|Buffer|Uint8Array|Int8Array|Float32Array|ArrayBuffer)\s*[(<]|\bArray\.from\s*\(|\bstructuredClone\s*\(|\bObject\.create\s*\(/,
@@ -40939,7 +41027,7 @@ class ExcessiveAllocationPass {
40939
41027
  }
40940
41028
  }
40941
41029
 
40942
- // ../circle-ir/dist/analysis/passes/missing-stream-pass.js
41030
+ // node_modules/circle-ir/dist/analysis/passes/missing-stream-pass.js
40943
41031
  var JS_WHOLE_LOAD_RE = /\b(?:readFileSync|fs\.readFile\b|response\.text\b|response\.json\b|res\.text\b|res\.json\b|body\.text\b|body\.json\b)\s*\(/;
40944
41032
  var JS_STREAM_RE = /\.pipe\s*\(|\.on\s*\(\s*['"]data['"]|for\s+await\s*\(|\bcreateReadStream\b|\bstream\b/i;
40945
41033
  var JAVA_WHOLE_READ_RE = /\bFiles\.readAllBytes\s*\(|\bFiles\.readAllLines\s*\(|\bFiles\.readString\s*\(|\bnew\s+BufferedReader\s*\(|\bFileInputStream\b/;
@@ -41086,7 +41174,7 @@ class MissingStreamPass {
41086
41174
  }
41087
41175
  }
41088
41176
 
41089
- // ../circle-ir/dist/analysis/passes/god-class-pass.js
41177
+ // node_modules/circle-ir/dist/analysis/passes/god-class-pass.js
41090
41178
  var WMC_THRESHOLD = 47;
41091
41179
  var LCOM2_THRESHOLD = 0.8;
41092
41180
  var CBO_THRESHOLD = 14;
@@ -41252,7 +41340,7 @@ class GodClassPass {
41252
41340
  }
41253
41341
  }
41254
41342
 
41255
- // ../circle-ir/dist/analysis/passes/naming-convention-pass.js
41343
+ // node_modules/circle-ir/dist/analysis/passes/naming-convention-pass.js
41256
41344
  var PASCAL_CASE_RE = /^[A-Z][A-Za-z0-9]*$/;
41257
41345
  var CAMEL_CASE_RE = /^[a-z][a-zA-Z0-9]*$/;
41258
41346
  var SNAKE_CASE_RE = /^[a-z_][a-z0-9_]*$/;
@@ -41392,7 +41480,7 @@ class NamingConventionPass {
41392
41480
  }
41393
41481
  }
41394
41482
 
41395
- // ../circle-ir/dist/analysis/passes/security-headers-pass.js
41483
+ // node_modules/circle-ir/dist/analysis/passes/security-headers-pass.js
41396
41484
  var HEADER_WRITE_METHODS = new Set([
41397
41485
  "setHeader",
41398
41486
  "addHeader",
@@ -41853,7 +41941,7 @@ function mapReturnValueToCorsRule(returnValue) {
41853
41941
  };
41854
41942
  }
41855
41943
 
41856
- // ../circle-ir/dist/analysis/passes/_fp-allowlists.js
41944
+ // node_modules/circle-ir/dist/analysis/passes/_fp-allowlists.js
41857
41945
  var PEM_BODY_RE = /[A-Za-z0-9+/]{30,}/;
41858
41946
  function pemHasInlineBody(lines, hitLineIdx) {
41859
41947
  const end = Math.min(hitLineIdx + 5, lines.length);
@@ -41880,7 +41968,7 @@ function isProtocolMandatedCryptoFile(file, code) {
41880
41968
  return false;
41881
41969
  }
41882
41970
 
41883
- // ../circle-ir/dist/analysis/passes/scan-secrets-pass.js
41971
+ // node_modules/circle-ir/dist/analysis/passes/scan-secrets-pass.js
41884
41972
  function applyDemoDowngrade(demoPath, severity, level) {
41885
41973
  if (!demoPath)
41886
41974
  return { severity, level };
@@ -42458,7 +42546,7 @@ class ScanSecretsPass {
42458
42546
  }
42459
42547
  }
42460
42548
 
42461
- // ../circle-ir/dist/analysis/passes/python-receiver-taint-format-pass.js
42549
+ // node_modules/circle-ir/dist/analysis/passes/python-receiver-taint-format-pass.js
42462
42550
  class PythonReceiverTaintFormatPass {
42463
42551
  name = "python-receiver-taint-format";
42464
42552
  category = "security";
@@ -42510,7 +42598,7 @@ class PythonReceiverTaintFormatPass {
42510
42598
  }
42511
42599
  }
42512
42600
 
42513
- // ../circle-ir/dist/analysis/passes/spring4shell-pass.js
42601
+ // node_modules/circle-ir/dist/analysis/passes/spring4shell-pass.js
42514
42602
  var CONTROLLER_ANNOTATIONS = new Set([
42515
42603
  "Controller",
42516
42604
  "RestController",
@@ -42718,7 +42806,7 @@ function isPotentialPojo(type) {
42718
42806
  return first >= 65 && first <= 90;
42719
42807
  }
42720
42808
 
42721
- // ../circle-ir/dist/analysis/passes/insecure-cookie-pass.js
42809
+ // node_modules/circle-ir/dist/analysis/passes/insecure-cookie-pass.js
42722
42810
  var COOKIE_RESPONSE_RECEIVERS = new Set([
42723
42811
  "res",
42724
42812
  "response",
@@ -42954,7 +43042,7 @@ class InsecureCookiePass {
42954
43042
  }
42955
43043
  }
42956
43044
 
42957
- // ../circle-ir/dist/analysis/passes/weak-hash-pass.js
43045
+ // node_modules/circle-ir/dist/analysis/passes/weak-hash-pass.js
42958
43046
  var WEAK_HASH_NAMES = new Set([
42959
43047
  "md2",
42960
43048
  "md4",
@@ -43174,7 +43262,7 @@ class WeakHashPass {
43174
43262
  }
43175
43263
  }
43176
43264
 
43177
- // ../circle-ir/dist/analysis/path-classification.js
43265
+ // node_modules/circle-ir/dist/analysis/path-classification.js
43178
43266
  var TEST_PATH_PATTERNS = [
43179
43267
  /(^|\/)test\//i,
43180
43268
  /(^|\/)tests\//i,
@@ -43211,7 +43299,7 @@ function isTestPath(filepath) {
43211
43299
  return false;
43212
43300
  }
43213
43301
 
43214
- // ../circle-ir/dist/analysis/passes/weak-crypto-pass.js
43302
+ // node_modules/circle-ir/dist/analysis/passes/weak-crypto-pass.js
43215
43303
  var WEAK_CIPHER_BASES = new Set([
43216
43304
  "des",
43217
43305
  "3des",
@@ -43716,7 +43804,7 @@ class WeakCryptoPass {
43716
43804
  }
43717
43805
  }
43718
43806
 
43719
- // ../circle-ir/dist/analysis/passes/weak-random-pass.js
43807
+ // node_modules/circle-ir/dist/analysis/passes/weak-random-pass.js
43720
43808
  var JAVA_RANDOM_METHODS = new Set([
43721
43809
  "nextInt",
43722
43810
  "nextLong",
@@ -43889,7 +43977,7 @@ class WeakRandomPass {
43889
43977
  }
43890
43978
  }
43891
43979
 
43892
- // ../circle-ir/dist/analysis/passes/_credential-helpers.js
43980
+ // node_modules/circle-ir/dist/analysis/passes/_credential-helpers.js
43893
43981
  var CRED_KEYWORD_RE2 = /(?:password|passwd|pwd|secret|api[_-]?key|auth[_-]?token|private[_-]?key|access[_-]?key|credential)/i;
43894
43982
  function isCredentialIdentifier(name2) {
43895
43983
  if (!name2)
@@ -43982,7 +44070,7 @@ function priorHashOf(varName, priorCalls) {
43982
44070
  return false;
43983
44071
  }
43984
44072
 
43985
- // ../circle-ir/dist/analysis/passes/weak-password-hash-pass.js
44073
+ // node_modules/circle-ir/dist/analysis/passes/weak-password-hash-pass.js
43986
44074
  var FAST_HASH_NAMES = new Set([
43987
44075
  "sha224",
43988
44076
  "sha-224",
@@ -44141,7 +44229,7 @@ class WeakPasswordHashPass {
44141
44229
  }
44142
44230
  }
44143
44231
 
44144
- // ../circle-ir/dist/analysis/passes/weak-password-encoding-pass.js
44232
+ // node_modules/circle-ir/dist/analysis/passes/weak-password-encoding-pass.js
44145
44233
  function isBasicAuthContext(call, code) {
44146
44234
  const line = call.location.line;
44147
44235
  if (line < 1)
@@ -44253,7 +44341,7 @@ class WeakPasswordEncodingPass {
44253
44341
  }
44254
44342
  }
44255
44343
 
44256
- // ../circle-ir/dist/analysis/passes/info-disclosure-stacktrace-pass.js
44344
+ // node_modules/circle-ir/dist/analysis/passes/info-disclosure-stacktrace-pass.js
44257
44345
  var RESPONSE_RECEIVER_RE = /^(res|response|w|writer|ctx|c)$/i;
44258
44346
  var LOGGER_RECEIVER_RE = /^(log|logger|slog|console|pino|winston|sentry)$/i;
44259
44347
  var RESPONSE_SEND_METHODS = new Set([
@@ -44439,7 +44527,7 @@ class InfoDisclosureStacktracePass {
44439
44527
  }
44440
44528
  }
44441
44529
 
44442
- // ../circle-ir/dist/analysis/passes/unrestricted-file-upload-pass.js
44530
+ // node_modules/circle-ir/dist/analysis/passes/unrestricted-file-upload-pass.js
44443
44531
  var UPLOAD_NAME_RE = /(?:getOriginalFilename|getSubmittedFileName|originalname|originalName|\.filename|\.Filename|FileHeader\.Filename|UploadFile)/;
44444
44532
  var FILE_SAFE_CALL_RE = /(?:secure_filename|FilenameUtils\.getExtension|\.lastIndexOf\(['"]\.['"]\)|ALLOWED_EXT|ALLOWED_EXTENSIONS|allowedExtensions|\bfileFilter\b|filepath\.Ext|path\.extname)/;
44445
44533
  function lineWindow(lines, startLine, endLine) {
@@ -44590,7 +44678,7 @@ class UnrestrictedFileUploadPass {
44590
44678
  }
44591
44679
  }
44592
44680
 
44593
- // ../circle-ir/dist/analysis/passes/missing-sanitizer-gate-pass.js
44681
+ // node_modules/circle-ir/dist/analysis/passes/missing-sanitizer-gate-pass.js
44594
44682
  var HTML_OUTPUT_SINKS = new Set([
44595
44683
  "addAttribute",
44596
44684
  "setAttribute",
@@ -44738,7 +44826,7 @@ function methodAcceptsHtmlShapedParam(method) {
44738
44826
  return false;
44739
44827
  }
44740
44828
 
44741
- // ../circle-ir/dist/analysis/passes/insecure-deserialization-config-pass.js
44829
+ // node_modules/circle-ir/dist/analysis/passes/insecure-deserialization-config-pass.js
44742
44830
  var ANY_TYPE_PERMISSION_RE = /\bAnyTypePermission\b/;
44743
44831
 
44744
44832
  class InsecureDeserializationConfigPass {
@@ -44816,7 +44904,7 @@ class InsecureDeserializationConfigPass {
44816
44904
  }
44817
44905
  var INSECURE_TYPE_NAME_HANDLING_RE = /\bTypeNameHandling\s*=\s*(?:Newtonsoft\.Json\.)?TypeNameHandling\.(All|Auto|Objects|Arrays)\b/;
44818
44906
 
44819
- // ../circle-ir/dist/analysis/passes/plaintext-password-storage-pass.js
44907
+ // node_modules/circle-ir/dist/analysis/passes/plaintext-password-storage-pass.js
44820
44908
  function isWriteStorageCall(call, language) {
44821
44909
  const method = call.method_name ?? "";
44822
44910
  const receiver = call.receiver ?? "";
@@ -44927,7 +45015,7 @@ class PlaintextPasswordStoragePass {
44927
45015
  }
44928
45016
  }
44929
45017
 
44930
- // ../circle-ir/dist/analysis/passes/cleartext-credential-transport-pass.js
45018
+ // node_modules/circle-ir/dist/analysis/passes/cleartext-credential-transport-pass.js
44931
45019
  var LOCALHOST_RE = /^(?:localhost|127\.0\.0\.1|0\.0\.0\.0)(?::\d+)?$/i;
44932
45020
  function isInsecureHttpUrl(urlLiteral) {
44933
45021
  if (!urlLiteral)
@@ -45055,7 +45143,7 @@ class CleartextCredentialTransportPass {
45055
45143
  }
45056
45144
  }
45057
45145
 
45058
- // ../circle-ir/dist/analysis/passes/tls-verify-disabled-pass.js
45146
+ // node_modules/circle-ir/dist/analysis/passes/tls-verify-disabled-pass.js
45059
45147
  var PY_HTTP_METHODS = new Set([
45060
45148
  "get",
45061
45149
  "post",
@@ -45268,7 +45356,7 @@ class TlsVerifyDisabledPass {
45268
45356
  }
45269
45357
  }
45270
45358
 
45271
- // ../circle-ir/dist/analysis/passes/module-side-effect-pass.js
45359
+ // node_modules/circle-ir/dist/analysis/passes/module-side-effect-pass.js
45272
45360
  var JS_EXEC_METHODS = new Set([
45273
45361
  "exec",
45274
45362
  "spawn",
@@ -45499,7 +45587,7 @@ class ModuleSideEffectPass {
45499
45587
  }
45500
45588
  }
45501
45589
 
45502
- // ../circle-ir/dist/analysis/passes/cache-no-vary-pass.js
45590
+ // node_modules/circle-ir/dist/analysis/passes/cache-no-vary-pass.js
45503
45591
  function isSharedCacheable(value) {
45504
45592
  const v = value.toLowerCase();
45505
45593
  if (/\b(private|no-store|no-cache)\b/.test(v))
@@ -45786,7 +45874,7 @@ class CacheNoVaryPass {
45786
45874
  }
45787
45875
  }
45788
45876
 
45789
- // ../circle-ir/dist/analysis/passes/jwt-verify-disabled-pass.js
45877
+ // node_modules/circle-ir/dist/analysis/passes/jwt-verify-disabled-pass.js
45790
45878
  var PY_VERIFY_SIGNATURE_FALSE_RE = /["']verify_signature["']\s*:\s*False\b/;
45791
45879
  var PY_VERIFY_KW_FALSE_RE = /\bverify\s*=\s*False\b/;
45792
45880
  var PY_ALG_NONE_RE = /\balgorithms\s*=\s*[\[\(]\s*["']none["']/i;
@@ -45911,7 +45999,7 @@ class JwtVerifyDisabledPass {
45911
45999
  }
45912
46000
  }
45913
46001
 
45914
- // ../circle-ir/dist/analysis/passes/csrf-protection-disabled-pass.js
46002
+ // node_modules/circle-ir/dist/analysis/passes/csrf-protection-disabled-pass.js
45915
46003
  var JAVA_CSRF_DISABLE_RE = /\.csrf\s*\([^)]*\)\s*\.\s*disable\b/;
45916
46004
  var JAVA_CSRF_LAMBDA_DISABLE_RE = /\bcsrf\s*\(\s*\w+\s*->\s*\w+\s*\.\s*disable\s*\(/;
45917
46005
  var JAVA_CSRF_METHODREF_RE = /\bcsrf\s*\(\s*[\w.]+::disable\s*\)/;
@@ -46047,7 +46135,7 @@ class CsrfProtectionDisabledPass {
46047
46135
  }
46048
46136
  }
46049
46137
 
46050
- // ../circle-ir/dist/analysis/passes/xml-entity-expansion-pass.js
46138
+ // node_modules/circle-ir/dist/analysis/passes/xml-entity-expansion-pass.js
46051
46139
  var JAVA_FACTORIES = new Set([
46052
46140
  "SAXParserFactory",
46053
46141
  "DocumentBuilderFactory",
@@ -46187,7 +46275,7 @@ class XmlEntityExpansionPass {
46187
46275
  }
46188
46276
  }
46189
46277
 
46190
- // ../circle-ir/dist/analysis/passes/mass-assignment-pass.js
46278
+ // node_modules/circle-ir/dist/analysis/passes/mass-assignment-pass.js
46191
46279
  var PY_KWARGS_SPLAT_RE = /\*\*\s*(?:request|self\.request|flask\.request|ctx|self)\s*\.\s*(?:form|args|values|json|get_json\s*\(\s*\)|files|data)/;
46192
46280
  var JS_OBJECT_SPREAD_RE = /\{\s*\.\.\.\s*(?:req|request|ctx|context)(?:\.request)?\s*\.\s*(?:body|query|params|form)\b/;
46193
46281
 
@@ -46271,7 +46359,7 @@ class MassAssignmentPass {
46271
46359
  }
46272
46360
  }
46273
46361
 
46274
- // ../circle-ir/dist/graph/import-graph.js
46362
+ // node_modules/circle-ir/dist/graph/import-graph.js
46275
46363
  function dirname(filePath) {
46276
46364
  const idx = filePath.lastIndexOf("/");
46277
46365
  return idx >= 0 ? filePath.slice(0, idx) : "";
@@ -46404,7 +46492,7 @@ class ImportGraph2 {
46404
46492
  }
46405
46493
  }
46406
46494
 
46407
- // ../circle-ir/dist/analysis/passes/circular-dependency-pass.js
46495
+ // node_modules/circle-ir/dist/analysis/passes/circular-dependency-pass.js
46408
46496
  class CircularDependencyPass {
46409
46497
  run(_projectGraph, importGraph) {
46410
46498
  const findings = [];
@@ -46431,7 +46519,7 @@ class CircularDependencyPass {
46431
46519
  }
46432
46520
  }
46433
46521
 
46434
- // ../circle-ir/dist/analysis/passes/orphan-module-pass.js
46522
+ // node_modules/circle-ir/dist/analysis/passes/orphan-module-pass.js
46435
46523
  class OrphanModulePass {
46436
46524
  run(_projectGraph, importGraph) {
46437
46525
  const findings = [];
@@ -46455,7 +46543,7 @@ class OrphanModulePass {
46455
46543
  }
46456
46544
  }
46457
46545
 
46458
- // ../circle-ir/dist/analysis/metrics/passes/size-metrics-pass.js
46546
+ // node_modules/circle-ir/dist/analysis/metrics/passes/size-metrics-pass.js
46459
46547
  class SizeMetricsPass {
46460
46548
  name = "size-metrics";
46461
46549
  run(ctx) {
@@ -46511,7 +46599,7 @@ class SizeMetricsPass {
46511
46599
  }
46512
46600
  }
46513
46601
 
46514
- // ../circle-ir/dist/analysis/metrics/passes/complexity-metrics-pass.js
46602
+ // node_modules/circle-ir/dist/analysis/metrics/passes/complexity-metrics-pass.js
46515
46603
  class ComplexityMetricsPass {
46516
46604
  name = "complexity-metrics";
46517
46605
  run(ctx) {
@@ -46575,7 +46663,7 @@ class ComplexityMetricsPass {
46575
46663
  }
46576
46664
  }
46577
46665
 
46578
- // ../circle-ir/dist/analysis/metrics/passes/halstead-metrics-pass.js
46666
+ // node_modules/circle-ir/dist/analysis/metrics/passes/halstead-metrics-pass.js
46579
46667
  var KEYWORDS = new Set([
46580
46668
  "if",
46581
46669
  "else",
@@ -46730,7 +46818,7 @@ class HalsteadMetricsPass {
46730
46818
  }
46731
46819
  }
46732
46820
 
46733
- // ../circle-ir/dist/analysis/metrics/passes/data-flow-metrics-pass.js
46821
+ // node_modules/circle-ir/dist/analysis/metrics/passes/data-flow-metrics-pass.js
46734
46822
  class DataFlowMetricsPass {
46735
46823
  name = "data-flow-metrics";
46736
46824
  run(ctx) {
@@ -46748,7 +46836,7 @@ class DataFlowMetricsPass {
46748
46836
  }
46749
46837
  }
46750
46838
 
46751
- // ../circle-ir/dist/analysis/metrics/passes/coupling-metrics-pass.js
46839
+ // node_modules/circle-ir/dist/analysis/metrics/passes/coupling-metrics-pass.js
46752
46840
  class CouplingMetricsPass {
46753
46841
  name = "coupling-metrics";
46754
46842
  run(ctx) {
@@ -46826,7 +46914,7 @@ class CouplingMetricsPass {
46826
46914
  }
46827
46915
  }
46828
46916
 
46829
- // ../circle-ir/dist/analysis/metrics/passes/inheritance-metrics-pass.js
46917
+ // node_modules/circle-ir/dist/analysis/metrics/passes/inheritance-metrics-pass.js
46830
46918
  class InheritanceMetricsPass {
46831
46919
  name = "inheritance-metrics";
46832
46920
  run(ctx) {
@@ -46886,7 +46974,7 @@ class InheritanceMetricsPass {
46886
46974
  }
46887
46975
  }
46888
46976
 
46889
- // ../circle-ir/dist/analysis/metrics/passes/cohesion-metrics-pass.js
46977
+ // node_modules/circle-ir/dist/analysis/metrics/passes/cohesion-metrics-pass.js
46890
46978
  class CohesionMetricsPass {
46891
46979
  name = "cohesion-metrics";
46892
46980
  run(ctx) {
@@ -46969,7 +47057,7 @@ class CohesionMetricsPass {
46969
47057
  }
46970
47058
  }
46971
47059
 
46972
- // ../circle-ir/dist/analysis/metrics/passes/documentation-metrics-pass.js
47060
+ // node_modules/circle-ir/dist/analysis/metrics/passes/documentation-metrics-pass.js
46973
47061
  class DocumentationMetricsPass {
46974
47062
  name = "documentation-metrics";
46975
47063
  run(ctx) {
@@ -47022,7 +47110,7 @@ class DocumentationMetricsPass {
47022
47110
  }
47023
47111
  }
47024
47112
 
47025
- // ../circle-ir/dist/analysis/metrics/passes/composite-metrics-pass.js
47113
+ // node_modules/circle-ir/dist/analysis/metrics/passes/composite-metrics-pass.js
47026
47114
  class CompositeMetricsPass {
47027
47115
  name = "composite-metrics";
47028
47116
  run(ctx) {
@@ -47081,7 +47169,7 @@ class CompositeMetricsPass {
47081
47169
  }
47082
47170
  }
47083
47171
 
47084
- // ../circle-ir/dist/analysis/metrics/metric-runner.js
47172
+ // node_modules/circle-ir/dist/analysis/metrics/metric-runner.js
47085
47173
  class MetricRunner {
47086
47174
  passes = [
47087
47175
  new SizeMetricsPass,
@@ -47103,7 +47191,7 @@ class MetricRunner {
47103
47191
  return accumulated;
47104
47192
  }
47105
47193
  }
47106
- // ../circle-ir/dist/analyzer.js
47194
+ // node_modules/circle-ir/dist/analyzer.js
47107
47195
  var initialized = false;
47108
47196
  async function initAnalyzer(options = {}) {
47109
47197
  if (initialized)
@@ -47775,7 +47863,7 @@ function deriveProjectRoot(paths) {
47775
47863
  }
47776
47864
  return common.join("/") || "/";
47777
47865
  }
47778
- // ../circle-ir/dist/analysis/sbom.js
47866
+ // node_modules/circle-ir/dist/analysis/sbom.js
47779
47867
  function purlVersion(spec) {
47780
47868
  const stripped = spec.trim().replace(/^[\s^~=<>]+/, "");
47781
47869
  if (/^v?[0-9][\w.\-+]*$/.test(stripped))
@@ -48210,14 +48298,14 @@ function toSpdx(deps, meta = {}) {
48210
48298
  relationships
48211
48299
  };
48212
48300
  }
48213
- // ../project-profile-detect/dist/index.js
48214
- import { relative as relative3 } from "path";
48301
+ // node_modules/@cognium/project-profile-detect/dist/index.js
48302
+ import { relative as relative2 } from "path";
48215
48303
 
48216
- // ../project-profile-detect/dist/walk.js
48304
+ // node_modules/@cognium/project-profile-detect/dist/walk.js
48217
48305
  import { readdir, readFile, stat } from "fs/promises";
48218
- import { join, relative as relative2 } from "path";
48306
+ import { join, relative } from "path";
48219
48307
 
48220
- // ../project-profile-detect/dist/maven-parse.js
48308
+ // node_modules/@cognium/project-profile-detect/dist/maven-parse.js
48221
48309
  var TAG = (name2) => new RegExp(`<${name2}\\b[^>]*>([\\s\\S]*?)<\\/${name2}>`, "i");
48222
48310
  var ALL_TAGS = (name2) => new RegExp(`<${name2}\\b[^>]*>([\\s\\S]*?)<\\/${name2}>`, "gi");
48223
48311
  function firstTag(xml, name2) {
@@ -48241,12 +48329,7 @@ var MAVEN_PLUGIN_MAP = {
48241
48329
  "exec-maven-plugin": "application",
48242
48330
  "maven-assembly-plugin": "application"
48243
48331
  };
48244
- var MAVEN_PUBLISH_PLUGIN_URLS = {
48245
- "central-publishing-maven-plugin": "https://central.sonatype.com/",
48246
- "nexus-staging-maven-plugin": "https://oss.sonatype.org/"
48247
- };
48248
48332
  function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
48249
- const parentRef = extractParentRef(xml);
48250
48333
  const stripped = xml.replace(/<parent\b[\s\S]*?<\/parent>/i, "");
48251
48334
  const groupId = firstTag(stripped, "groupId");
48252
48335
  const artifactId = firstTag(stripped, "artifactId");
@@ -48255,15 +48338,10 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
48255
48338
  const buildBlock = firstTag(xml, "build") ?? "";
48256
48339
  const pluginBlocks = allTags(buildBlock, "plugin");
48257
48340
  const plugins = new Set;
48258
- const publishUrls = new Set;
48259
48341
  for (const p of pluginBlocks) {
48260
48342
  const aid = firstTag(p, "artifactId");
48261
- if (!aid)
48262
- continue;
48263
- if (MAVEN_PLUGIN_MAP[aid])
48343
+ if (aid && MAVEN_PLUGIN_MAP[aid])
48264
48344
  plugins.add(MAVEN_PLUGIN_MAP[aid]);
48265
- if (MAVEN_PUBLISH_PLUGIN_URLS[aid])
48266
- publishUrls.add(MAVEN_PUBLISH_PLUGIN_URLS[aid]);
48267
48345
  }
48268
48346
  if (/<parent\b[\s\S]*?<artifactId>\s*spring-boot-starter-parent\s*<\/artifactId>/i.test(xml)) {
48269
48347
  plugins.add("spring-boot");
@@ -48276,8 +48354,7 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
48276
48354
  plugins.add("maven-plugin");
48277
48355
  const distBlock = firstTag(xml, "distributionManagement") ?? "";
48278
48356
  const urls = [
48279
- ...allTags(distBlock, "url"),
48280
- ...publishUrls
48357
+ ...allTags(distBlock, "url")
48281
48358
  ].map((u) => u.trim()).filter(Boolean);
48282
48359
  const signals = {
48283
48360
  ...directorySignals,
@@ -48292,36 +48369,11 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
48292
48369
  groupId,
48293
48370
  artifactId,
48294
48371
  version,
48295
- signals,
48296
- parentRef
48372
+ signals
48297
48373
  };
48298
48374
  }
48299
- function extractParentRef(xml) {
48300
- const block = TAG("parent").exec(xml);
48301
- if (!block)
48302
- return;
48303
- const inner = block[1];
48304
- const groupId = firstTag(inner, "groupId");
48305
- const artifactId = firstTag(inner, "artifactId");
48306
- const version = firstTag(inner, "version");
48307
- let relativePath;
48308
- let emptyRelativePath = false;
48309
- const selfClosing = /<relativePath\b[^>]*\/\s*>/i.test(inner);
48310
- if (selfClosing) {
48311
- emptyRelativePath = true;
48312
- } else {
48313
- const rp = firstTag(inner, "relativePath");
48314
- if (rp !== undefined) {
48315
- if (rp.length === 0)
48316
- emptyRelativePath = true;
48317
- else
48318
- relativePath = rp;
48319
- }
48320
- }
48321
- return { groupId, artifactId, version, relativePath, emptyRelativePath };
48322
- }
48323
48375
 
48324
- // ../project-profile-detect/dist/gradle-parse.js
48376
+ // node_modules/@cognium/project-profile-detect/dist/gradle-parse.js
48325
48377
  var GRADLE_PLUGIN_MAP = {
48326
48378
  "org.springframework.boot": "spring-boot",
48327
48379
  "io.spring.dependency-management": "spring-boot",
@@ -48386,71 +48438,7 @@ function parseGradleBuild(text, moduleRoot, buildFile, buildSystem, directorySig
48386
48438
  };
48387
48439
  }
48388
48440
 
48389
- // ../project-profile-detect/dist/maven-inherit.js
48390
- import { dirname as dirname2, isAbsolute, normalize, relative, resolve } from "path";
48391
- var MAX_DEPTH = 6;
48392
- var DEFAULT_RELATIVE_PATH = "../pom.xml";
48393
- function mergeMavenInheritance(modules, scanRoot) {
48394
- const normalizedScanRoot = normalize(scanRoot);
48395
- const byBuildFile = new Map;
48396
- for (const m of modules) {
48397
- if (m.buildSystem === "maven") {
48398
- byBuildFile.set(normalize(m.buildFile), m);
48399
- }
48400
- }
48401
- for (const child of modules) {
48402
- if (child.buildSystem !== "maven")
48403
- continue;
48404
- if (!child.parentRef)
48405
- continue;
48406
- const inheritedUrls = new Set;
48407
- const inheritedPlugins = new Set;
48408
- walkParents(child, byBuildFile, normalizedScanRoot, inheritedUrls, inheritedPlugins);
48409
- if (inheritedUrls.size === 0 && inheritedPlugins.size === 0)
48410
- continue;
48411
- const existingUrls = new Set(child.signals.distributionUrls);
48412
- for (const u of inheritedUrls) {
48413
- if (!existingUrls.has(u))
48414
- child.signals.distributionUrls.push(u);
48415
- }
48416
- const existingPlugins = new Set(child.signals.plugins);
48417
- for (const p of inheritedPlugins) {
48418
- if (!existingPlugins.has(p))
48419
- child.signals.plugins.push(p);
48420
- }
48421
- }
48422
- }
48423
- function walkParents(start2, byBuildFile, scanRoot, outUrls, outPlugins) {
48424
- const visited = new Set([normalize(start2.buildFile)]);
48425
- let current = start2;
48426
- for (let depth = 0;depth < MAX_DEPTH; depth++) {
48427
- const ref = current.parentRef;
48428
- if (!ref)
48429
- return;
48430
- if (ref.emptyRelativePath)
48431
- return;
48432
- const childDir = dirname2(current.buildFile);
48433
- const rel = ref.relativePath ?? DEFAULT_RELATIVE_PATH;
48434
- const candidateAbs = normalize(isAbsolute(rel) ? rel : resolve(childDir, rel));
48435
- const parentBuildFile = candidateAbs.endsWith("pom.xml") ? candidateAbs : normalize(resolve(candidateAbs, "pom.xml"));
48436
- const relToRoot = relative(scanRoot, parentBuildFile);
48437
- if (relToRoot.startsWith("..") || isAbsolute(relToRoot))
48438
- return;
48439
- if (visited.has(parentBuildFile))
48440
- return;
48441
- visited.add(parentBuildFile);
48442
- const parent = byBuildFile.get(parentBuildFile);
48443
- if (!parent)
48444
- return;
48445
- for (const u of parent.signals.distributionUrls)
48446
- outUrls.add(u);
48447
- for (const p of parent.signals.plugins)
48448
- outPlugins.add(p);
48449
- current = parent;
48450
- }
48451
- }
48452
-
48453
- // ../project-profile-detect/dist/walk.js
48441
+ // node_modules/@cognium/project-profile-detect/dist/walk.js
48454
48442
  var BUILD_FILES = ["pom.xml", "build.gradle", "build.gradle.kts"];
48455
48443
  var SKIP_DIRS = new Set([
48456
48444
  "node_modules",
@@ -48470,7 +48458,6 @@ var SKIP_DIRS = new Set([
48470
48458
  async function discoverBuildModules(scanRoot) {
48471
48459
  const modules = [];
48472
48460
  await walk(scanRoot, modules);
48473
- mergeMavenInheritance(modules, scanRoot);
48474
48461
  return modules;
48475
48462
  }
48476
48463
  async function walk(dir, out2) {
@@ -48612,7 +48599,7 @@ function ownerOf(file, modules) {
48612
48599
  return best;
48613
48600
  }
48614
48601
 
48615
- // ../project-profile-detect/dist/publication-detect.js
48602
+ // node_modules/@cognium/project-profile-detect/dist/publication-detect.js
48616
48603
  var PUBLIC_REGISTRY_HOSTS = new Set([
48617
48604
  "repo.maven.apache.org",
48618
48605
  "repo1.maven.org",
@@ -48637,7 +48624,7 @@ function isPubliclyPublished(urls) {
48637
48624
  return false;
48638
48625
  }
48639
48626
 
48640
- // ../project-profile-detect/dist/shape-resolve.js
48627
+ // node_modules/@cognium/project-profile-detect/dist/shape-resolve.js
48641
48628
  function resolveShape(mod) {
48642
48629
  const sig = mod.signals;
48643
48630
  const has = (tag) => sig.plugins.includes(tag);
@@ -48678,15 +48665,11 @@ function resolveShape(mod) {
48678
48665
  reasons.push(...libSignals, "no public-registry distribution (internal helper)");
48679
48666
  return { shape: "application", reasons };
48680
48667
  }
48681
- if (isPubliclyPublished(sig.distributionUrls)) {
48682
- reasons.push("public-registry distribution", "no application/server/plugin signals → implicit library");
48683
- return { shape: "library", reasons };
48684
- }
48685
48668
  reasons.push("no shape signals");
48686
48669
  return { shape: "unknown", reasons };
48687
48670
  }
48688
48671
 
48689
- // ../project-profile-detect/dist/env-resolve.js
48672
+ // node_modules/@cognium/project-profile-detect/dist/env-resolve.js
48690
48673
  var TEST_RE = /(?:^|\/)tests?\//;
48691
48674
  var SAMPLE_RE = /(?:^|\/)(?:samples?|examples?|demos?|fixtures?)\//;
48692
48675
  var BENCHMARK_RE = /(?:^|\/)benchmarks?\//;
@@ -48704,7 +48687,7 @@ function resolveEnv(absoluteFile) {
48704
48687
  return "dev";
48705
48688
  }
48706
48689
 
48707
- // ../project-profile-detect/dist/overrides.js
48690
+ // node_modules/@cognium/project-profile-detect/dist/overrides.js
48708
48691
  function compileGlob(glob) {
48709
48692
  let re = "";
48710
48693
  let i2 = 0;
@@ -48751,7 +48734,7 @@ function applyOverrides(relativePath, compiled) {
48751
48734
  return;
48752
48735
  }
48753
48736
 
48754
- // ../project-profile-detect/dist/index.js
48737
+ // node_modules/@cognium/project-profile-detect/dist/index.js
48755
48738
  async function detectProjectProfiles(scanRoot, options = {}) {
48756
48739
  const modules = await discoverBuildModules(scanRoot);
48757
48740
  const files = await enumerateScanFiles(scanRoot);
@@ -48769,7 +48752,7 @@ async function detectProjectProfiles(scanRoot, options = {}) {
48769
48752
  const profileByFile = new Map;
48770
48753
  const unknownFiles = [];
48771
48754
  for (const file of files) {
48772
- const rel = relative3(scanRoot, file);
48755
+ const rel = relative2(scanRoot, file);
48773
48756
  const ov = applyOverrides(rel, compiledOverrides);
48774
48757
  if (ov) {
48775
48758
  profileByFile.set(file, ov.profile);
@@ -48821,7 +48804,7 @@ var colors = {
48821
48804
  };
48822
48805
 
48823
48806
  // src/version.ts
48824
- var version = "4.9.9";
48807
+ var version = "4.9.11";
48825
48808
 
48826
48809
  // src/formatters.ts
48827
48810
  var LIBRARY_API_SURFACE_TAG2 = "library-api-surface:caller-responsibility";
@@ -49374,8 +49357,8 @@ function generateSarifResults(results, crossFileData) {
49374
49357
 
49375
49358
  // src/build-info.ts
49376
49359
  var buildInfo = {
49377
- gitSha: "5c476ca",
49378
- builtAt: "2026-08-26T20:08:56.375Z"
49360
+ gitSha: "6c811aa",
49361
+ builtAt: "2026-09-10T06:22:49.258Z"
49379
49362
  };
49380
49363
 
49381
49364
  // src/utils/args.ts
@@ -49663,7 +49646,7 @@ function applySuppressionsToResults(results, suppressions, basePath) {
49663
49646
  if (suppressions.length === 0)
49664
49647
  return results;
49665
49648
  return results.map((result) => {
49666
- const relativeFile = relative4(basePath, result.file) || result.file;
49649
+ const relativeFile = relative3(basePath, result.file) || result.file;
49667
49650
  const filteredVulns = result.vulnerabilities.filter((vuln) => {
49668
49651
  for (const supp of suppressions) {
49669
49652
  if (supp.pass !== vuln.type)
@@ -49719,6 +49702,22 @@ var LANG_MAP = {
49719
49702
  ".html": "html",
49720
49703
  ".htm": "html"
49721
49704
  };
49705
+ var VULN_SEVERITY_RANK = { critical: 3, high: 2, medium: 1, low: 0 };
49706
+ function dedupeVulnerabilities(vulns) {
49707
+ const best = new Map;
49708
+ const order = [];
49709
+ for (const v of vulns) {
49710
+ const key = `${v.type}:${v.line}`;
49711
+ const current = best.get(key);
49712
+ if (current === undefined) {
49713
+ best.set(key, v);
49714
+ order.push(key);
49715
+ } else if ((VULN_SEVERITY_RANK[v.severity] ?? -1) > (VULN_SEVERITY_RANK[current.severity] ?? -1)) {
49716
+ best.set(key, v);
49717
+ }
49718
+ }
49719
+ return order.map((k) => best.get(k));
49720
+ }
49722
49721
  function detectLanguage7(filePath) {
49723
49722
  const ext = extname(filePath).toLowerCase();
49724
49723
  return LANG_MAP[ext] || null;
@@ -49753,7 +49752,7 @@ async function collectFiles(targetPath, options = {}) {
49753
49752
  return files;
49754
49753
  }
49755
49754
  if (fileMatchesLanguage(targetPath, language)) {
49756
- const relativePath = basePath ? relative4(basePath, targetPath) : targetPath;
49755
+ const relativePath = basePath ? relative3(basePath, targetPath) : targetPath;
49757
49756
  if (includePatterns && includePatterns.length > 0) {
49758
49757
  if (!matchesAnyPattern(relativePath, includePatterns)) {
49759
49758
  return files;
@@ -49772,7 +49771,7 @@ async function collectFiles(targetPath, options = {}) {
49772
49771
  if (excludeTests && /^(test|tests|__tests__|spec|__mocks__)$/i.test(entry.name))
49773
49772
  continue;
49774
49773
  const fullPath = join2(targetPath, entry.name);
49775
- const relativePath = basePath ? relative4(basePath, fullPath) : fullPath;
49774
+ const relativePath = basePath ? relative3(basePath, fullPath) : fullPath;
49776
49775
  if (excludePatterns && entry.isDirectory()) {
49777
49776
  const dirPattern = relativePath + "/";
49778
49777
  if (excludePatterns.some((p) => matchesGlob(dirPattern, p) || matchesGlob(relativePath, p))) {
@@ -49813,7 +49812,7 @@ async function scanFile(filePath, language, analyzeOpts) {
49813
49812
  ...finding.tags && finding.tags.length > 0 ? { tags: [...finding.tags] } : {}
49814
49813
  });
49815
49814
  }
49816
- return { file: filePath, vulnerabilities };
49815
+ return { file: filePath, vulnerabilities: dedupeVulnerabilities(vulnerabilities) };
49817
49816
  } catch (error) {
49818
49817
  return {
49819
49818
  file: filePath,
@@ -49856,7 +49855,7 @@ async function scanProject(files, language, analyzeOpts, crossFileBudgetMs) {
49856
49855
  ...finding.tags && finding.tags.length > 0 ? { tags: [...finding.tags] } : {}
49857
49856
  });
49858
49857
  }
49859
- return { file, vulnerabilities };
49858
+ return { file, vulnerabilities: dedupeVulnerabilities(vulnerabilities) };
49860
49859
  });
49861
49860
  return {
49862
49861
  results,
@@ -49870,14 +49869,14 @@ async function scanProject(files, language, analyzeOpts, crossFileBudgetMs) {
49870
49869
  async function initWasm(spin) {
49871
49870
  const isStandalone = import.meta.url.includes("/$bunfs/");
49872
49871
  if (isStandalone) {
49873
- const { dirname: dirname4, join: join3 } = await import("path");
49874
- const binaryDir = dirname4(process.execPath);
49872
+ const { dirname: dirname3, join: join3 } = await import("path");
49873
+ const binaryDir = dirname3(process.execPath);
49875
49874
  const cwd = process.cwd();
49876
49875
  let scriptDir = null;
49877
49876
  if (!import.meta.url.includes("/$bunfs/")) {
49878
49877
  try {
49879
49878
  const { fileURLToPath } = await import("url");
49880
- scriptDir = dirname4(fileURLToPath(import.meta.url));
49879
+ scriptDir = dirname3(fileURLToPath(import.meta.url));
49881
49880
  } catch {}
49882
49881
  }
49883
49882
  const wasmLocations = [
@@ -49932,7 +49931,7 @@ Please ensure the wasm/ directory is located next to the binary or in your curre
49932
49931
  } else {
49933
49932
  const require2 = createRequire2(import.meta.url);
49934
49933
  const circleIrPkg = require2.resolve("circle-ir/package.json");
49935
- const wasmBasePath = join2(dirname3(circleIrPkg), "dist", "wasm") + "/";
49934
+ const wasmBasePath = join2(dirname2(circleIrPkg), "dist", "wasm") + "/";
49936
49935
  await initAnalyzer({
49937
49936
  wasmPath: wasmBasePath + "web-tree-sitter.wasm",
49938
49937
  languagePaths: {
@@ -49963,7 +49962,7 @@ function buildProfileSummary(scanRoot, modules, resolvedProfiles) {
49963
49962
  return {
49964
49963
  scanRoot,
49965
49964
  modules: modules.map((m) => ({
49966
- root: relative4(scanRoot, m.module.root) || ".",
49965
+ root: relative3(scanRoot, m.module.root) || ".",
49967
49966
  profile: m.profile,
49968
49967
  reasons: m.reasons,
49969
49968
  buildSystem: m.module.buildSystem
@@ -49992,9 +49991,9 @@ function printProfileExplain(scanRoot, detection) {
49992
49991
  out2.push(" (no pom.xml, build.gradle, or build.gradle.kts found)");
49993
49992
  } else {
49994
49993
  for (const r of detection.modules) {
49995
- const rel = relative4(scanRoot, r.module.root) || ".";
49994
+ const rel = relative3(scanRoot, r.module.root) || ".";
49996
49995
  out2.push(` ${colors.cyan(rel || ".")} → ${colors.bold(r.profile)}`);
49997
- out2.push(` build: ${r.module.buildSystem} (${relative4(scanRoot, r.module.buildFile)})`);
49996
+ out2.push(` build: ${r.module.buildSystem} (${relative3(scanRoot, r.module.buildFile)})`);
49998
49997
  if (r.module.artifactId) {
49999
49998
  out2.push(` coords: ${r.module.groupId ?? "?"}:${r.module.artifactId}:${r.module.version ?? "?"}`);
50000
49999
  }
@@ -50039,7 +50038,7 @@ async function runScan(targetPath, options) {
50039
50038
  await initWasm(spin);
50040
50039
  if (spin)
50041
50040
  spin.text = "Collecting files...";
50042
- const absPath = resolve2(targetPath);
50041
+ const absPath = resolve(targetPath);
50043
50042
  if (!existsSync(absPath)) {
50044
50043
  if (spin)
50045
50044
  spin.fail(`Path not found: ${absPath}`);
@@ -50103,7 +50102,7 @@ async function runScan(targetPath, options) {
50103
50102
  results = [];
50104
50103
  let processed = 0;
50105
50104
  const formatCurrentFile = (file) => {
50106
- const rel = relative4(absPath, file) || file;
50105
+ const rel = relative3(absPath, file) || file;
50107
50106
  return rel.length > 80 ? `...${rel.slice(-77)}` : rel;
50108
50107
  };
50109
50108
  const concurrency = options.threads;
@@ -50279,7 +50278,7 @@ async function runMetrics(targetPath, options) {
50279
50278
  await initWasm(spin);
50280
50279
  if (spin)
50281
50280
  spin.text = "Collecting files...";
50282
- const absPath = resolve2(targetPath);
50281
+ const absPath = resolve(targetPath);
50283
50282
  if (!existsSync(absPath)) {
50284
50283
  if (spin)
50285
50284
  spin.fail(`Path not found: ${absPath}`);
@@ -50307,7 +50306,7 @@ async function runMetrics(targetPath, options) {
50307
50306
  continue;
50308
50307
  }
50309
50308
  if (spin) {
50310
- const rel = relative4(absPath, file) || file;
50309
+ const rel = relative3(absPath, file) || file;
50311
50310
  const maxLen = 80;
50312
50311
  const label = rel.length > maxLen ? `...${rel.slice(-(maxLen - 3))}` : rel;
50313
50312
  spin.text = `Analyzing ${label}... (${processed}/${totalFiles})`;
@@ -50352,7 +50351,7 @@ async function runMetrics(targetPath, options) {
50352
50351
  } else {
50353
50352
  const lines = [];
50354
50353
  for (const fm of filtered) {
50355
- const rel = relative4(absPath, fm.file) || fm.file;
50354
+ const rel = relative3(absPath, fm.file) || fm.file;
50356
50355
  lines.push(rel);
50357
50356
  const byCategory = new Map;
50358
50357
  for (const m of fm.metrics) {
@@ -50580,7 +50579,7 @@ async function collectManifestFiles(targetPath) {
50580
50579
  return found;
50581
50580
  }
50582
50581
  async function runSbom(targetPath, options) {
50583
- const absPath = resolve2(targetPath);
50582
+ const absPath = resolve(targetPath);
50584
50583
  if (!existsSync(absPath)) {
50585
50584
  console.error(colors.red(`Error: path not found: ${targetPath}`));
50586
50585
  process.exit(2);
@@ -50594,9 +50593,9 @@ async function runSbom(targetPath, options) {
50594
50593
  for (const m of manifests) {
50595
50594
  const superseded = SBOM_SUPERSEDES[basename(m)];
50596
50595
  if (superseded)
50597
- supersededInDir.add(`${dirname3(m)}\x00${superseded}`);
50596
+ supersededInDir.add(`${dirname2(m)}\x00${superseded}`);
50598
50597
  }
50599
- const effective = manifests.filter((m) => !supersededInDir.has(`${dirname3(m)}\x00${basename(m)}`));
50598
+ const effective = manifests.filter((m) => !supersededInDir.has(`${dirname2(m)}\x00${basename(m)}`));
50600
50599
  let projectName = options.name;
50601
50600
  let projectLicense;
50602
50601
  {
@@ -50756,6 +50755,7 @@ export {
50756
50755
  loadConfig,
50757
50756
  isTestFile2 as isTestFile,
50758
50757
  detectLanguage7 as detectLanguage,
50758
+ dedupeVulnerabilities,
50759
50759
  convertConfigToPassOptions,
50760
50760
  applySuppressionsToResults,
50761
50761
  PASS_REGISTRY