@sarj/eslint-plugin 16.23.0 → 16.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -303,7 +303,7 @@ var TEST_INTEGRATION_BASENAME_RE = /\.integration\.[cm]?[jt]sx?$/;
303
303
  var TEST_DIR_RE = /(^|\/)(tests?|__tests__|__mocks__|fixtures|__fixtures__|__testfixtures__|e2e|integration)\//;
304
304
  var FIXTURE_TREE_RE = /(^|\/)fixture\//;
305
305
  function isTestFile(filename, gates = []) {
306
- const normalized = filename.replaceAll("\\", "/");
306
+ const normalized = scopedFilename(filename);
307
307
  const base = normalized.slice(normalized.lastIndexOf("/") + 1);
308
308
  if (TEST_BASENAME_RE.test(base) || TEST_INTEGRATION_BASENAME_RE.test(base)) {
309
309
  return true;
@@ -314,14 +314,14 @@ function isTestFile(filename, gates = []) {
314
314
  return gates.includes("fixtureTree") && FIXTURE_TREE_RE.test(normalized);
315
315
  }
316
316
  function isStoryFile(filename, gates = []) {
317
- const normalized = filename.replaceAll("\\", "/");
317
+ const normalized = scopedFilename(filename);
318
318
  if (STORY_FILE_RE.test(normalized)) {
319
319
  return true;
320
320
  }
321
321
  return gates.includes("storyTree") && STORY_TREE_RE.test(normalized);
322
322
  }
323
323
  function isGeneratedFile(filename, sourceText = "", gates = []) {
324
- const normalized = filename.replaceAll("\\", "/");
324
+ const normalized = scopedFilename(filename);
325
325
  if (GENERATED_FILE_RE.test(normalized)) {
326
326
  return true;
327
327
  }
@@ -370,7 +370,10 @@ function leadingCommentBodies(sourceText) {
370
370
  return bodies;
371
371
  }
372
372
  function isScriptFile(filename) {
373
- return SCRIPT_FILE_RE.test(filename);
373
+ return SCRIPT_FILE_RE.test(scopedFilename(filename));
374
+ }
375
+ function scopedFilename(input) {
376
+ return (typeof input === "string" ? input : input.filename).replaceAll("\\", "/");
374
377
  }
375
378
  function matchesAnyPattern(filename, patterns) {
376
379
  const normalized = filename.replaceAll("\\", "/");
@@ -641,7 +644,7 @@ var no_credential_in_browser_storage_default = createRule({
641
644
  },
642
645
  defaultOptions: [],
643
646
  create(context) {
644
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
647
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
645
648
  const { sourceCode } = context;
646
649
  const report2 = (node, key) => {
647
650
  if (key !== null && isAuthSecretName(key) && !tokenize(key).some((word) => METADATA_WORDS.has(word))) {
@@ -762,7 +765,7 @@ var no_numeric_search_param_coercion_default = createRule({
762
765
  },
763
766
  defaultOptions: [],
764
767
  create(context) {
765
- if (isGeneratedFile(context.filename, context.sourceCode.text) || isTestFile(context.filename)) return {};
768
+ if (isGeneratedFile(context, context.sourceCode.text) || isTestFile(context)) return {};
766
769
  let services;
767
770
  try {
768
771
  services = ESLintUtils2.getParserServices(context);
@@ -819,7 +822,7 @@ function isSearchParamReceiver(call, services) {
819
822
  // package.json
820
823
  var package_default = {
821
824
  name: "@sarj/eslint-plugin",
822
- version: "16.23.0",
825
+ version: "16.23.2",
823
826
  packageManager: "npm@12.2.0",
824
827
  description: "Custom ESLint rules for hypermodern TypeScript / React / Next.js projects",
825
828
  type: "module",
@@ -991,49 +994,52 @@ function memberName(node) {
991
994
  if (ts.isElementAccessExpression(node) && ts.isStringLiteralLike(node.argumentExpression)) return node.argumentExpression.text;
992
995
  return null;
993
996
  }
994
- function ownedSource(source) {
995
- return !source.isDeclarationFile && !/(?:^|[/\\])(?:node_modules|vendor|vendored|generated|dist)(?:[/\\])/u.test(source.fileName) && !isGeneratedFile(source.fileName, source.text);
997
+ function ownedSource(source, cwd) {
998
+ const path = { filename: source.fileName, cwd };
999
+ return !source.isDeclarationFile && !/(?:^|[/\\])(?:node_modules|vendor|vendored|generated|dist)(?:[/\\])/u.test(scopedFilename(path)) && !isGeneratedFile(path, source.text);
996
1000
  }
997
- function escapedClasses(program, checker) {
998
- const cached = ESCAPED_CLASSES.get(program);
1001
+ function escapedClasses(program, checker, cwd) {
1002
+ const scopes = ESCAPED_CLASSES.get(program) ?? /* @__PURE__ */ new Map();
1003
+ const cached = scopes.get(cwd);
999
1004
  if (cached !== void 0) return cached;
1000
1005
  const escaped = /* @__PURE__ */ new Set();
1001
1006
  const namespaceValues = /* @__PURE__ */ new Map();
1002
1007
  function visit(node) {
1003
1008
  if (ts.isTypeNode(node) || ts.isImportDeclaration(node)) return;
1004
1009
  if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {
1005
- recordEscapedReference(checker, node, escaped, namespaceValues);
1010
+ recordEscapedReference(checker, node, escaped, namespaceValues, cwd);
1006
1011
  }
1007
1012
  ts.forEachChild(node, visit);
1008
1013
  }
1009
- for (const source of program.getSourceFiles()) if (ownedSource(source)) visit(source);
1010
- ESCAPED_CLASSES.set(program, escaped);
1014
+ for (const source of program.getSourceFiles()) if (ownedSource(source, cwd)) visit(source);
1015
+ scopes.set(cwd, escaped);
1016
+ ESCAPED_CLASSES.set(program, scopes);
1011
1017
  return escaped;
1012
1018
  }
1013
- function recordEscapedReference(checker, node, escaped, namespaceValues) {
1019
+ function recordEscapedReference(checker, node, escaped, namespaceValues, cwd) {
1014
1020
  const symbol = canonicalSymbol(checker, node);
1015
1021
  if (symbol !== void 0) {
1016
1022
  let values = namespaceValues.get(symbol);
1017
1023
  if (values === void 0) {
1018
- values = ownedClassValues(checker, symbol);
1024
+ values = ownedClassValues(checker, symbol, cwd);
1019
1025
  namespaceValues.set(symbol, values);
1020
1026
  }
1021
1027
  if (!namespacePrefix(symbol, node) && !safeClassReference(node)) for (const value of values) escaped.add(value);
1022
1028
  }
1023
1029
  if (ts.isElementAccessExpression(node) && !safeClassReference(node)) {
1024
1030
  const receiver = canonicalSymbol(checker, node.expression) ?? checker.getTypeAtLocation(node.expression).getSymbol();
1025
- if (receiver !== void 0) for (const value of ownedClassValues(checker, receiver)) escaped.add(value);
1031
+ if (receiver !== void 0) for (const value of ownedClassValues(checker, receiver, cwd)) escaped.add(value);
1026
1032
  }
1027
1033
  }
1028
- function ownedClassValues(checker, original, seen = /* @__PURE__ */ new Set()) {
1034
+ function ownedClassValues(checker, original, cwd, seen = /* @__PURE__ */ new Set()) {
1029
1035
  const symbol = original.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(original) : original;
1030
1036
  const values = /* @__PURE__ */ new Set();
1031
1037
  if (seen.has(symbol)) return values;
1032
1038
  seen.add(symbol);
1033
- if (symbol.declarations?.some((declaration) => ts.isClassDeclaration(declaration) && ownedSource(declaration.getSourceFile()))) values.add(symbol);
1034
- if (symbol.declarations?.some((declaration) => (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) && ownedSource(declaration.getSourceFile()))) {
1039
+ if (symbol.declarations?.some((declaration) => ts.isClassDeclaration(declaration) && ownedSource(declaration.getSourceFile(), cwd))) values.add(symbol);
1040
+ if (symbol.declarations?.some((declaration) => (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) && ownedSource(declaration.getSourceFile(), cwd))) {
1035
1041
  for (const exported of checker.getExportsOfModule(symbol)) {
1036
- for (const value of ownedClassValues(checker, exported, seen)) values.add(value);
1042
+ for (const value of ownedClassValues(checker, exported, cwd, seen)) values.add(value);
1037
1043
  }
1038
1044
  }
1039
1045
  return values;
@@ -1049,7 +1055,7 @@ function namespacePrefix(symbol, node) {
1049
1055
  const memberCall = (ts.isPropertyAccessExpression(parent) || ts.isElementAccessExpression(parent)) && ts.isCallExpression(parent.parent) && parent.parent.expression === parent;
1050
1056
  return !symbol.declarations?.some(ts.isClassDeclaration) && (ts.isPropertyAccessExpression(parent) || ts.isElementAccessExpression(parent)) && parent.expression === node && !memberCall;
1051
1057
  }
1052
- function closedNominalBoundary(program, checker, call, consumer, missing) {
1058
+ function closedNominalBoundary(program, checker, call, consumer, missing, cwd) {
1053
1059
  const { implementation, contractSymbol } = missing;
1054
1060
  const implementationSymbol = implementation.name === void 0 ? void 0 : canonicalSymbol(checker, implementation.name);
1055
1061
  const consumerSymbol = consumer.name === void 0 ? void 0 : canonicalSymbol(checker, consumer.name);
@@ -1058,7 +1064,7 @@ function closedNominalBoundary(program, checker, call, consumer, missing) {
1058
1064
  if (contract === void 0) return false;
1059
1065
  const targets = /* @__PURE__ */ new Set([consumerSymbol, ...classHierarchySymbols(checker, contract), ...classHierarchySymbols(checker, implementation)]);
1060
1066
  const sources = /* @__PURE__ */ new Set([call.getSourceFile(), consumer.getSourceFile(), implementation.getSourceFile(), ...contractSymbol.declarations?.map((item) => item.getSourceFile()) ?? []]);
1061
- return ![...sources].some(hasPrototypeMutation) && ![...targets].some((target) => escapedClasses(program, checker).has(target));
1067
+ return ![...sources].some(hasPrototypeMutation) && ![...targets].some((target) => escapedClasses(program, checker, cwd).has(target));
1062
1068
  }
1063
1069
  function classHierarchySymbols(checker, declaration, seen = /* @__PURE__ */ new Set()) {
1064
1070
  const symbol = declaration.name === void 0 ? void 0 : canonicalSymbol(checker, declaration.name);
@@ -1181,7 +1187,7 @@ var require_explicit_contract_implementation_default = createRule({
1181
1187
  },
1182
1188
  defaultOptions: [],
1183
1189
  create(context) {
1184
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
1190
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
1185
1191
  if (!context.sourceCode.parserServices?.program || !context.sourceCode.parserServices.esTreeNodeToTSNodeMap) return {};
1186
1192
  const services = ESLintUtils3.getParserServices(context);
1187
1193
  const checker = services.program.getTypeChecker();
@@ -1199,7 +1205,7 @@ var require_explicit_contract_implementation_default = createRule({
1199
1205
  if (parameter === void 0) continue;
1200
1206
  const tsArgument = services.esTreeNodeToTSNodeMap.get(argument);
1201
1207
  const missing = missingImplementation(checker, signature, parameter, tsNode, tsArgument);
1202
- if (missing === null || !closedNominalBoundary(services.program, checker, tsNode, consumer, missing)) continue;
1208
+ if (missing === null || !closedNominalBoundary(services.program, checker, tsNode, consumer, missing, context.cwd)) continue;
1203
1209
  context.report({
1204
1210
  node: argument,
1205
1211
  messageId: "declareActualContract",
@@ -1798,9 +1804,8 @@ var require_port_for_service_default = createRule({
1798
1804
  },
1799
1805
  defaultOptions: [],
1800
1806
  create(context) {
1801
- const { filename } = context;
1802
- if (isTestFile(filename) || isStoryFile(filename) || isScriptFile(filename)) return {};
1803
- if (isGeneratedFile(filename, context.sourceCode.getText())) return {};
1807
+ if (isTestFile(context) || isStoryFile(context) || isScriptFile(context)) return {};
1808
+ if (isGeneratedFile(context, context.sourceCode.getText())) return {};
1804
1809
  let declaredTypes = null;
1805
1810
  const detachedExports = detachedValueExports(context.sourceCode.ast);
1806
1811
  const localClasses = localClassAbstractness(context.sourceCode.ast);
@@ -2075,14 +2080,14 @@ var require_explicit_service_contract_default = createRule({
2075
2080
  },
2076
2081
  defaultOptions: [],
2077
2082
  create(context) {
2078
- if (/\.(?:js|jsx|mjs|cjs)$/iu.test(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2083
+ if (/\.(?:js|jsx|mjs|cjs)$/iu.test(context.filename) || isGeneratedFile(context, context.sourceCode.text)) return {};
2079
2084
  const program = context.sourceCode.ast;
2080
2085
  const operationsFor = createServiceOperationResolver(program);
2081
2086
  const isExportedServiceClass = createExportedServiceClassResolver(program);
2082
2087
  return {
2083
2088
  ClassDeclaration(node) {
2084
2089
  if (node.id === null || node.abstract || node.decorators.length > 0 || !isServiceRole(node.id.name, context.filename)) return;
2085
- if (isExportedServiceClass(node) && !isTestFile(context.filename) && !isStoryFile(context.filename) && !isScriptFile(context.filename)) return;
2090
+ if (isExportedServiceClass(node) && !isTestFile(context) && !isStoryFile(context) && !isScriptFile(context)) return;
2086
2091
  const operations = operationsFor(node);
2087
2092
  if (operations.length === 0 || hasDeclaredServiceContract(node, operations, program) !== false) return;
2088
2093
  context.report({
@@ -2164,7 +2169,7 @@ var no_conditional_empty_object_spread_default = createRule({
2164
2169
  },
2165
2170
  defaultOptions: [],
2166
2171
  create(context) {
2167
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2172
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
2168
2173
  return {
2169
2174
  SpreadElement(node) {
2170
2175
  if (node.parent.type !== AST_NODE_TYPES8.ObjectExpression || node.argument.type !== AST_NODE_TYPES8.ConditionalExpression)
@@ -2240,7 +2245,7 @@ var prefer_typed_reflection_default = createRule({
2240
2245
  },
2241
2246
  defaultOptions: [],
2242
2247
  create(context) {
2243
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2248
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
2244
2249
  if (!context.sourceCode.parserServices?.program || !context.sourceCode.parserServices.esTreeNodeToTSNodeMap)
2245
2250
  return {};
2246
2251
  const services = ESLintUtils4.getParserServices(context);
@@ -2360,7 +2365,7 @@ var no_broad_return_type_default = createRule({
2360
2365
  },
2361
2366
  defaultOptions: [],
2362
2367
  create(context) {
2363
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2368
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
2364
2369
  if (!context.sourceCode.parserServices?.program || !context.sourceCode.parserServices.esTreeNodeToTSNodeMap)
2365
2370
  return {};
2366
2371
  const services = ESLintUtils5.getParserServices(context);
@@ -2436,7 +2441,7 @@ var no_reduce_accumulator_copy_default = createRule({
2436
2441
  } },
2437
2442
  defaultOptions: [],
2438
2443
  create(context) {
2439
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2444
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
2440
2445
  if (!context.sourceCode.parserServices?.program || !context.sourceCode.parserServices.esTreeNodeToTSNodeMap) return {};
2441
2446
  const services = ESLintUtils6.getParserServices(context);
2442
2447
  const program = services.program;
@@ -2523,7 +2528,7 @@ var no_known_value_widening_default = createRule({
2523
2528
  },
2524
2529
  defaultOptions: [],
2525
2530
  create(context) {
2526
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
2531
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
2527
2532
  if (!context.sourceCode.parserServices?.program || !context.sourceCode.parserServices.esTreeNodeToTSNodeMap) return {};
2528
2533
  const services = ESLintUtils7.getParserServices(context);
2529
2534
  if (services.program === null) return {};
@@ -2577,7 +2582,7 @@ var no_invalid_typed_mutation_default = createRule({
2577
2582
  },
2578
2583
  defaultOptions: [],
2579
2584
  create(context) {
2580
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
2585
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
2581
2586
  const services = ESLintUtils8.getParserServices(context);
2582
2587
  const checker = services.program.getTypeChecker();
2583
2588
  const candidates = [];
@@ -2982,7 +2987,7 @@ var no_contradictory_type_predicate_default = createRule({
2982
2987
  },
2983
2988
  defaultOptions: [],
2984
2989
  create(context) {
2985
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
2990
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
2986
2991
  const services = ESLintUtils9.getParserServices(context);
2987
2992
  const checker = services.program.getTypeChecker();
2988
2993
  const uncheckedArray = contradictoryArrayPredicate(context.sourceCode, services);
@@ -3143,7 +3148,7 @@ var no_partial_type_predicate_default = createRule({
3143
3148
  },
3144
3149
  defaultOptions: [],
3145
3150
  create(context) {
3146
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3151
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3147
3152
  const services = ESLintUtils10.getParserServices(context);
3148
3153
  function inspect(node) {
3149
3154
  const predicate = primitivePredicate(node, services);
@@ -3580,7 +3585,7 @@ var no_boolean_selector_parameter_default = createRule({
3580
3585
  },
3581
3586
  defaultOptions: [],
3582
3587
  create(context) {
3583
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3588
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3584
3589
  const services = ESLintUtils11.getParserServices(context);
3585
3590
  const reported = /* @__PURE__ */ new Set();
3586
3591
  function report2(identifier) {
@@ -3670,7 +3675,7 @@ var no_invalid_zod_custom_parse_default = createRule({
3670
3675
  },
3671
3676
  defaultOptions: [],
3672
3677
  create(context) {
3673
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3678
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3674
3679
  const services = ESLintUtils12.getParserServices(context);
3675
3680
  const checker = services.program.getTypeChecker();
3676
3681
  const options = services.program.getCompilerOptions();
@@ -3787,7 +3792,7 @@ var no_contradictory_overload_return_default = createRule({
3787
3792
  },
3788
3793
  defaultOptions: [],
3789
3794
  create(context) {
3790
- if (isGeneratedFile(context.filename, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3795
+ if (isGeneratedFile(context, context.sourceCode.text) || !context.sourceCode.parserServices?.program) return {};
3791
3796
  const services = ESLintUtils13.getParserServices(context);
3792
3797
  const checker = services.program.getTypeChecker();
3793
3798
  const options = services.program.getCompilerOptions();
@@ -4141,7 +4146,7 @@ var require_button_accessible_name_default = createRule({
4141
4146
  },
4142
4147
  defaultOptions: [{}],
4143
4148
  create(context, [options]) {
4144
- if (isGeneratedFile(context.filename, context.sourceCode.text) || isTestFile(context.filename) || isStoryFile(context.filename))
4149
+ if (isGeneratedFile(context, context.sourceCode.text) || isTestFile(context) || isStoryFile(context))
4145
4150
  return {};
4146
4151
  const iconModules = options?.iconModules ?? ["lucide-react"];
4147
4152
  return {
@@ -4219,7 +4224,7 @@ var require_camelcase_properties_default = createRule({
4219
4224
  },
4220
4225
  defaultOptions: [],
4221
4226
  create(context) {
4222
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
4227
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
4223
4228
  const checkProperty = (node) => {
4224
4229
  if (node.computed === true || node.key.type !== AST_NODE_TYPES23.Identifier) return;
4225
4230
  if (!SNAKE_CASE_RE.test(node.key.name)) return;
@@ -4298,7 +4303,7 @@ var require_svg_accessible_name_default = createRule({
4298
4303
  },
4299
4304
  defaultOptions: [],
4300
4305
  create(context) {
4301
- if (isGeneratedFile(context.filename, context.sourceCode.text) || isTestFile(context.filename) || isStoryFile(context.filename))
4306
+ if (isGeneratedFile(context, context.sourceCode.text) || isTestFile(context) || isStoryFile(context))
4302
4307
  return {};
4303
4308
  return {
4304
4309
  JSXElement(node) {
@@ -4459,7 +4464,7 @@ var prefer_logical_tailwind_utilities_default = createRule({
4459
4464
  },
4460
4465
  defaultOptions: [{ enabled: true, checkInsets: false, allowUtilities: [] }],
4461
4466
  create(context, [options]) {
4462
- if (options?.enabled === false || isGeneratedFile(context.filename, context.sourceCode.text) || isTestFile(context.filename) || isStoryFile(context.filename))
4467
+ if (options?.enabled === false || isGeneratedFile(context, context.sourceCode.text) || isTestFile(context) || isStoryFile(context))
4463
4468
  return {};
4464
4469
  return {
4465
4470
  JSXOpeningElement(node) {
@@ -4610,7 +4615,7 @@ var no_unlocalized_toast_default = createRule({
4610
4615
  },
4611
4616
  defaultOptions: [{ enabled: true }],
4612
4617
  create(context, [options]) {
4613
- if (localizationExcluded(context.filename, context.sourceCode.text, options))
4618
+ if (localizationExcluded(context, context.sourceCode.text, options))
4614
4619
  return {};
4615
4620
  const functions = options?.functions ?? [
4616
4621
  { module: "sonner", export: "toast" },
@@ -4722,7 +4727,7 @@ var no_unlocalized_jsx_attributes_default = createRule({
4722
4727
  },
4723
4728
  defaultOptions: [{ enabled: true }],
4724
4729
  create(context, [options]) {
4725
- if (localizationExcluded(context.filename, context.sourceCode.text, options))
4730
+ if (localizationExcluded(context, context.sourceCode.text, options))
4726
4731
  return {};
4727
4732
  const attributes = options?.attributes ?? [
4728
4733
  "title",
@@ -4800,7 +4805,7 @@ var no_unlocalized_jsx_text_default = createRule({
4800
4805
  },
4801
4806
  defaultOptions: [{ enabled: true }],
4802
4807
  create(context, [options]) {
4803
- if (localizationExcluded(context.filename, context.sourceCode.text, options))
4808
+ if (localizationExcluded(context, context.sourceCode.text, options))
4804
4809
  return {};
4805
4810
  return {
4806
4811
  JSXText(node) {
@@ -5092,7 +5097,7 @@ var enforce_file_structure_default = createRule({
5092
5097
  },
5093
5098
  defaultOptions: [],
5094
5099
  create(context) {
5095
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
5100
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
5096
5101
  return {};
5097
5102
  }
5098
5103
  return {
@@ -5474,7 +5479,7 @@ var duplicate_test_body_default = createRule({
5474
5479
  },
5475
5480
  defaultOptions: [],
5476
5481
  create(context) {
5477
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
5482
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
5478
5483
  return {};
5479
5484
  }
5480
5485
  const siblings = /* @__PURE__ */ new Map();
@@ -5716,7 +5721,7 @@ var excessive_commentary_default = createRule({
5716
5721
  create(context) {
5717
5722
  return {
5718
5723
  Program() {
5719
- for (const group of proseGroups(context.filename, context.sourceCode)) {
5724
+ for (const group of proseGroups(context, context.sourceCode)) {
5720
5725
  const lines = lineCount(group.text);
5721
5726
  const words2 = wordCount(group.text);
5722
5727
  if (isJSDoc(group.comment)) {
@@ -6507,7 +6512,7 @@ var no_comment_cruft_default = createRule({
6507
6512
  },
6508
6513
  defaultOptions: [],
6509
6514
  create(context) {
6510
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
6515
+ if (isGeneratedFile(context, context.sourceCode.text)) {
6511
6516
  return {};
6512
6517
  }
6513
6518
  const sourceCode = context.sourceCode;
@@ -6606,7 +6611,7 @@ var no_comment_cruft_default = createRule({
6606
6611
  return {
6607
6612
  Program() {
6608
6613
  const comments = sourceCode.getAllComments();
6609
- const callMatrixStems = isTestFile(context.filename) ? testCallMatrixStems(comments) : /* @__PURE__ */ new Set();
6614
+ const callMatrixStems = isTestFile(context) ? testCallMatrixStems(comments) : /* @__PURE__ */ new Set();
6610
6615
  const walls = findCommentWalls(comments);
6611
6616
  const wallByLeader = new Map(walls.map((wall) => [wall.leader, wall]));
6612
6617
  const wallMembers = new Set(walls.flatMap((wall) => [...wall.members]));
@@ -7055,7 +7060,7 @@ var no_duplicate_lifecycle_refresh_listeners_default = createRule({
7055
7060
  },
7056
7061
  defaultOptions: [],
7057
7062
  create(context) {
7058
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
7063
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
7059
7064
  const routerHooks = /* @__PURE__ */ new Set();
7060
7065
  const routers = /* @__PURE__ */ new Set();
7061
7066
  const functionCallbacks = /* @__PURE__ */ new Map();
@@ -7726,7 +7731,7 @@ var no_enum_default = createRule({
7726
7731
  const filename = context.filename;
7727
7732
  const sourceText = context.sourceCode.getText();
7728
7733
  const isIgnoredByOption = ignoreFiles.length > 0 && matchesAnyPattern(filename, ignoreFiles);
7729
- if (isIgnoredByOption || isGeneratedFile(filename, sourceText)) {
7734
+ if (isIgnoredByOption || isGeneratedFile(context, sourceText)) {
7730
7735
  return {};
7731
7736
  }
7732
7737
  return {
@@ -7880,7 +7885,7 @@ var no_excessive_cognitive_complexity_default = createRule({
7880
7885
  },
7881
7886
  defaultOptions: [],
7882
7887
  create(context) {
7883
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
7888
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
7884
7889
  function check(node) {
7885
7890
  const points = functionComplexity(node, context.sourceCode.visitorKeys);
7886
7891
  const score = points.reduce((sum, point) => sum + point.amount, 0);
@@ -8281,7 +8286,7 @@ var no_fat_try_blocks_default = createRule({
8281
8286
  },
8282
8287
  defaultOptions: [{ max: MAX_TRY_BODY_STATEMENTS }],
8283
8288
  create(context, [options]) {
8284
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
8289
+ if (isGeneratedFile(context, context.sourceCode.text)) {
8285
8290
  return {};
8286
8291
  }
8287
8292
  const sourceCode = context.sourceCode;
@@ -8459,7 +8464,7 @@ var no_hand_rolled_sleep_default = createRule({
8459
8464
  defaultOptions: [{}],
8460
8465
  create(context, [optionsArg]) {
8461
8466
  const { filename, sourceCode } = context;
8462
- if (isTestFile(filename) || isScriptFile(filename) || isGeneratedFile(filename, sourceCode.getText())) {
8467
+ if (isTestFile(context) || isScriptFile(context) || isGeneratedFile(context, sourceCode.getText())) {
8463
8468
  return {};
8464
8469
  }
8465
8470
  const allowIn = optionsArg?.allowIn ?? [];
@@ -8606,7 +8611,7 @@ var no_hand_rolled_spinner_default = createRule({
8606
8611
  },
8607
8612
  defaultOptions: [],
8608
8613
  create(context) {
8609
- if (DESIGN_SYSTEM_PATH.test(context.filename) || isTestFile(context.filename) || isStoryFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
8614
+ if (DESIGN_SYSTEM_PATH.test(context.filename) || isTestFile(context) || isStoryFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
8610
8615
  return {};
8611
8616
  }
8612
8617
  return {
@@ -8727,7 +8732,7 @@ var no_insecure_random_id_default = createRule({
8727
8732
  },
8728
8733
  defaultOptions: [],
8729
8734
  create(context) {
8730
- if (isTestFile(context.filename)) {
8735
+ if (isTestFile(context)) {
8731
8736
  return {};
8732
8737
  }
8733
8738
  return {
@@ -8820,7 +8825,7 @@ var no_detached_global_fetch_default = createRule({
8820
8825
  defaultOptions: [],
8821
8826
  create(context) {
8822
8827
  const sourceCode = context.sourceCode;
8823
- if (isTestFile(context.filename) || isScriptFile(context.filename) || isGeneratedFile(context.filename, sourceCode.text)) return {};
8828
+ if (isTestFile(context) || isScriptFile(context) || isGeneratedFile(context, sourceCode.text)) return {};
8824
8829
  const aliases = /* @__PURE__ */ new Set();
8825
8830
  function bindingOf(identifier) {
8826
8831
  return ASTUtils24.findVariable(sourceCode.getScope(identifier), identifier.name);
@@ -8978,7 +8983,7 @@ var no_exception_text_in_5xx_response_default = createRule({
8978
8983
  defaultOptions: [],
8979
8984
  create(context) {
8980
8985
  const sourceCode = context.sourceCode;
8981
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.text)) return {};
8986
+ if (isTestFile(context) || isGeneratedFile(context, sourceCode.text)) return {};
8982
8987
  const candidates = [];
8983
8988
  const changedErrors = /* @__PURE__ */ new Set();
8984
8989
  const stableBindings = /* @__PURE__ */ new WeakMap();
@@ -9710,7 +9715,7 @@ var no_json_stringify_object_equality_default = createRule({
9710
9715
  defaultOptions: [],
9711
9716
  create(context) {
9712
9717
  const sourceCode = context.sourceCode;
9713
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.text)) {
9718
+ if (isTestFile(context) || isGeneratedFile(context, sourceCode.text)) {
9714
9719
  return {};
9715
9720
  }
9716
9721
  let services;
@@ -9907,7 +9912,7 @@ var no_impossible_zod_literal_bounds_default = createRule({
9907
9912
  defaultOptions: [{}],
9908
9913
  create(context, [options]) {
9909
9914
  const sourceCode = context.sourceCode;
9910
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.getText())) {
9915
+ if (isTestFile(context) || isGeneratedFile(context, sourceCode.getText())) {
9911
9916
  return {};
9912
9917
  }
9913
9918
  const namespaces = /* @__PURE__ */ new Set();
@@ -10188,7 +10193,7 @@ var no_in_operator_on_built_in_collections_default = createRule({
10188
10193
  },
10189
10194
  defaultOptions: [],
10190
10195
  create(context) {
10191
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
10196
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
10192
10197
  let services;
10193
10198
  try {
10194
10199
  services = ESLintUtils15.getParserServices(context);
@@ -10320,7 +10325,7 @@ var no_redundant_optional_array_default_default = createRule({
10320
10325
  defaultOptions: [],
10321
10326
  create(context) {
10322
10327
  const sourceCode = context.sourceCode;
10323
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.getText())) {
10328
+ if (isTestFile(context) || isGeneratedFile(context, sourceCode.getText())) {
10324
10329
  return {};
10325
10330
  }
10326
10331
  const namespaces = /* @__PURE__ */ new Set();
@@ -10519,7 +10524,7 @@ var interface_contract_members_private_default = createRule({
10519
10524
  },
10520
10525
  defaultOptions: [],
10521
10526
  create(context) {
10522
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
10527
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
10523
10528
  let services;
10524
10529
  try {
10525
10530
  services = ESLintUtils16.getParserServices(context);
@@ -10815,7 +10820,7 @@ var no_log_only_catch_default = createRule({
10815
10820
  const above = sourceCode.getCommentsBefore(node).at(-1);
10816
10821
  return above !== void 0 && above.loc.end.line === node.loc.start.line - 1;
10817
10822
  }
10818
- if (isTestFile(filename) || BENCHMARK_DIR_RE.test(filename.replaceAll("\\", "/"))) {
10823
+ if (isTestFile(context) || BENCHMARK_DIR_RE.test(filename.replaceAll("\\", "/"))) {
10819
10824
  return {};
10820
10825
  }
10821
10826
  return {
@@ -10987,7 +10992,7 @@ var no_bare_return_from_test_catch_default = createRule({
10987
10992
  },
10988
10993
  defaultOptions: [],
10989
10994
  create(context) {
10990
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
10995
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
10991
10996
  return {
10992
10997
  ReturnStatement(node) {
10993
10998
  if (node.argument !== null) return;
@@ -11114,7 +11119,7 @@ var no_bespoke_api_case_conversion_default = createRule({
11114
11119
  create(context) {
11115
11120
  const filename = context.filename.replaceAll("\\", "/");
11116
11121
  const basename = filename.slice(filename.lastIndexOf("/") + 1);
11117
- if (!ADAPTER_BASENAME_RE.test(basename) || isGeneratedFile(filename, context.sourceCode.text) || isTestFile(filename, ["fixtureTree"])) {
11122
+ if (!ADAPTER_BASENAME_RE.test(basename) || isGeneratedFile(context, context.sourceCode.text) || isTestFile(context, ["fixtureTree"])) {
11118
11123
  return {};
11119
11124
  }
11120
11125
  const hasApiReceiver = (value) => {
@@ -11246,7 +11251,7 @@ var no_long_comment_default = createRule({
11246
11251
  if (VERSIONED_DEPENDENCY_TREE_RE.test(normalizedFilename)) return {};
11247
11252
  return {
11248
11253
  Program() {
11249
- for (const group of proseGroups(context.filename, context.sourceCode)) {
11254
+ for (const group of proseGroups(context, context.sourceCode)) {
11250
11255
  if (group.comment.type !== "Block" || !group.comment.value.startsWith("*") || group.hasTypedTags || hasDocumentationStructure(group.text) || hasTechnicalAnchor(group.text) || documentsTypedFunction(context.sourceCode, group.comment) || documentsTypeOrMember2(context.sourceCode, group.comment) || sentenceUnits(group.text) < EXCESSIVE_SENTENCE_COUNT && wordUnits(group.text) < EXCESSIVE_WORD_COUNT) continue;
11251
11256
  context.report({ node: group.comment, messageId: "tooLong" });
11252
11257
  }
@@ -11510,7 +11515,7 @@ var no_generic_single_export_module_default = createRule({
11510
11515
  create(context) {
11511
11516
  const file = fileParts(context.filename);
11512
11517
  const { stem: stem4 } = file;
11513
- if (!GENERIC_MODULE_STEMS.has(stem4) || isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
11518
+ if (!GENERIC_MODULE_STEMS.has(stem4) || isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
11514
11519
  let hasCommonJsExport = false;
11515
11520
  return {
11516
11521
  "CallExpression, MemberExpression"(node) {
@@ -11569,7 +11574,7 @@ var no_offset_pagination_default = createRule({
11569
11574
  },
11570
11575
  defaultOptions: [],
11571
11576
  create(context) {
11572
- if (isTestFile(context.filename)) {
11577
+ if (isTestFile(context)) {
11573
11578
  return {};
11574
11579
  }
11575
11580
  return createSqlListener((sql, node) => {
@@ -11838,7 +11843,7 @@ var no_positional_tuple_return_default = createRule({
11838
11843
  },
11839
11844
  defaultOptions: [],
11840
11845
  create(context) {
11841
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
11846
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
11842
11847
  const specifierExports = specifierExportedNames(context.sourceCode.ast);
11843
11848
  const typeExports = publiclyReachableTypeNames(
11844
11849
  context.sourceCode.ast,
@@ -12106,7 +12111,7 @@ var no_raw_env_default = createRule({
12106
12111
  defaultOptions: [],
12107
12112
  create(context) {
12108
12113
  const filename = context.filename;
12109
- if (isTestFile(filename) || isScriptFile(filename) || CONFIG_FILE_RE.test(filename.replaceAll("\\", "/"))) {
12114
+ if (isTestFile(context) || isScriptFile(context) || CONFIG_FILE_RE.test(filename.replaceAll("\\", "/"))) {
12110
12115
  return {};
12111
12116
  }
12112
12117
  const reads = [];
@@ -12307,7 +12312,7 @@ var no_raw_fetch_outside_clients_default = createRule({
12307
12312
  defaultOptions: [{}],
12308
12313
  create(context, [options]) {
12309
12314
  const filename = context.filename;
12310
- if (isTestFile(filename) || isScriptFile(filename) || NON_PRODUCTION_TREE_RE.test(filename)) {
12315
+ if (isTestFile(context) || isScriptFile(context) || NON_PRODUCTION_TREE_RE.test(filename)) {
12311
12316
  return {};
12312
12317
  }
12313
12318
  const patterns = options?.allow ?? DEFAULT_ALLOW;
@@ -12584,7 +12589,7 @@ var no_router_refresh_polling_default = createRule({
12584
12589
  },
12585
12590
  defaultOptions: [],
12586
12591
  create(context) {
12587
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
12592
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
12588
12593
  const routerHooks = /* @__PURE__ */ new Set();
12589
12594
  const routers = /* @__PURE__ */ new Set();
12590
12595
  const reportedCallbacks = /* @__PURE__ */ new WeakSet();
@@ -12690,7 +12695,7 @@ var no_repeated_string_literal_default = createRule({
12690
12695
  },
12691
12696
  defaultOptions: [],
12692
12697
  create(context) {
12693
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
12698
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
12694
12699
  return {};
12695
12700
  }
12696
12701
  const occurrences = /* @__PURE__ */ new Map();
@@ -12843,7 +12848,7 @@ var no_restated_comment_default = createRule({
12843
12848
  },
12844
12849
  defaultOptions: [],
12845
12850
  create(context) {
12846
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
12851
+ if (isGeneratedFile(context, context.sourceCode.text)) {
12847
12852
  return {};
12848
12853
  }
12849
12854
  const sourceCode = context.sourceCode;
@@ -13029,7 +13034,7 @@ var no_restated_jsdoc_default = createRule({
13029
13034
  },
13030
13035
  defaultOptions: [],
13031
13036
  create(context) {
13032
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
13037
+ if (isGeneratedFile(context, context.sourceCode.text)) {
13033
13038
  return {};
13034
13039
  }
13035
13040
  const sourceCode = context.sourceCode;
@@ -13364,7 +13369,7 @@ var no_secret_in_log_default = createRule({
13364
13369
  defaultOptions: [{}],
13365
13370
  create(context, [loggingOptions]) {
13366
13371
  const matcher = createLogMatcher(loggingOptions);
13367
- const blobArmApplies = !isTestFile(context.filename);
13372
+ const blobArmApplies = !isTestFile(context);
13368
13373
  function resolvesToGlobal(identifier) {
13369
13374
  const variable = ASTUtils40.findVariable(context.sourceCode.getScope(identifier), identifier.name);
13370
13375
  return variable === null || variable.defs.length === 0;
@@ -13636,7 +13641,7 @@ var no_select_star_default = createRule({
13636
13641
  },
13637
13642
  defaultOptions: [],
13638
13643
  create(context) {
13639
- if (isTestFile(context.filename)) {
13644
+ if (isTestFile(context)) {
13640
13645
  return {};
13641
13646
  }
13642
13647
  return createSqlListener((sql, node) => {
@@ -14014,7 +14019,7 @@ var no_sentinel_return_on_catch_default = createRule({
14014
14019
  },
14015
14020
  defaultOptions: [{}],
14016
14021
  create(context, [loggingOptions]) {
14017
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
14022
+ if (isGeneratedFile(context, context.sourceCode.text)) {
14018
14023
  return {};
14019
14024
  }
14020
14025
  const matcher = createLogMatcher(loggingOptions);
@@ -14254,7 +14259,7 @@ var no_silent_promise_catch_default = createRule({
14254
14259
  },
14255
14260
  defaultOptions: [],
14256
14261
  create(context) {
14257
- if (isTestFile(context.filename) || isScriptFile(context.filename)) {
14262
+ if (isTestFile(context) || isScriptFile(context)) {
14258
14263
  return {};
14259
14264
  }
14260
14265
  function isZodSchema(node, seen = /* @__PURE__ */ new Set()) {
@@ -14449,7 +14454,7 @@ var no_sleep_in_test_body_default = createRule({
14449
14454
  },
14450
14455
  defaultOptions: [],
14451
14456
  create(context) {
14452
- if (!isTestFile(context.filename)) {
14457
+ if (!isTestFile(context)) {
14453
14458
  return {};
14454
14459
  }
14455
14460
  const report2 = (node) => {
@@ -14587,7 +14592,7 @@ var no_storage_in_stateless_modules_default = createRule({
14587
14592
  },
14588
14593
  defaultOptions: [{}],
14589
14594
  create(context, [options]) {
14590
- if (isTestFile(context.filename)) {
14595
+ if (isTestFile(context)) {
14591
14596
  return {};
14592
14597
  }
14593
14598
  const modules = options?.modules ?? [];
@@ -14827,7 +14832,7 @@ var no_string_concat_in_loop_default = createRule({
14827
14832
  },
14828
14833
  defaultOptions: [],
14829
14834
  create(context) {
14830
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
14835
+ if (isGeneratedFile(context, context.sourceCode.text)) {
14831
14836
  return {};
14832
14837
  }
14833
14838
  const reported = /* @__PURE__ */ new WeakMap();
@@ -14988,7 +14993,7 @@ var no_duplicate_test_case_default = createRule({
14988
14993
  },
14989
14994
  defaultOptions: [],
14990
14995
  create(context) {
14991
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
14996
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
14992
14997
  const inspected = /* @__PURE__ */ new Set();
14993
14998
  return {
14994
14999
  CallExpression(node) {
@@ -15341,7 +15346,7 @@ var no_tautological_expect_default = createRule({
15341
15346
  },
15342
15347
  defaultOptions: [],
15343
15348
  create(context) {
15344
- if (!isTestFile(context.filename)) {
15349
+ if (!isTestFile(context)) {
15345
15350
  return {};
15346
15351
  }
15347
15352
  const customized = customizedMatchers(context.sourceCode);
@@ -15567,7 +15572,7 @@ var no_typed_doc_sections_default = createRule({
15567
15572
  create(context) {
15568
15573
  return {
15569
15574
  Program() {
15570
- for (const group of proseGroups(context.filename, context.sourceCode, true)) {
15575
+ for (const group of proseGroups(context, context.sourceCode, true)) {
15571
15576
  const signature = documentedSignature(context.sourceCode, group.comment);
15572
15577
  if (group.hasTypedTags && signature !== null && typedTags(group.text).some((tag) => isVacuousTag(tag, signature, context.sourceCode))) {
15573
15578
  context.report({ node: group.comment, messageId: "typedSection" });
@@ -15743,7 +15748,7 @@ var no_trailing_value_narration_default = createRule({
15743
15748
  },
15744
15749
  defaultOptions: [],
15745
15750
  create(context) {
15746
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
15751
+ if (isGeneratedFile(context, context.sourceCode.text)) {
15747
15752
  return {};
15748
15753
  }
15749
15754
  const sourceCode = context.sourceCode;
@@ -16017,7 +16022,7 @@ var no_declaration_comment_wall_default = createRule({
16017
16022
  create(context, [provided]) {
16018
16023
  const options = { ...WALL_DEFAULTS, ...provided };
16019
16024
  const sourceCode = context.sourceCode;
16020
- if (isGeneratedFile(context.filename, sourceCode.text) || isTestFile(context.filename) || isStoryFile(context.filename)) {
16025
+ if (isGeneratedFile(context, sourceCode.text) || isTestFile(context) || isStoryFile(context)) {
16021
16026
  return {};
16022
16027
  }
16023
16028
  const endingOn = /* @__PURE__ */ new Map();
@@ -16197,7 +16202,7 @@ var no_union_in_comment_default = createRule({
16197
16202
  defaultOptions: [],
16198
16203
  create(context) {
16199
16204
  const sourceCode = context.sourceCode;
16200
- if (isGeneratedFile(context.filename, sourceCode.text)) {
16205
+ if (isGeneratedFile(context, sourceCode.text)) {
16201
16206
  return {};
16202
16207
  }
16203
16208
  function annotated(comment) {
@@ -16298,7 +16303,7 @@ var no_type_member_comment_wall_default = createRule({
16298
16303
  create(context, [provided]) {
16299
16304
  const options = { ...WALL_DEFAULTS, ...provided };
16300
16305
  const sourceCode = context.sourceCode;
16301
- if (isGeneratedFile(context.filename, sourceCode.text, ["externalTree"]) || isTestFile(context.filename, ["fixtureTree"]) || isStoryFile(context.filename, ["storyTree"])) {
16306
+ if (isGeneratedFile(context, sourceCode.text, ["externalTree"]) || isTestFile(context, ["fixtureTree"]) || isStoryFile(context, ["storyTree"])) {
16302
16307
  return {};
16303
16308
  }
16304
16309
  const endingOn = /* @__PURE__ */ new Map();
@@ -16685,7 +16690,7 @@ var no_unsafe_mock_casting_default = createRule({
16685
16690
  },
16686
16691
  defaultOptions: [],
16687
16692
  create(context) {
16688
- if (isGeneratedFile(context.filename, context.sourceCode.text)) {
16693
+ if (isGeneratedFile(context, context.sourceCode.text)) {
16689
16694
  return {};
16690
16695
  }
16691
16696
  const directBindings = /* @__PURE__ */ new Set();
@@ -16778,7 +16783,7 @@ var no_unsafe_test_double_cast_default = createRule({
16778
16783
  },
16779
16784
  defaultOptions: [],
16780
16785
  create(context) {
16781
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
16786
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
16782
16787
  return {
16783
16788
  TSAsExpression(node) {
16784
16789
  if ((node.expression.type === AST_NODE_TYPES78.TSAsExpression || node.expression.type === AST_NODE_TYPES78.TSTypeAssertion) && isUnknown(node.expression.typeAnnotation) && containsMockFactory(node.expression.expression, context.sourceCode)) context.report({ node, messageId: "noUnsafeTestDoubleCast" });
@@ -16817,7 +16822,7 @@ var no_first_party_module_mock_default = createRule({
16817
16822
  },
16818
16823
  defaultOptions: [{ additionalModulePrefixes: [] }],
16819
16824
  create(context, [options]) {
16820
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
16825
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
16821
16826
  return {
16822
16827
  CallExpression(node) {
16823
16828
  const unwrappedNodeCallee = unwrapExpression(node.callee);
@@ -16953,10 +16958,10 @@ var no_zod_native_enum_default = createRule({
16953
16958
  defaultOptions: [],
16954
16959
  create(context) {
16955
16960
  const sourceCode = context.sourceCode;
16956
- if (isGeneratedFile(context.filename, sourceCode.getText())) {
16961
+ if (isGeneratedFile(context, sourceCode.getText())) {
16957
16962
  return {};
16958
16963
  }
16959
- if (isTestFile(context.filename)) {
16964
+ if (isTestFile(context)) {
16960
16965
  return {};
16961
16966
  }
16962
16967
  let services;
@@ -17163,7 +17168,7 @@ var test_loops_over_literal_cases_default = createRule({
17163
17168
  },
17164
17169
  defaultOptions: [],
17165
17170
  create(context) {
17166
- if (!isTestFile(context.filename)) {
17171
+ if (!isTestFile(context)) {
17167
17172
  return {};
17168
17173
  }
17169
17174
  const isFrameworkTest = (identifier) => TEST_CALLERS3.has(runtimeTestFrameworkName(context.sourceCode, identifier, "test") ?? "");
@@ -17275,7 +17280,7 @@ var test_phase_label_comment_default = createRule({
17275
17280
  },
17276
17281
  defaultOptions: [],
17277
17282
  create(context) {
17278
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
17283
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
17279
17284
  return {
17280
17285
  Program() {
17281
17286
  const comments = context.sourceCode.getAllComments();
@@ -17379,7 +17384,7 @@ var prefer_constant_time_secret_compare_default = createRule({
17379
17384
  },
17380
17385
  defaultOptions: [],
17381
17386
  create(context) {
17382
- if (isTestFile(context.filename)) {
17387
+ if (isTestFile(context)) {
17383
17388
  return {};
17384
17389
  }
17385
17390
  const sourceCode = context.sourceCode;
@@ -17519,7 +17524,7 @@ var prefer_ecmascript_private_members_default = createRule({
17519
17524
  },
17520
17525
  defaultOptions: [],
17521
17526
  create(context) {
17522
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
17527
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
17523
17528
  let services;
17524
17529
  try {
17525
17530
  services = ESLintUtils18.getParserServices(context);
@@ -17924,7 +17929,7 @@ var prefer_discriminated_union_default = createRule({
17924
17929
  },
17925
17930
  defaultOptions: [],
17926
17931
  create(context) {
17927
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
17932
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
17928
17933
  return {};
17929
17934
  }
17930
17935
  const reportedContracts = /* @__PURE__ */ new Set();
@@ -18205,7 +18210,7 @@ var prefer_millisecond_control_duration_schema_default = createRule({
18205
18210
  },
18206
18211
  defaultOptions: [],
18207
18212
  create(context) {
18208
- if (isGeneratedFile(context.filename, context.sourceCode.text) || isTestFile(context.filename, ["fixtureTree"])) {
18213
+ if (isGeneratedFile(context, context.sourceCode.text) || isTestFile(context, ["fixtureTree"])) {
18209
18214
  return {};
18210
18215
  }
18211
18216
  const zodNamespaces = /* @__PURE__ */ new Set();
@@ -18510,7 +18515,7 @@ var prefer_immutable_module_constant_default = createRule({
18510
18515
  const declaration = definitions2.length === 1 ? definitions2[0]?.node : void 0;
18511
18516
  return declaration?.type === AST_NODE_TYPES89.TSTypeAliasDeclaration || declaration?.type === AST_NODE_TYPES89.TSTypeParameter ? declaration : void 0;
18512
18517
  };
18513
- if (JAVASCRIPT_FILE_RE.test(context.filename) || isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.getText())) {
18518
+ if (JAVASCRIPT_FILE_RE.test(context.filename) || isTestFile(context) || isGeneratedFile(context, sourceCode.getText())) {
18514
18519
  return {};
18515
18520
  }
18516
18521
  const exportedNames2 = /* @__PURE__ */ new Set();
@@ -18924,7 +18929,7 @@ var prefer_shadcn_primitives_default = createRule({
18924
18929
  defaultOptions: [{}],
18925
18930
  create(context, [options]) {
18926
18931
  const filename = context.filename.replaceAll("\\", "/");
18927
- if (isTestFile(filename) || isStoryFile(filename) || isGeneratedFile(filename, context.sourceCode.text) || SHARED_PRIMITIVE_IMPLEMENTATION_RE.test(filename)) {
18932
+ if (isTestFile(context) || isStoryFile(context) || isGeneratedFile(context, context.sourceCode.text) || SHARED_PRIMITIVE_IMPLEMENTATION_RE.test(filename)) {
18928
18933
  return {};
18929
18934
  }
18930
18935
  const detectsProject = options?.detectProjectPrimitives === true;
@@ -19236,7 +19241,7 @@ var prefer_module_level_constant_default = createRule({
19236
19241
  if (isIgnoredFile(filename, sourceCode.getText())) {
19237
19242
  return {};
19238
19243
  }
19239
- if (ignoreTestFiles && isLocalFixtureFile(filename)) {
19244
+ if (ignoreTestFiles && isLocalFixtureFile(context)) {
19240
19245
  return {};
19241
19246
  }
19242
19247
  function allReferencesAreSafeReads(declarator) {
@@ -19570,11 +19575,10 @@ var prefer_module_level_schema_default = createRule({
19570
19575
  const memoCallees = new Set(options?.memoCallees ?? MEMO_CALLEES);
19571
19576
  const minProperties = options?.minProperties ?? DEFAULT_MIN_PROPERTIES;
19572
19577
  const sourceCode = context.sourceCode;
19573
- const filename = context.filename;
19574
- if (isGeneratedFile(filename, sourceCode.getText())) {
19578
+ if (isGeneratedFile(context, sourceCode.getText())) {
19575
19579
  return {};
19576
19580
  }
19577
- if (ignoreTestFiles && isTestFile(filename)) {
19581
+ if (ignoreTestFiles && isTestFile(context)) {
19578
19582
  return {};
19579
19583
  }
19580
19584
  const zodNamespaces = /* @__PURE__ */ new Set();
@@ -20021,7 +20025,7 @@ var prefer_module_level_refined_schema_default = createRule({
20021
20025
  },
20022
20026
  defaultOptions: [],
20023
20027
  create(context) {
20024
- if (isTestFile(context.filename) || BENCHMARK_PATH_RE.test(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text))
20028
+ if (isTestFile(context) || BENCHMARK_PATH_RE.test(context.filename) || isGeneratedFile(context, context.sourceCode.text))
20025
20029
  return {};
20026
20030
  const zodBindings = /* @__PURE__ */ new Set();
20027
20031
  function resolvedBinding(identifier) {
@@ -20223,7 +20227,7 @@ var prefer_multi_value_zod_literal_default = createRule({
20223
20227
  },
20224
20228
  defaultOptions: [{}],
20225
20229
  create(context, [options]) {
20226
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text))
20230
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text))
20227
20231
  return {};
20228
20232
  const zodBindings = /* @__PURE__ */ new Set();
20229
20233
  const zod4Bindings = /* @__PURE__ */ new Set();
@@ -20408,7 +20412,7 @@ var prefer_nominal_id_types_default = createRule({
20408
20412
  },
20409
20413
  defaultOptions: [],
20410
20414
  create(context) {
20411
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
20415
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
20412
20416
  return {
20413
20417
  ArrowFunctionExpression: (node) => checkBoundary(node, context),
20414
20418
  FunctionDeclaration: (node) => checkBoundary(node, context),
@@ -20460,7 +20464,7 @@ var prefer_named_callback_domain_default = createRule({
20460
20464
  },
20461
20465
  defaultOptions: [],
20462
20466
  create(context) {
20463
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
20467
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
20464
20468
  return {
20465
20469
  TSFunctionType(node) {
20466
20470
  if (!exportedContract(node)) return;
@@ -20526,7 +20530,7 @@ var prefer_named_complex_return_type_default = createRule({
20526
20530
  },
20527
20531
  defaultOptions: [],
20528
20532
  create(context) {
20529
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
20533
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
20530
20534
  return {
20531
20535
  ArrowFunctionExpression: (node) => report(context, node),
20532
20536
  FunctionDeclaration: (node) => report(context, node),
@@ -20832,7 +20836,7 @@ var prefer_node_fs_promises_default = createRule({
20832
20836
  defaultOptions: [],
20833
20837
  create(context) {
20834
20838
  const normalizedFilename = context.filename.replaceAll("\\", "/");
20835
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text) || normalizedFilename.includes("src/rules/"))
20839
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text) || normalizedFilename.includes("src/rules/"))
20836
20840
  return {};
20837
20841
  const namespaces = /* @__PURE__ */ new Set();
20838
20842
  const bindingOf = (node) => ASTUtils62.findVariable(context.sourceCode.getScope(node), node.name);
@@ -21253,7 +21257,7 @@ var prefer_non_nullable_collection_default = createRule({
21253
21257
  },
21254
21258
  defaultOptions: [],
21255
21259
  create(context) {
21256
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
21260
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
21257
21261
  return {};
21258
21262
  }
21259
21263
  let shapes = /* @__PURE__ */ new Map();
@@ -21475,7 +21479,7 @@ var prefer_nullish_filter_predicate_default = createRule({
21475
21479
  },
21476
21480
  defaultOptions: [],
21477
21481
  create(context) {
21478
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
21482
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
21479
21483
  let services;
21480
21484
  try {
21481
21485
  services = ESLintUtils19.getParserServices(context);
@@ -22041,7 +22045,7 @@ var prefer_schema_for_api_payload_default = createRule({
22041
22045
  },
22042
22046
  defaultOptions: [],
22043
22047
  create(context) {
22044
- if (isTestFile(context.filename) || isScriptFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
22048
+ if (isTestFile(context) || isScriptFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
22045
22049
  return {};
22046
22050
  }
22047
22051
  const unvalidatedVariables = /* @__PURE__ */ new Set();
@@ -22348,7 +22352,7 @@ var prefer_shared_zod_enum_default = createRule({
22348
22352
  },
22349
22353
  defaultOptions: [],
22350
22354
  create(context) {
22351
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
22355
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
22352
22356
  const zodBindings = /* @__PURE__ */ new Set();
22353
22357
  const bindingOf = (node) => ASTUtils68.findVariable(context.sourceCode.getScope(node), node.name);
22354
22358
  const candidates = /* @__PURE__ */ new Map();
@@ -22436,7 +22440,7 @@ var prefer_switch_for_repeated_equality_default = createRule({
22436
22440
  },
22437
22441
  defaultOptions: [],
22438
22442
  create(context) {
22439
- if (isGeneratedFile(context.filename, context.sourceCode.text)) return {};
22443
+ if (isGeneratedFile(context, context.sourceCode.text)) return {};
22440
22444
  return {
22441
22445
  IfStatement(node) {
22442
22446
  if (node.parent.type === AST_NODE_TYPES107.IfStatement && node.parent.alternate === node) return;
@@ -23332,7 +23336,7 @@ var prefer_whole_object_assertion_default = createRule({
23332
23336
  },
23333
23337
  defaultOptions: [],
23334
23338
  create(context) {
23335
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
23339
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
23336
23340
  return {};
23337
23341
  }
23338
23342
  const { sourceCode } = context;
@@ -23674,7 +23678,7 @@ var repeated_static_call_cases_default = createRule({
23674
23678
  defaultOptions: [],
23675
23679
  create(context) {
23676
23680
  const sourceCode = context.sourceCode;
23677
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, sourceCode.text)) return {};
23681
+ if (!isTestFile(context) || isGeneratedFile(context, sourceCode.text)) return {};
23678
23682
  const duplicateGroups = /* @__PURE__ */ new Map();
23679
23683
  const pending = [];
23680
23684
  return {
@@ -24183,7 +24187,7 @@ var prefer_zod_infer_default = createRule({
24183
24187
  (source) => new RegExp(source, "u")
24184
24188
  );
24185
24189
  const requireIdenticalShape = optionsArg?.requireIdenticalShape ?? true;
24186
- if (isTestFile(context.filename) || isStoryFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
24190
+ if (isTestFile(context) || isStoryFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
24187
24191
  return {};
24188
24192
  }
24189
24193
  const zodNamespaces = /* @__PURE__ */ new Set();
@@ -24503,7 +24507,7 @@ var named_child_schema_type_default = createRule({
24503
24507
  defaultOptions: [],
24504
24508
  create(context) {
24505
24509
  const source = context.sourceCode;
24506
- if (isGeneratedFile(context.filename, source.text)) return {};
24510
+ if (isGeneratedFile(context, source.text)) return {};
24507
24511
  const namespaces = /* @__PURE__ */ new Set();
24508
24512
  const bindingOf = (node) => ASTUtils74.findVariable(source.getScope(node), node.name);
24509
24513
  function namespaceOf(type) {
@@ -24982,7 +24986,7 @@ function reportCandidates(context, services, schemas, candidates, zodNamespaces,
24982
24986
  const declaration = handWrittenObjectDeclaration(contractSymbol);
24983
24987
  if (declaration === null || declaration.getSourceFile().isDeclarationFile) return;
24984
24988
  const source = declaration.getSourceFile();
24985
- if (isGeneratedFile(source.fileName, source.text)) return;
24989
+ if (isGeneratedFile({ filename: source.fileName, cwd: context.cwd }, source.text)) return;
24986
24990
  const tsOutput = services.esTreeNodeToTSNodeMap.get(candidate2.output);
24987
24991
  const parsed = checker.getTypeAtLocation(tsOutput);
24988
24992
  if (hasAuthoritativeOutputContract(checker, tsOutput, contractSymbol)) return;
@@ -25064,7 +25068,7 @@ var prefer_zod_parse_output_type_default = createRule({
25064
25068
  },
25065
25069
  defaultOptions: [],
25066
25070
  create(context) {
25067
- if (isTestFile(context.filename) || isStoryFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) {
25071
+ if (isTestFile(context) || isStoryFile(context) || isGeneratedFile(context, context.sourceCode.text)) {
25068
25072
  return {};
25069
25073
  }
25070
25074
  let services;
@@ -25364,7 +25368,7 @@ var require_fetch_timeout_default = createRule({
25364
25368
  },
25365
25369
  defaultOptions: [{}],
25366
25370
  create(context, [optionsArg]) {
25367
- if (isTestFile(context.filename) || isScriptFile(context.filename)) {
25371
+ if (isTestFile(context) || isScriptFile(context)) {
25368
25372
  return {};
25369
25373
  }
25370
25374
  const allowIn = optionsArg?.allowIn ?? [];
@@ -25516,7 +25520,7 @@ var require_interface_for_exported_class_default = createRule({
25516
25520
  },
25517
25521
  defaultOptions: [],
25518
25522
  create(context) {
25519
- if (/\.(?:js|jsx|mjs|cjs)$/iu.test(context.filename) || isTestFile(context.filename) || isStoryFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
25523
+ if (/\.(?:js|jsx|mjs|cjs)$/iu.test(context.filename) || isTestFile(context) || isStoryFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
25520
25524
  return {
25521
25525
  "Program:exit"(program) {
25522
25526
  const classes = /* @__PURE__ */ new Map();
@@ -25837,7 +25841,7 @@ var require_sql_access_class_default = createRule({
25837
25841
  },
25838
25842
  defaultOptions: [],
25839
25843
  create(context) {
25840
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text))
25844
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text))
25841
25845
  return {};
25842
25846
  function knownNonDatabase(node, seen = /* @__PURE__ */ new Set()) {
25843
25847
  const unwrappedNodeCallee = node.type === "CallExpression" || node.type === "NewExpression" ? unwrapExpression(node.callee) : null;
@@ -26267,7 +26271,7 @@ var require_zod_form_validation_default = createRule({
26267
26271
  },
26268
26272
  defaultOptions: [],
26269
26273
  create(context) {
26270
- if (isTestFile(context.filename)) {
26274
+ if (isTestFile(context)) {
26271
26275
  return {};
26272
26276
  }
26273
26277
  const zodBindings = /* @__PURE__ */ new Set();
@@ -26562,7 +26566,7 @@ var store_insert_requires_on_conflict_default = createRule({
26562
26566
  },
26563
26567
  defaultOptions: [],
26564
26568
  create(context) {
26565
- if (isTestFile(context.filename)) {
26569
+ if (isTestFile(context)) {
26566
26570
  return {};
26567
26571
  }
26568
26572
  return createSqlListener((sql, node) => {
@@ -26593,7 +26597,7 @@ var STEPDOWN_DOCUMENTATION = {
26593
26597
  category: "maintainability",
26594
26598
  limitations: [
26595
26599
  "Generated and test files, cycles, dynamic or escaped references, overload targets, and helpers with multiple callers are excluded; immutable local callable aliases are followed only when every use stays in the caller. Function bodies include nested sibling helpers.",
26596
- "Class helpers must be private; their sole caller may be public, protected, or private.",
26600
+ "Class helpers must be private; their sole caller may be public, protected, or private by default. Set privateBandOnly alongside accessibility ordering to restrict class reports to private callers; module and nested function ordering is unchanged.",
26597
26601
  "Runtime class-field, static-block, computed-member, and decorator barriers are never crossed; non-hoisted module helpers also cannot cross eager execution or unrelated initialization.",
26598
26602
  "This rule is report-only: reordering methods can change reflective property order, and moving module declarations can change initialization behavior or introduce temporal-dead-zone failures. Review module cycles and eager callers manually."
26599
26603
  ],
@@ -26914,7 +26918,7 @@ function walk(node, visitorKeys, visit, nestedFunction = false) {
26914
26918
  const nested = nestedFunction || isFunction(node) || node.type === AST_NODE_TYPES121.ClassDeclaration || node.type === AST_NODE_TYPES121.ClassExpression;
26915
26919
  forEachAstChild(node, visitorKeys, (child) => walk(child, visitorKeys, visit, nested));
26916
26920
  }
26917
- function classScope(context, node, computedReferences) {
26921
+ function classScope(context, node, computedReferences, privateBandOnly) {
26918
26922
  const methods = node.body.body.filter(
26919
26923
  (member) => member.type === AST_NODE_TYPES121.MethodDefinition
26920
26924
  );
@@ -26927,7 +26931,7 @@ function classScope(context, node, computedReferences) {
26927
26931
  return name !== null && key !== null && implementationCounts.get(key) === 1 ? [{ key, name, node: method }] : [];
26928
26932
  });
26929
26933
  const definitions2 = scopeDefinitions.filter(
26930
- ({ key, node: method }) => (method.accessibility === "private" || method.key.type === AST_NODE_TYPES121.PrivateIdentifier) && counts.get(key) === 1 && method.decorators.length === 0 && !method.computed && method.kind === "method"
26934
+ ({ key, node: method }) => isPrivateMethod(method) && counts.get(key) === 1 && method.decorators.length === 0 && !method.computed && method.kind === "method"
26931
26935
  );
26932
26936
  if (definitions2.length === 0) return;
26933
26937
  const methodKeys = new Set(scopeDefinitions.map((definition) => definition.key));
@@ -27056,6 +27060,7 @@ function classScope(context, node, computedReferences) {
27056
27060
  runtimeBarrierPrefix.push((runtimeBarrierPrefix.at(-1) ?? 0) + (isClassRuntimeBarrier(member) ? 1 : 0));
27057
27061
  }
27058
27062
  const canMove = (helper, caller) => {
27063
+ if (privateBandOnly && !isPrivateMethod(caller.node)) return false;
27059
27064
  const helperIndex = memberIndexes.get(helper.node);
27060
27065
  const callerIndex = memberIndexes.get(caller.node);
27061
27066
  if (helperIndex === void 0 || callerIndex === void 0) return false;
@@ -27063,6 +27068,9 @@ function classScope(context, node, computedReferences) {
27063
27068
  };
27064
27069
  reportMisordered(context, definitions2, scopeDefinitions, calls, pinned, canMove);
27065
27070
  }
27071
+ function isPrivateMethod(node) {
27072
+ return node.type === AST_NODE_TYPES121.MethodDefinition && (node.accessibility === "private" || node.key.type === AST_NODE_TYPES121.PrivateIdentifier);
27073
+ }
27066
27074
  function classReceiverBindings(context, node) {
27067
27075
  const classReceivers = /* @__PURE__ */ new Map();
27068
27076
  if (node.id !== null) {
@@ -27103,14 +27111,23 @@ var stepdown_default = createRule({
27103
27111
  meta: {
27104
27112
  type: "suggestion",
27105
27113
  docs: { description: "Place a private helper below its sole direct same-scope caller." },
27106
- schema: [],
27114
+ schema: [{
27115
+ type: "object",
27116
+ additionalProperties: false,
27117
+ properties: {
27118
+ privateBandOnly: {
27119
+ type: "boolean",
27120
+ description: "Restrict class reports to private callers when another rule owns accessibility-band ordering."
27121
+ }
27122
+ }
27123
+ }],
27107
27124
  messages: {
27108
27125
  helperAboveOnlyCaller: "Private helper `{{helper}}` is defined above its only caller `{{caller}}`; move it below the caller."
27109
27126
  }
27110
27127
  },
27111
- defaultOptions: [],
27112
- create(context) {
27113
- if (isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
27128
+ defaultOptions: [{}],
27129
+ create(context, [options]) {
27130
+ if (isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
27114
27131
  const classes = [];
27115
27132
  const functionBodies = [];
27116
27133
  return {
@@ -27130,7 +27147,7 @@ var stepdown_default = createRule({
27130
27147
  walk(program, context.sourceCode.visitorKeys, (node) => {
27131
27148
  if (node.type === AST_NODE_TYPES121.MemberExpression && node.computed) computedReferences.push(node);
27132
27149
  });
27133
- for (const node of classes) classScope(context, node, computedReferences);
27150
+ for (const node of classes) classScope(context, node, computedReferences, options.privateBandOnly === true);
27134
27151
  }
27135
27152
  };
27136
27153
  }
@@ -27285,7 +27302,7 @@ function createSourceCoupledRule(name, documentation, sourceSuffixRe) {
27285
27302
  },
27286
27303
  defaultOptions: [],
27287
27304
  create(context) {
27288
- if (!isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
27305
+ if (!isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
27289
27306
  const scopes = [newScope()];
27290
27307
  const reportedOrigins = /* @__PURE__ */ new Set();
27291
27308
  const currentScope = () => scopes.at(-1) ?? scopes[0];
@@ -27385,7 +27402,7 @@ function createSourceCoupledRule(name, documentation, sourceSuffixRe) {
27385
27402
  };
27386
27403
  const sourcePathValue = (value) => {
27387
27404
  const normalized = posix2.normalize(value.replaceAll("\\", "/"));
27388
- return sourceSuffixRe.test(normalized) && !REPRESENTATION_DIR_RE.test(normalized) && !isGeneratedFile(normalized);
27405
+ return sourceSuffixRe.test(normalized) && !REPRESENTATION_DIR_RE.test(normalized) && !isGeneratedFile({ filename: normalized, cwd: context.cwd });
27389
27406
  };
27390
27407
  const rawRead = (node) => {
27391
27408
  const current = unwrap6(node);
@@ -27677,7 +27694,7 @@ var sole_export_matches_filename_default = createRule({
27677
27694
  create(context) {
27678
27695
  const fileStem = stem3(context.filename);
27679
27696
  const normalizedFilename = context.filename.replaceAll("\\", "/");
27680
- if (EXCLUDED_STEMS.has(fileStem) || GENERIC_MODULE_STEMS.has(fileStem) || context.filename.endsWith(".d.ts") || isTestFile(context.filename) || isGeneratedFile(context.filename, context.sourceCode.text)) return {};
27697
+ if (EXCLUDED_STEMS.has(fileStem) || GENERIC_MODULE_STEMS.has(fileStem) || context.filename.endsWith(".d.ts") || isTestFile(context) || isGeneratedFile(context, context.sourceCode.text)) return {};
27681
27698
  let hasCommonJsExport = false;
27682
27699
  return {
27683
27700
  "CallExpression, MemberExpression"(node) {
@@ -27977,7 +27994,7 @@ var require_pascal_case_zod_schema_name_default = createRule({
27977
27994
  const binding = resolvedBinding(root);
27978
27995
  return binding !== null && zodBindings.has(binding);
27979
27996
  }
27980
- if (isTestFile(context.filename) || BENCHMARK_PATH_RE2.test(context.filename.replaceAll("\\", "/")) || isGeneratedFile(context.filename, context.sourceCode.text)) {
27997
+ if (isTestFile(context) || BENCHMARK_PATH_RE2.test(context.filename.replaceAll("\\", "/")) || isGeneratedFile(context, context.sourceCode.text)) {
27981
27998
  return {};
27982
27999
  }
27983
28000
  return {