@sarj/eslint-plugin 9.6.0 → 9.7.0

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.cjs CHANGED
@@ -45,10 +45,10 @@ var import_utils2 = require("@typescript-eslint/utils");
45
45
  // src/rules/_docs.ts
46
46
  var import_utils = require("@typescript-eslint/utils");
47
47
  var REPO_BLOB = "https://github.com/sarj-ai/standards/blob/main";
48
- var EVIDENCE_DIR = "docs/rules";
49
- var evidencePath = (name) => `${EVIDENCE_DIR}/${name}.md`;
50
- var evidenceUrl = (name) => `${REPO_BLOB}/${evidencePath(name)}`;
51
- var createRule = import_utils.ESLintUtils.RuleCreator(evidenceUrl);
48
+ var TESTS_DIR = "packages/typescript/tests/rules";
49
+ var examplesPath = (name) => `${TESTS_DIR}/${name}.test.ts`;
50
+ var examplesUrl = (name) => `${REPO_BLOB}/${examplesPath(name)}`;
51
+ var createRule = import_utils.ESLintUtils.RuleCreator(examplesUrl);
52
52
 
53
53
  // src/rules/_paths.ts
54
54
  var SCRIPT_FILE_RE = /([\\/]scripts[\\/])|(\.mjs$)/;
@@ -133,8 +133,8 @@ var enforce_file_structure_default = createRule({
133
133
  }
134
134
  return {
135
135
  Program(node) {
136
- const body = node.body;
137
- const misplacedUseServer = body.find(
136
+ const body2 = node.body;
137
+ const misplacedUseServer = body2.find(
138
138
  (statement, index) => index > 0 && isUseServerDirective(statement)
139
139
  );
140
140
  if (misplacedUseServer !== void 0) {
@@ -145,7 +145,7 @@ var enforce_file_structure_default = createRule({
145
145
  }
146
146
  let seenBody = false;
147
147
  let inMisplacedRun = false;
148
- for (const statement of body) {
148
+ for (const statement of body2) {
149
149
  if (isStringDirective(statement)) continue;
150
150
  switch (classifyStatement(statement)) {
151
151
  case "reexport":
@@ -366,11 +366,11 @@ var PROTECTED_SIGNALS = [
366
366
  SECURITY_RE,
367
367
  VENDOR_RE
368
368
  ];
369
- function isProtected(body) {
370
- return PROTECTED_SIGNALS.some((signal) => signal.test(body));
369
+ function isProtected(body2) {
370
+ return PROTECTED_SIGNALS.some((signal) => signal.test(body2));
371
371
  }
372
- function hasExternalReference(body) {
373
- return REF_RE.test(body);
372
+ function hasExternalReference(body2) {
373
+ return REF_RE.test(body2);
374
374
  }
375
375
  var STOPWORDS = new Set(
376
376
  `a an the this that these those it its their his her our your my
@@ -518,9 +518,9 @@ function restatableStatementBelow(comment, sourceCode) {
518
518
  }
519
519
  return null;
520
520
  }
521
- function restatesStatementHead(body, statement) {
521
+ function restatesStatementHead(body2, statement) {
522
522
  if (statement === null) return false;
523
- const words = body.match(/[A-Za-z][\w$]*/g) ?? [];
523
+ const words = body2.match(/[A-Za-z][\w$]*/g) ?? [];
524
524
  const opener = words[0];
525
525
  if (opener === void 0 || words.length > NARRATION_MAX_WORDS) return false;
526
526
  if (!NARRATION_VERB_RE.test(opener)) return false;
@@ -719,11 +719,11 @@ function isProse(text) {
719
719
  return false;
720
720
  }
721
721
  var JUSTIFICATION_RE = /\b(?:because|since|until|due to|so that|so we|so it|so the|otherwise|which is why|in order to|to avoid|to work around|to prevent|backwards? compat(?:ibility)?|for compatibility)\b/i;
722
- function restatesWholeStatement(body, statement) {
723
- return statement !== null && restatesStatementHead(body, statement.replaceAll("(", " "));
722
+ function restatesWholeStatement(body2, statement) {
723
+ return statement !== null && restatesStatementHead(body2, statement.replaceAll("(", " "));
724
724
  }
725
- function isRedundantNarration(body, statementBelow, standalone, isolatedEnumeration, nested) {
726
- const t = body.trim();
725
+ function isRedundantNarration(body2, statementBelow, standalone, isolatedEnumeration, nested) {
726
+ const t = body2.trim();
727
727
  if (!t || looksLikeCode(t) || hasPseudocode(t)) return false;
728
728
  if (standalone) {
729
729
  const justified = JUSTIFICATION_RE.test(t);
@@ -798,8 +798,8 @@ function statementAttachmentBelow(comment, sourceCode) {
798
798
  }
799
799
  return null;
800
800
  }
801
- function isWeakWalkthroughComment(body, statement) {
802
- const normalized = body.replace(WALL_STEP_PREFIX_RE, "");
801
+ function isWeakWalkthroughComment(body2, statement) {
802
+ const normalized = body2.replace(WALL_STEP_PREFIX_RE, "");
803
803
  if (normalized.length === 0 || normalized.endsWith("?") || normalized.split(/\s+/).length > WALL_MAX_WORDS || isDirective(normalized) || isProtected(normalized) || !WALL_NARRATION_RE.test(normalized)) {
804
804
  return false;
805
805
  }
@@ -836,8 +836,8 @@ var LEAD_IN_SCAN_LIMIT = 24;
836
836
  function hasIllustrationLeadInAbove(comments, index) {
837
837
  for (let i = index - 1; i >= 0 && index - i <= LEAD_IN_SCAN_LIMIT; i--) {
838
838
  if (!areAdjacentLineComments(comments[i], comments[i + 1])) return false;
839
- const body = stripCommentMarker(comments[i]?.value ?? "");
840
- if (body.length > 0 && body.endsWith(":")) return true;
839
+ const body2 = stripCommentMarker(comments[i]?.value ?? "");
840
+ if (body2.length > 0 && body2.endsWith(":")) return true;
841
841
  }
842
842
  return false;
843
843
  }
@@ -891,12 +891,12 @@ var no_comment_cruft_default = createRule({
891
891
  if (comment.type !== "Line" || !isStandalone(comment)) continue;
892
892
  const attachment = statementAttachmentBelow(comment, sourceCode);
893
893
  if (attachment === null) continue;
894
- const body = stripCommentMarker(comment.value);
894
+ const body2 = stripCommentMarker(comment.value);
895
895
  const entries = attached.get(attachment.container) ?? [];
896
896
  entries.push({
897
897
  comment,
898
898
  index: attachment.index,
899
- weak: isWeakWalkthroughComment(body, attachment.statement)
899
+ weak: isWeakWalkthroughComment(body2, attachment.statement)
900
900
  });
901
901
  attached.set(attachment.container, entries);
902
902
  }
@@ -940,8 +940,8 @@ var no_comment_cruft_default = createRule({
940
940
  if (comment.type !== "Line") break;
941
941
  if (comment.loc.start.line >= firstCodeLine) break;
942
942
  if (!isStandalone(comment)) break;
943
- const body = stripCommentMarker(comment.value);
944
- if (isDirective(body) || body.startsWith("!")) continue;
943
+ const body2 = stripCommentMarker(comment.value);
944
+ if (isDirective(body2) || body2.startsWith("!")) continue;
945
945
  if (prevLine !== null && comment.loc.start.line !== prevLine + 1) break;
946
946
  leading.push(comment);
947
947
  prevLine = comment.loc.start.line;
@@ -949,8 +949,8 @@ var no_comment_cruft_default = createRule({
949
949
  const first = leading[0];
950
950
  if (first === void 0 || leading.length < LEADING_PREAMBLE_MIN) return;
951
951
  const bodies = leading.map((c) => stripCommentMarker(c.value));
952
- if (bodies.some((body) => LICENSE_RE.test(body))) return;
953
- if (bodies.some((body) => isProse(body))) return;
952
+ if (bodies.some((body2) => LICENSE_RE.test(body2))) return;
953
+ if (bodies.some((body2) => isProse(body2))) return;
954
954
  if (bodies.filter(isEnumeratedProseItem).length >= ENUMERATED_PREAMBLE_MIN_ITEMS) {
955
955
  return;
956
956
  }
@@ -1011,11 +1011,11 @@ var no_comment_cruft_default = createRule({
1011
1011
  continue;
1012
1012
  }
1013
1013
  if (comment.type === "Line" && texts.length === 1) {
1014
- const body = texts[0];
1014
+ const body2 = texts[0];
1015
1015
  const statement = restatableStatementBelow(comment, sourceCode);
1016
1016
  const standalone = !isInsideCommentRun(comments, i);
1017
1017
  const nested = container !== null && !STATEMENT_CONTAINERS.has(container.type);
1018
- if (body !== void 0 && !runCitesAReference(comments, i) && isRedundantNarration(body, statement, standalone, enumerated.length === 1, nested)) {
1018
+ if (body2 !== void 0 && !runCitesAReference(comments, i) && isRedundantNarration(body2, statement, standalone, enumerated.length === 1, nested)) {
1019
1019
  context.report({ node: comment, messageId: "redundantNarration" });
1020
1020
  }
1021
1021
  }
@@ -1029,11 +1029,12 @@ var no_comment_cruft_default = createRule({
1029
1029
  // src/rules/no-conditional-in-test.ts
1030
1030
  var import_utils7 = require("@typescript-eslint/utils");
1031
1031
  var TEST_CALLERS = /* @__PURE__ */ new Set(["it", "test"]);
1032
- var HOOK_MEMBERS = /* @__PURE__ */ new Set([
1032
+ var NON_TEST_MEMBERS = /* @__PURE__ */ new Set([
1033
1033
  "afterAll",
1034
1034
  "afterEach",
1035
1035
  "beforeAll",
1036
- "beforeEach"
1036
+ "beforeEach",
1037
+ "describe"
1037
1038
  ]);
1038
1039
  var FUNCTION_TYPES = /* @__PURE__ */ new Set([
1039
1040
  import_utils7.AST_NODE_TYPES.FunctionDeclaration,
@@ -1073,12 +1074,27 @@ function testCallerName(callee) {
1073
1074
  }
1074
1075
  return null;
1075
1076
  }
1077
+ function hasNonTestMember(callee) {
1078
+ if (callee.type === import_utils7.AST_NODE_TYPES.MemberExpression) {
1079
+ if (!callee.computed && callee.property.type === import_utils7.AST_NODE_TYPES.Identifier && NON_TEST_MEMBERS.has(callee.property.name)) {
1080
+ return true;
1081
+ }
1082
+ return hasNonTestMember(callee.object);
1083
+ }
1084
+ if (callee.type === import_utils7.AST_NODE_TYPES.CallExpression) {
1085
+ return hasNonTestMember(callee.callee);
1086
+ }
1087
+ if (callee.type === import_utils7.AST_NODE_TYPES.TaggedTemplateExpression) {
1088
+ return hasNonTestMember(callee.tag);
1089
+ }
1090
+ return false;
1091
+ }
1076
1092
  function isTestBody(fn) {
1077
1093
  const call = fn.parent;
1078
1094
  if (call?.type !== import_utils7.AST_NODE_TYPES.CallExpression || !call.arguments.some((argument) => argument === fn)) {
1079
1095
  return false;
1080
1096
  }
1081
- if (call.callee.type === import_utils7.AST_NODE_TYPES.MemberExpression && !call.callee.computed && call.callee.property.type === import_utils7.AST_NODE_TYPES.Identifier && HOOK_MEMBERS.has(call.callee.property.name)) {
1097
+ if (hasNonTestMember(call.callee)) {
1082
1098
  return false;
1083
1099
  }
1084
1100
  const name = testCallerName(call.callee);
@@ -1804,6 +1820,7 @@ var no_enum_default = createRule({
1804
1820
  properties: {
1805
1821
  ignoreFiles: {
1806
1822
  type: "array",
1823
+ description: "Additional generated-file globs to ignore; shared generated paths and header markers are always ignored.",
1807
1824
  items: { type: "string" }
1808
1825
  }
1809
1826
  }
@@ -2013,8 +2030,8 @@ function handlerRethrows(handler) {
2013
2030
  if (handler === null) {
2014
2031
  return false;
2015
2032
  }
2016
- const body = handler.body.body;
2017
- const last = body[body.length - 1];
2033
+ const body2 = handler.body.body;
2034
+ const last = body2[body2.length - 1];
2018
2035
  return last !== void 0 && last.type === import_utils12.AST_NODE_TYPES.ThrowStatement;
2019
2036
  }
2020
2037
  var PASS_THROUGH_PARENTS = /* @__PURE__ */ new Set([
@@ -2048,8 +2065,8 @@ function unwrapAwait(expr) {
2048
2065
  return inner.type === import_utils12.AST_NODE_TYPES.AwaitExpression ? unwrap(inner.argument) : inner;
2049
2066
  }
2050
2067
  function handlerEndsByHandingOff(handler) {
2051
- const body = handler.body.body;
2052
- const last = body[body.length - 1];
2068
+ const body2 = handler.body.body;
2069
+ const last = body2[body2.length - 1];
2053
2070
  if (last === void 0) {
2054
2071
  return false;
2055
2072
  }
@@ -2623,8 +2640,8 @@ function negatedInstanceofErrorSubject(test) {
2623
2640
  return null;
2624
2641
  }
2625
2642
  function branchTerminates(branch) {
2626
- const body = branch.type === "BlockStatement" ? branch.body : [branch];
2627
- const last = body[body.length - 1];
2643
+ const body2 = branch.type === "BlockStatement" ? branch.body : [branch];
2644
+ const last = body2[body2.length - 1];
2628
2645
  return last !== void 0 && (last.type === "ReturnStatement" || last.type === "ThrowStatement");
2629
2646
  }
2630
2647
  function isNarrowedByEarlyReturn(node, argExpr, sourceCode) {
@@ -2876,8 +2893,8 @@ function hasFollowingStatement(node) {
2876
2893
  return false;
2877
2894
  }
2878
2895
  function fallbackFollowsTry(tryStatement) {
2879
- const body = tryStatement.block.body;
2880
- const last = body.at(-1);
2896
+ const body2 = tryStatement.block.body;
2897
+ const last = body2.at(-1);
2881
2898
  return last?.type === import_utils17.AST_NODE_TYPES.ReturnStatement && hasFollowingStatement(tryStatement);
2882
2899
  }
2883
2900
  function isSeedValue(node) {
@@ -2994,8 +3011,125 @@ var no_log_only_catch_default = createRule({
2994
3011
  }
2995
3012
  });
2996
3013
 
2997
- // src/rules/no-offset-pagination.ts
3014
+ // src/rules/_prose-budget.ts
2998
3015
  var import_utils18 = require("@typescript-eslint/utils");
3016
+ var DIRECTIVE_RE2 = /^(?:!|eslint\b|eslint-|@ts-|prettier|biome-|c8\b|v8\b|istanbul\b|@vite|webpack|@jsx|@jest-environment|@vitest-environment|#__|todo\b|fixme\b|hack\b)/i;
3017
+ var LICENSE_RE2 = /\b(?:copyright|spdx-license-identifier|licensed under)\b/i;
3018
+ var TYPED_TAG_RE = /@(arg|argument|param|return|returns|yield|yields)\b/i;
3019
+ var VALUE_TAG_RE = /@(example|deprecated|see|remarks|throws|internal|public|alpha|beta|since|template|fileoverview)\b/i;
3020
+ var BOUNDARY_RE = /(?<=[.!?])["'`)\]]*\s+(?=[A-Z0-9`])/;
3021
+ var BULLET_RE = /^\s*(?:[-*+] |\d+[.)] )/;
3022
+ function body(comment) {
3023
+ return comment.value.replace(/^\*/, "").split("\n").map((line) => line.replace(/^\s*\*?\s?/, "")).join("\n").trim();
3024
+ }
3025
+ function eligible(text, includeValueTags) {
3026
+ return text.length > 0 && !DIRECTIVE_RE2.test(text) && !LICENSE_RE2.test(text) && (includeValueTags || !VALUE_TAG_RE.test(text));
3027
+ }
3028
+ function sentenceUnits(text) {
3029
+ const cleaned = text.replace(/https?:\/\/\S+/g, "URL").replace(/`[^`\n]+`/g, "CODE").replace(/\b\d+\.\d+\b/g, "NUMBER").replace(/\b(?:e\.g\.|i\.e\.|vs\.|etc\.)/gi, "ABBREVIATION");
3030
+ let units = 0;
3031
+ const prose = [];
3032
+ for (const raw of cleaned.split("\n")) {
3033
+ const line = raw.trim();
3034
+ if (line.length === 0 || /^[A-Za-z][A-Za-z ]+:$/.test(line)) continue;
3035
+ if (BULLET_RE.test(line)) units += 1;
3036
+ else prose.push(line);
3037
+ }
3038
+ if (prose.length > 0) units += prose.join(" ").split(BOUNDARY_RE).length;
3039
+ return units;
3040
+ }
3041
+ function proseGroups(filename, sourceCode, includeValueTags = false) {
3042
+ if (isGeneratedFile(filename, sourceCode.text) || isStoryFile(filename)) return [];
3043
+ const groups = [];
3044
+ let run = [];
3045
+ const flush = () => {
3046
+ if (run.length === 0) return;
3047
+ const text = run.map(body).join("\n");
3048
+ if (eligible(text, includeValueTags)) groups.push({ comment: run[0], text, hasTypedTags: TYPED_TAG_RE.test(text) });
3049
+ run = [];
3050
+ };
3051
+ for (const comment of sourceCode.getAllComments()) {
3052
+ const text = body(comment);
3053
+ if (comment.type === "Block") {
3054
+ flush();
3055
+ if (eligible(text, includeValueTags)) groups.push({ comment, text, hasTypedTags: TYPED_TAG_RE.test(text) });
3056
+ continue;
3057
+ }
3058
+ const ownLine = sourceCode.lines[comment.loc.start.line - 1]?.slice(0, comment.loc.start.column).trim() === "";
3059
+ if (!ownLine || !eligible(text, includeValueTags)) {
3060
+ flush();
3061
+ continue;
3062
+ }
3063
+ const previous = run.at(-1);
3064
+ if (previous !== void 0 && (comment.loc.start.line !== previous.loc.end.line + 1 || comment.loc.start.column !== previous.loc.start.column)) flush();
3065
+ run.push(comment);
3066
+ }
3067
+ flush();
3068
+ return groups;
3069
+ }
3070
+ function annotatedParameter(parameter) {
3071
+ if (parameter.type === import_utils18.AST_NODE_TYPES.TSParameterProperty) return annotatedParameter(parameter.parameter);
3072
+ const target = parameter.type === import_utils18.AST_NODE_TYPES.AssignmentPattern ? parameter.left : parameter;
3073
+ return "typeAnnotation" in target && target.typeAnnotation != null;
3074
+ }
3075
+ function typedFunction(node) {
3076
+ switch (node.type) {
3077
+ case import_utils18.AST_NODE_TYPES.ExportNamedDeclaration:
3078
+ case import_utils18.AST_NODE_TYPES.ExportDefaultDeclaration:
3079
+ return node.declaration != null && typedFunction(node.declaration);
3080
+ case import_utils18.AST_NODE_TYPES.FunctionDeclaration:
3081
+ case import_utils18.AST_NODE_TYPES.TSDeclareFunction:
3082
+ return node.returnType != null && node.params.every(annotatedParameter);
3083
+ case import_utils18.AST_NODE_TYPES.VariableDeclaration: {
3084
+ const init = node.declarations[0]?.init;
3085
+ return init != null && (init.type === import_utils18.AST_NODE_TYPES.ArrowFunctionExpression || init.type === import_utils18.AST_NODE_TYPES.FunctionExpression) && init.returnType != null && init.params.every(annotatedParameter);
3086
+ }
3087
+ case import_utils18.AST_NODE_TYPES.MethodDefinition:
3088
+ return node.value.returnType != null && node.value.params.every(annotatedParameter);
3089
+ case import_utils18.AST_NODE_TYPES.TSMethodSignature:
3090
+ return node.returnType != null && node.params.every(annotatedParameter);
3091
+ default:
3092
+ return false;
3093
+ }
3094
+ }
3095
+ function documentsTypedFunction(sourceCode, comment) {
3096
+ const token = sourceCode.getTokenAfter(comment, { includeComments: false });
3097
+ if (token === null || token.loc.start.line !== comment.loc.end.line + 1) return false;
3098
+ let node = sourceCode.getNodeByRangeIndex(token.range[0]);
3099
+ while (node != null && node.type !== import_utils18.AST_NODE_TYPES.Program) {
3100
+ if (typedFunction(node)) return true;
3101
+ node = node.parent ?? null;
3102
+ }
3103
+ return false;
3104
+ }
3105
+
3106
+ // src/rules/no-long-comment.ts
3107
+ var no_long_comment_default = createRule({
3108
+ name: "no-long-comment",
3109
+ meta: {
3110
+ type: "suggestion",
3111
+ docs: { description: "Limit in-code prose to two sentences." },
3112
+ schema: [],
3113
+ messages: {
3114
+ tooLong: "Comment exceeds two sentences \u2014 keep one local fact and clarify the code itself."
3115
+ }
3116
+ },
3117
+ defaultOptions: [],
3118
+ create(context) {
3119
+ return {
3120
+ Program() {
3121
+ for (const group of proseGroups(context.filename, context.sourceCode)) {
3122
+ if (!group.hasTypedTags && sentenceUnits(group.text) >= 3) {
3123
+ context.report({ node: group.comment, messageId: "tooLong" });
3124
+ }
3125
+ }
3126
+ }
3127
+ };
3128
+ }
3129
+ });
3130
+
3131
+ // src/rules/no-offset-pagination.ts
3132
+ var import_utils19 = require("@typescript-eslint/utils");
2999
3133
  var OFFSET_PAGINATION = /\bOFFSET\s+(?:%s|%\(\w+\)s|\?\d*|:\w+|@\w+|\$\d+|\d+)/i;
3000
3134
  var OFFSET_GATE = /offset/i;
3001
3135
  var no_offset_pagination_default = createRule({
@@ -3025,15 +3159,15 @@ var no_offset_pagination_default = createRule({
3025
3159
  });
3026
3160
 
3027
3161
  // src/rules/no-positional-tuple-return.ts
3028
- var import_utils19 = require("@typescript-eslint/utils");
3162
+ var import_utils20 = require("@typescript-eslint/utils");
3029
3163
  var MIN_ELEMENTS = 2;
3030
3164
  var ACCESSOR_PAIR_LENGTH = 2;
3031
3165
  var AWAITABLE_TYPES = /* @__PURE__ */ new Set(["Promise", "PromiseLike", "Awaited"]);
3032
3166
  function tupleReturnType(node) {
3033
- if (node.type === import_utils19.AST_NODE_TYPES.TSTupleType) {
3167
+ if (node.type === import_utils20.AST_NODE_TYPES.TSTupleType) {
3034
3168
  return node;
3035
3169
  }
3036
- if (node.type === import_utils19.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils19.AST_NODE_TYPES.Identifier && AWAITABLE_TYPES.has(node.typeName.name)) {
3170
+ if (node.type === import_utils20.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils20.AST_NODE_TYPES.Identifier && AWAITABLE_TYPES.has(node.typeName.name)) {
3037
3171
  const argument = node.typeArguments?.params[0];
3038
3172
  return argument === void 0 ? null : tupleReturnType(argument);
3039
3173
  }
@@ -3047,30 +3181,30 @@ function isPermittedTuple(tuple, sourceCode) {
3047
3181
  if (elements.length < MIN_ELEMENTS) {
3048
3182
  return true;
3049
3183
  }
3050
- if (elements.some((element) => element.type === import_utils19.AST_NODE_TYPES.TSRestType)) {
3184
+ if (elements.some((element) => element.type === import_utils20.AST_NODE_TYPES.TSRestType)) {
3051
3185
  return true;
3052
3186
  }
3053
- if (elements.some((element) => element.type === import_utils19.AST_NODE_TYPES.TSNamedTupleMember)) {
3187
+ if (elements.some((element) => element.type === import_utils20.AST_NODE_TYPES.TSNamedTupleMember)) {
3054
3188
  return true;
3055
3189
  }
3056
- if (elements[0]?.type === import_utils19.AST_NODE_TYPES.TSLiteralType) {
3190
+ if (elements[0]?.type === import_utils20.AST_NODE_TYPES.TSLiteralType) {
3057
3191
  return true;
3058
3192
  }
3059
- if (elements.length === ACCESSOR_PAIR_LENGTH && elements.some((element) => element.type === import_utils19.AST_NODE_TYPES.TSFunctionType)) {
3193
+ if (elements.length === ACCESSOR_PAIR_LENGTH && elements.some((element) => element.type === import_utils20.AST_NODE_TYPES.TSFunctionType)) {
3060
3194
  return true;
3061
3195
  }
3062
3196
  const texts = new Set(elements.map((element) => normalizedText(sourceCode, element)));
3063
3197
  return texts.size === 1;
3064
3198
  }
3065
3199
  function functionName(node) {
3066
- if (node.type === import_utils19.AST_NODE_TYPES.FunctionDeclaration) {
3200
+ if (node.type === import_utils20.AST_NODE_TYPES.FunctionDeclaration) {
3067
3201
  return node.id?.name ?? null;
3068
3202
  }
3069
3203
  const parent = node.parent;
3070
- if (parent?.type === import_utils19.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils19.AST_NODE_TYPES.Identifier) {
3204
+ if (parent?.type === import_utils20.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils20.AST_NODE_TYPES.Identifier) {
3071
3205
  return parent.id.name;
3072
3206
  }
3073
- if ((parent?.type === import_utils19.AST_NODE_TYPES.MethodDefinition || parent?.type === import_utils19.AST_NODE_TYPES.PropertyDefinition || parent?.type === import_utils19.AST_NODE_TYPES.Property) && parent.key.type === import_utils19.AST_NODE_TYPES.Identifier) {
3207
+ if ((parent?.type === import_utils20.AST_NODE_TYPES.MethodDefinition || parent?.type === import_utils20.AST_NODE_TYPES.PropertyDefinition || parent?.type === import_utils20.AST_NODE_TYPES.Property) && parent.key.type === import_utils20.AST_NODE_TYPES.Identifier) {
3074
3208
  return parent.key.name;
3075
3209
  }
3076
3210
  return null;
@@ -3078,7 +3212,7 @@ function functionName(node) {
3078
3212
  function isInlineExported(node) {
3079
3213
  for (let current = node; current != null; current = current.parent) {
3080
3214
  const parent = current.parent;
3081
- if (parent?.type === import_utils19.AST_NODE_TYPES.ExportNamedDeclaration || parent?.type === import_utils19.AST_NODE_TYPES.ExportDefaultDeclaration) {
3215
+ if (parent?.type === import_utils20.AST_NODE_TYPES.ExportNamedDeclaration || parent?.type === import_utils20.AST_NODE_TYPES.ExportDefaultDeclaration) {
3082
3216
  return true;
3083
3217
  }
3084
3218
  }
@@ -3087,18 +3221,18 @@ function isInlineExported(node) {
3087
3221
  function moduleScopeBindingName(node) {
3088
3222
  let current = node;
3089
3223
  let child = node;
3090
- while (current.parent != null && current.parent.type !== import_utils19.AST_NODE_TYPES.Program) {
3224
+ while (current.parent != null && current.parent.type !== import_utils20.AST_NODE_TYPES.Program) {
3091
3225
  child = current;
3092
3226
  current = current.parent;
3093
3227
  }
3094
- if (current.parent?.type !== import_utils19.AST_NODE_TYPES.Program) {
3228
+ if (current.parent?.type !== import_utils20.AST_NODE_TYPES.Program) {
3095
3229
  return null;
3096
3230
  }
3097
- if (current.type === import_utils19.AST_NODE_TYPES.FunctionDeclaration || current.type === import_utils19.AST_NODE_TYPES.ClassDeclaration) {
3231
+ if (current.type === import_utils20.AST_NODE_TYPES.FunctionDeclaration || current.type === import_utils20.AST_NODE_TYPES.ClassDeclaration) {
3098
3232
  return current.id?.name ?? null;
3099
3233
  }
3100
- if (current.type === import_utils19.AST_NODE_TYPES.VariableDeclaration) {
3101
- if (child.type !== import_utils19.AST_NODE_TYPES.VariableDeclarator || child.id.type !== import_utils19.AST_NODE_TYPES.Identifier) {
3234
+ if (current.type === import_utils20.AST_NODE_TYPES.VariableDeclaration) {
3235
+ if (child.type !== import_utils20.AST_NODE_TYPES.VariableDeclarator || child.id.type !== import_utils20.AST_NODE_TYPES.Identifier) {
3102
3236
  return null;
3103
3237
  }
3104
3238
  return child.id.name;
@@ -3108,19 +3242,19 @@ function moduleScopeBindingName(node) {
3108
3242
  function specifierExportedNames(program) {
3109
3243
  const names = /* @__PURE__ */ new Set();
3110
3244
  for (const statement of program.body) {
3111
- if (statement.type === import_utils19.AST_NODE_TYPES.ExportNamedDeclaration && statement.declaration == null && statement.source == null && statement.exportKind !== "type") {
3245
+ if (statement.type === import_utils20.AST_NODE_TYPES.ExportNamedDeclaration && statement.declaration == null && statement.source == null && statement.exportKind !== "type") {
3112
3246
  for (const specifier of statement.specifiers) {
3113
- if (specifier.exportKind !== "type" && specifier.local.type === import_utils19.AST_NODE_TYPES.Identifier) {
3247
+ if (specifier.exportKind !== "type" && specifier.local.type === import_utils20.AST_NODE_TYPES.Identifier) {
3114
3248
  names.add(specifier.local.name);
3115
3249
  }
3116
3250
  }
3117
3251
  continue;
3118
3252
  }
3119
- if (statement.type === import_utils19.AST_NODE_TYPES.ExportDefaultDeclaration && statement.declaration.type === import_utils19.AST_NODE_TYPES.Identifier) {
3253
+ if (statement.type === import_utils20.AST_NODE_TYPES.ExportDefaultDeclaration && statement.declaration.type === import_utils20.AST_NODE_TYPES.Identifier) {
3120
3254
  names.add(statement.declaration.name);
3121
3255
  continue;
3122
3256
  }
3123
- if (statement.type === import_utils19.AST_NODE_TYPES.TSExportAssignment && statement.expression.type === import_utils19.AST_NODE_TYPES.Identifier) {
3257
+ if (statement.type === import_utils20.AST_NODE_TYPES.TSExportAssignment && statement.expression.type === import_utils20.AST_NODE_TYPES.Identifier) {
3124
3258
  names.add(statement.expression.name);
3125
3259
  }
3126
3260
  }
@@ -3182,7 +3316,7 @@ var no_positional_tuple_return_default = createRule({
3182
3316
  });
3183
3317
 
3184
3318
  // src/rules/no-raw-env.ts
3185
- var import_utils20 = require("@typescript-eslint/utils");
3319
+ var import_utils21 = require("@typescript-eslint/utils");
3186
3320
  var CONFIG_FILE_RE = /(^|[\\/])[\w.-]+\.config\.[cm]?[jt]sx?$/;
3187
3321
  var ENV_BOUNDARY_FILE_RE = /(^|[\\/])(?:env|client-env|server-env|client-settings|server-settings)\.[cm]?[jt]sx?$/;
3188
3322
  var ENV_VALIDATION_MARKER_RE = /\bcreateEnv\s*\(|\bz\.object\s*\(|\.(?:safeParse|parse)\s*\(/;
@@ -3232,11 +3366,11 @@ var no_raw_env_default = createRule({
3232
3366
  meta: {
3233
3367
  type: "problem",
3234
3368
  docs: {
3235
- description: "Disallow direct `process.env` access; use a Zod-validated env module instead."
3369
+ description: "Disallow direct `process.env` and `import.meta.env` reads outside validated boundaries."
3236
3370
  },
3237
3371
  schema: [],
3238
3372
  messages: {
3239
- noRawEnv: "Do not read from `process.env` directly. Import the Zod-validated env module instead so values are typed and validated at startup."
3373
+ noRawEnv: "Do not read raw environment values directly. Import the validated env module so values are typed and checked at startup."
3240
3374
  }
3241
3375
  },
3242
3376
  defaultOptions: [],
@@ -3259,13 +3393,11 @@ var no_raw_env_default = createRule({
3259
3393
  });
3260
3394
 
3261
3395
  // src/rules/no-raw-fetch-outside-clients.ts
3262
- var import_utils21 = require("@typescript-eslint/utils");
3396
+ var import_utils22 = require("@typescript-eslint/utils");
3263
3397
  var DEFAULT_ALLOW = [
3264
3398
  "[\\\\/]clients?[\\\\/]",
3265
3399
  "-client\\.[cm]?[jt]sx?$",
3266
3400
  "[\\\\/]http-client\\.[cm]?[jt]sx?$",
3267
- // The `api` spelling of the same client-layer convention: an `api/` directory,
3268
- // a bare `api.ts`, or a `*-api.ts` / `*.api.ts` module.
3269
3401
  "[\\\\/]api[\\\\/]",
3270
3402
  "[\\\\/]api\\.[cm]?[jt]sx?$",
3271
3403
  "[-.]api\\.[cm]?[jt]sx?$",
@@ -3303,7 +3435,7 @@ function identifierLikeName(node) {
3303
3435
  }
3304
3436
  function isConstructedArgumentHandoff(node) {
3305
3437
  const [first] = node.arguments;
3306
- return node.arguments.length === 1 && first !== void 0 && first.type === import_utils21.AST_NODE_TYPES.NewExpression;
3438
+ return node.arguments.length === 1 && first !== void 0 && first.type === import_utils22.AST_NODE_TYPES.NewExpression;
3307
3439
  }
3308
3440
  function isPresignedUrlTransfer(node) {
3309
3441
  const first = node.arguments[0];
@@ -3372,16 +3504,16 @@ var no_raw_fetch_outside_clients_default = createRule({
3372
3504
  });
3373
3505
 
3374
3506
  // src/rules/no-repeated-string-literal.ts
3375
- var import_utils22 = require("@typescript-eslint/utils");
3507
+ var import_utils23 = require("@typescript-eslint/utils");
3376
3508
  var MIN_LENGTH = 40;
3377
3509
  var MIN_DISTINCT_SCOPES = 2;
3378
3510
  var PREVIEW_LENGTH = 40;
3379
3511
  var SQL_KEYWORD_RE = /\b(SELECT|INSERT|UPDATE|DELETE|FROM|WHERE|JOIN|VALUES|ON CONFLICT|RETURNING|GROUP BY|ORDER BY)\b/;
3380
3512
  var IDENTIFIER_RE = /^[a-z_][a-z0-9_.]*$/;
3381
3513
  var FUNCTION_TYPES3 = /* @__PURE__ */ new Set([
3382
- import_utils22.AST_NODE_TYPES.FunctionDeclaration,
3383
- import_utils22.AST_NODE_TYPES.FunctionExpression,
3384
- import_utils22.AST_NODE_TYPES.ArrowFunctionExpression
3514
+ import_utils23.AST_NODE_TYPES.FunctionDeclaration,
3515
+ import_utils23.AST_NODE_TYPES.FunctionExpression,
3516
+ import_utils23.AST_NODE_TYPES.ArrowFunctionExpression
3385
3517
  ]);
3386
3518
  function isStructured(value) {
3387
3519
  return value.includes("\n") || SQL_KEYWORD_RE.test(value) || IDENTIFIER_RE.test(value);
@@ -3403,7 +3535,8 @@ function isScaffolding(node) {
3403
3535
  if (parent === void 0) {
3404
3536
  return true;
3405
3537
  }
3406
- return parent.type === import_utils22.AST_NODE_TYPES.ImportDeclaration || parent.type === import_utils22.AST_NODE_TYPES.ExportNamedDeclaration || parent.type === import_utils22.AST_NODE_TYPES.ExportAllDeclaration || parent.type === import_utils22.AST_NODE_TYPES.TSImportType || parent.type === import_utils22.AST_NODE_TYPES.JSXAttribute || parent.type === import_utils22.AST_NODE_TYPES.TSLiteralType;
3538
+ const isRequireSource = parent.type === import_utils23.AST_NODE_TYPES.CallExpression && parent.callee.type === import_utils23.AST_NODE_TYPES.Identifier && parent.callee.name === "require";
3539
+ return parent.type === import_utils23.AST_NODE_TYPES.ImportDeclaration || parent.type === import_utils23.AST_NODE_TYPES.ImportExpression || parent.type === import_utils23.AST_NODE_TYPES.ExportNamedDeclaration || parent.type === import_utils23.AST_NODE_TYPES.ExportAllDeclaration || parent.type === import_utils23.AST_NODE_TYPES.TSImportType || parent.type === import_utils23.AST_NODE_TYPES.JSXAttribute || parent.type === import_utils23.AST_NODE_TYPES.TSLiteralType || isRequireSource;
3407
3540
  }
3408
3541
  var no_repeated_string_literal_default = createRule({
3409
3542
  name: "no-repeated-string-literal",
@@ -3443,7 +3576,7 @@ var no_repeated_string_literal_default = createRule({
3443
3576
  }
3444
3577
  },
3445
3578
  TemplateLiteral(node) {
3446
- if (node.parent.type === import_utils22.AST_NODE_TYPES.TaggedTemplateExpression) {
3579
+ if (node.parent.type === import_utils23.AST_NODE_TYPES.TaggedTemplateExpression) {
3447
3580
  return;
3448
3581
  }
3449
3582
  const [only] = node.quasis;
@@ -3477,10 +3610,10 @@ var no_repeated_string_literal_default = createRule({
3477
3610
  });
3478
3611
 
3479
3612
  // src/rules/no-restated-comment.ts
3480
- var import_utils23 = require("@typescript-eslint/utils");
3613
+ var import_utils24 = require("@typescript-eslint/utils");
3481
3614
  var MAX_WORDS = 8;
3482
3615
  var MIN_CONTENT_TOKENS = 2;
3483
- var DIRECTIVE_RE2 = /^(eslint\b|eslint-|sarj-noqa\b|@ts-|prettier-ignore|prettier\b|biome-|c8\b|v8\b|istanbul\b|@type\b|@vite|webpack|<reference|<amd|global\b|noinspection|todo\b|fixme\b|hack\b|xxx\b)/i;
3616
+ var DIRECTIVE_RE3 = /^(eslint\b|eslint-|sarj-noqa\b|@ts-|prettier-ignore|prettier\b|biome-|c8\b|v8\b|istanbul\b|@type\b|@vite|webpack|<reference|<amd|global\b|noinspection|todo\b|fixme\b|hack\b|xxx\b)/i;
3484
3617
  var CODEY_RE = /^[\w.$[\]'"]+\s*[:=]\s*\S|^[\w.$]+\s*\(|^(?:return|throw|await|import|export|const|let|var)\b.*[=()[\]{}]/;
3485
3618
  var BANNERISH_RE = /[=\-─-╿*#~_.]{3,}|^[A-Z0-9 _:-]+$/;
3486
3619
  var MODALITY_RE = /\b(?:can|could|should|shall|may|might|must|will|would|cannot)\b/i;
@@ -3498,10 +3631,10 @@ function areAdjacentLineComments2(a, b) {
3498
3631
  function headsSiblingRun(node) {
3499
3632
  const parent = node.parent;
3500
3633
  if (parent === void 0) return false;
3501
- const body = "body" in parent && Array.isArray(parent.body) ? parent.body : void 0;
3502
- if (body === void 0) return false;
3503
- const index = body.indexOf(node);
3504
- const next = index >= 0 ? body[index + 1] : void 0;
3634
+ const body2 = "body" in parent && Array.isArray(parent.body) ? parent.body : void 0;
3635
+ if (body2 === void 0) return false;
3636
+ const index = body2.indexOf(node);
3637
+ const next = index >= 0 ? body2[index + 1] : void 0;
3505
3638
  return next !== void 0 && next.type === node.type;
3506
3639
  }
3507
3640
  var no_restated_comment_default = createRule({
@@ -3530,7 +3663,7 @@ var no_restated_comment_default = createRule({
3530
3663
  function labelsASiblingRun(comment) {
3531
3664
  const token = sourceCode.getTokenAfter(comment, { includeComments: false });
3532
3665
  if (token === null) return false;
3533
- for (let node = sourceCode.getNodeByRangeIndex(token.range[0]); node != null && node.type !== import_utils23.AST_NODE_TYPES.Program; node = node.parent) {
3666
+ for (let node = sourceCode.getNodeByRangeIndex(token.range[0]); node != null && node.type !== import_utils24.AST_NODE_TYPES.Program; node = node.parent) {
3534
3667
  if (headsSiblingRun(node)) return true;
3535
3668
  }
3536
3669
  return false;
@@ -3541,8 +3674,8 @@ var no_restated_comment_default = createRule({
3541
3674
  const wallMembers = /* @__PURE__ */ new Set();
3542
3675
  let cluster = [];
3543
3676
  for (const candidate of comments) {
3544
- const body = candidate.value.replace(/^\/*/, "").trim();
3545
- if (candidate.type !== "Line" || !isStandalone(candidate) || isProtected(body) || !WALL_NARRATION_RE2.test(body)) {
3677
+ const body2 = candidate.value.replace(/^\/*/, "").trim();
3678
+ if (candidate.type !== "Line" || !isStandalone(candidate) || isProtected(body2) || !WALL_NARRATION_RE2.test(body2)) {
3546
3679
  continue;
3547
3680
  }
3548
3681
  const previous = cluster.at(-1);
@@ -3565,18 +3698,18 @@ var no_restated_comment_default = createRule({
3565
3698
  if (areAdjacentLineComments2(comments[i - 1], comment) || areAdjacentLineComments2(comment, comments[i + 1])) {
3566
3699
  continue;
3567
3700
  }
3568
- const body = comment.value.replace(/^\/*/, "").trim();
3569
- if (body.length === 0 || body.endsWith("?")) continue;
3570
- if (DIRECTIVE_RE2.test(body) || CODEY_RE.test(body) || BANNERISH_RE.test(body)) continue;
3571
- if (NON_ASCII_LETTER_RE.test(body) || isProtected(body)) continue;
3572
- if (MODALITY_RE.test(body) || LEAD_IN_RE.test(body) || EMPHASIS_RE.test(body)) continue;
3573
- if (NEGATION_WORD_RE.test(body)) continue;
3574
- if (body.split(/\s+/).length > MAX_WORDS) continue;
3575
- const tokens = contentTokens(body);
3701
+ const body2 = comment.value.replace(/^\/*/, "").trim();
3702
+ if (body2.length === 0 || body2.endsWith("?")) continue;
3703
+ if (DIRECTIVE_RE3.test(body2) || CODEY_RE.test(body2) || BANNERISH_RE.test(body2)) continue;
3704
+ if (NON_ASCII_LETTER_RE.test(body2) || isProtected(body2)) continue;
3705
+ if (MODALITY_RE.test(body2) || LEAD_IN_RE.test(body2) || EMPHASIS_RE.test(body2)) continue;
3706
+ if (NEGATION_WORD_RE.test(body2)) continue;
3707
+ if (body2.split(/\s+/).length > MAX_WORDS) continue;
3708
+ const tokens = contentTokens(body2);
3576
3709
  if (tokens.length < MIN_CONTENT_TOKENS) continue;
3577
3710
  const statement = restatableStatementBelow(comment, sourceCode);
3578
3711
  if (statement === null) continue;
3579
- if (restatesStatementHead(body, statement)) continue;
3712
+ if (restatesStatementHead(body2, statement)) continue;
3580
3713
  const line = lines[comment.loc.start.line] ?? "";
3581
3714
  if (!ACTION_STMT_RE.test(line)) continue;
3582
3715
  if (labelsASiblingRun(comment)) continue;
@@ -3590,7 +3723,7 @@ var no_restated_comment_default = createRule({
3590
3723
  });
3591
3724
 
3592
3725
  // src/rules/no-restated-jsdoc.ts
3593
- var import_utils24 = require("@typescript-eslint/utils");
3726
+ var import_utils25 = require("@typescript-eslint/utils");
3594
3727
  var MODELLED_TAGS = /* @__PURE__ */ new Set([
3595
3728
  "arg",
3596
3729
  "argument",
@@ -3602,7 +3735,7 @@ var MODELLED_TAGS = /* @__PURE__ */ new Set([
3602
3735
  ]);
3603
3736
  var PARAM_TAGS = /* @__PURE__ */ new Set(["arg", "argument", "param"]);
3604
3737
  var RETURN_TAGS = /* @__PURE__ */ new Set(["return", "returns"]);
3605
- var DIRECTIVE_RE3 = /^\s*(?:eslint\b|eslint-|@ts-|prettier|biome-|c8\b|v8\b|istanbul\b|@vite|webpack|@jsx|@jest-environment|@vitest-environment|#__)/i;
3738
+ var DIRECTIVE_RE4 = /^\s*(?:eslint\b|eslint-|@ts-|prettier|biome-|c8\b|v8\b|istanbul\b|@vite|webpack|@jsx|@jest-environment|@vitest-environment|#__)/i;
3606
3739
  var STOPWORDS2 = new Set(
3607
3740
  `the a an of to for in on with and or as at by is are was be been being
3608
3741
  this that it its if whether when where which what will would can could should
@@ -3644,30 +3777,30 @@ function declarationNames(node) {
3644
3777
  switch (node.type) {
3645
3778
  // `export function f()` — the JSDoc sits above the `export`, so the token
3646
3779
  // after it resolves to the wrapper, not to the thing being documented.
3647
- case import_utils24.AST_NODE_TYPES.ExportNamedDeclaration:
3648
- case import_utils24.AST_NODE_TYPES.ExportDefaultDeclaration:
3780
+ case import_utils25.AST_NODE_TYPES.ExportNamedDeclaration:
3781
+ case import_utils25.AST_NODE_TYPES.ExportDefaultDeclaration:
3649
3782
  return node.declaration == null ? null : declarationNames(node.declaration);
3650
- case import_utils24.AST_NODE_TYPES.FunctionDeclaration:
3651
- case import_utils24.AST_NODE_TYPES.TSDeclareFunction:
3783
+ case import_utils25.AST_NODE_TYPES.FunctionDeclaration:
3784
+ case import_utils25.AST_NODE_TYPES.TSDeclareFunction:
3652
3785
  return node.id === null ? null : { name: node.id.name, params: paramNames(node.params) };
3653
- case import_utils24.AST_NODE_TYPES.ClassDeclaration:
3654
- case import_utils24.AST_NODE_TYPES.TSInterfaceDeclaration:
3655
- case import_utils24.AST_NODE_TYPES.TSTypeAliasDeclaration:
3656
- case import_utils24.AST_NODE_TYPES.TSEnumDeclaration:
3786
+ case import_utils25.AST_NODE_TYPES.ClassDeclaration:
3787
+ case import_utils25.AST_NODE_TYPES.TSInterfaceDeclaration:
3788
+ case import_utils25.AST_NODE_TYPES.TSTypeAliasDeclaration:
3789
+ case import_utils25.AST_NODE_TYPES.TSEnumDeclaration:
3657
3790
  return node.id === null ? null : { name: node.id.name, params: [] };
3658
- case import_utils24.AST_NODE_TYPES.VariableDeclaration: {
3791
+ case import_utils25.AST_NODE_TYPES.VariableDeclaration: {
3659
3792
  const declarator = node.declarations[0];
3660
- if (declarator === void 0 || declarator.id.type !== import_utils24.AST_NODE_TYPES.Identifier) return null;
3793
+ if (declarator === void 0 || declarator.id.type !== import_utils25.AST_NODE_TYPES.Identifier) return null;
3661
3794
  const init = declarator.init;
3662
- const params = init != null && (init.type === import_utils24.AST_NODE_TYPES.ArrowFunctionExpression || init.type === import_utils24.AST_NODE_TYPES.FunctionExpression) ? paramNames(init.params) : [];
3795
+ const params = init != null && (init.type === import_utils25.AST_NODE_TYPES.ArrowFunctionExpression || init.type === import_utils25.AST_NODE_TYPES.FunctionExpression) ? paramNames(init.params) : [];
3663
3796
  return { name: declarator.id.name, params };
3664
3797
  }
3665
- case import_utils24.AST_NODE_TYPES.MethodDefinition:
3666
- case import_utils24.AST_NODE_TYPES.PropertyDefinition:
3667
- case import_utils24.AST_NODE_TYPES.TSMethodSignature:
3668
- case import_utils24.AST_NODE_TYPES.TSPropertySignature: {
3669
- if (node.key.type !== import_utils24.AST_NODE_TYPES.Identifier) return null;
3670
- const params = node.type === import_utils24.AST_NODE_TYPES.MethodDefinition ? paramNames(node.value.params) : node.type === import_utils24.AST_NODE_TYPES.TSMethodSignature ? paramNames(node.params) : [];
3798
+ case import_utils25.AST_NODE_TYPES.MethodDefinition:
3799
+ case import_utils25.AST_NODE_TYPES.PropertyDefinition:
3800
+ case import_utils25.AST_NODE_TYPES.TSMethodSignature:
3801
+ case import_utils25.AST_NODE_TYPES.TSPropertySignature: {
3802
+ if (node.key.type !== import_utils25.AST_NODE_TYPES.Identifier) return null;
3803
+ const params = node.type === import_utils25.AST_NODE_TYPES.MethodDefinition ? paramNames(node.value.params) : node.type === import_utils25.AST_NODE_TYPES.TSMethodSignature ? paramNames(node.params) : [];
3671
3804
  return { name: node.key.name, params };
3672
3805
  }
3673
3806
  default:
@@ -3677,9 +3810,9 @@ function declarationNames(node) {
3677
3810
  function paramNames(params) {
3678
3811
  const names = [];
3679
3812
  for (const param of params) {
3680
- const target = param.type === import_utils24.AST_NODE_TYPES.AssignmentPattern ? param.left : param;
3681
- if (target.type === import_utils24.AST_NODE_TYPES.Identifier) names.push(target.name);
3682
- else if (target.type === import_utils24.AST_NODE_TYPES.TSParameterProperty) continue;
3813
+ const target = param.type === import_utils25.AST_NODE_TYPES.AssignmentPattern ? param.left : param;
3814
+ if (target.type === import_utils25.AST_NODE_TYPES.Identifier) names.push(target.name);
3815
+ else if (target.type === import_utils25.AST_NODE_TYPES.TSParameterProperty) continue;
3683
3816
  }
3684
3817
  return names;
3685
3818
  }
@@ -3713,7 +3846,7 @@ var no_restated_jsdoc_default = createRule({
3713
3846
  for (const comment of sourceCode.getAllComments()) {
3714
3847
  if (comment.type !== "Block" || !comment.value.startsWith("*")) continue;
3715
3848
  const { description, tags } = parseJsDoc(comment.value);
3716
- if (DIRECTIVE_RE3.test(description)) continue;
3849
+ if (DIRECTIVE_RE4.test(description)) continue;
3717
3850
  const tagNames = new Set(tags.map((tag) => tag.name));
3718
3851
  if ([...tagNames].some((name) => !MODELLED_TAGS.has(name))) continue;
3719
3852
  if (isProtected(description)) continue;
@@ -3721,7 +3854,7 @@ var no_restated_jsdoc_default = createRule({
3721
3854
  if (token === null || token.loc.start.line !== comment.loc.end.line + 1) continue;
3722
3855
  let node = sourceCode.getNodeByRangeIndex(token.range[0]);
3723
3856
  let declaration = null;
3724
- while (node != null && node.type !== import_utils24.AST_NODE_TYPES.Program) {
3857
+ while (node != null && node.type !== import_utils25.AST_NODE_TYPES.Program) {
3725
3858
  declaration = declarationNames(node);
3726
3859
  if (declaration !== null) break;
3727
3860
  node = node.parent ?? null;
@@ -3776,7 +3909,7 @@ var no_restated_jsdoc_default = createRule({
3776
3909
  });
3777
3910
 
3778
3911
  // src/rules/no-secret-in-log.ts
3779
- var import_utils25 = require("@typescript-eslint/utils");
3912
+ var import_utils26 = require("@typescript-eslint/utils");
3780
3913
 
3781
3914
  // src/rules/_secret-names.ts
3782
3915
  var SECRET_WORDS = /* @__PURE__ */ new Set([
@@ -4113,7 +4246,7 @@ var no_secret_in_log_default = createRule({
4113
4246
  });
4114
4247
 
4115
4248
  // src/rules/no-select-star.ts
4116
- var import_utils26 = require("@typescript-eslint/utils");
4249
+ var import_utils27 = require("@typescript-eslint/utils");
4117
4250
  var QUERY_SHAPE = /\bSELECT\b[\s\S]*?\bFROM\b/i;
4118
4251
  var SELECT_KEYWORD = /\bSELECT\b/gi;
4119
4252
  var FROM_KEYWORD = /^FROM\b/i;
@@ -4180,12 +4313,12 @@ var no_select_star_default = createRule({
4180
4313
  });
4181
4314
 
4182
4315
  // src/rules/no-sentinel-return-on-catch.ts
4183
- var import_utils27 = require("@typescript-eslint/utils");
4316
+ var import_utils28 = require("@typescript-eslint/utils");
4184
4317
  function sentinelKind(arg) {
4185
4318
  if (arg === null) {
4186
4319
  return null;
4187
4320
  }
4188
- if (arg.type === import_utils27.AST_NODE_TYPES.Literal) {
4321
+ if (arg.type === import_utils28.AST_NODE_TYPES.Literal) {
4189
4322
  if (arg.value === null) {
4190
4323
  return "nullish";
4191
4324
  }
@@ -4197,13 +4330,13 @@ function sentinelKind(arg) {
4197
4330
  }
4198
4331
  return null;
4199
4332
  }
4200
- if (arg.type === import_utils27.AST_NODE_TYPES.Identifier && arg.name === "undefined") {
4333
+ if (arg.type === import_utils28.AST_NODE_TYPES.Identifier && arg.name === "undefined") {
4201
4334
  return "nullish";
4202
4335
  }
4203
- if (arg.type === import_utils27.AST_NODE_TYPES.ArrayExpression) {
4336
+ if (arg.type === import_utils28.AST_NODE_TYPES.ArrayExpression) {
4204
4337
  return "array";
4205
4338
  }
4206
- if (arg.type === import_utils27.AST_NODE_TYPES.ObjectExpression) {
4339
+ if (arg.type === import_utils28.AST_NODE_TYPES.ObjectExpression) {
4207
4340
  return "object";
4208
4341
  }
4209
4342
  return null;
@@ -4212,25 +4345,25 @@ function isSentinelArgument(arg) {
4212
4345
  if (arg === null) {
4213
4346
  return false;
4214
4347
  }
4215
- if (arg.type === import_utils27.AST_NODE_TYPES.Literal && arg.value === null) {
4348
+ if (arg.type === import_utils28.AST_NODE_TYPES.Literal && arg.value === null) {
4216
4349
  return true;
4217
4350
  }
4218
- if (arg.type === import_utils27.AST_NODE_TYPES.Literal && arg.value === false) {
4351
+ if (arg.type === import_utils28.AST_NODE_TYPES.Literal && arg.value === false) {
4219
4352
  return true;
4220
4353
  }
4221
- if (arg.type === import_utils27.AST_NODE_TYPES.Identifier && arg.name === "undefined") {
4354
+ if (arg.type === import_utils28.AST_NODE_TYPES.Identifier && arg.name === "undefined") {
4222
4355
  return true;
4223
4356
  }
4224
- if (arg.type === import_utils27.AST_NODE_TYPES.ArrayExpression && arg.elements.length === 0) {
4357
+ if (arg.type === import_utils28.AST_NODE_TYPES.ArrayExpression && arg.elements.length === 0) {
4225
4358
  return true;
4226
4359
  }
4227
- if (arg.type === import_utils27.AST_NODE_TYPES.ObjectExpression && arg.properties.length === 0) {
4360
+ if (arg.type === import_utils28.AST_NODE_TYPES.ObjectExpression && arg.properties.length === 0) {
4228
4361
  return true;
4229
4362
  }
4230
4363
  return false;
4231
4364
  }
4232
4365
  function isFunctionNode(node) {
4233
- return node.type === import_utils27.AST_NODE_TYPES.FunctionDeclaration || node.type === import_utils27.AST_NODE_TYPES.FunctionExpression || node.type === import_utils27.AST_NODE_TYPES.ArrowFunctionExpression;
4366
+ return node.type === import_utils28.AST_NODE_TYPES.FunctionDeclaration || node.type === import_utils28.AST_NODE_TYPES.FunctionExpression || node.type === import_utils28.AST_NODE_TYPES.ArrowFunctionExpression;
4234
4367
  }
4235
4368
  function isNode3(value) {
4236
4369
  return typeof value === "object" && value !== null && typeof value.type === "string";
@@ -4270,24 +4403,24 @@ function walkWithinScope(node, visit) {
4270
4403
  function containsThrow(node) {
4271
4404
  return walkWithinScope(
4272
4405
  node,
4273
- (current) => current.type === import_utils27.AST_NODE_TYPES.ThrowStatement
4406
+ (current) => current.type === import_utils28.AST_NODE_TYPES.ThrowStatement
4274
4407
  );
4275
4408
  }
4276
4409
  function bindsName(param, name) {
4277
4410
  switch (param.type) {
4278
- case import_utils27.AST_NODE_TYPES.Identifier:
4411
+ case import_utils28.AST_NODE_TYPES.Identifier:
4279
4412
  return param.name === name;
4280
- case import_utils27.AST_NODE_TYPES.AssignmentPattern:
4413
+ case import_utils28.AST_NODE_TYPES.AssignmentPattern:
4281
4414
  return bindsName(param.left, name);
4282
- case import_utils27.AST_NODE_TYPES.RestElement:
4415
+ case import_utils28.AST_NODE_TYPES.RestElement:
4283
4416
  return bindsName(param.argument, name);
4284
- case import_utils27.AST_NODE_TYPES.ArrayPattern:
4417
+ case import_utils28.AST_NODE_TYPES.ArrayPattern:
4285
4418
  return param.elements.some(
4286
4419
  (element) => element !== null && bindsName(element, name)
4287
4420
  );
4288
- case import_utils27.AST_NODE_TYPES.ObjectPattern:
4421
+ case import_utils28.AST_NODE_TYPES.ObjectPattern:
4289
4422
  return param.properties.some(
4290
- (property) => property.type === import_utils27.AST_NODE_TYPES.RestElement ? bindsName(property.argument, name) : bindsName(property.value, name)
4423
+ (property) => property.type === import_utils28.AST_NODE_TYPES.RestElement ? bindsName(property.argument, name) : bindsName(property.value, name)
4291
4424
  );
4292
4425
  default:
4293
4426
  return false;
@@ -4302,7 +4435,7 @@ function subtreeReadsName(node, name) {
4302
4435
  if (found) {
4303
4436
  return;
4304
4437
  }
4305
- if (current.type === import_utils27.AST_NODE_TYPES.Identifier && current.name === name) {
4438
+ if (current.type === import_utils28.AST_NODE_TYPES.Identifier && current.name === name) {
4306
4439
  found = true;
4307
4440
  return;
4308
4441
  }
@@ -4313,10 +4446,10 @@ function subtreeReadsName(node, name) {
4313
4446
  if (key === "parent") {
4314
4447
  continue;
4315
4448
  }
4316
- if (key === "key" && current.type === import_utils27.AST_NODE_TYPES.Property && !current.computed) {
4449
+ if (key === "key" && current.type === import_utils28.AST_NODE_TYPES.Property && !current.computed) {
4317
4450
  continue;
4318
4451
  }
4319
- if (key === "property" && current.type === import_utils27.AST_NODE_TYPES.MemberExpression && !current.computed) {
4452
+ if (key === "property" && current.type === import_utils28.AST_NODE_TYPES.MemberExpression && !current.computed) {
4320
4453
  continue;
4321
4454
  }
4322
4455
  const value = current[key];
@@ -4349,10 +4482,10 @@ var SAFE_PARSE_CONSTRUCTORS = /* @__PURE__ */ new Set([
4349
4482
  "URLPattern"
4350
4483
  ]);
4351
4484
  function isParseShapedNode(node) {
4352
- if (node.type === import_utils27.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils27.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils27.AST_NODE_TYPES.Identifier) {
4485
+ if (node.type === import_utils28.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils28.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils28.AST_NODE_TYPES.Identifier) {
4353
4486
  return node.callee.property.name === "parse";
4354
4487
  }
4355
- if (node.type === import_utils27.AST_NODE_TYPES.NewExpression && node.callee.type === import_utils27.AST_NODE_TYPES.Identifier) {
4488
+ if (node.type === import_utils28.AST_NODE_TYPES.NewExpression && node.callee.type === import_utils28.AST_NODE_TYPES.Identifier) {
4356
4489
  return SAFE_PARSE_CONSTRUCTORS.has(node.callee.name);
4357
4490
  }
4358
4491
  return false;
@@ -4363,10 +4496,10 @@ var BODY_DECODE_METHODS = /* @__PURE__ */ new Set([
4363
4496
  "arrayBuffer"
4364
4497
  ]);
4365
4498
  function isBodyDecodeNode(node) {
4366
- return node.type === import_utils27.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils27.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils27.AST_NODE_TYPES.Identifier && BODY_DECODE_METHODS.has(node.callee.property.name);
4499
+ return node.type === import_utils28.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils28.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils28.AST_NODE_TYPES.Identifier && BODY_DECODE_METHODS.has(node.callee.property.name);
4367
4500
  }
4368
4501
  function returnsMatching(stmt, predicate) {
4369
- return stmt.type === import_utils27.AST_NODE_TYPES.ReturnStatement && stmt.argument !== null && walkWithinScope(stmt.argument, predicate);
4502
+ return stmt.type === import_utils28.AST_NODE_TYPES.ReturnStatement && stmt.argument !== null && walkWithinScope(stmt.argument, predicate);
4370
4503
  }
4371
4504
  function enclosingReturnTypeNode(node) {
4372
4505
  let current = node.parent;
@@ -4384,11 +4517,11 @@ function enclosingFunctionName(node) {
4384
4517
  let current = node.parent;
4385
4518
  while (current !== void 0 && current !== null) {
4386
4519
  if (isFunctionNode(current)) {
4387
- if ("id" in current && isNode3(current.id) && current.id.type === import_utils27.AST_NODE_TYPES.Identifier) {
4520
+ if ("id" in current && isNode3(current.id) && current.id.type === import_utils28.AST_NODE_TYPES.Identifier) {
4388
4521
  return current.id.name;
4389
4522
  }
4390
4523
  const parent = current.parent;
4391
- if (parent?.type === import_utils27.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils27.AST_NODE_TYPES.Identifier) {
4524
+ if (parent?.type === import_utils28.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils28.AST_NODE_TYPES.Identifier) {
4392
4525
  return parent.id.name;
4393
4526
  }
4394
4527
  return null;
@@ -4409,10 +4542,10 @@ function isDeclaredBooleanPredicate(catchNode, kind) {
4409
4542
  return false;
4410
4543
  }
4411
4544
  let declared = enclosingReturnTypeNode(catchNode);
4412
- if (declared?.type === import_utils27.AST_NODE_TYPES.TSTypeReference && declared.typeName.type === import_utils27.AST_NODE_TYPES.Identifier && declared.typeName.name === "Promise") {
4545
+ if (declared?.type === import_utils28.AST_NODE_TYPES.TSTypeReference && declared.typeName.type === import_utils28.AST_NODE_TYPES.Identifier && declared.typeName.name === "Promise") {
4413
4546
  declared = declared.typeArguments?.params[0] ?? null;
4414
4547
  }
4415
- return declared?.type === import_utils27.AST_NODE_TYPES.TSBooleanKeyword;
4548
+ return declared?.type === import_utils28.AST_NODE_TYPES.TSBooleanKeyword;
4416
4549
  }
4417
4550
  function tryReturnsSafeParse(catchNode) {
4418
4551
  const tryBlock = tryBlockOf(catchNode);
@@ -4428,7 +4561,7 @@ function tryReturnsSafeParse(catchNode) {
4428
4561
  function enclosingFunctionBody(node) {
4429
4562
  let current = node.parent;
4430
4563
  while (current !== void 0 && current !== null) {
4431
- if (isFunctionNode(current) && "body" in current && isNode3(current.body) && current.body.type === import_utils27.AST_NODE_TYPES.BlockStatement) {
4564
+ if (isFunctionNode(current) && "body" in current && isNode3(current.body) && current.body.type === import_utils28.AST_NODE_TYPES.BlockStatement) {
4432
4565
  return current.body;
4433
4566
  }
4434
4567
  current = current.parent;
@@ -4441,7 +4574,7 @@ function functionReturnsSameSentinelKindElsewhere(catchNode, kind) {
4441
4574
  return false;
4442
4575
  }
4443
4576
  return walkWithinScope(functionBody, (current) => {
4444
- if (current.type !== import_utils27.AST_NODE_TYPES.ReturnStatement) {
4577
+ if (current.type !== import_utils28.AST_NODE_TYPES.ReturnStatement) {
4445
4578
  return false;
4446
4579
  }
4447
4580
  if (isWithin(current, catchNode.body)) {
@@ -4460,13 +4593,13 @@ function returnedSentinelKinds(arg) {
4460
4593
  kinds.add(direct);
4461
4594
  return kinds;
4462
4595
  }
4463
- if (arg.type === import_utils27.AST_NODE_TYPES.ConditionalExpression) {
4596
+ if (arg.type === import_utils28.AST_NODE_TYPES.ConditionalExpression) {
4464
4597
  for (const branch of [arg.consequent, arg.alternate]) {
4465
4598
  for (const nested of returnedSentinelKinds(branch)) {
4466
4599
  kinds.add(nested);
4467
4600
  }
4468
4601
  }
4469
- } else if (arg.type === import_utils27.AST_NODE_TYPES.LogicalExpression && (arg.operator === "??" || arg.operator === "||")) {
4602
+ } else if (arg.type === import_utils28.AST_NODE_TYPES.LogicalExpression && (arg.operator === "??" || arg.operator === "||")) {
4470
4603
  for (const nested of returnedSentinelKinds(arg.right)) {
4471
4604
  kinds.add(nested);
4472
4605
  }
@@ -4509,7 +4642,7 @@ var no_sentinel_return_on_catch_default = createRule({
4509
4642
  const matcher = createLogMatcher(loggingOptions);
4510
4643
  function logsOrReportsError(catchBody, caughtName) {
4511
4644
  return walkWithinScope(catchBody, (current) => {
4512
- if (current.type !== import_utils27.AST_NODE_TYPES.CallExpression) {
4645
+ if (current.type !== import_utils28.AST_NODE_TYPES.CallExpression) {
4513
4646
  return false;
4514
4647
  }
4515
4648
  if (matcher.isLoggingCall(current)) {
@@ -4521,12 +4654,12 @@ var no_sentinel_return_on_catch_default = createRule({
4521
4654
  }
4522
4655
  return {
4523
4656
  CatchClause(node) {
4524
- const body = node.body.body;
4525
- if (body.length === 0) {
4657
+ const body2 = node.body.body;
4658
+ if (body2.length === 0) {
4526
4659
  return;
4527
4660
  }
4528
- const last = body[body.length - 1];
4529
- if (last === void 0 || last.type !== import_utils27.AST_NODE_TYPES.ReturnStatement) {
4661
+ const last = body2[body2.length - 1];
4662
+ if (last === void 0 || last.type !== import_utils28.AST_NODE_TYPES.ReturnStatement) {
4530
4663
  return;
4531
4664
  }
4532
4665
  if (!isSentinelArgument(last.argument)) {
@@ -4535,7 +4668,7 @@ var no_sentinel_return_on_catch_default = createRule({
4535
4668
  if (containsThrow(node.body)) {
4536
4669
  return;
4537
4670
  }
4538
- const caughtName = node.param?.type === import_utils27.AST_NODE_TYPES.Identifier ? node.param.name : null;
4671
+ const caughtName = node.param?.type === import_utils28.AST_NODE_TYPES.Identifier ? node.param.name : null;
4539
4672
  if (logsOrReportsError(node.body, caughtName)) {
4540
4673
  return;
4541
4674
  }
@@ -4562,9 +4695,9 @@ var no_sentinel_return_on_catch_default = createRule({
4562
4695
  });
4563
4696
 
4564
4697
  // src/rules/no-silent-promise-catch.ts
4565
- var import_utils28 = require("@typescript-eslint/utils");
4698
+ var import_utils29 = require("@typescript-eslint/utils");
4566
4699
  function isBodyParseCall(node) {
4567
- return node.type === import_utils28.AST_NODE_TYPES.CallExpression && node.arguments.length === 0 && node.callee.type === import_utils28.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils28.AST_NODE_TYPES.Identifier && (node.callee.property.name === "json" || node.callee.property.name === "text");
4700
+ return node.type === import_utils29.AST_NODE_TYPES.CallExpression && node.arguments.length === 0 && node.callee.type === import_utils29.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils29.AST_NODE_TYPES.Identifier && (node.callee.property.name === "json" || node.callee.property.name === "text");
4568
4701
  }
4569
4702
  var TEARDOWN_METHODS = /* @__PURE__ */ new Set([
4570
4703
  "cancel",
@@ -4579,37 +4712,37 @@ var TEARDOWN_METHODS = /* @__PURE__ */ new Set([
4579
4712
  var DIRECTIVE_COMMENT_RE = /^\s*(eslint-|@ts-|prettier-ignore|biome-ignore|c8 |v8 |istanbul )/;
4580
4713
  var isExplanatory = (comment) => !DIRECTIVE_COMMENT_RE.test(comment.value);
4581
4714
  function isTeardownCall(node) {
4582
- return node.type === import_utils28.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils28.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils28.AST_NODE_TYPES.Identifier && TEARDOWN_METHODS.has(node.callee.property.name);
4715
+ return node.type === import_utils29.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils29.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.property.type === import_utils29.AST_NODE_TYPES.Identifier && TEARDOWN_METHODS.has(node.callee.property.name);
4583
4716
  }
4584
4717
  function isSilentExpression(node) {
4585
4718
  switch (node.type) {
4586
- case import_utils28.AST_NODE_TYPES.Literal:
4719
+ case import_utils29.AST_NODE_TYPES.Literal:
4587
4720
  return !("regex" in node);
4588
- case import_utils28.AST_NODE_TYPES.Identifier:
4721
+ case import_utils29.AST_NODE_TYPES.Identifier:
4589
4722
  return node.name === "undefined";
4590
- case import_utils28.AST_NODE_TYPES.UnaryExpression:
4591
- return node.operator === "void" && node.argument.type === import_utils28.AST_NODE_TYPES.Literal;
4592
- case import_utils28.AST_NODE_TYPES.ObjectExpression:
4723
+ case import_utils29.AST_NODE_TYPES.UnaryExpression:
4724
+ return node.operator === "void" && node.argument.type === import_utils29.AST_NODE_TYPES.Literal;
4725
+ case import_utils29.AST_NODE_TYPES.ObjectExpression:
4593
4726
  return node.properties.length === 0;
4594
- case import_utils28.AST_NODE_TYPES.ArrayExpression:
4727
+ case import_utils29.AST_NODE_TYPES.ArrayExpression:
4595
4728
  return node.elements.length === 0;
4596
- case import_utils28.AST_NODE_TYPES.TSAsExpression:
4729
+ case import_utils29.AST_NODE_TYPES.TSAsExpression:
4597
4730
  return isSilentExpression(node.expression);
4598
4731
  default:
4599
4732
  return false;
4600
4733
  }
4601
4734
  }
4602
4735
  function isSilentHandler(handler) {
4603
- const body = handler.body;
4604
- if (body.type !== import_utils28.AST_NODE_TYPES.BlockStatement) {
4605
- return isSilentExpression(body);
4736
+ const body2 = handler.body;
4737
+ if (body2.type !== import_utils29.AST_NODE_TYPES.BlockStatement) {
4738
+ return isSilentExpression(body2);
4606
4739
  }
4607
- if (body.body.length === 0) {
4740
+ if (body2.body.length === 0) {
4608
4741
  return true;
4609
4742
  }
4610
- if (body.body.length === 1) {
4611
- const only = body.body[0];
4612
- if (only !== void 0 && only.type === import_utils28.AST_NODE_TYPES.ReturnStatement) {
4743
+ if (body2.body.length === 1) {
4744
+ const only = body2.body[0];
4745
+ if (only !== void 0 && only.type === import_utils29.AST_NODE_TYPES.ReturnStatement) {
4613
4746
  return only.argument === null || isSilentExpression(only.argument);
4614
4747
  }
4615
4748
  }
@@ -4638,7 +4771,7 @@ var no_silent_promise_catch_default = createRule({
4638
4771
  return true;
4639
4772
  }
4640
4773
  let statement = call;
4641
- while (statement.parent !== void 0 && statement.parent !== null && !statement.type.endsWith("Statement") && statement.type !== import_utils28.AST_NODE_TYPES.VariableDeclaration) {
4774
+ while (statement.parent !== void 0 && statement.parent !== null && !statement.type.endsWith("Statement") && statement.type !== import_utils29.AST_NODE_TYPES.VariableDeclaration) {
4642
4775
  statement = statement.parent;
4643
4776
  }
4644
4777
  if (sourceCode.getCommentsBefore(statement).some(isExplanatory)) {
@@ -4650,7 +4783,7 @@ var no_silent_promise_catch_default = createRule({
4650
4783
  };
4651
4784
  return {
4652
4785
  CallExpression(node) {
4653
- if (node.callee.type !== import_utils28.AST_NODE_TYPES.MemberExpression || node.callee.computed || node.callee.property.type !== import_utils28.AST_NODE_TYPES.Identifier || node.callee.property.name !== "catch") {
4786
+ if (node.callee.type !== import_utils29.AST_NODE_TYPES.MemberExpression || node.callee.computed || node.callee.property.type !== import_utils29.AST_NODE_TYPES.Identifier || node.callee.property.name !== "catch") {
4654
4787
  return;
4655
4788
  }
4656
4789
  if (isBodyParseCall(node.callee.object)) {
@@ -4659,14 +4792,14 @@ var no_silent_promise_catch_default = createRule({
4659
4792
  if (isTeardownCall(node.callee.object)) {
4660
4793
  return;
4661
4794
  }
4662
- if (node.parent.type === import_utils28.AST_NODE_TYPES.MemberExpression && node.parent.object === node) {
4795
+ if (node.parent.type === import_utils29.AST_NODE_TYPES.MemberExpression && node.parent.object === node) {
4663
4796
  return;
4664
4797
  }
4665
4798
  if (node.arguments.length !== 1) {
4666
4799
  return;
4667
4800
  }
4668
4801
  const handler = node.arguments[0];
4669
- if (handler === void 0 || handler.type !== import_utils28.AST_NODE_TYPES.ArrowFunctionExpression && handler.type !== import_utils28.AST_NODE_TYPES.FunctionExpression) {
4802
+ if (handler === void 0 || handler.type !== import_utils29.AST_NODE_TYPES.ArrowFunctionExpression && handler.type !== import_utils29.AST_NODE_TYPES.FunctionExpression) {
4670
4803
  return;
4671
4804
  }
4672
4805
  if (hasExplanatoryComment(node, handler)) {
@@ -4681,7 +4814,7 @@ var no_silent_promise_catch_default = createRule({
4681
4814
  });
4682
4815
 
4683
4816
  // src/rules/no-sleep-in-test-body.ts
4684
- var import_utils29 = require("@typescript-eslint/utils");
4817
+ var import_utils30 = require("@typescript-eslint/utils");
4685
4818
  var SLEEP_HELPERS = /* @__PURE__ */ new Set(["sleep", "delay", "wait", "pause"]);
4686
4819
  var TEST_CALLERS2 = /* @__PURE__ */ new Set([
4687
4820
  "it",
@@ -4690,34 +4823,34 @@ var TEST_CALLERS2 = /* @__PURE__ */ new Set([
4690
4823
  "afterEach"
4691
4824
  ]);
4692
4825
  var FUNCTION_TYPES4 = /* @__PURE__ */ new Set([
4693
- import_utils29.AST_NODE_TYPES.FunctionDeclaration,
4694
- import_utils29.AST_NODE_TYPES.FunctionExpression,
4695
- import_utils29.AST_NODE_TYPES.ArrowFunctionExpression
4826
+ import_utils30.AST_NODE_TYPES.FunctionDeclaration,
4827
+ import_utils30.AST_NODE_TYPES.FunctionExpression,
4828
+ import_utils30.AST_NODE_TYPES.ArrowFunctionExpression
4696
4829
  ]);
4697
4830
  function isNonzeroNumericLiteral(node) {
4698
- return node?.type === import_utils29.AST_NODE_TYPES.Literal && typeof node.value === "number" && node.value !== 0;
4831
+ return node?.type === import_utils30.AST_NODE_TYPES.Literal && typeof node.value === "number" && node.value !== 0;
4699
4832
  }
4700
4833
  function isTimedSetTimeout(node) {
4701
- return node.type === import_utils29.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils29.AST_NODE_TYPES.Identifier && node.callee.name === "setTimeout" && node.arguments.length >= 2 && isNonzeroNumericLiteral(node.arguments[1]);
4834
+ return node.type === import_utils30.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils30.AST_NODE_TYPES.Identifier && node.callee.name === "setTimeout" && node.arguments.length >= 2 && isNonzeroNumericLiteral(node.arguments[1]);
4702
4835
  }
4703
4836
  function isPromiseSleep(node) {
4704
- if (node.callee.type !== import_utils29.AST_NODE_TYPES.Identifier || node.callee.name !== "Promise") {
4837
+ if (node.callee.type !== import_utils30.AST_NODE_TYPES.Identifier || node.callee.name !== "Promise") {
4705
4838
  return false;
4706
4839
  }
4707
4840
  const executor = node.arguments[0];
4708
- if (executor?.type !== import_utils29.AST_NODE_TYPES.ArrowFunctionExpression && executor?.type !== import_utils29.AST_NODE_TYPES.FunctionExpression) {
4841
+ if (executor?.type !== import_utils30.AST_NODE_TYPES.ArrowFunctionExpression && executor?.type !== import_utils30.AST_NODE_TYPES.FunctionExpression) {
4709
4842
  return false;
4710
4843
  }
4711
- const body = executor.body;
4712
- if (body.type !== import_utils29.AST_NODE_TYPES.BlockStatement) {
4713
- return isTimedSetTimeout(body);
4844
+ const body2 = executor.body;
4845
+ if (body2.type !== import_utils30.AST_NODE_TYPES.BlockStatement) {
4846
+ return isTimedSetTimeout(body2);
4714
4847
  }
4715
- return body.body.some(
4716
- (stmt) => stmt.type === import_utils29.AST_NODE_TYPES.ExpressionStatement && isTimedSetTimeout(stmt.expression)
4848
+ return body2.body.some(
4849
+ (stmt) => stmt.type === import_utils30.AST_NODE_TYPES.ExpressionStatement && isTimedSetTimeout(stmt.expression)
4717
4850
  );
4718
4851
  }
4719
4852
  function isHelperSleep(node) {
4720
- return node.callee.type === import_utils29.AST_NODE_TYPES.Identifier && SLEEP_HELPERS.has(node.callee.name) && node.arguments.length >= 1 && isNonzeroNumericLiteral(node.arguments[0]);
4853
+ return node.callee.type === import_utils30.AST_NODE_TYPES.Identifier && SLEEP_HELPERS.has(node.callee.name) && node.arguments.length >= 1 && isNonzeroNumericLiteral(node.arguments[0]);
4721
4854
  }
4722
4855
  function nearestEnclosingFunction2(node) {
4723
4856
  for (let current = node.parent; current != null; current = current.parent) {
@@ -4725,7 +4858,7 @@ function nearestEnclosingFunction2(node) {
4725
4858
  continue;
4726
4859
  }
4727
4860
  const grandparent = current.parent;
4728
- const isPromiseExecutor = grandparent?.type === import_utils29.AST_NODE_TYPES.NewExpression && isPromiseSleep(grandparent);
4861
+ const isPromiseExecutor = grandparent?.type === import_utils30.AST_NODE_TYPES.NewExpression && isPromiseSleep(grandparent);
4729
4862
  if (!isPromiseExecutor) {
4730
4863
  return current;
4731
4864
  }
@@ -4733,23 +4866,23 @@ function nearestEnclosingFunction2(node) {
4733
4866
  return null;
4734
4867
  }
4735
4868
  function testCallerName2(callee) {
4736
- if (callee.type === import_utils29.AST_NODE_TYPES.Identifier) {
4869
+ if (callee.type === import_utils30.AST_NODE_TYPES.Identifier) {
4737
4870
  return callee.name;
4738
4871
  }
4739
- if (callee.type === import_utils29.AST_NODE_TYPES.MemberExpression) {
4872
+ if (callee.type === import_utils30.AST_NODE_TYPES.MemberExpression) {
4740
4873
  return testCallerName2(callee.object);
4741
4874
  }
4742
- if (callee.type === import_utils29.AST_NODE_TYPES.CallExpression) {
4875
+ if (callee.type === import_utils30.AST_NODE_TYPES.CallExpression) {
4743
4876
  return testCallerName2(callee.callee);
4744
4877
  }
4745
- if (callee.type === import_utils29.AST_NODE_TYPES.TaggedTemplateExpression) {
4878
+ if (callee.type === import_utils30.AST_NODE_TYPES.TaggedTemplateExpression) {
4746
4879
  return testCallerName2(callee.tag);
4747
4880
  }
4748
4881
  return null;
4749
4882
  }
4750
4883
  function isTestBody2(fn) {
4751
4884
  const call = fn.parent;
4752
- if (call?.type !== import_utils29.AST_NODE_TYPES.CallExpression || !call.arguments.some((argument) => argument === fn)) {
4885
+ if (call?.type !== import_utils30.AST_NODE_TYPES.CallExpression || !call.arguments.some((argument) => argument === fn)) {
4753
4886
  return false;
4754
4887
  }
4755
4888
  const name = testCallerName2(call.callee);
@@ -4795,7 +4928,7 @@ var no_sleep_in_test_body_default = createRule({
4795
4928
  });
4796
4929
 
4797
4930
  // src/rules/no-storage-in-stateless-modules.ts
4798
- var import_utils30 = require("@typescript-eslint/utils");
4931
+ var import_utils31 = require("@typescript-eslint/utils");
4799
4932
  var DEFAULT_METHODS2 = [
4800
4933
  "prepare",
4801
4934
  "put",
@@ -4814,7 +4947,7 @@ function compile2(patterns) {
4814
4947
  }
4815
4948
  function storageMethodName(node, methods) {
4816
4949
  const callee = node.callee;
4817
- if (callee.type !== import_utils30.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils30.AST_NODE_TYPES.Identifier) {
4950
+ if (callee.type !== import_utils31.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils31.AST_NODE_TYPES.Identifier) {
4818
4951
  return null;
4819
4952
  }
4820
4953
  const name = callee.property.name;
@@ -4882,7 +5015,7 @@ var no_storage_in_stateless_modules_default = createRule({
4882
5015
  });
4883
5016
 
4884
5017
  // src/rules/no-string-concat-in-loop.ts
4885
- var import_utils31 = require("@typescript-eslint/utils");
5018
+ var import_utils32 = require("@typescript-eslint/utils");
4886
5019
  var LOOP_NODE_TYPES = /* @__PURE__ */ new Set([
4887
5020
  "ForStatement",
4888
5021
  "ForOfStatement",
@@ -4947,9 +5080,9 @@ function isDeclaredInsideLoop(variable, loop) {
4947
5080
  if (def === void 0) {
4948
5081
  return false;
4949
5082
  }
4950
- const body = loop.body;
5083
+ const body2 = loop.body;
4951
5084
  const [declStart, declEnd] = def.node.range;
4952
- const [bodyStart, bodyEnd] = body.range;
5085
+ const [bodyStart, bodyEnd] = body2.range;
4953
5086
  return declStart >= bodyStart && declEnd <= bodyEnd;
4954
5087
  }
4955
5088
  function enclosingLoop(node) {
@@ -5028,7 +5161,7 @@ var no_string_concat_in_loop_default = createRule({
5028
5161
  });
5029
5162
 
5030
5163
  // src/rules/no-tautological-expect.ts
5031
- var import_utils32 = require("@typescript-eslint/utils");
5164
+ var import_utils33 = require("@typescript-eslint/utils");
5032
5165
  var EQUALITY_MATCHERS = /* @__PURE__ */ new Set(["toBe", "toEqual", "toStrictEqual"]);
5033
5166
  var ZERO_ARG_MATCHERS = /* @__PURE__ */ new Set([
5034
5167
  "toBeDefined",
@@ -5042,17 +5175,17 @@ var OPERAND_PREVIEW_CHARS = 40;
5042
5175
  var NUMERIC_SIGNS = /* @__PURE__ */ new Set(["-", "+"]);
5043
5176
  function isLiteral(node) {
5044
5177
  switch (node.type) {
5045
- case import_utils32.AST_NODE_TYPES.Literal:
5178
+ case import_utils33.AST_NODE_TYPES.Literal:
5046
5179
  return true;
5047
- case import_utils32.AST_NODE_TYPES.TemplateLiteral:
5180
+ case import_utils33.AST_NODE_TYPES.TemplateLiteral:
5048
5181
  return node.expressions.length === 0;
5049
- case import_utils32.AST_NODE_TYPES.UnaryExpression:
5182
+ case import_utils33.AST_NODE_TYPES.UnaryExpression:
5050
5183
  return NUMERIC_SIGNS.has(node.operator) && isLiteral(node.argument);
5051
- case import_utils32.AST_NODE_TYPES.ArrayExpression:
5184
+ case import_utils33.AST_NODE_TYPES.ArrayExpression:
5052
5185
  return node.elements.every((element) => element !== null && isLiteral(element));
5053
- case import_utils32.AST_NODE_TYPES.ObjectExpression:
5186
+ case import_utils33.AST_NODE_TYPES.ObjectExpression:
5054
5187
  return node.properties.every(
5055
- (property) => property.type === import_utils32.AST_NODE_TYPES.Property && !property.computed && isLiteral(property.value)
5188
+ (property) => property.type === import_utils33.AST_NODE_TYPES.Property && !property.computed && isLiteral(property.value)
5056
5189
  );
5057
5190
  default:
5058
5191
  return false;
@@ -5060,7 +5193,7 @@ function isLiteral(node) {
5060
5193
  }
5061
5194
  function expectOperand(callee) {
5062
5195
  const receiver = callee.object;
5063
- if (receiver.type !== import_utils32.AST_NODE_TYPES.CallExpression || receiver.callee.type !== import_utils32.AST_NODE_TYPES.Identifier || receiver.callee.name !== "expect" || receiver.arguments.length !== 1) {
5196
+ if (receiver.type !== import_utils33.AST_NODE_TYPES.CallExpression || receiver.callee.type !== import_utils33.AST_NODE_TYPES.Identifier || receiver.callee.name !== "expect" || receiver.arguments.length !== 1) {
5064
5197
  return null;
5065
5198
  }
5066
5199
  return receiver.arguments[0] ?? null;
@@ -5090,10 +5223,10 @@ var no_tautological_expect_default = createRule({
5090
5223
  return {
5091
5224
  CallExpression(node) {
5092
5225
  const callee = node.callee;
5093
- if (callee.type !== import_utils32.AST_NODE_TYPES.MemberExpression || callee.computed) {
5226
+ if (callee.type !== import_utils33.AST_NODE_TYPES.MemberExpression || callee.computed) {
5094
5227
  return;
5095
5228
  }
5096
- if (callee.property.type !== import_utils32.AST_NODE_TYPES.Identifier) {
5229
+ if (callee.property.type !== import_utils33.AST_NODE_TYPES.Identifier) {
5097
5230
  return;
5098
5231
  }
5099
5232
  const matcher = callee.property.name;
@@ -5126,8 +5259,33 @@ var no_tautological_expect_default = createRule({
5126
5259
  }
5127
5260
  });
5128
5261
 
5262
+ // src/rules/no-typed-doc-sections.ts
5263
+ var no_typed_doc_sections_default = createRule({
5264
+ name: "no-typed-doc-sections",
5265
+ meta: {
5266
+ type: "suggestion",
5267
+ docs: { description: "Reject typed-signature repetition while preserving behavior that types cannot express." },
5268
+ schema: [],
5269
+ messages: {
5270
+ typedSection: "Typed JSDoc repeats parameters or returns \u2014 delete the tags and improve names or types instead."
5271
+ }
5272
+ },
5273
+ defaultOptions: [],
5274
+ create(context) {
5275
+ return {
5276
+ Program() {
5277
+ for (const group of proseGroups(context.filename, context.sourceCode, true)) {
5278
+ if (group.hasTypedTags && documentsTypedFunction(context.sourceCode, group.comment)) {
5279
+ context.report({ node: group.comment, messageId: "typedSection" });
5280
+ }
5281
+ }
5282
+ }
5283
+ };
5284
+ }
5285
+ });
5286
+
5129
5287
  // src/rules/no-trailing-value-narration.ts
5130
- var import_utils33 = require("@typescript-eslint/utils");
5288
+ var import_utils34 = require("@typescript-eslint/utils");
5131
5289
  var NUMBER_RE = /(?<![\w.])(\d+(?:\.\d+)?)(?![\w.])/g;
5132
5290
  var WORD_RE3 = /[A-Za-z]+(?:'[a-z]+)?|\d+(?:\.\d+)?/g;
5133
5291
  var UNIT_WORDS = /* @__PURE__ */ new Set([
@@ -5189,21 +5347,22 @@ var STOPWORDS3 = /* @__PURE__ */ new Set([
5189
5347
  "we",
5190
5348
  "with"
5191
5349
  ]);
5192
- var DIRECTIVE_RE4 = /^\s*(?:eslint\b|eslint-|sarj-noqa\b|@ts-|prettier|biome-|c8\b|v8\b|istanbul\b|todo\b|fixme\b|hack\b|xxx\b)/i;
5350
+ var DIRECTIVE_RE5 = /^\s*(?:eslint\b|eslint-|sarj-noqa\b|@ts-|prettier|biome-|c8\b|v8\b|istanbul\b|todo\b|fixme\b|hack\b|xxx\b)/i;
5193
5351
  function numbersIn(text) {
5194
5352
  return new Set(text.match(NUMBER_RE) ?? []);
5195
5353
  }
5196
- function narratesValue(body, code) {
5197
- if (body.length === 0 || DIRECTIVE_RE4.test(body) || hasExternalReference(body)) return false;
5354
+ function narratesValue(body2, code) {
5355
+ if (body2.length === 0 || DIRECTIVE_RE5.test(body2) || hasExternalReference(body2)) return false;
5198
5356
  const codeNumbers = numbersIn(code);
5199
5357
  if (codeNumbers.size === 0) return false;
5200
- const words = (body.match(WORD_RE3) ?? []).map((word) => word.toLowerCase());
5358
+ const words = (body2.match(WORD_RE3) ?? []).map((word) => word.toLowerCase());
5201
5359
  if (words.length === 0) return false;
5202
- const commentNumbers = numbersIn(body);
5360
+ const commentNumbers = numbersIn(body2);
5203
5361
  if (commentNumbers.size === 0) return false;
5204
5362
  for (const number of commentNumbers) {
5205
5363
  if (!codeNumbers.has(number)) return false;
5206
5364
  }
5365
+ if (!words.some((word) => UNIT_WORDS.has(word))) return false;
5207
5366
  const identifiers = codeTokens(code);
5208
5367
  const stems = /* @__PURE__ */ new Set();
5209
5368
  for (const token of identifiers) stems.add(stem(token));
@@ -5216,7 +5375,7 @@ var no_trailing_value_narration_default = createRule({
5216
5375
  meta: {
5217
5376
  type: "suggestion",
5218
5377
  docs: {
5219
- description: "Flag a trailing comment whose every word and number is already on the line it annotates."
5378
+ description: "Flag a trailing comment that repeats the line's numeric value only to name its unit."
5220
5379
  },
5221
5380
  schema: [],
5222
5381
  messages: {
@@ -5233,14 +5392,25 @@ var no_trailing_value_narration_default = createRule({
5233
5392
  const before = sourceCode.getTokenBefore(comment, { includeComments: false });
5234
5393
  return before !== null && before.loc.end.line === comment.loc.start.line;
5235
5394
  }
5395
+ function isInsideBrackets(comment) {
5396
+ let node = sourceCode.getNodeByRangeIndex(comment.range[0]);
5397
+ while (node != null) {
5398
+ if (node.type === "BlockStatement" || node.type === "Program") return false;
5399
+ if (node.type === "ArrayExpression" || node.type === "CallExpression" || node.type === "NewExpression") {
5400
+ return true;
5401
+ }
5402
+ node = node.parent;
5403
+ }
5404
+ return false;
5405
+ }
5236
5406
  return {
5237
5407
  Program() {
5238
5408
  for (const comment of sourceCode.getAllComments()) {
5239
- if (!isTrailing(comment)) continue;
5409
+ if (!isTrailing(comment) || isInsideBrackets(comment)) continue;
5240
5410
  const line = sourceCode.lines[comment.loc.start.line - 1] ?? "";
5241
5411
  const code = line.slice(0, comment.loc.start.column);
5242
- const body = comment.value.replace(/^\*+/, "").replace(/\*+$/, "").trim();
5243
- if (narratesValue(body, code)) {
5412
+ const body2 = comment.value.replace(/^\*+/, "").replace(/\*+$/, "").trim();
5413
+ if (narratesValue(body2, code)) {
5244
5414
  context.report({ node: comment, messageId: "narratesValue" });
5245
5415
  }
5246
5416
  }
@@ -5250,10 +5420,10 @@ var no_trailing_value_narration_default = createRule({
5250
5420
  });
5251
5421
 
5252
5422
  // src/rules/no-declaration-comment-wall.ts
5253
- var import_utils35 = require("@typescript-eslint/utils");
5423
+ var import_utils36 = require("@typescript-eslint/utils");
5254
5424
 
5255
5425
  // src/rules/_comment-wall.ts
5256
- var import_utils34 = require("@typescript-eslint/utils");
5426
+ var import_utils35 = require("@typescript-eslint/utils");
5257
5427
  var WALL_DEFAULTS = {
5258
5428
  // Below three rows "a wall" is not a fair description of what the reader sees.
5259
5429
  minCommentedMembers: 3,
@@ -5295,7 +5465,7 @@ var WALL_SCHEMA = {
5295
5465
  }
5296
5466
  }
5297
5467
  };
5298
- var VALUE_TAG_RE = /@(?:deprecated|see|example|throws|remarks|since|default|defaultvalue|link|internal|alpha|beta|experimental|template|typeparam|inheritdoc|todo|fixme|override)\b/i;
5468
+ var VALUE_TAG_RE2 = /@(?:deprecated|see|example|throws|remarks|since|default|defaultvalue|link|internal|alpha|beta|experimental|template|typeparam|inheritdoc|todo|fixme|override)\b/i;
5299
5469
  var DEFAULT_RE = /^\s*@?default\b|\bdefaults? (?:to|:)/i;
5300
5470
  var DIGIT_RE = /\d/;
5301
5471
  var UNIT_WORD_RE = /\b(?:ms|milliseconds?|seconds?|minutes?|hours?|days?|weeks?|months?|years?|bytes?|kb|mb|gb|percent|pixels?|px|utc|epoch)\b/i;
@@ -5315,24 +5485,24 @@ var WALL_STOPWORDS = new Set(
5315
5485
  );
5316
5486
  var WORD_RE4 = /[A-Za-z][A-Za-z0-9]*/g;
5317
5487
  var BARE_LABEL_RE = /^[A-Za-z][A-Za-z0-9]*$/;
5318
- function labelStems(body) {
5319
- return splitIdentifier(body).map(stem).join(" ");
5488
+ function labelStems(body2) {
5489
+ return splitIdentifier(body2).map(stem).join(" ");
5320
5490
  }
5321
5491
  function commentBody(comment) {
5322
5492
  return comment.value.replace(/^\*+/, "").replace(/^[ \t]*\*[ \t]?/gm, "").trim();
5323
5493
  }
5324
- function carriesValue(body) {
5325
- return isProtected(body) || VALUE_TAG_RE.test(body) || DEFAULT_RE.test(body) || DIGIT_RE.test(body) || UNIT_WORD_RE.test(body) || EXAMPLE_RE.test(body) || BANNER_RE.test(body) || NON_ASCII_LETTER_RE2.test(body);
5494
+ function carriesValue(body2) {
5495
+ return isProtected(body2) || VALUE_TAG_RE2.test(body2) || DEFAULT_RE.test(body2) || DIGIT_RE.test(body2) || UNIT_WORD_RE.test(body2) || EXAMPLE_RE.test(body2) || BANNER_RE.test(body2) || NON_ASCII_LETTER_RE2.test(body2);
5326
5496
  }
5327
- function isLabel(body) {
5497
+ function isLabel(body2) {
5328
5498
  let content = 0;
5329
- for (const word of body.match(WORD_RE4) ?? []) {
5499
+ for (const word of body2.match(WORD_RE4) ?? []) {
5330
5500
  if (word.length >= 2 && !WALL_STOPWORDS.has(word.toLowerCase())) content += 1;
5331
5501
  }
5332
5502
  return content <= 1;
5333
5503
  }
5334
- function isTagsOnly(body) {
5335
- return body.length > 0 && body.replace(TAG_TOKEN_RE, "").trim().length === 0;
5504
+ function isTagsOnly(body2) {
5505
+ return body2.length > 0 && body2.replace(TAG_TOKEN_RE, "").trim().length === 0;
5336
5506
  }
5337
5507
  function knownTokens(source) {
5338
5508
  const tokens = /* @__PURE__ */ new Set();
@@ -5344,9 +5514,9 @@ function knownTokens(source) {
5344
5514
  }
5345
5515
  return tokens;
5346
5516
  }
5347
- function novelWords(body, known) {
5517
+ function novelWords(body2, known) {
5348
5518
  let novel = 0;
5349
- for (const word of body.match(WORD_RE4) ?? []) {
5519
+ for (const word of body2.match(WORD_RE4) ?? []) {
5350
5520
  const lower = word.toLowerCase();
5351
5521
  if (lower.length < 2 || WALL_STOPWORDS.has(lower)) continue;
5352
5522
  if (!known.has(lower) && !known.has(stem(lower))) novel += 1;
@@ -5357,21 +5527,21 @@ function isWall(members, commented, restated, options) {
5357
5527
  return commented >= options.minCommentedMembers && commented / members >= options.minCommentedRatio && restated / commented >= options.minRestatedRatio;
5358
5528
  }
5359
5529
  var OPAQUE_VALUE_TYPES = /* @__PURE__ */ new Set([
5360
- import_utils34.AST_NODE_TYPES.FunctionExpression,
5361
- import_utils34.AST_NODE_TYPES.ArrowFunctionExpression,
5362
- import_utils34.AST_NODE_TYPES.ObjectExpression,
5363
- import_utils34.AST_NODE_TYPES.ArrayExpression
5530
+ import_utils35.AST_NODE_TYPES.FunctionExpression,
5531
+ import_utils35.AST_NODE_TYPES.ArrowFunctionExpression,
5532
+ import_utils35.AST_NODE_TYPES.ObjectExpression,
5533
+ import_utils35.AST_NODE_TYPES.ArrayExpression
5364
5534
  ]);
5365
5535
  function declarationRange(member) {
5366
- const body = bodyOf(member);
5367
- if (body === void 0) return [member.range[0], member.range[1]];
5368
- return [member.range[0], body.range[0]];
5536
+ const body2 = bodyOf(member);
5537
+ if (body2 === void 0) return [member.range[0], member.range[1]];
5538
+ return [member.range[0], body2.range[0]];
5369
5539
  }
5370
5540
  function bodyOf(member) {
5371
- if (member.type === import_utils34.AST_NODE_TYPES.MethodDefinition || member.type === import_utils34.AST_NODE_TYPES.TSAbstractMethodDefinition) {
5541
+ if (member.type === import_utils35.AST_NODE_TYPES.MethodDefinition || member.type === import_utils35.AST_NODE_TYPES.TSAbstractMethodDefinition) {
5372
5542
  return member.value.body ?? void 0;
5373
5543
  }
5374
- if (member.type === import_utils34.AST_NODE_TYPES.Property || member.type === import_utils34.AST_NODE_TYPES.PropertyDefinition) {
5544
+ if (member.type === import_utils35.AST_NODE_TYPES.Property || member.type === import_utils35.AST_NODE_TYPES.PropertyDefinition) {
5375
5545
  const value = member.value;
5376
5546
  if (value !== null && OPAQUE_VALUE_TYPES.has(value.type)) return value;
5377
5547
  }
@@ -5381,12 +5551,12 @@ function bodyOf(member) {
5381
5551
  // src/rules/no-declaration-comment-wall.ts
5382
5552
  function named(node) {
5383
5553
  switch (node.type) {
5384
- case import_utils35.AST_NODE_TYPES.TSEnumMember:
5554
+ case import_utils36.AST_NODE_TYPES.TSEnumMember:
5385
5555
  return { node, key: node.id };
5386
- case import_utils35.AST_NODE_TYPES.PropertyDefinition:
5387
- case import_utils35.AST_NODE_TYPES.TSAbstractPropertyDefinition:
5388
- case import_utils35.AST_NODE_TYPES.MethodDefinition:
5389
- case import_utils35.AST_NODE_TYPES.TSAbstractMethodDefinition:
5556
+ case import_utils36.AST_NODE_TYPES.PropertyDefinition:
5557
+ case import_utils36.AST_NODE_TYPES.TSAbstractPropertyDefinition:
5558
+ case import_utils36.AST_NODE_TYPES.MethodDefinition:
5559
+ case import_utils36.AST_NODE_TYPES.TSAbstractMethodDefinition:
5390
5560
  return node.computed ? void 0 : { node, key: node.key };
5391
5561
  default:
5392
5562
  return void 0;
@@ -5430,9 +5600,9 @@ var no_declaration_comment_wall_default = createRule({
5430
5600
  }
5431
5601
  function isGroupLabel(comment, member, headsRun) {
5432
5602
  if (comment.loc.end.line >= member.node.loc.start.line) return false;
5433
- const body = commentBody(comment);
5434
- if (!BARE_LABEL_RE.test(body)) return false;
5435
- if (labelStems(body) === labelStems(sourceCode.getText(member.key))) return false;
5603
+ const body2 = commentBody(comment);
5604
+ if (!BARE_LABEL_RE.test(body2)) return false;
5605
+ if (labelStems(body2) === labelStems(sourceCode.getText(member.key))) return false;
5436
5606
  const lineAbove = sourceCode.lines[comment.loc.start.line - 2];
5437
5607
  return headsRun || lineAbove !== void 0 && lineAbove.trim().length === 0;
5438
5608
  }
@@ -5445,19 +5615,21 @@ var no_declaration_comment_wall_default = createRule({
5445
5615
  }));
5446
5616
  let commented = 0;
5447
5617
  let restated = 0;
5618
+ const claimed = /* @__PURE__ */ new Set();
5448
5619
  for (const [index, { member, comment }] of documented.entries()) {
5449
- if (comment === void 0) continue;
5620
+ if (comment === void 0 || claimed.has(comment)) continue;
5450
5621
  const next = documented[index + 1];
5451
5622
  if (isGroupLabel(comment, member, next !== void 0 && next.comment === void 0)) {
5452
5623
  continue;
5453
5624
  }
5625
+ claimed.add(comment);
5454
5626
  commented += 1;
5455
- const body = commentBody(comment);
5456
- if (body.length === 0 || carriesValue(body) || isTagsOnly(body) || isLabel(body)) {
5627
+ const body2 = commentBody(comment);
5628
+ if (body2.length === 0 || carriesValue(body2) || isTagsOnly(body2) || isLabel(body2)) {
5457
5629
  continue;
5458
5630
  }
5459
5631
  const [start, end] = declarationRange(member.node);
5460
- if (novelWords(body, knownTokens(sourceCode.text.slice(start, end))) <= options.maxNovelWords) {
5632
+ if (novelWords(body2, knownTokens(sourceCode.text.slice(start, end))) <= options.maxNovelWords) {
5461
5633
  restated += 1;
5462
5634
  }
5463
5635
  }
@@ -5484,7 +5656,7 @@ var no_declaration_comment_wall_default = createRule({
5484
5656
  });
5485
5657
 
5486
5658
  // src/rules/no-union-in-comment.ts
5487
- var import_utils36 = require("@typescript-eslint/utils");
5659
+ var import_utils37 = require("@typescript-eslint/utils");
5488
5660
  var MAX_LITERAL_LENGTH = 28;
5489
5661
  var LITERAL = String.raw`(?:'[^'\n]*'|"[^"\n]*"|\`[^\`\n]*\`)`;
5490
5662
  var LEAD_IN_RE2 = /^(?:one of|either|values?|allowed(?: values)?|options?|possible(?: values)?)\s*[:=-]?\s*/i;
@@ -5503,14 +5675,14 @@ var STRING_BUILDERS = /* @__PURE__ */ new Set([
5503
5675
  function isBareString(node) {
5504
5676
  if (node === void 0) return false;
5505
5677
  switch (node.type) {
5506
- case import_utils36.AST_NODE_TYPES.TSStringKeyword:
5678
+ case import_utils37.AST_NODE_TYPES.TSStringKeyword:
5507
5679
  return true;
5508
5680
  // `string[]` holds members of the same closed set, one element at a time.
5509
- case import_utils36.AST_NODE_TYPES.TSArrayType:
5681
+ case import_utils37.AST_NODE_TYPES.TSArrayType:
5510
5682
  return isBareString(node.elementType);
5511
5683
  // `string | null` is still an unconstrained string, and so is `string | "a"`
5512
5684
  // — the checker collapses that one to `string`.
5513
- case import_utils36.AST_NODE_TYPES.TSUnionType:
5685
+ case import_utils37.AST_NODE_TYPES.TSUnionType:
5514
5686
  return node.types.some((member) => isBareString(member));
5515
5687
  default:
5516
5688
  return false;
@@ -5520,13 +5692,13 @@ function rootCallee(node) {
5520
5692
  let current = node;
5521
5693
  for (let hops = 0; current != null && hops < 12; hops += 1) {
5522
5694
  switch (current.type) {
5523
- case import_utils36.AST_NODE_TYPES.CallExpression:
5695
+ case import_utils37.AST_NODE_TYPES.CallExpression:
5524
5696
  current = current.callee;
5525
5697
  break;
5526
- case import_utils36.AST_NODE_TYPES.MemberExpression:
5698
+ case import_utils37.AST_NODE_TYPES.MemberExpression:
5527
5699
  current = current.object;
5528
5700
  break;
5529
- case import_utils36.AST_NODE_TYPES.Identifier:
5701
+ case import_utils37.AST_NODE_TYPES.Identifier:
5530
5702
  return current.name;
5531
5703
  default:
5532
5704
  return null;
@@ -5535,26 +5707,26 @@ function rootCallee(node) {
5535
5707
  return null;
5536
5708
  }
5537
5709
  function nameOf(key) {
5538
- if (key.type === import_utils36.AST_NODE_TYPES.Identifier) return key.name;
5539
- if (key.type === import_utils36.AST_NODE_TYPES.Literal && typeof key.value === "string") return key.value;
5710
+ if (key.type === import_utils37.AST_NODE_TYPES.Identifier) return key.name;
5711
+ if (key.type === import_utils37.AST_NODE_TYPES.Literal && typeof key.value === "string") return key.value;
5540
5712
  return null;
5541
5713
  }
5542
5714
  function targetOf(node) {
5543
5715
  switch (node.type) {
5544
- case import_utils36.AST_NODE_TYPES.TSPropertySignature:
5545
- case import_utils36.AST_NODE_TYPES.PropertyDefinition: {
5716
+ case import_utils37.AST_NODE_TYPES.TSPropertySignature:
5717
+ case import_utils37.AST_NODE_TYPES.PropertyDefinition: {
5546
5718
  const name = node.computed ? null : nameOf(node.key);
5547
5719
  if (name === null || !isBareString(node.typeAnnotation?.typeAnnotation)) return null;
5548
5720
  return { node, name };
5549
5721
  }
5550
- case import_utils36.AST_NODE_TYPES.Property: {
5722
+ case import_utils37.AST_NODE_TYPES.Property: {
5551
5723
  const name = node.computed || node.shorthand ? null : nameOf(node.key);
5552
5724
  const callee = rootCallee(node.value);
5553
5725
  if (name === null || callee === null || !STRING_BUILDERS.has(callee)) return null;
5554
5726
  return { node, name };
5555
5727
  }
5556
- case import_utils36.AST_NODE_TYPES.VariableDeclarator: {
5557
- if (node.id.type !== import_utils36.AST_NODE_TYPES.Identifier) return null;
5728
+ case import_utils37.AST_NODE_TYPES.VariableDeclarator: {
5729
+ if (node.id.type !== import_utils37.AST_NODE_TYPES.Identifier) return null;
5558
5730
  if (!isBareString(node.id.typeAnnotation?.typeAnnotation)) return null;
5559
5731
  return { node, name: node.id.name };
5560
5732
  }
@@ -5562,8 +5734,8 @@ function targetOf(node) {
5562
5734
  return null;
5563
5735
  }
5564
5736
  }
5565
- function unionLiterals(body) {
5566
- const list = body.replace(LEAD_IN_RE2, "").trim();
5737
+ function unionLiterals(body2) {
5738
+ const list = body2.replace(LEAD_IN_RE2, "").trim();
5567
5739
  if (!UNION_BODY_RE.test(list)) return null;
5568
5740
  const literals = (list.match(LITERAL_G) ?? []).map((raw) => raw.slice(1, -1));
5569
5741
  if (literals.some((literal) => literal.length === 0 || literal.length > MAX_LITERAL_LENGTH)) {
@@ -5603,7 +5775,7 @@ var no_union_in_comment_default = createRule({
5603
5775
  if (after === null || after.loc.start.line !== comment.loc.end.line + 1) return null;
5604
5776
  anchor = sourceCode.getNodeByRangeIndex(after.range[0]);
5605
5777
  }
5606
- for (let node = anchor; node != null && node.type !== import_utils36.AST_NODE_TYPES.Program; node = node.parent) {
5778
+ for (let node = anchor; node != null && node.type !== import_utils37.AST_NODE_TYPES.Program; node = node.parent) {
5607
5779
  const target = targetOf(node);
5608
5780
  if (target !== null) return target;
5609
5781
  }
@@ -5612,9 +5784,9 @@ var no_union_in_comment_default = createRule({
5612
5784
  return {
5613
5785
  Program() {
5614
5786
  for (const comment of sourceCode.getAllComments()) {
5615
- const body = comment.value.replace(/^\*+/, "").replace(/\*+$/, "").trim();
5616
- if (body.length === 0) continue;
5617
- const literals = unionLiterals(body);
5787
+ const body2 = comment.value.replace(/^\*+/, "").replace(/\*+$/, "").trim();
5788
+ if (body2.length === 0) continue;
5789
+ const literals = unionLiterals(body2);
5618
5790
  if (literals === null) continue;
5619
5791
  const target = annotated(comment);
5620
5792
  if (target === null) continue;
@@ -5632,9 +5804,9 @@ var no_union_in_comment_default = createRule({
5632
5804
  });
5633
5805
 
5634
5806
  // src/rules/no-type-member-comment-wall.ts
5635
- var import_utils37 = require("@typescript-eslint/utils");
5807
+ var import_utils38 = require("@typescript-eslint/utils");
5636
5808
  function isNamedMember(node) {
5637
- return (node.type === import_utils37.AST_NODE_TYPES.TSPropertySignature || node.type === import_utils37.AST_NODE_TYPES.TSMethodSignature) && !node.computed;
5809
+ return (node.type === import_utils38.AST_NODE_TYPES.TSPropertySignature || node.type === import_utils38.AST_NODE_TYPES.TSMethodSignature) && !node.computed;
5638
5810
  }
5639
5811
  var no_type_member_comment_wall_default = createRule({
5640
5812
  name: "no-type-member-comment-wall",
@@ -5674,14 +5846,14 @@ var no_type_member_comment_wall_default = createRule({
5674
5846
  }
5675
5847
  function isGroupLabel(comment, member, headsRun) {
5676
5848
  if (comment.loc.end.line >= member.loc.start.line) return false;
5677
- const body = commentBody(comment);
5678
- if (!BARE_LABEL_RE.test(body)) return false;
5679
- if (labelStems(body) === labelStems(sourceCode.getText(member.key))) return false;
5849
+ const body2 = commentBody(comment);
5850
+ if (!BARE_LABEL_RE.test(body2)) return false;
5851
+ if (labelStems(body2) === labelStems(sourceCode.getText(member.key))) return false;
5680
5852
  const lineAbove = sourceCode.lines[comment.loc.start.line - 2];
5681
5853
  return headsRun || lineAbove !== void 0 && lineAbove.trim().length === 0;
5682
5854
  }
5683
5855
  function check(node) {
5684
- const members = node.type === import_utils37.AST_NODE_TYPES.TSInterfaceBody ? node.body : node.members;
5856
+ const members = node.type === import_utils38.AST_NODE_TYPES.TSInterfaceBody ? node.body : node.members;
5685
5857
  const named2 = members.filter(isNamedMember);
5686
5858
  if (named2.length === 0) return;
5687
5859
  const documented = named2.map((member) => ({ member, comment: documentingComment(member) }));
@@ -5696,9 +5868,9 @@ var no_type_member_comment_wall_default = createRule({
5696
5868
  }
5697
5869
  claimed.add(comment);
5698
5870
  commented += 1;
5699
- const body = commentBody(comment);
5700
- if (body.length === 0 || carriesValue(body)) continue;
5701
- if (novelWords(body, knownTokens(sourceCode.getText(member))) <= options.maxNovelWords) {
5871
+ const body2 = commentBody(comment);
5872
+ if (body2.length === 0 || carriesValue(body2)) continue;
5873
+ if (novelWords(body2, knownTokens(sourceCode.getText(member))) <= options.maxNovelWords) {
5702
5874
  restated += 1;
5703
5875
  }
5704
5876
  }
@@ -5721,7 +5893,7 @@ var no_type_member_comment_wall_default = createRule({
5721
5893
  });
5722
5894
 
5723
5895
  // src/rules/no-unnecessary-use-client.ts
5724
- var import_utils38 = require("@typescript-eslint/utils");
5896
+ var import_utils39 = require("@typescript-eslint/utils");
5725
5897
  var HOOK_REGEX = /^use([A-Z]|$)/;
5726
5898
  var EVENT_PROP_REGEX = /^on[A-Z]/;
5727
5899
  var ERROR_FILE_REGEX = /\b(?:global-)?error\.[jt]sx?$/;
@@ -5747,13 +5919,13 @@ var CLIENT_ONLY_PACKAGES_REGEX = /^(?:@radix-ui\/|framer-motion|react-dom|react-
5747
5919
  var isBareSpecifier = (source) => !source.startsWith(".") && !source.startsWith("/") && !source.startsWith("@/") && !source.startsWith("~");
5748
5920
  var jsxRootName = (name) => {
5749
5921
  let current = name;
5750
- while (current.type === import_utils38.AST_NODE_TYPES.JSXMemberExpression) {
5922
+ while (current.type === import_utils39.AST_NODE_TYPES.JSXMemberExpression) {
5751
5923
  current = current.object;
5752
5924
  }
5753
- return current.type === import_utils38.AST_NODE_TYPES.JSXIdentifier ? current.name : "";
5925
+ return current.type === import_utils39.AST_NODE_TYPES.JSXIdentifier ? current.name : "";
5754
5926
  };
5755
5927
  var subtreeReadsImportedBinding = (node, imported) => {
5756
- if (node.type === import_utils38.AST_NODE_TYPES.Identifier) {
5928
+ if (node.type === import_utils39.AST_NODE_TYPES.Identifier) {
5757
5929
  return imported.has(node.name);
5758
5930
  }
5759
5931
  for (const key of Object.keys(node)) {
@@ -5768,16 +5940,16 @@ var subtreeReadsImportedBinding = (node, imported) => {
5768
5940
  return false;
5769
5941
  };
5770
5942
  var isUseClientDirective = (node) => {
5771
- return node.type === import_utils38.AST_NODE_TYPES.ExpressionStatement && node.expression.type === import_utils38.AST_NODE_TYPES.Literal && node.expression.value === "use client";
5943
+ return node.type === import_utils39.AST_NODE_TYPES.ExpressionStatement && node.expression.type === import_utils39.AST_NODE_TYPES.Literal && node.expression.value === "use client";
5772
5944
  };
5773
5945
  var isGlobalReference = (node, context) => {
5774
5946
  if (!BROWSER_GLOBALS.has(node.name)) return false;
5775
5947
  const parent = node.parent;
5776
5948
  if (parent !== void 0) {
5777
- if (parent.type === import_utils38.AST_NODE_TYPES.MemberExpression && parent.property === node && !parent.computed) {
5949
+ if (parent.type === import_utils39.AST_NODE_TYPES.MemberExpression && parent.property === node && !parent.computed) {
5778
5950
  return false;
5779
5951
  }
5780
- if (parent.type === import_utils38.AST_NODE_TYPES.Property && parent.key === node && !parent.computed) {
5952
+ if (parent.type === import_utils39.AST_NODE_TYPES.Property && parent.key === node && !parent.computed) {
5781
5953
  return false;
5782
5954
  }
5783
5955
  if (parent.type.startsWith("TS")) {
@@ -5817,13 +5989,13 @@ var no_unnecessary_use_client_default = createRule({
5817
5989
  const importedLocals = /* @__PURE__ */ new Set();
5818
5990
  const externalLocals = /* @__PURE__ */ new Set();
5819
5991
  const markIfHookOrContext = (callee) => {
5820
- if (callee.type === import_utils38.AST_NODE_TYPES.Identifier) {
5992
+ if (callee.type === import_utils39.AST_NODE_TYPES.Identifier) {
5821
5993
  if (HOOK_REGEX.test(callee.name) || callee.name === "createContext") {
5822
5994
  hasClientIndicator = true;
5823
5995
  }
5824
5996
  return;
5825
5997
  }
5826
- if (callee.type === import_utils38.AST_NODE_TYPES.MemberExpression && callee.property.type === import_utils38.AST_NODE_TYPES.Identifier) {
5998
+ if (callee.type === import_utils39.AST_NODE_TYPES.MemberExpression && callee.property.type === import_utils39.AST_NODE_TYPES.Identifier) {
5827
5999
  const name = callee.property.name;
5828
6000
  if (HOOK_REGEX.test(name) || name === "createContext") {
5829
6001
  hasClientIndicator = true;
@@ -5833,7 +6005,7 @@ var no_unnecessary_use_client_default = createRule({
5833
6005
  return {
5834
6006
  Program(node) {
5835
6007
  for (const stmt of node.body) {
5836
- if (stmt.type !== import_utils38.AST_NODE_TYPES.ExpressionStatement) break;
6008
+ if (stmt.type !== import_utils39.AST_NODE_TYPES.ExpressionStatement) break;
5837
6009
  if (isUseClientDirective(stmt)) {
5838
6010
  directiveNode = stmt;
5839
6011
  break;
@@ -5846,7 +6018,7 @@ var no_unnecessary_use_client_default = createRule({
5846
6018
  },
5847
6019
  JSXAttribute(node) {
5848
6020
  if (directiveNode === null) return;
5849
- if (node.name.type === import_utils38.AST_NODE_TYPES.JSXIdentifier && EVENT_PROP_REGEX.test(node.name.name)) {
6021
+ if (node.name.type === import_utils39.AST_NODE_TYPES.JSXIdentifier && EVENT_PROP_REGEX.test(node.name.name)) {
5850
6022
  hasClientIndicator = true;
5851
6023
  }
5852
6024
  },
@@ -5913,18 +6085,18 @@ var no_unnecessary_use_client_default = createRule({
5913
6085
  });
5914
6086
 
5915
6087
  // src/rules/no-unsafe-mock-casting.ts
5916
- var import_utils39 = require("@typescript-eslint/utils");
5917
6088
  var import_utils40 = require("@typescript-eslint/utils");
6089
+ var import_utils41 = require("@typescript-eslint/utils");
5918
6090
  function isMockTypeReference(node) {
5919
- if (node.type !== import_utils40.AST_NODE_TYPES.TSTypeReference) {
6091
+ if (node.type !== import_utils41.AST_NODE_TYPES.TSTypeReference) {
5920
6092
  return false;
5921
6093
  }
5922
6094
  const typeName = node.typeName;
5923
- if (typeName.type === import_utils40.AST_NODE_TYPES.Identifier) {
6095
+ if (typeName.type === import_utils41.AST_NODE_TYPES.Identifier) {
5924
6096
  const name = typeName.name;
5925
6097
  return name === "Mock" || name === "MockInstance" || name === "SpyInstance";
5926
6098
  }
5927
- if (typeName.type === import_utils40.AST_NODE_TYPES.TSQualifiedName) {
6099
+ if (typeName.type === import_utils41.AST_NODE_TYPES.TSQualifiedName) {
5928
6100
  const rightName = typeName.right.name;
5929
6101
  return rightName === "Mock" || rightName === "MockInstance" || rightName === "SpyInstance";
5930
6102
  }
@@ -5960,7 +6132,7 @@ var no_unsafe_mock_casting_default = createRule({
5960
6132
  });
5961
6133
 
5962
6134
  // src/rules/no-zod-native-enum.ts
5963
- var import_utils41 = require("@typescript-eslint/utils");
6135
+ var import_utils42 = require("@typescript-eslint/utils");
5964
6136
  var ts = __toESM(require("typescript"), 1);
5965
6137
  var IGNORE_PATTERNS = [
5966
6138
  /[\\/]generated[\\/]/,
@@ -5978,7 +6150,7 @@ function isZodModule(source) {
5978
6150
  return /(^|[/@-])zod([/-]|$)/.test(source);
5979
6151
  }
5980
6152
  function unwrap2(node) {
5981
- if (node.type === import_utils41.AST_NODE_TYPES.TSAsExpression || node.type === import_utils41.AST_NODE_TYPES.TSSatisfiesExpression) {
6153
+ if (node.type === import_utils42.AST_NODE_TYPES.TSAsExpression || node.type === import_utils42.AST_NODE_TYPES.TSSatisfiesExpression) {
5982
6154
  return unwrap2(node.expression);
5983
6155
  }
5984
6156
  return node;
@@ -5986,14 +6158,14 @@ function unwrap2(node) {
5986
6158
  function stringValueTexts(node, sourceCode) {
5987
6159
  const texts = [];
5988
6160
  for (const prop of node.properties) {
5989
- if (prop.type !== import_utils41.AST_NODE_TYPES.Property) {
6161
+ if (prop.type !== import_utils42.AST_NODE_TYPES.Property) {
5990
6162
  return null;
5991
6163
  }
5992
6164
  if (prop.computed || prop.shorthand || prop.method || prop.kind !== "init") {
5993
6165
  return null;
5994
6166
  }
5995
6167
  const value = prop.value;
5996
- if (value.type !== import_utils41.AST_NODE_TYPES.Literal || typeof value.value !== "string") {
6168
+ if (value.type !== import_utils42.AST_NODE_TYPES.Literal || typeof value.value !== "string") {
5997
6169
  return null;
5998
6170
  }
5999
6171
  const text = sourceCode.getText(value);
@@ -6009,7 +6181,7 @@ function resolvesToLocalEnum(node, scope) {
6009
6181
  const variable = current.variables.find((v) => v.name === node.name);
6010
6182
  if (variable !== void 0) {
6011
6183
  return variable.defs.some(
6012
- (def) => def.node.type === import_utils41.AST_NODE_TYPES.TSEnumDeclaration
6184
+ (def) => def.node.type === import_utils42.AST_NODE_TYPES.TSEnumDeclaration
6013
6185
  );
6014
6186
  }
6015
6187
  current = current.upper;
@@ -6054,32 +6226,32 @@ var no_zod_native_enum_default = createRule({
6054
6226
  }
6055
6227
  let services;
6056
6228
  try {
6057
- services = import_utils41.ESLintUtils.getParserServices(context);
6229
+ services = import_utils42.ESLintUtils.getParserServices(context);
6058
6230
  } catch {
6059
6231
  services = null;
6060
6232
  }
6061
6233
  const zodImportedNames = /* @__PURE__ */ new Map();
6062
6234
  function isZodMemberCall(node, api) {
6063
6235
  const callee = node.callee;
6064
- if (callee.type === import_utils41.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils41.AST_NODE_TYPES.Identifier) {
6236
+ if (callee.type === import_utils42.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils42.AST_NODE_TYPES.Identifier) {
6065
6237
  return callee.property.name === api;
6066
6238
  }
6067
- if (callee.type === import_utils41.AST_NODE_TYPES.Identifier) {
6239
+ if (callee.type === import_utils42.AST_NODE_TYPES.Identifier) {
6068
6240
  return zodImportedNames.get(callee.name) === api;
6069
6241
  }
6070
6242
  return false;
6071
6243
  }
6072
6244
  function buildFix(node) {
6073
6245
  const callee = node.callee;
6074
- if (callee.type !== import_utils41.AST_NODE_TYPES.MemberExpression || callee.property.type !== import_utils41.AST_NODE_TYPES.Identifier) {
6246
+ if (callee.type !== import_utils42.AST_NODE_TYPES.MemberExpression || callee.property.type !== import_utils42.AST_NODE_TYPES.Identifier) {
6075
6247
  return null;
6076
6248
  }
6077
6249
  const arg = node.arguments[0];
6078
- if (arg === void 0 || node.arguments.length !== 1 || arg.type === import_utils41.AST_NODE_TYPES.SpreadElement) {
6250
+ if (arg === void 0 || node.arguments.length !== 1 || arg.type === import_utils42.AST_NODE_TYPES.SpreadElement) {
6079
6251
  return null;
6080
6252
  }
6081
6253
  const inner = unwrap2(arg);
6082
- if (inner.type !== import_utils41.AST_NODE_TYPES.ObjectExpression) {
6254
+ if (inner.type !== import_utils42.AST_NODE_TYPES.ObjectExpression) {
6083
6255
  return null;
6084
6256
  }
6085
6257
  const values = stringValueTexts(inner, sourceCode);
@@ -6099,7 +6271,7 @@ var no_zod_native_enum_default = createRule({
6099
6271
  return;
6100
6272
  }
6101
6273
  for (const spec of node.specifiers) {
6102
- if (spec.type === import_utils41.AST_NODE_TYPES.ImportSpecifier && spec.imported.type === import_utils41.AST_NODE_TYPES.Identifier) {
6274
+ if (spec.type === import_utils42.AST_NODE_TYPES.ImportSpecifier && spec.imported.type === import_utils42.AST_NODE_TYPES.Identifier) {
6103
6275
  zodImportedNames.set(spec.local.name, spec.imported.name);
6104
6276
  }
6105
6277
  }
@@ -6118,7 +6290,7 @@ var no_zod_native_enum_default = createRule({
6118
6290
  return;
6119
6291
  }
6120
6292
  const arg = node.arguments[0];
6121
- if (arg === void 0 || arg.type !== import_utils41.AST_NODE_TYPES.Identifier) {
6293
+ if (arg === void 0 || arg.type !== import_utils42.AST_NODE_TYPES.Identifier) {
6122
6294
  return;
6123
6295
  }
6124
6296
  const isEnum = resolvesToLocalEnum(arg, sourceCode.getScope(arg)) || services !== null && resolvesToImportedEnum(arg, services);
@@ -6135,7 +6307,7 @@ var no_zod_native_enum_default = createRule({
6135
6307
  });
6136
6308
 
6137
6309
  // src/rules/prefer-constant-time-secret-compare.ts
6138
- var import_utils42 = require("@typescript-eslint/utils");
6310
+ var import_utils43 = require("@typescript-eslint/utils");
6139
6311
  var EQUALITY_OPERATORS = /* @__PURE__ */ new Set(["===", "!==", "==", "!="]);
6140
6312
  var SENTINEL_IDENTIFIERS = /* @__PURE__ */ new Set(["undefined", "NaN"]);
6141
6313
  var SENTINEL_WORDS = /(^|_)(SENTINEL|EMPTY|NONE|NULL|UNSET|MISSING|PLACEHOLDER|DUMMY|FAKE|EXAMPLE)(_|$)/;
@@ -6148,36 +6320,36 @@ function isConstantReference(identifier) {
6148
6320
  }
6149
6321
  function isExcludedOperand(node) {
6150
6322
  switch (node.type) {
6151
- case import_utils42.AST_NODE_TYPES.Literal:
6323
+ case import_utils43.AST_NODE_TYPES.Literal:
6152
6324
  return true;
6153
- case import_utils42.AST_NODE_TYPES.TemplateLiteral:
6325
+ case import_utils43.AST_NODE_TYPES.TemplateLiteral:
6154
6326
  return node.expressions.length === 0;
6155
- case import_utils42.AST_NODE_TYPES.Identifier:
6327
+ case import_utils43.AST_NODE_TYPES.Identifier:
6156
6328
  return SENTINEL_IDENTIFIERS.has(node.name) || SENTINEL_PREFIX_RE.test(node.name) || isConstantReference(node.name);
6157
- case import_utils42.AST_NODE_TYPES.MemberExpression:
6158
- return !node.computed && node.property.type === import_utils42.AST_NODE_TYPES.Identifier && (SENTINEL_PREFIX_RE.test(node.property.name) || isConstantReference(node.property.name));
6329
+ case import_utils43.AST_NODE_TYPES.MemberExpression:
6330
+ return !node.computed && node.property.type === import_utils43.AST_NODE_TYPES.Identifier && (SENTINEL_PREFIX_RE.test(node.property.name) || isConstantReference(node.property.name));
6159
6331
  default:
6160
6332
  return false;
6161
6333
  }
6162
6334
  }
6163
6335
  function operandName(node) {
6164
- if (node.type === import_utils42.AST_NODE_TYPES.Identifier) {
6336
+ if (node.type === import_utils43.AST_NODE_TYPES.Identifier) {
6165
6337
  return node.name;
6166
6338
  }
6167
- if (node.type === import_utils42.AST_NODE_TYPES.MemberExpression && !node.computed && node.property.type === import_utils42.AST_NODE_TYPES.Identifier) {
6339
+ if (node.type === import_utils43.AST_NODE_TYPES.MemberExpression && !node.computed && node.property.type === import_utils43.AST_NODE_TYPES.Identifier) {
6168
6340
  return node.property.name;
6169
6341
  }
6170
6342
  return null;
6171
6343
  }
6172
6344
  function isSecretOperand(node) {
6173
- if (node.type === import_utils42.AST_NODE_TYPES.TemplateLiteral) {
6345
+ if (node.type === import_utils43.AST_NODE_TYPES.TemplateLiteral) {
6174
6346
  return node.expressions.some((expression) => isSecretOperand(expression));
6175
6347
  }
6176
6348
  const name = operandName(node);
6177
6349
  return name !== null && isAuthSecretName(name);
6178
6350
  }
6179
6351
  function secretNameOf(node) {
6180
- if (node.type === import_utils42.AST_NODE_TYPES.TemplateLiteral) {
6352
+ if (node.type === import_utils43.AST_NODE_TYPES.TemplateLiteral) {
6181
6353
  for (const expression of node.expressions) {
6182
6354
  const nested = secretNameOf(expression);
6183
6355
  if (nested !== null) {
@@ -6229,8 +6401,8 @@ var prefer_constant_time_secret_compare_default = createRule({
6229
6401
  });
6230
6402
 
6231
6403
  // src/rules/prefer-discriminated-union.ts
6232
- var import_utils43 = require("@typescript-eslint/utils");
6233
6404
  var import_utils44 = require("@typescript-eslint/utils");
6405
+ var import_utils45 = require("@typescript-eslint/utils");
6234
6406
  var STATUS_MEMBER_NAMES = /* @__PURE__ */ new Set([
6235
6407
  "success",
6236
6408
  "ok",
@@ -6240,27 +6412,27 @@ var STATUS_MEMBER_NAMES = /* @__PURE__ */ new Set([
6240
6412
  ]);
6241
6413
  var MIN_OPTIONAL_MEMBERS = 2;
6242
6414
  function getMemberName(member) {
6243
- if (member.type !== import_utils44.AST_NODE_TYPES.TSPropertySignature) {
6415
+ if (member.type !== import_utils45.AST_NODE_TYPES.TSPropertySignature) {
6244
6416
  return null;
6245
6417
  }
6246
6418
  const { key } = member;
6247
- if (key.type === import_utils44.AST_NODE_TYPES.Identifier) {
6419
+ if (key.type === import_utils45.AST_NODE_TYPES.Identifier) {
6248
6420
  return key.name;
6249
6421
  }
6250
- if (key.type === import_utils44.AST_NODE_TYPES.Literal && typeof key.value === "string") {
6422
+ if (key.type === import_utils45.AST_NODE_TYPES.Literal && typeof key.value === "string") {
6251
6423
  return key.value;
6252
6424
  }
6253
6425
  return null;
6254
6426
  }
6255
6427
  function isBooleanTyped(member) {
6256
- return member.typeAnnotation?.typeAnnotation.type === import_utils44.AST_NODE_TYPES.TSBooleanKeyword;
6428
+ return member.typeAnnotation?.typeAnnotation.type === import_utils45.AST_NODE_TYPES.TSBooleanKeyword;
6257
6429
  }
6258
6430
  function looksLikeMutuallyExclusiveState(typeLiteral) {
6259
6431
  let hasStatusBoolean = false;
6260
6432
  let optionalCount = 0;
6261
6433
  let optionalPayloadCount = 0;
6262
6434
  for (const member of typeLiteral.members) {
6263
- if (member.type !== import_utils44.AST_NODE_TYPES.TSPropertySignature) {
6435
+ if (member.type !== import_utils45.AST_NODE_TYPES.TSPropertySignature) {
6264
6436
  continue;
6265
6437
  }
6266
6438
  if (member.optional) {
@@ -6281,7 +6453,7 @@ var prefer_discriminated_union_default = createRule({
6281
6453
  meta: {
6282
6454
  type: "suggestion",
6283
6455
  docs: {
6284
- description: "Flag object types with a boolean status flag and many optionals; model them as a discriminated union instead."
6456
+ description: "Flag object types with a boolean status member and at least two optional members, including a non-boolean payload."
6285
6457
  },
6286
6458
  schema: [],
6287
6459
  messages: {
@@ -6302,7 +6474,7 @@ var prefer_discriminated_union_default = createRule({
6302
6474
  TSInterfaceDeclaration(node) {
6303
6475
  const synthetic = {
6304
6476
  ...node.body,
6305
- type: import_utils44.AST_NODE_TYPES.TSTypeLiteral,
6477
+ type: import_utils45.AST_NODE_TYPES.TSTypeLiteral,
6306
6478
  members: node.body.body
6307
6479
  };
6308
6480
  checkTypeLiteral(synthetic, node);
@@ -6315,7 +6487,7 @@ var prefer_discriminated_union_default = createRule({
6315
6487
  });
6316
6488
 
6317
6489
  // src/rules/prefer-module-level-constant.ts
6318
- var import_utils45 = require("@typescript-eslint/utils");
6490
+ var import_utils46 = require("@typescript-eslint/utils");
6319
6491
  var DEFAULT_MIN_ELEMENTS = 3;
6320
6492
  var MAX_LITERAL_DEPTH = 4;
6321
6493
  var IGNORE_PATTERNS2 = [
@@ -6344,9 +6516,9 @@ var MUTATING_METHODS = /* @__PURE__ */ new Set([
6344
6516
  "assign"
6345
6517
  ]);
6346
6518
  var FUNCTION_TYPES5 = /* @__PURE__ */ new Set([
6347
- import_utils45.AST_NODE_TYPES.FunctionDeclaration,
6348
- import_utils45.AST_NODE_TYPES.FunctionExpression,
6349
- import_utils45.AST_NODE_TYPES.ArrowFunctionExpression
6519
+ import_utils46.AST_NODE_TYPES.FunctionDeclaration,
6520
+ import_utils46.AST_NODE_TYPES.FunctionExpression,
6521
+ import_utils46.AST_NODE_TYPES.ArrowFunctionExpression
6350
6522
  ]);
6351
6523
  var COLLECTION_CONSTRUCTORS = /* @__PURE__ */ new Set(["Set", "Map"]);
6352
6524
  function isIgnoredFile2(filename, sourceText) {
@@ -6359,14 +6531,14 @@ function isLocalFixtureFile(filename) {
6359
6531
  return isTestFile(filename) || isStoryFile(filename);
6360
6532
  }
6361
6533
  function unwrap3(node) {
6362
- if (node.type === import_utils45.AST_NODE_TYPES.TSAsExpression || node.type === import_utils45.AST_NODE_TYPES.TSSatisfiesExpression || node.type === import_utils45.AST_NODE_TYPES.TSNonNullExpression) {
6534
+ if (node.type === import_utils46.AST_NODE_TYPES.TSAsExpression || node.type === import_utils46.AST_NODE_TYPES.TSSatisfiesExpression || node.type === import_utils46.AST_NODE_TYPES.TSNonNullExpression) {
6363
6535
  return unwrap3(node.expression);
6364
6536
  }
6365
6537
  return node;
6366
6538
  }
6367
6539
  var HAS_STATEFUL_FLAG_RE = /[gy]/;
6368
6540
  function isRegexLiteral(node) {
6369
- return node.type === import_utils45.AST_NODE_TYPES.Literal && "regex" in node && node.regex !== void 0;
6541
+ return node.type === import_utils46.AST_NODE_TYPES.Literal && "regex" in node && node.regex !== void 0;
6370
6542
  }
6371
6543
  function isLiteralOnly(node, depth) {
6372
6544
  if (depth > MAX_LITERAL_DEPTH) {
@@ -6374,29 +6546,29 @@ function isLiteralOnly(node, depth) {
6374
6546
  }
6375
6547
  const inner = unwrap3(node);
6376
6548
  switch (inner.type) {
6377
- case import_utils45.AST_NODE_TYPES.Literal: {
6549
+ case import_utils46.AST_NODE_TYPES.Literal: {
6378
6550
  return !(isRegexLiteral(inner) && HAS_STATEFUL_FLAG_RE.test(inner.regex.flags));
6379
6551
  }
6380
- case import_utils45.AST_NODE_TYPES.TemplateLiteral: {
6552
+ case import_utils46.AST_NODE_TYPES.TemplateLiteral: {
6381
6553
  return inner.expressions.length === 0;
6382
6554
  }
6383
- case import_utils45.AST_NODE_TYPES.UnaryExpression: {
6384
- return (inner.operator === "-" || inner.operator === "+") && inner.argument.type === import_utils45.AST_NODE_TYPES.Literal && typeof inner.argument.value === "number";
6555
+ case import_utils46.AST_NODE_TYPES.UnaryExpression: {
6556
+ return (inner.operator === "-" || inner.operator === "+") && inner.argument.type === import_utils46.AST_NODE_TYPES.Literal && typeof inner.argument.value === "number";
6385
6557
  }
6386
- case import_utils45.AST_NODE_TYPES.ArrayExpression: {
6558
+ case import_utils46.AST_NODE_TYPES.ArrayExpression: {
6387
6559
  return inner.elements.every(
6388
- (el) => el !== null && el.type !== import_utils45.AST_NODE_TYPES.SpreadElement && isLiteralOnly(el, depth + 1)
6560
+ (el) => el !== null && el.type !== import_utils46.AST_NODE_TYPES.SpreadElement && isLiteralOnly(el, depth + 1)
6389
6561
  );
6390
6562
  }
6391
- case import_utils45.AST_NODE_TYPES.ObjectExpression: {
6563
+ case import_utils46.AST_NODE_TYPES.ObjectExpression: {
6392
6564
  return inner.properties.every((prop) => {
6393
- if (prop.type !== import_utils45.AST_NODE_TYPES.Property) {
6565
+ if (prop.type !== import_utils46.AST_NODE_TYPES.Property) {
6394
6566
  return false;
6395
6567
  }
6396
6568
  if (prop.shorthand || prop.method || prop.kind !== "init") {
6397
6569
  return false;
6398
6570
  }
6399
- if (prop.computed && prop.key.type !== import_utils45.AST_NODE_TYPES.Literal) {
6571
+ if (prop.computed && prop.key.type !== import_utils46.AST_NODE_TYPES.Literal) {
6400
6572
  return false;
6401
6573
  }
6402
6574
  return isLiteralOnly(prop.value, depth + 1);
@@ -6409,7 +6581,7 @@ function isLiteralOnly(node, depth) {
6409
6581
  }
6410
6582
  function unwrapObjectFreeze(node) {
6411
6583
  const inner = unwrap3(node);
6412
- if (inner.type === import_utils45.AST_NODE_TYPES.CallExpression && inner.callee.type === import_utils45.AST_NODE_TYPES.MemberExpression && !inner.callee.computed && inner.callee.object.type === import_utils45.AST_NODE_TYPES.Identifier && inner.callee.object.name === "Object" && inner.callee.property.type === import_utils45.AST_NODE_TYPES.Identifier && inner.callee.property.name === "freeze" && inner.arguments.length === 1 && inner.arguments[0] !== void 0 && inner.arguments[0].type !== import_utils45.AST_NODE_TYPES.SpreadElement) {
6584
+ if (inner.type === import_utils46.AST_NODE_TYPES.CallExpression && inner.callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && !inner.callee.computed && inner.callee.object.type === import_utils46.AST_NODE_TYPES.Identifier && inner.callee.object.name === "Object" && inner.callee.property.type === import_utils46.AST_NODE_TYPES.Identifier && inner.callee.property.name === "freeze" && inner.arguments.length === 1 && inner.arguments[0] !== void 0 && inner.arguments[0].type !== import_utils46.AST_NODE_TYPES.SpreadElement) {
6413
6585
  return unwrap3(inner.arguments[0]);
6414
6586
  }
6415
6587
  return inner;
@@ -6425,19 +6597,19 @@ function classify(init, checkRegex) {
6425
6597
  }
6426
6598
  return { kind: "regex", size: 1 };
6427
6599
  }
6428
- if (node.type === import_utils45.AST_NODE_TYPES.ArrayExpression) {
6600
+ if (node.type === import_utils46.AST_NODE_TYPES.ArrayExpression) {
6429
6601
  return isLiteralOnly(node, 0) ? { kind: "array", size: node.elements.length } : null;
6430
6602
  }
6431
- if (node.type === import_utils45.AST_NODE_TYPES.ObjectExpression) {
6603
+ if (node.type === import_utils46.AST_NODE_TYPES.ObjectExpression) {
6432
6604
  return isLiteralOnly(node, 0) ? { kind: "object", size: node.properties.length } : null;
6433
6605
  }
6434
- if (node.type === import_utils45.AST_NODE_TYPES.NewExpression && node.callee.type === import_utils45.AST_NODE_TYPES.Identifier && COLLECTION_CONSTRUCTORS.has(node.callee.name)) {
6606
+ if (node.type === import_utils46.AST_NODE_TYPES.NewExpression && node.callee.type === import_utils46.AST_NODE_TYPES.Identifier && COLLECTION_CONSTRUCTORS.has(node.callee.name)) {
6435
6607
  const arg = node.arguments[0];
6436
- if (node.arguments.length !== 1 || arg === void 0 || arg.type === import_utils45.AST_NODE_TYPES.SpreadElement) {
6608
+ if (node.arguments.length !== 1 || arg === void 0 || arg.type === import_utils46.AST_NODE_TYPES.SpreadElement) {
6437
6609
  return null;
6438
6610
  }
6439
6611
  const entries = unwrap3(arg);
6440
- if (entries.type !== import_utils45.AST_NODE_TYPES.ArrayExpression) {
6612
+ if (entries.type !== import_utils46.AST_NODE_TYPES.ArrayExpression) {
6441
6613
  return null;
6442
6614
  }
6443
6615
  return isLiteralOnly(entries, 0) ? { kind: node.callee.name === "Set" ? "Set" : "Map", size: entries.elements.length } : null;
@@ -6466,10 +6638,10 @@ var NON_RETAINING_BUILTINS = /* @__PURE__ */ new Map(
6466
6638
  );
6467
6639
  function isNonRetainingBuiltinCall(node, argument) {
6468
6640
  const callee = node.callee;
6469
- if (callee.type === import_utils45.AST_NODE_TYPES.Identifier && callee.name === "structuredClone") {
6641
+ if (callee.type === import_utils46.AST_NODE_TYPES.Identifier && callee.name === "structuredClone") {
6470
6642
  return true;
6471
6643
  }
6472
- if (callee.type !== import_utils45.AST_NODE_TYPES.MemberExpression || callee.computed || callee.object.type !== import_utils45.AST_NODE_TYPES.Identifier || callee.property.type !== import_utils45.AST_NODE_TYPES.Identifier) {
6644
+ if (callee.type !== import_utils46.AST_NODE_TYPES.MemberExpression || callee.computed || callee.object.type !== import_utils46.AST_NODE_TYPES.Identifier || callee.property.type !== import_utils46.AST_NODE_TYPES.Identifier) {
6473
6645
  return false;
6474
6646
  }
6475
6647
  const members = NON_RETAINING_BUILTINS.get(callee.object.name);
@@ -6483,38 +6655,38 @@ function isNonRetainingBuiltinCall(node, argument) {
6483
6655
  }
6484
6656
  function isSafeRead(identifier) {
6485
6657
  const parent = identifier.parent;
6486
- if (parent.type === import_utils45.AST_NODE_TYPES.MemberExpression) {
6658
+ if (parent.type === import_utils46.AST_NODE_TYPES.MemberExpression) {
6487
6659
  if (parent.object !== identifier) {
6488
6660
  return true;
6489
6661
  }
6490
6662
  const grandparent = parent.parent;
6491
- if (grandparent.type === import_utils45.AST_NODE_TYPES.AssignmentExpression && grandparent.left === parent) {
6663
+ if (grandparent.type === import_utils46.AST_NODE_TYPES.AssignmentExpression && grandparent.left === parent) {
6492
6664
  return false;
6493
6665
  }
6494
- if (grandparent.type === import_utils45.AST_NODE_TYPES.UpdateExpression) {
6666
+ if (grandparent.type === import_utils46.AST_NODE_TYPES.UpdateExpression) {
6495
6667
  return false;
6496
6668
  }
6497
- if (grandparent.type === import_utils45.AST_NODE_TYPES.UnaryExpression && grandparent.operator === "delete") {
6669
+ if (grandparent.type === import_utils46.AST_NODE_TYPES.UnaryExpression && grandparent.operator === "delete") {
6498
6670
  return false;
6499
6671
  }
6500
- if (!parent.computed && parent.property.type === import_utils45.AST_NODE_TYPES.Identifier && MUTATING_METHODS.has(parent.property.name) && grandparent.type === import_utils45.AST_NODE_TYPES.CallExpression && grandparent.callee === parent) {
6672
+ if (!parent.computed && parent.property.type === import_utils46.AST_NODE_TYPES.Identifier && MUTATING_METHODS.has(parent.property.name) && grandparent.type === import_utils46.AST_NODE_TYPES.CallExpression && grandparent.callee === parent) {
6501
6673
  return false;
6502
6674
  }
6503
6675
  return true;
6504
6676
  }
6505
- if (parent.type === import_utils45.AST_NODE_TYPES.ForOfStatement && parent.right === identifier) {
6677
+ if (parent.type === import_utils46.AST_NODE_TYPES.ForOfStatement && parent.right === identifier) {
6506
6678
  return true;
6507
6679
  }
6508
- if (parent.type === import_utils45.AST_NODE_TYPES.SpreadElement) {
6680
+ if (parent.type === import_utils46.AST_NODE_TYPES.SpreadElement) {
6509
6681
  return true;
6510
6682
  }
6511
- if (parent.type === import_utils45.AST_NODE_TYPES.BinaryExpression) {
6683
+ if (parent.type === import_utils46.AST_NODE_TYPES.BinaryExpression) {
6512
6684
  return true;
6513
6685
  }
6514
- if (parent.type === import_utils45.AST_NODE_TYPES.CallExpression && parent.arguments.includes(identifier) && isNonRetainingBuiltinCall(parent, identifier)) {
6686
+ if (parent.type === import_utils46.AST_NODE_TYPES.CallExpression && parent.arguments.includes(identifier) && isNonRetainingBuiltinCall(parent, identifier)) {
6515
6687
  return true;
6516
6688
  }
6517
- if (parent.type === import_utils45.AST_NODE_TYPES.UnaryExpression && parent.operator !== "delete") {
6689
+ if (parent.type === import_utils46.AST_NODE_TYPES.UnaryExpression && parent.operator !== "delete") {
6518
6690
  return true;
6519
6691
  }
6520
6692
  return false;
@@ -6569,7 +6741,7 @@ var prefer_module_level_constant_default = createRule({
6569
6741
  if (reference.isWrite()) {
6570
6742
  return false;
6571
6743
  }
6572
- if (reference.identifier.type !== import_utils45.AST_NODE_TYPES.Identifier) {
6744
+ if (reference.identifier.type !== import_utils46.AST_NODE_TYPES.Identifier) {
6573
6745
  return false;
6574
6746
  }
6575
6747
  if (!isSafeRead(reference.identifier)) {
@@ -6581,10 +6753,10 @@ var prefer_module_level_constant_default = createRule({
6581
6753
  return {
6582
6754
  VariableDeclarator(node) {
6583
6755
  const declaration = node.parent;
6584
- if (declaration.type !== import_utils45.AST_NODE_TYPES.VariableDeclaration || declaration.kind !== "const" || declaration.declare === true) {
6756
+ if (declaration.type !== import_utils46.AST_NODE_TYPES.VariableDeclaration || declaration.kind !== "const" || declaration.declare === true) {
6585
6757
  return;
6586
6758
  }
6587
- if (node.id.type !== import_utils45.AST_NODE_TYPES.Identifier || node.init === null) {
6759
+ if (node.id.type !== import_utils46.AST_NODE_TYPES.Identifier || node.init === null) {
6588
6760
  return;
6589
6761
  }
6590
6762
  if (enclosingFunction2(node) === null) {
@@ -6611,7 +6783,7 @@ var prefer_module_level_constant_default = createRule({
6611
6783
  });
6612
6784
 
6613
6785
  // src/rules/prefer-module-level-schema.ts
6614
- var import_utils46 = require("@typescript-eslint/utils");
6786
+ var import_utils47 = require("@typescript-eslint/utils");
6615
6787
 
6616
6788
  // src/rules/_zod.ts
6617
6789
  var ZOD_PREFIX_RE = /^Z[A-Z]/;
@@ -6677,9 +6849,9 @@ var I18N_RECEIVER_NAMES = /* @__PURE__ */ new Set([
6677
6849
  "intl"
6678
6850
  ]);
6679
6851
  var FUNCTION_TYPES6 = /* @__PURE__ */ new Set([
6680
- import_utils46.AST_NODE_TYPES.ArrowFunctionExpression,
6681
- import_utils46.AST_NODE_TYPES.FunctionDeclaration,
6682
- import_utils46.AST_NODE_TYPES.FunctionExpression
6852
+ import_utils47.AST_NODE_TYPES.ArrowFunctionExpression,
6853
+ import_utils47.AST_NODE_TYPES.FunctionDeclaration,
6854
+ import_utils47.AST_NODE_TYPES.FunctionExpression
6683
6855
  ]);
6684
6856
  function schemaExpression(node) {
6685
6857
  let current = node;
@@ -6688,10 +6860,10 @@ function schemaExpression(node) {
6688
6860
  if (parent === void 0) {
6689
6861
  return current;
6690
6862
  }
6691
- if (parent.type === import_utils46.AST_NODE_TYPES.MemberExpression && parent.object === current && !parent.computed && parent.property.type === import_utils46.AST_NODE_TYPES.Identifier && TERMINAL_METHODS.has(parent.property.name)) {
6863
+ if (parent.type === import_utils47.AST_NODE_TYPES.MemberExpression && parent.object === current && !parent.computed && parent.property.type === import_utils47.AST_NODE_TYPES.Identifier && TERMINAL_METHODS.has(parent.property.name)) {
6692
6864
  return current;
6693
6865
  }
6694
- if (parent.type === import_utils46.AST_NODE_TYPES.MemberExpression && parent.object === current || parent.type === import_utils46.AST_NODE_TYPES.CallExpression && parent.callee === current || parent.type === import_utils46.AST_NODE_TYPES.TSAsExpression && parent.expression === current || parent.type === import_utils46.AST_NODE_TYPES.TSNonNullExpression && parent.expression === current) {
6866
+ if (parent.type === import_utils47.AST_NODE_TYPES.MemberExpression && parent.object === current || parent.type === import_utils47.AST_NODE_TYPES.CallExpression && parent.callee === current || parent.type === import_utils47.AST_NODE_TYPES.TSAsExpression && parent.expression === current || parent.type === import_utils47.AST_NODE_TYPES.TSNonNullExpression && parent.expression === current) {
6695
6867
  current = parent;
6696
6868
  continue;
6697
6869
  }
@@ -6742,22 +6914,22 @@ function subtreeSome(root, predicate) {
6742
6914
  function readsReceiver(node) {
6743
6915
  return subtreeSome(
6744
6916
  node,
6745
- (inner) => inner.type === import_utils46.AST_NODE_TYPES.ThisExpression || inner.type === import_utils46.AST_NODE_TYPES.Super || inner.type === import_utils46.AST_NODE_TYPES.Identifier && inner.name === "arguments"
6917
+ (inner) => inner.type === import_utils47.AST_NODE_TYPES.ThisExpression || inner.type === import_utils47.AST_NODE_TYPES.Super || inner.type === import_utils47.AST_NODE_TYPES.Identifier && inner.name === "arguments"
6746
6918
  );
6747
6919
  }
6748
6920
  function buildsLocalizedText(node) {
6749
6921
  return subtreeSome(node, (inner) => {
6750
- if (inner.type === import_utils46.AST_NODE_TYPES.TaggedTemplateExpression) {
6922
+ if (inner.type === import_utils47.AST_NODE_TYPES.TaggedTemplateExpression) {
6751
6923
  return true;
6752
6924
  }
6753
- if (inner.type !== import_utils46.AST_NODE_TYPES.CallExpression) {
6925
+ if (inner.type !== import_utils47.AST_NODE_TYPES.CallExpression) {
6754
6926
  return false;
6755
6927
  }
6756
6928
  const { callee } = inner;
6757
- if (callee.type === import_utils46.AST_NODE_TYPES.Identifier) {
6929
+ if (callee.type === import_utils47.AST_NODE_TYPES.Identifier) {
6758
6930
  return I18N_CALLEE_NAMES.has(callee.name);
6759
6931
  }
6760
- return callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.object.type === import_utils46.AST_NODE_TYPES.Identifier && I18N_RECEIVER_NAMES.has(callee.object.name);
6932
+ return callee.type === import_utils47.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.object.type === import_utils47.AST_NODE_TYPES.Identifier && I18N_RECEIVER_NAMES.has(callee.object.name);
6761
6933
  });
6762
6934
  }
6763
6935
  function collectReferences(scope, out) {
@@ -6814,15 +6986,15 @@ var prefer_module_level_schema_default = createRule({
6814
6986
  }
6815
6987
  const zodNamespaces = /* @__PURE__ */ new Set();
6816
6988
  function isZodCall(node) {
6817
- return node.type === import_utils46.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.object.type === import_utils46.AST_NODE_TYPES.Identifier && zodNamespaces.has(node.callee.object.name);
6989
+ return node.type === import_utils47.AST_NODE_TYPES.CallExpression && node.callee.type === import_utils47.AST_NODE_TYPES.MemberExpression && !node.callee.computed && node.callee.object.type === import_utils47.AST_NODE_TYPES.Identifier && zodNamespaces.has(node.callee.object.name);
6818
6990
  }
6819
6991
  function isCovered(node) {
6820
6992
  let current = node.parent ?? void 0;
6821
6993
  while (current !== void 0) {
6822
- if (current !== node && isZodCall(current) && current.callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && current.callee.property.type === import_utils46.AST_NODE_TYPES.Identifier && factories.has(current.callee.property.name)) {
6994
+ if (current !== node && isZodCall(current) && current.callee.type === import_utils47.AST_NODE_TYPES.MemberExpression && current.callee.property.type === import_utils47.AST_NODE_TYPES.Identifier && factories.has(current.callee.property.name)) {
6823
6995
  return true;
6824
6996
  }
6825
- if (current.type === import_utils46.AST_NODE_TYPES.CallExpression && (current.callee.type === import_utils46.AST_NODE_TYPES.Identifier && MEMO_CALLEES.has(current.callee.name) || current.callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && !current.callee.computed && current.callee.property.type === import_utils46.AST_NODE_TYPES.Identifier && MEMO_CALLEES.has(current.callee.property.name))) {
6997
+ if (current.type === import_utils47.AST_NODE_TYPES.CallExpression && (current.callee.type === import_utils47.AST_NODE_TYPES.Identifier && MEMO_CALLEES.has(current.callee.name) || current.callee.type === import_utils47.AST_NODE_TYPES.MemberExpression && !current.callee.computed && current.callee.property.type === import_utils47.AST_NODE_TYPES.Identifier && MEMO_CALLEES.has(current.callee.property.name))) {
6826
6998
  return true;
6827
6999
  }
6828
7000
  current = current.parent ?? void 0;
@@ -6837,11 +7009,11 @@ var prefer_module_level_schema_default = createRule({
6837
7009
  if (parent === void 0) {
6838
7010
  return confirmed;
6839
7011
  }
6840
- if (parent.type === import_utils46.AST_NODE_TYPES.Property && parent.value === current || parent.type === import_utils46.AST_NODE_TYPES.ObjectExpression || parent.type === import_utils46.AST_NODE_TYPES.ArrayExpression) {
7012
+ if (parent.type === import_utils47.AST_NODE_TYPES.Property && parent.value === current || parent.type === import_utils47.AST_NODE_TYPES.ObjectExpression || parent.type === import_utils47.AST_NODE_TYPES.ArrayExpression) {
6841
7013
  current = parent;
6842
7014
  continue;
6843
7015
  }
6844
- if (parent.type === import_utils46.AST_NODE_TYPES.CallExpression && parent.arguments.includes(current) && isSchemaComposition(parent)) {
7016
+ if (parent.type === import_utils47.AST_NODE_TYPES.CallExpression && parent.arguments.includes(current) && isSchemaComposition(parent)) {
6845
7017
  current = schemaExpression(parent);
6846
7018
  confirmed = current;
6847
7019
  continue;
@@ -6851,7 +7023,7 @@ var prefer_module_level_schema_default = createRule({
6851
7023
  }
6852
7024
  function isSchemaComposition(node) {
6853
7025
  const { callee } = node;
6854
- const isCombinator = callee.type === import_utils46.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils46.AST_NODE_TYPES.Identifier && ZOD_COMBINATOR_METHODS.has(callee.property.name);
7026
+ const isCombinator = callee.type === import_utils47.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils47.AST_NODE_TYPES.Identifier && ZOD_COMBINATOR_METHODS.has(callee.property.name);
6855
7027
  return isCombinator || isZodCall(node);
6856
7028
  }
6857
7029
  function closesOverNothing(node, enclosing) {
@@ -6885,13 +7057,13 @@ var prefer_module_level_schema_default = createRule({
6885
7057
  }
6886
7058
  function ownerName(enclosing) {
6887
7059
  const parent = enclosing.parent ?? void 0;
6888
- if (enclosing.type === import_utils46.AST_NODE_TYPES.FunctionDeclaration && enclosing.id !== null) {
7060
+ if (enclosing.type === import_utils47.AST_NODE_TYPES.FunctionDeclaration && enclosing.id !== null) {
6889
7061
  return enclosing.id.name;
6890
7062
  }
6891
- if (parent !== void 0 && parent.type === import_utils46.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils46.AST_NODE_TYPES.Identifier) {
7063
+ if (parent !== void 0 && parent.type === import_utils47.AST_NODE_TYPES.VariableDeclarator && parent.id.type === import_utils47.AST_NODE_TYPES.Identifier) {
6892
7064
  return parent.id.name;
6893
7065
  }
6894
- if (parent !== void 0 && (parent.type === import_utils46.AST_NODE_TYPES.MethodDefinition || parent.type === import_utils46.AST_NODE_TYPES.Property) && parent.key.type === import_utils46.AST_NODE_TYPES.Identifier) {
7066
+ if (parent !== void 0 && (parent.type === import_utils47.AST_NODE_TYPES.MethodDefinition || parent.type === import_utils47.AST_NODE_TYPES.Property) && parent.key.type === import_utils47.AST_NODE_TYPES.Identifier) {
6895
7067
  return parent.key.name;
6896
7068
  }
6897
7069
  return "this function";
@@ -6902,7 +7074,7 @@ var prefer_module_level_schema_default = createRule({
6902
7074
  return;
6903
7075
  }
6904
7076
  for (const specifier of node.specifiers) {
6905
- if (specifier.type === import_utils46.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils46.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils46.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils46.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
7077
+ if (specifier.type === import_utils47.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils47.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils47.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils47.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
6906
7078
  zodNamespaces.add(specifier.local.name);
6907
7079
  }
6908
7080
  }
@@ -6912,7 +7084,7 @@ var prefer_module_level_schema_default = createRule({
6912
7084
  return;
6913
7085
  }
6914
7086
  const callee = node.callee;
6915
- if (callee.property.type !== import_utils46.AST_NODE_TYPES.Identifier) {
7087
+ if (callee.property.type !== import_utils47.AST_NODE_TYPES.Identifier) {
6916
7088
  return;
6917
7089
  }
6918
7090
  const factory = callee.property.name;
@@ -6927,7 +7099,7 @@ var prefer_module_level_schema_default = createRule({
6927
7099
  return;
6928
7100
  }
6929
7101
  const shape = node.arguments[0];
6930
- if (shape !== void 0 && shape.type === import_utils46.AST_NODE_TYPES.ObjectExpression && shape.properties.length < minProperties) {
7102
+ if (shape !== void 0 && shape.type === import_utils47.AST_NODE_TYPES.ObjectExpression && shape.properties.length < minProperties) {
6931
7103
  return;
6932
7104
  }
6933
7105
  const expression = schemaExpression(node);
@@ -6955,20 +7127,20 @@ var prefer_module_level_schema_default = createRule({
6955
7127
  });
6956
7128
 
6957
7129
  // src/rules/prefer-non-nullable-collection.ts
6958
- var import_utils47 = require("@typescript-eslint/utils");
7130
+ var import_utils48 = require("@typescript-eslint/utils");
6959
7131
  var ARRAY_TYPE_NAMES = /* @__PURE__ */ new Set(["Array", "ReadonlyArray"]);
6960
7132
  function propertyName(node) {
6961
7133
  const key = node.key;
6962
- if (key.type === import_utils47.AST_NODE_TYPES.Identifier) return key.name;
6963
- if (key.type === import_utils47.AST_NODE_TYPES.Literal) return String(key.value);
7134
+ if (key.type === import_utils48.AST_NODE_TYPES.Identifier) return key.name;
7135
+ if (key.type === import_utils48.AST_NODE_TYPES.Literal) return String(key.value);
6964
7136
  return "collection";
6965
7137
  }
6966
7138
  function isArrayType(node) {
6967
- if (node.type === import_utils47.AST_NODE_TYPES.TSArrayType) return true;
6968
- return node.type === import_utils47.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils47.AST_NODE_TYPES.Identifier && ARRAY_TYPE_NAMES.has(node.typeName.name);
7139
+ if (node.type === import_utils48.AST_NODE_TYPES.TSArrayType) return true;
7140
+ return node.type === import_utils48.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils48.AST_NODE_TYPES.Identifier && ARRAY_TYPE_NAMES.has(node.typeName.name);
6969
7141
  }
6970
7142
  function isNullishType(node) {
6971
- return node.type === import_utils47.AST_NODE_TYPES.TSNullKeyword || node.type === import_utils47.AST_NODE_TYPES.TSUndefinedKeyword;
7143
+ return node.type === import_utils48.AST_NODE_TYPES.TSNullKeyword || node.type === import_utils48.AST_NODE_TYPES.TSUndefinedKeyword;
6972
7144
  }
6973
7145
  function isNullableArrayOnly(node) {
6974
7146
  const values = node.types.filter((member) => !isNullishType(member));
@@ -6979,7 +7151,7 @@ var prefer_non_nullable_collection_default = createRule({
6979
7151
  meta: {
6980
7152
  type: "suggestion",
6981
7153
  docs: {
6982
- description: "Require array types to use an empty array instead of explicit nullish unions with two equivalent empty states."
7154
+ description: "Require declared data-shape properties and direct aliases to use non-null arrays instead of explicit nullish unions."
6983
7155
  },
6984
7156
  schema: [],
6985
7157
  messages: {
@@ -6995,7 +7167,7 @@ var prefer_non_nullable_collection_default = createRule({
6995
7167
  function checkOptionalProperty(node) {
6996
7168
  const annotation = node.typeAnnotation?.typeAnnotation;
6997
7169
  if (annotation === void 0) return;
6998
- if (annotation.type !== import_utils47.AST_NODE_TYPES.TSUnionType || !isNullableArrayOnly(annotation)) {
7170
+ if (annotation.type !== import_utils48.AST_NODE_TYPES.TSUnionType || !isNullableArrayOnly(annotation)) {
6999
7171
  return;
7000
7172
  }
7001
7173
  context.report({
@@ -7008,7 +7180,7 @@ var prefer_non_nullable_collection_default = createRule({
7008
7180
  TSPropertySignature: checkOptionalProperty,
7009
7181
  PropertyDefinition: checkOptionalProperty,
7010
7182
  TSTypeAliasDeclaration(node) {
7011
- if (node.typeAnnotation.type !== import_utils47.AST_NODE_TYPES.TSUnionType) return;
7183
+ if (node.typeAnnotation.type !== import_utils48.AST_NODE_TYPES.TSUnionType) return;
7012
7184
  if (!isNullableArrayOnly(node.typeAnnotation)) return;
7013
7185
  context.report({
7014
7186
  node,
@@ -7021,13 +7193,13 @@ var prefer_non_nullable_collection_default = createRule({
7021
7193
  });
7022
7194
 
7023
7195
  // src/rules/prefer-schema-for-api-payload.ts
7024
- var import_utils48 = require("@typescript-eslint/utils");
7196
+ var import_utils49 = require("@typescript-eslint/utils");
7025
7197
  var unwrap4 = (node) => {
7026
7198
  let current = node;
7027
7199
  while (current !== null && current !== void 0) {
7028
- if (current.type === import_utils48.AST_NODE_TYPES.TSAsExpression || current.type === import_utils48.AST_NODE_TYPES.TSTypeAssertion || current.type === import_utils48.AST_NODE_TYPES.TSNonNullExpression || current.type === import_utils48.AST_NODE_TYPES.TSSatisfiesExpression) {
7200
+ if (current.type === import_utils49.AST_NODE_TYPES.TSAsExpression || current.type === import_utils49.AST_NODE_TYPES.TSTypeAssertion || current.type === import_utils49.AST_NODE_TYPES.TSNonNullExpression || current.type === import_utils49.AST_NODE_TYPES.TSSatisfiesExpression) {
7029
7201
  current = current.expression;
7030
- } else if (current.type === import_utils48.AST_NODE_TYPES.ChainExpression) {
7202
+ } else if (current.type === import_utils49.AST_NODE_TYPES.ChainExpression) {
7031
7203
  current = current.expression;
7032
7204
  } else {
7033
7205
  break;
@@ -7042,23 +7214,23 @@ var PROMISE_CHAIN_METHODS = /* @__PURE__ */ new Set([
7042
7214
  ]);
7043
7215
  var isSchemaParseReference = (node) => {
7044
7216
  const inner = unwrap4(node);
7045
- return inner !== null && inner.type === import_utils48.AST_NODE_TYPES.MemberExpression && !inner.computed && inner.property.type === import_utils48.AST_NODE_TYPES.Identifier && (inner.property.name === "parse" || inner.property.name === "safeParse");
7217
+ return inner !== null && inner.type === import_utils49.AST_NODE_TYPES.MemberExpression && !inner.computed && inner.property.type === import_utils49.AST_NODE_TYPES.Identifier && (inner.property.name === "parse" || inner.property.name === "safeParse");
7046
7218
  };
7047
7219
  var isRawPayloadSource = (node) => {
7048
7220
  let current = unwrap4(node);
7049
7221
  if (current === null) return false;
7050
- if (current.type === import_utils48.AST_NODE_TYPES.AwaitExpression) {
7222
+ if (current.type === import_utils49.AST_NODE_TYPES.AwaitExpression) {
7051
7223
  current = unwrap4(current.argument);
7052
7224
  }
7053
- if (current === null || current.type !== import_utils48.AST_NODE_TYPES.CallExpression) {
7225
+ if (current === null || current.type !== import_utils49.AST_NODE_TYPES.CallExpression) {
7054
7226
  return false;
7055
7227
  }
7056
7228
  const callee = unwrap4(current.callee);
7057
- if (callee === null || callee.type !== import_utils48.AST_NODE_TYPES.MemberExpression) {
7229
+ if (callee === null || callee.type !== import_utils49.AST_NODE_TYPES.MemberExpression) {
7058
7230
  return false;
7059
7231
  }
7060
7232
  const property = unwrap4(callee.property);
7061
- if (property === null || property.type !== import_utils48.AST_NODE_TYPES.Identifier) {
7233
+ if (property === null || property.type !== import_utils49.AST_NODE_TYPES.Identifier) {
7062
7234
  return false;
7063
7235
  }
7064
7236
  if (property.name === "json") {
@@ -7068,17 +7240,16 @@ var isRawPayloadSource = (node) => {
7068
7240
  return !current.arguments.some(isSchemaParseReference) && isRawPayloadSource(callee.object);
7069
7241
  }
7070
7242
  const object = unwrap4(callee.object);
7071
- return property.name === "parse" && object !== null && object.type === import_utils48.AST_NODE_TYPES.Identifier && object.name === "JSON" && // ...but not `JSON.parse(readFileSync(p, "utf8"))` — see isLocalFileRead.
7072
- !isLocalFileRead(current.arguments[0]);
7243
+ return property.name === "parse" && object !== null && object.type === import_utils49.AST_NODE_TYPES.Identifier && object.name === "JSON" && !isLocalFileRead(current.arguments[0]);
7073
7244
  };
7074
7245
  var FILE_READ_RE = /^(readFile|readFileSync|readJson|readJsonSync|readJSON)$/;
7075
7246
  var isLocalFileRead = (node) => {
7076
7247
  let found = false;
7077
7248
  const visit = (current) => {
7078
7249
  if (found || current === null || current === void 0) return;
7079
- if (current.type === import_utils48.AST_NODE_TYPES.CallExpression) {
7250
+ if (current.type === import_utils49.AST_NODE_TYPES.CallExpression) {
7080
7251
  const callee = unwrap4(current.callee);
7081
- const name = callee?.type === import_utils48.AST_NODE_TYPES.Identifier ? callee.name : callee?.type === import_utils48.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils48.AST_NODE_TYPES.Identifier ? callee.property.name : null;
7252
+ const name = callee?.type === import_utils49.AST_NODE_TYPES.Identifier ? callee.name : callee?.type === import_utils49.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils49.AST_NODE_TYPES.Identifier ? callee.property.name : null;
7082
7253
  if (name !== null && FILE_READ_RE.test(name)) {
7083
7254
  found = true;
7084
7255
  return;
@@ -7100,15 +7271,15 @@ var isLocalFileRead = (node) => {
7100
7271
  var ASSERTION_CALLEE_RE = /^(expect|assert|should|invariant)$/;
7101
7272
  var isInsideAssertion = (node) => {
7102
7273
  for (let current = node.parent; current !== void 0 && current !== null; current = current.parent) {
7103
- if (current.type !== import_utils48.AST_NODE_TYPES.CallExpression) continue;
7274
+ if (current.type !== import_utils49.AST_NODE_TYPES.CallExpression) continue;
7104
7275
  let callee = current.callee;
7105
- while (callee.type === import_utils48.AST_NODE_TYPES.MemberExpression) {
7276
+ while (callee.type === import_utils49.AST_NODE_TYPES.MemberExpression) {
7106
7277
  callee = callee.object;
7107
7278
  }
7108
- if (callee.type === import_utils48.AST_NODE_TYPES.CallExpression) {
7279
+ if (callee.type === import_utils49.AST_NODE_TYPES.CallExpression) {
7109
7280
  callee = callee.callee;
7110
7281
  }
7111
- if (callee.type === import_utils48.AST_NODE_TYPES.Identifier && ASSERTION_CALLEE_RE.test(callee.name)) {
7282
+ if (callee.type === import_utils49.AST_NODE_TYPES.Identifier && ASSERTION_CALLEE_RE.test(callee.name)) {
7112
7283
  return true;
7113
7284
  }
7114
7285
  }
@@ -7127,39 +7298,39 @@ var GUARD_NAME_RE = /^(?:is|validate|parse|assert|decode|coerce)[A-Z]/;
7127
7298
  var isValidationRead = (node) => {
7128
7299
  let current = node;
7129
7300
  let parent = current.parent;
7130
- while (parent !== null && parent !== void 0 && (parent.type === import_utils48.AST_NODE_TYPES.TSAsExpression || parent.type === import_utils48.AST_NODE_TYPES.TSTypeAssertion || parent.type === import_utils48.AST_NODE_TYPES.TSNonNullExpression || parent.type === import_utils48.AST_NODE_TYPES.TSSatisfiesExpression || parent.type === import_utils48.AST_NODE_TYPES.ChainExpression)) {
7301
+ while (parent !== null && parent !== void 0 && (parent.type === import_utils49.AST_NODE_TYPES.TSAsExpression || parent.type === import_utils49.AST_NODE_TYPES.TSTypeAssertion || parent.type === import_utils49.AST_NODE_TYPES.TSNonNullExpression || parent.type === import_utils49.AST_NODE_TYPES.TSSatisfiesExpression || parent.type === import_utils49.AST_NODE_TYPES.ChainExpression)) {
7131
7302
  current = parent;
7132
7303
  parent = parent.parent;
7133
7304
  }
7134
7305
  if (parent === null || parent === void 0) return false;
7135
- if (parent.type === import_utils48.AST_NODE_TYPES.UnaryExpression && parent.operator === "typeof" && parent.argument === current) {
7306
+ if (parent.type === import_utils49.AST_NODE_TYPES.UnaryExpression && parent.operator === "typeof" && parent.argument === current) {
7136
7307
  return true;
7137
7308
  }
7138
- if (parent.type !== import_utils48.AST_NODE_TYPES.CallExpression || !parent.arguments.some((arg) => arg === current)) {
7309
+ if (parent.type !== import_utils49.AST_NODE_TYPES.CallExpression || !parent.arguments.some((arg) => arg === current)) {
7139
7310
  return false;
7140
7311
  }
7141
7312
  const callee = parent.callee;
7142
- if (callee.type === import_utils48.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.object.type === import_utils48.AST_NODE_TYPES.Identifier && callee.object.name === "Array" && callee.property.type === import_utils48.AST_NODE_TYPES.Identifier && callee.property.name === "isArray") {
7313
+ if (callee.type === import_utils49.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.object.type === import_utils49.AST_NODE_TYPES.Identifier && callee.object.name === "Array" && callee.property.type === import_utils49.AST_NODE_TYPES.Identifier && callee.property.name === "isArray") {
7143
7314
  return parent.arguments.length === 1;
7144
7315
  }
7145
- return callee.type === import_utils48.AST_NODE_TYPES.Identifier && GUARD_NAME_RE.test(callee.name);
7316
+ return callee.type === import_utils49.AST_NODE_TYPES.Identifier && GUARD_NAME_RE.test(callee.name);
7146
7317
  };
7147
7318
  var isGuardTestPosition = (node) => {
7148
7319
  let current = node;
7149
7320
  let parent = current.parent;
7150
7321
  while (parent !== void 0 && parent !== null) {
7151
7322
  switch (parent.type) {
7152
- case import_utils48.AST_NODE_TYPES.UnaryExpression:
7153
- case import_utils48.AST_NODE_TYPES.LogicalExpression:
7154
- case import_utils48.AST_NODE_TYPES.ChainExpression:
7323
+ case import_utils49.AST_NODE_TYPES.UnaryExpression:
7324
+ case import_utils49.AST_NODE_TYPES.LogicalExpression:
7325
+ case import_utils49.AST_NODE_TYPES.ChainExpression:
7155
7326
  current = parent;
7156
7327
  parent = parent.parent;
7157
7328
  continue;
7158
- case import_utils48.AST_NODE_TYPES.IfStatement:
7159
- case import_utils48.AST_NODE_TYPES.ConditionalExpression:
7160
- case import_utils48.AST_NODE_TYPES.WhileStatement:
7161
- case import_utils48.AST_NODE_TYPES.DoWhileStatement:
7162
- case import_utils48.AST_NODE_TYPES.ForStatement:
7329
+ case import_utils49.AST_NODE_TYPES.IfStatement:
7330
+ case import_utils49.AST_NODE_TYPES.ConditionalExpression:
7331
+ case import_utils49.AST_NODE_TYPES.WhileStatement:
7332
+ case import_utils49.AST_NODE_TYPES.DoWhileStatement:
7333
+ case import_utils49.AST_NODE_TYPES.ForStatement:
7163
7334
  return parent.test === current;
7164
7335
  default:
7165
7336
  return false;
@@ -7169,7 +7340,7 @@ var isGuardTestPosition = (node) => {
7169
7340
  };
7170
7341
  var isUnvalidatedVariableRef = (node, scope, tracked) => {
7171
7342
  const unwrapped = unwrap4(node);
7172
- if (unwrapped === null || unwrapped.type !== import_utils48.AST_NODE_TYPES.Identifier) {
7343
+ if (unwrapped === null || unwrapped.type !== import_utils49.AST_NODE_TYPES.Identifier) {
7173
7344
  return false;
7174
7345
  }
7175
7346
  const variable = findVariable2(scope, unwrapped.name);
@@ -7212,11 +7383,11 @@ var prefer_schema_for_api_payload_default = createRule({
7212
7383
  return {
7213
7384
  VariableDeclarator(node) {
7214
7385
  const scope = context.sourceCode.getScope(node);
7215
- if (node.id.type === import_utils48.AST_NODE_TYPES.Identifier) {
7386
+ if (node.id.type === import_utils49.AST_NODE_TYPES.Identifier) {
7216
7387
  trackInitializer(node);
7217
7388
  return;
7218
7389
  }
7219
- if (node.id.type === import_utils48.AST_NODE_TYPES.ObjectPattern || node.id.type === import_utils48.AST_NODE_TYPES.ArrayPattern) {
7390
+ if (node.id.type === import_utils49.AST_NODE_TYPES.ObjectPattern || node.id.type === import_utils49.AST_NODE_TYPES.ArrayPattern) {
7220
7391
  if (isRawPayloadSource(node.init)) {
7221
7392
  if (!isFullyNarrowedPattern(node)) {
7222
7393
  context.report({ node: node.id, messageId: "unparsedJsonAccess" });
@@ -7230,7 +7401,7 @@ var prefer_schema_for_api_payload_default = createRule({
7230
7401
  },
7231
7402
  AssignmentExpression(node) {
7232
7403
  const scope = context.sourceCode.getScope(node);
7233
- if (node.left.type === import_utils48.AST_NODE_TYPES.Identifier) {
7404
+ if (node.left.type === import_utils49.AST_NODE_TYPES.Identifier) {
7234
7405
  const variable = findVariable2(scope, node.left.name);
7235
7406
  if (variable === null) return;
7236
7407
  if (isRawPayloadSource(node.right)) {
@@ -7240,7 +7411,7 @@ var prefer_schema_for_api_payload_default = createRule({
7240
7411
  }
7241
7412
  return;
7242
7413
  }
7243
- if (node.left.type === import_utils48.AST_NODE_TYPES.ObjectPattern || node.left.type === import_utils48.AST_NODE_TYPES.ArrayPattern) {
7414
+ if (node.left.type === import_utils49.AST_NODE_TYPES.ObjectPattern || node.left.type === import_utils49.AST_NODE_TYPES.ArrayPattern) {
7244
7415
  if (isRawPayloadSource(node.right)) {
7245
7416
  context.report({
7246
7417
  node: node.left,
@@ -7257,15 +7428,15 @@ var prefer_schema_for_api_payload_default = createRule({
7257
7428
  }
7258
7429
  },
7259
7430
  CallExpression(node) {
7260
- if (node.callee.type !== import_utils48.AST_NODE_TYPES.Identifier) return;
7431
+ if (node.callee.type !== import_utils49.AST_NODE_TYPES.Identifier) return;
7261
7432
  if (!GUARD_NAME_RE.test(node.callee.name) && !isGuardTestPosition(node)) {
7262
7433
  return;
7263
7434
  }
7264
7435
  const scope = context.sourceCode.getScope(node);
7265
7436
  for (const arg of node.arguments) {
7266
- if (arg.type === import_utils48.AST_NODE_TYPES.SpreadElement) continue;
7437
+ if (arg.type === import_utils49.AST_NODE_TYPES.SpreadElement) continue;
7267
7438
  const unwrapped = unwrap4(arg);
7268
- if (unwrapped === null || unwrapped.type !== import_utils48.AST_NODE_TYPES.Identifier) {
7439
+ if (unwrapped === null || unwrapped.type !== import_utils49.AST_NODE_TYPES.Identifier) {
7269
7440
  continue;
7270
7441
  }
7271
7442
  const variable = findVariable2(scope, unwrapped.name);
@@ -7279,13 +7450,13 @@ var prefer_schema_for_api_payload_default = createRule({
7279
7450
  const obj = unwrap4(node.object);
7280
7451
  if (isRawPayloadSource(obj)) {
7281
7452
  const parent = node.parent;
7282
- if (parent.type === import_utils48.AST_NODE_TYPES.CallExpression && parent.callee === node && node.property.type === import_utils48.AST_NODE_TYPES.Identifier && (node.property.name === "parse" || node.property.name === "safeParse" || PROMISE_CHAIN_METHODS.has(node.property.name))) {
7453
+ if (parent.type === import_utils49.AST_NODE_TYPES.CallExpression && parent.callee === node && node.property.type === import_utils49.AST_NODE_TYPES.Identifier && (node.property.name === "parse" || node.property.name === "safeParse" || PROMISE_CHAIN_METHODS.has(node.property.name))) {
7283
7454
  return;
7284
7455
  }
7285
7456
  context.report({ node, messageId: "unparsedJsonAccess" });
7286
7457
  return;
7287
7458
  }
7288
- if (obj !== null && obj.type === import_utils48.AST_NODE_TYPES.Identifier && isUnvalidatedVariableRef(obj, scope, unvalidatedVariables)) {
7459
+ if (obj !== null && obj.type === import_utils49.AST_NODE_TYPES.Identifier && isUnvalidatedVariableRef(obj, scope, unvalidatedVariables)) {
7289
7460
  context.report({ node, messageId: "unparsedJsonAccess" });
7290
7461
  const variable = findVariable2(scope, obj.name);
7291
7462
  if (variable !== null) {
@@ -7298,7 +7469,7 @@ var prefer_schema_for_api_payload_default = createRule({
7298
7469
  });
7299
7470
 
7300
7471
  // src/rules/prefer-semantic-colors.ts
7301
- var import_utils49 = require("@typescript-eslint/utils");
7472
+ var import_utils50 = require("@typescript-eslint/utils");
7302
7473
  var import_fs = require("fs");
7303
7474
  var import_path = require("path");
7304
7475
 
@@ -7398,8 +7569,8 @@ var SVG_EXEMPT_COLOR_VALUES = /* @__PURE__ */ new Set([
7398
7569
  ]);
7399
7570
  function jsxElementName(node) {
7400
7571
  const name = node.openingElement.name;
7401
- if (name.type === import_utils49.AST_NODE_TYPES.JSXIdentifier) return name.name;
7402
- if (name.type === import_utils49.AST_NODE_TYPES.JSXMemberExpression && name.property.type === import_utils49.AST_NODE_TYPES.JSXIdentifier) {
7572
+ if (name.type === import_utils50.AST_NODE_TYPES.JSXIdentifier) return name.name;
7573
+ if (name.type === import_utils50.AST_NODE_TYPES.JSXMemberExpression && name.property.type === import_utils50.AST_NODE_TYPES.JSXIdentifier) {
7403
7574
  return name.property.name;
7404
7575
  }
7405
7576
  return null;
@@ -7421,11 +7592,11 @@ var SVG_SHAPE_PRIMITIVES = /* @__PURE__ */ new Set([
7421
7592
  "tspan",
7422
7593
  "use"
7423
7594
  ]);
7424
- var EMAIL_OR_PDF_IMPORT_RE = /@react-(?:email|pdf)\//;
7595
+ var EMAIL_OR_PDF_MODULE_RE = /^@react-(?:email|pdf)\//;
7425
7596
  var isInsideSvg = (node) => {
7426
7597
  let current = node.parent;
7427
7598
  while (current !== void 0 && current !== null) {
7428
- if (current.type === import_utils49.AST_NODE_TYPES.JSXElement) {
7599
+ if (current.type === import_utils50.AST_NODE_TYPES.JSXElement) {
7429
7600
  const name = jsxElementName(current);
7430
7601
  if (name !== null && isSvgLikeElementName(name)) return true;
7431
7602
  }
@@ -7436,7 +7607,7 @@ var isInsideSvg = (node) => {
7436
7607
  var isInsideIconFactoryPath = (node) => {
7437
7608
  let current = node.parent;
7438
7609
  while (current !== void 0 && current !== null) {
7439
- if (current.type === import_utils49.AST_NODE_TYPES.Property && propName(current.key) === "path" && current.parent.type === import_utils49.AST_NODE_TYPES.ObjectExpression && current.parent.parent.type === import_utils49.AST_NODE_TYPES.CallExpression && current.parent.parent.callee.type === import_utils49.AST_NODE_TYPES.Identifier && current.parent.parent.callee.name === "createIcon") {
7610
+ if (current.type === import_utils50.AST_NODE_TYPES.Property && propName(current.key) === "path" && current.parent.type === import_utils50.AST_NODE_TYPES.ObjectExpression && current.parent.parent.type === import_utils50.AST_NODE_TYPES.CallExpression && current.parent.parent.callee.type === import_utils50.AST_NODE_TYPES.Identifier && current.parent.parent.callee.name === "createIcon") {
7440
7611
  return true;
7441
7612
  }
7442
7613
  current = current.parent;
@@ -7573,10 +7744,16 @@ var hasSemanticTokenSystem = (filename) => {
7573
7744
  return root !== null && workspaceHasMarker(root);
7574
7745
  };
7575
7746
  var propName = (key) => {
7576
- if (key.type === import_utils49.AST_NODE_TYPES.Identifier) return key.name;
7577
- if (key.type === import_utils49.AST_NODE_TYPES.Literal && typeof key.value === "string") return key.value;
7747
+ if (key.type === import_utils50.AST_NODE_TYPES.Identifier) return key.name;
7748
+ if (key.type === import_utils50.AST_NODE_TYPES.Literal && typeof key.value === "string") return key.value;
7578
7749
  return null;
7579
7750
  };
7751
+ var staticallyImportsEmailOrPdfRenderer = (program) => program.body.some((statement) => {
7752
+ if (statement.type !== import_utils50.AST_NODE_TYPES.ImportDeclaration && statement.type !== import_utils50.AST_NODE_TYPES.ExportNamedDeclaration && statement.type !== import_utils50.AST_NODE_TYPES.ExportAllDeclaration) {
7753
+ return false;
7754
+ }
7755
+ return statement.source !== null && typeof statement.source.value === "string" && EMAIL_OR_PDF_MODULE_RE.test(statement.source.value);
7756
+ });
7580
7757
  var prefer_semantic_colors_default = createRule({
7581
7758
  name: "prefer-semantic-colors",
7582
7759
  meta: {
@@ -7602,44 +7779,49 @@ var prefer_semantic_colors_default = createRule({
7602
7779
  defaultOptions: [{}],
7603
7780
  create(context, [options]) {
7604
7781
  if (STORIES_FILE_RE.test(context.filename)) return {};
7605
- if (EMAIL_OR_PDF_IMPORT_RE.test(context.sourceCode.getText())) return {};
7782
+ if (staticallyImportsEmailOrPdfRenderer(context.sourceCode.ast)) return {};
7606
7783
  if (options?.requireSemanticTokens === true && !hasSemanticTokenSystem(context.filename)) {
7607
7784
  return {};
7608
7785
  }
7786
+ let importsEmailOrPdfRenderer = false;
7787
+ const pendingReports = [];
7788
+ const report = (node, messageId, data) => {
7789
+ pendingReports.push({ node, messageId, data });
7790
+ };
7609
7791
  const reportClasses = (value, node) => {
7610
7792
  for (const token of classTokens(value)) {
7611
7793
  const base = tailwindBase(token);
7612
7794
  if (RAW_PALETTE_RE.test(base)) {
7613
- context.report({ node, messageId: "rawPalette", data: { class: token } });
7795
+ report(node, "rawPalette", { class: token });
7614
7796
  } else if (ARBITRARY_COLOR_RE.test(base) && !CSS_VAR_REFERENCE_RE.test(base)) {
7615
- context.report({ node, messageId: "arbitraryColor", data: { class: token } });
7797
+ report(node, "arbitraryColor", { class: token });
7616
7798
  }
7617
7799
  }
7618
7800
  };
7619
7801
  const checkClassNode = (node) => {
7620
7802
  if (node === null) return;
7621
7803
  switch (node.type) {
7622
- case import_utils49.AST_NODE_TYPES.Literal:
7804
+ case import_utils50.AST_NODE_TYPES.Literal:
7623
7805
  if (typeof node.value === "string") reportClasses(node.value, node);
7624
7806
  break;
7625
- case import_utils49.AST_NODE_TYPES.TemplateLiteral:
7807
+ case import_utils50.AST_NODE_TYPES.TemplateLiteral:
7626
7808
  for (const quasi of node.quasis) reportClasses(quasi.value.cooked ?? "", quasi);
7627
7809
  break;
7628
- case import_utils49.AST_NODE_TYPES.ArrayExpression:
7810
+ case import_utils50.AST_NODE_TYPES.ArrayExpression:
7629
7811
  for (const element of node.elements) {
7630
- if (element !== null && element.type !== import_utils49.AST_NODE_TYPES.SpreadElement) checkClassNode(element);
7812
+ if (element !== null && element.type !== import_utils50.AST_NODE_TYPES.SpreadElement) checkClassNode(element);
7631
7813
  }
7632
7814
  break;
7633
- case import_utils49.AST_NODE_TYPES.ObjectExpression:
7815
+ case import_utils50.AST_NODE_TYPES.ObjectExpression:
7634
7816
  for (const property of node.properties) {
7635
- if (property.type === import_utils49.AST_NODE_TYPES.Property) checkClassNode(property.value);
7817
+ if (property.type === import_utils50.AST_NODE_TYPES.Property) checkClassNode(property.value);
7636
7818
  }
7637
7819
  break;
7638
- case import_utils49.AST_NODE_TYPES.ConditionalExpression:
7820
+ case import_utils50.AST_NODE_TYPES.ConditionalExpression:
7639
7821
  checkClassNode(node.consequent);
7640
7822
  checkClassNode(node.alternate);
7641
7823
  break;
7642
- case import_utils49.AST_NODE_TYPES.LogicalExpression:
7824
+ case import_utils50.AST_NODE_TYPES.LogicalExpression:
7643
7825
  checkClassNode(node.right);
7644
7826
  break;
7645
7827
  default:
@@ -7647,29 +7829,32 @@ var prefer_semantic_colors_default = createRule({
7647
7829
  }
7648
7830
  };
7649
7831
  const checkColorValueNode = (node) => {
7650
- if (node.type === import_utils49.AST_NODE_TYPES.Literal && typeof node.value === "string" && RAW_COLOR_VALUE_RE.test(node.value) && !CSS_VAR_REFERENCE_RE.test(node.value)) {
7651
- context.report({ node, messageId: "inlineColor", data: { value: node.value } });
7832
+ if (node.type === import_utils50.AST_NODE_TYPES.Literal && typeof node.value === "string" && RAW_COLOR_VALUE_RE.test(node.value) && !CSS_VAR_REFERENCE_RE.test(node.value)) {
7833
+ report(node, "inlineColor", { value: node.value });
7652
7834
  }
7653
7835
  };
7654
7836
  return {
7655
7837
  "JSXAttribute[name.name='className']"(node) {
7656
7838
  if (node.value === null) return;
7657
- if (node.value.type === import_utils49.AST_NODE_TYPES.Literal) checkClassNode(node.value);
7658
- else if (node.value.type === import_utils49.AST_NODE_TYPES.JSXExpressionContainer) {
7659
- if (node.value.expression.type !== import_utils49.AST_NODE_TYPES.JSXEmptyExpression) {
7839
+ if (node.value.type === import_utils50.AST_NODE_TYPES.Literal) checkClassNode(node.value);
7840
+ else if (node.value.type === import_utils50.AST_NODE_TYPES.JSXExpressionContainer) {
7841
+ if (node.value.expression.type !== import_utils50.AST_NODE_TYPES.JSXEmptyExpression) {
7660
7842
  checkClassNode(node.value.expression);
7661
7843
  }
7662
7844
  }
7663
7845
  },
7664
7846
  CallExpression(node) {
7665
- if (node.callee.type === import_utils49.AST_NODE_TYPES.Identifier && CLASS_FNS.has(node.callee.name)) {
7847
+ if (node.callee.type === import_utils50.AST_NODE_TYPES.Identifier && node.callee.name === "require" && node.arguments[0]?.type === import_utils50.AST_NODE_TYPES.Literal && typeof node.arguments[0].value === "string" && EMAIL_OR_PDF_MODULE_RE.test(node.arguments[0].value)) {
7848
+ importsEmailOrPdfRenderer = true;
7849
+ }
7850
+ if (node.callee.type === import_utils50.AST_NODE_TYPES.Identifier && CLASS_FNS.has(node.callee.name)) {
7666
7851
  for (const arg of node.arguments) {
7667
- if (arg.type !== import_utils49.AST_NODE_TYPES.SpreadElement) checkClassNode(arg);
7852
+ if (arg.type !== import_utils50.AST_NODE_TYPES.SpreadElement) checkClassNode(arg);
7668
7853
  }
7669
7854
  }
7670
7855
  },
7671
7856
  VariableDeclarator(node) {
7672
- if (node.id.type === import_utils49.AST_NODE_TYPES.Identifier && CLASS_NAME_RE.test(node.id.name)) {
7857
+ if (node.id.type === import_utils50.AST_NODE_TYPES.Identifier && CLASS_NAME_RE.test(node.id.name)) {
7673
7858
  checkClassNode(node.init);
7674
7859
  }
7675
7860
  },
@@ -7677,13 +7862,11 @@ var prefer_semantic_colors_default = createRule({
7677
7862
  const name = propName(node.key);
7678
7863
  if (name !== null && CLASS_NAME_RE.test(name)) checkClassNode(node.value);
7679
7864
  },
7680
- // SVG presentation attributes: <path fill="#7c3aed" stroke="#7c3aed" />.
7681
- // Neutral drawing literals and anything inside an SVG defs container are
7682
- // structural, not UI tokens, so they never fire.
7865
+ // SVG artwork colors are exempt; component presentation colors still report.
7683
7866
  "JSXAttribute[name.name=/^(fill|stroke|color)$/]"(node) {
7684
- if (node.value?.type !== import_utils49.AST_NODE_TYPES.Literal) return;
7867
+ if (node.value?.type !== import_utils50.AST_NODE_TYPES.Literal) return;
7685
7868
  const owner = node.parent.name;
7686
- if (owner.type === import_utils49.AST_NODE_TYPES.JSXIdentifier && SVG_SHAPE_PRIMITIVES.has(owner.name)) {
7869
+ if (owner.type === import_utils50.AST_NODE_TYPES.JSXIdentifier && SVG_SHAPE_PRIMITIVES.has(owner.name)) {
7687
7870
  return;
7688
7871
  }
7689
7872
  if (typeof node.value.value === "string" && SVG_EXEMPT_COLOR_VALUES.has(node.value.value.toLowerCase())) {
@@ -7695,13 +7878,22 @@ var prefer_semantic_colors_default = createRule({
7695
7878
  "JSXAttribute[name.name='style'] ObjectExpression > Property"(node) {
7696
7879
  const name = propName(node.key);
7697
7880
  if (name !== null && STYLE_COLOR_PROPS.has(name)) checkColorValueNode(node.value);
7881
+ },
7882
+ ImportExpression(node) {
7883
+ if (node.source.type === import_utils50.AST_NODE_TYPES.Literal && typeof node.source.value === "string" && EMAIL_OR_PDF_MODULE_RE.test(node.source.value)) {
7884
+ importsEmailOrPdfRenderer = true;
7885
+ }
7886
+ },
7887
+ "Program:exit"() {
7888
+ if (importsEmailOrPdfRenderer) return;
7889
+ for (const descriptor of pendingReports) context.report(descriptor);
7698
7890
  }
7699
7891
  };
7700
7892
  }
7701
7893
  });
7702
7894
 
7703
7895
  // src/rules/prefer-server-actions.ts
7704
- var import_utils50 = require("@typescript-eslint/utils");
7896
+ var import_utils51 = require("@typescript-eslint/utils");
7705
7897
  var MUTATION_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "DELETE", "PATCH"]);
7706
7898
  var AXIOS_MUTATION_METHODS = /* @__PURE__ */ new Set(["post", "put", "delete", "patch"]);
7707
7899
  var SKIP_FILE_REGEX = /(?:\.test\.[jt]sx?$|\.spec\.[jt]sx?$|-(?:test|spec)\.[jt]sx?$|\/tests?\/|\/__tests__\/|\/__testfixtures__\/|\/scripts?\/|\/app\/api\/.*\/route\.[jt]sx?$|\/pages\/api\/)/;
@@ -7762,6 +7954,22 @@ function isMutationMethod(node, context) {
7762
7954
  }
7763
7955
  return false;
7764
7956
  }
7957
+ function isFunctionArgument(node, context) {
7958
+ const resolved = resolveNode(node, context);
7959
+ if (resolved?.type === "ArrowFunctionExpression" || resolved?.type === "FunctionExpression") {
7960
+ return true;
7961
+ }
7962
+ if (node.type !== "Identifier") return false;
7963
+ let scope = getScope(context, node);
7964
+ while (scope) {
7965
+ const variable = scope.set.get(node.name);
7966
+ if (variable?.defs.some((definition) => definition.type === "FunctionName")) {
7967
+ return true;
7968
+ }
7969
+ scope = scope.upper;
7970
+ }
7971
+ return false;
7972
+ }
7765
7973
  function getPropertyNode(objNode, propName2) {
7766
7974
  if (!objNode || objNode.type !== "ObjectExpression") return null;
7767
7975
  for (const prop of objNode.properties) {
@@ -7799,13 +8007,10 @@ var prefer_server_actions_default = createRule({
7799
8007
  if (SKIP_FILE_REGEX.test(filename)) {
7800
8008
  return {};
7801
8009
  }
7802
- let isNonReactFramework = false;
8010
+ const isNonReactFramework = context.sourceCode.ast.body.some(
8011
+ (node) => node.type === "ImportDeclaration" && typeof node.source.value === "string" && NON_REACT_FRAMEWORK_RE.test(node.source.value)
8012
+ );
7803
8013
  return {
7804
- ImportDeclaration(node) {
7805
- if (typeof node.source.value === "string" && NON_REACT_FRAMEWORK_RE.test(node.source.value)) {
7806
- isNonReactFramework = true;
7807
- }
7808
- },
7809
8014
  CallExpression(node) {
7810
8015
  if (isNonReactFramework) return;
7811
8016
  let isMutation = false;
@@ -7826,7 +8031,7 @@ var prefer_server_actions_default = createRule({
7826
8031
  if (AXIOS_MUTATION_METHODS.has(methodName)) {
7827
8032
  const urlArg = node.arguments[0];
7828
8033
  const hasHandlerArg = node.arguments.some(
7829
- (arg) => arg.type === "ArrowFunctionExpression" || arg.type === "FunctionExpression"
8034
+ (arg) => arg.type !== "SpreadElement" && isFunctionArgument(arg, context)
7830
8035
  );
7831
8036
  if (urlArg && urlArg.type !== "SpreadElement" && !hasHandlerArg && isApiUrl(urlArg, context)) {
7832
8037
  isMutation = true;
@@ -7853,8 +8058,33 @@ var prefer_server_actions_default = createRule({
7853
8058
  }
7854
8059
  });
7855
8060
 
8061
+ // src/rules/prefer-single-sentence-comment.ts
8062
+ var prefer_single_sentence_comment_default = createRule({
8063
+ name: "prefer-single-sentence-comment",
8064
+ meta: {
8065
+ type: "suggestion",
8066
+ docs: { description: "Prefer one sentence and self-documenting code over a two-sentence comment." },
8067
+ schema: [],
8068
+ messages: {
8069
+ preferOneSentence: "Two-sentence comment \u2014 prefer one sentence and self-documenting code."
8070
+ }
8071
+ },
8072
+ defaultOptions: [],
8073
+ create(context) {
8074
+ return {
8075
+ Program() {
8076
+ for (const group of proseGroups(context.filename, context.sourceCode)) {
8077
+ if (!group.hasTypedTags && sentenceUnits(group.text) === 2) {
8078
+ context.report({ node: group.comment, messageId: "preferOneSentence" });
8079
+ }
8080
+ }
8081
+ }
8082
+ };
8083
+ }
8084
+ });
8085
+
7856
8086
  // src/rules/prefer-string-literal-union.ts
7857
- var import_utils51 = require("@typescript-eslint/utils");
8087
+ var import_utils52 = require("@typescript-eslint/utils");
7858
8088
  var ts2 = __toESM(require("typescript"), 1);
7859
8089
  var CHOICE_TOKENS = /* @__PURE__ */ new Set([
7860
8090
  "status",
@@ -7897,19 +8127,19 @@ function isChoiceLikeName(name) {
7897
8127
  return CHOICE_TOKENS.has(lastWord(name));
7898
8128
  }
7899
8129
  function keyName(key) {
7900
- if (key.type === import_utils51.AST_NODE_TYPES.Identifier) {
8130
+ if (key.type === import_utils52.AST_NODE_TYPES.Identifier) {
7901
8131
  return key.name;
7902
8132
  }
7903
- if (key.type === import_utils51.AST_NODE_TYPES.Literal && typeof key.value === "string") {
8133
+ if (key.type === import_utils52.AST_NODE_TYPES.Literal && typeof key.value === "string") {
7904
8134
  return key.value;
7905
8135
  }
7906
8136
  return null;
7907
8137
  }
7908
8138
  function isStringLiteralMember(t) {
7909
- return t.type === import_utils51.AST_NODE_TYPES.TSLiteralType && t.literal.type === import_utils51.AST_NODE_TYPES.Literal && typeof t.literal.value === "string";
8139
+ return t.type === import_utils52.AST_NODE_TYPES.TSLiteralType && t.literal.type === import_utils52.AST_NODE_TYPES.Literal && typeof t.literal.value === "string";
7910
8140
  }
7911
8141
  function isStringLiteralUnion(node) {
7912
- if (node?.type !== import_utils51.AST_NODE_TYPES.TSUnionType) {
8142
+ if (node?.type !== import_utils52.AST_NODE_TYPES.TSUnionType) {
7913
8143
  return false;
7914
8144
  }
7915
8145
  return node.types.filter(isStringLiteralMember).length >= MIN_CLUSTER_SIZE;
@@ -7938,12 +8168,12 @@ function bindingSourceExpression(decl) {
7938
8168
  return ts2.isForOfStatement(node) ? node.expression : node.initializer;
7939
8169
  }
7940
8170
  function refKey(node) {
7941
- if (node.type === import_utils51.AST_NODE_TYPES.Identifier) {
8171
+ if (node.type === import_utils52.AST_NODE_TYPES.Identifier) {
7942
8172
  return node.name;
7943
8173
  }
7944
- if (node.type === import_utils51.AST_NODE_TYPES.MemberExpression && !node.computed) {
8174
+ if (node.type === import_utils52.AST_NODE_TYPES.MemberExpression && !node.computed) {
7945
8175
  const inner = refKey(node.object);
7946
- if (inner === null || node.property.type !== import_utils51.AST_NODE_TYPES.Identifier) {
8176
+ if (inner === null || node.property.type !== import_utils52.AST_NODE_TYPES.Identifier) {
7947
8177
  return null;
7948
8178
  }
7949
8179
  return `${inner}.${node.property.name}`;
@@ -7951,7 +8181,7 @@ function refKey(node) {
7951
8181
  return null;
7952
8182
  }
7953
8183
  function strLiteral(node) {
7954
- if (node.type === import_utils51.AST_NODE_TYPES.Literal && typeof node.value === "string") {
8184
+ if (node.type === import_utils52.AST_NODE_TYPES.Literal && typeof node.value === "string") {
7955
8185
  return node.value;
7956
8186
  }
7957
8187
  return null;
@@ -7992,7 +8222,7 @@ var prefer_string_literal_union_default = createRule({
7992
8222
  );
7993
8223
  let services;
7994
8224
  try {
7995
- services = import_utils51.ESLintUtils.getParserServices(context);
8225
+ services = import_utils52.ESLintUtils.getParserServices(context);
7996
8226
  } catch {
7997
8227
  services = null;
7998
8228
  }
@@ -8104,7 +8334,7 @@ var prefer_string_literal_union_default = createRule({
8104
8334
  containersWithUnion.add(container);
8105
8335
  return;
8106
8336
  }
8107
- if (typeNode?.type !== import_utils51.AST_NODE_TYPES.TSStringKeyword) {
8337
+ if (typeNode?.type !== import_utils52.AST_NODE_TYPES.TSStringKeyword) {
8108
8338
  return;
8109
8339
  }
8110
8340
  const name = keyName(key);
@@ -8192,10 +8422,10 @@ var prefer_string_literal_union_default = createRule({
8192
8422
  }
8193
8423
  };
8194
8424
  function refKeyText(node) {
8195
- if (node.type === import_utils51.AST_NODE_TYPES.BinaryExpression) {
8425
+ if (node.type === import_utils52.AST_NODE_TYPES.BinaryExpression) {
8196
8426
  return refKey(node.left) ?? refKey(node.right) ?? "value";
8197
8427
  }
8198
- if (node.type === import_utils51.AST_NODE_TYPES.SwitchStatement) {
8428
+ if (node.type === import_utils52.AST_NODE_TYPES.SwitchStatement) {
8199
8429
  return refKey(node.discriminant) ?? "value";
8200
8430
  }
8201
8431
  return "value";
@@ -8204,7 +8434,7 @@ var prefer_string_literal_union_default = createRule({
8204
8434
  });
8205
8435
 
8206
8436
  // src/rules/prefer-whole-object-assertion.ts
8207
- var import_utils52 = require("@typescript-eslint/utils");
8437
+ var import_utils53 = require("@typescript-eslint/utils");
8208
8438
  var MERGEABLE_MATCHERS = /* @__PURE__ */ new Set(["toBe", "toEqual", "toStrictEqual"]);
8209
8439
  var ARRAY_MATCHERS = /* @__PURE__ */ new Set(["toEqual", "toStrictEqual"]);
8210
8440
  var COLLECTION_PROPERTIES = /* @__PURE__ */ new Set(["length", "size"]);
@@ -8213,11 +8443,11 @@ var NUMERIC_SIGNS2 = /* @__PURE__ */ new Set(["-", "+"]);
8213
8443
  var MIN_RUN_LENGTH = 2;
8214
8444
  function literalText(node, getText) {
8215
8445
  switch (node.type) {
8216
- case import_utils52.AST_NODE_TYPES.Literal:
8446
+ case import_utils53.AST_NODE_TYPES.Literal:
8217
8447
  return "regex" in node ? null : getText(node);
8218
- case import_utils52.AST_NODE_TYPES.TemplateLiteral:
8448
+ case import_utils53.AST_NODE_TYPES.TemplateLiteral:
8219
8449
  return node.expressions.length === 0 ? getText(node) : null;
8220
- case import_utils52.AST_NODE_TYPES.UnaryExpression:
8450
+ case import_utils53.AST_NODE_TYPES.UnaryExpression:
8221
8451
  return NUMERIC_SIGNS2.has(node.operator) && literalText(node.argument, getText) !== null ? getText(node) : null;
8222
8452
  default:
8223
8453
  return null;
@@ -8225,15 +8455,15 @@ function literalText(node, getText) {
8225
8455
  }
8226
8456
  function isPureReceiver(node) {
8227
8457
  switch (node.type) {
8228
- case import_utils52.AST_NODE_TYPES.Identifier:
8229
- case import_utils52.AST_NODE_TYPES.ThisExpression:
8458
+ case import_utils53.AST_NODE_TYPES.Identifier:
8459
+ case import_utils53.AST_NODE_TYPES.ThisExpression:
8230
8460
  return true;
8231
- case import_utils52.AST_NODE_TYPES.MemberExpression:
8461
+ case import_utils53.AST_NODE_TYPES.MemberExpression:
8232
8462
  if (node.optional) {
8233
8463
  return false;
8234
8464
  }
8235
8465
  if (node.computed) {
8236
- return node.property.type === import_utils52.AST_NODE_TYPES.Literal && isPureReceiver(node.object);
8466
+ return node.property.type === import_utils53.AST_NODE_TYPES.Literal && isPureReceiver(node.object);
8237
8467
  }
8238
8468
  return isPureReceiver(node.object);
8239
8469
  default:
@@ -8241,7 +8471,7 @@ function isPureReceiver(node) {
8241
8471
  }
8242
8472
  }
8243
8473
  function literalIndex(node) {
8244
- if (node.type !== import_utils52.AST_NODE_TYPES.Literal || typeof node.value !== "number") {
8474
+ if (node.type !== import_utils53.AST_NODE_TYPES.Literal || typeof node.value !== "number") {
8245
8475
  return null;
8246
8476
  }
8247
8477
  return Number.isInteger(node.value) && node.value >= 0 ? node.value : null;
@@ -8267,24 +8497,24 @@ var prefer_whole_object_assertion_default = createRule({
8267
8497
  }
8268
8498
  const { sourceCode } = context;
8269
8499
  function parseAssertion(statement) {
8270
- if (statement.type !== import_utils52.AST_NODE_TYPES.ExpressionStatement) {
8500
+ if (statement.type !== import_utils53.AST_NODE_TYPES.ExpressionStatement) {
8271
8501
  return null;
8272
8502
  }
8273
8503
  const call = statement.expression;
8274
- if (call.type !== import_utils52.AST_NODE_TYPES.CallExpression) {
8504
+ if (call.type !== import_utils53.AST_NODE_TYPES.CallExpression) {
8275
8505
  return null;
8276
8506
  }
8277
8507
  const callee = call.callee;
8278
- if (callee.type !== import_utils52.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils52.AST_NODE_TYPES.Identifier) {
8508
+ if (callee.type !== import_utils53.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils53.AST_NODE_TYPES.Identifier) {
8279
8509
  return null;
8280
8510
  }
8281
8511
  const matcher = callee.property.name;
8282
8512
  const expectCall = callee.object;
8283
- if (expectCall.type !== import_utils52.AST_NODE_TYPES.CallExpression || expectCall.callee.type !== import_utils52.AST_NODE_TYPES.Identifier || expectCall.callee.name !== "expect" || expectCall.arguments.length !== 1) {
8513
+ if (expectCall.type !== import_utils53.AST_NODE_TYPES.CallExpression || expectCall.callee.type !== import_utils53.AST_NODE_TYPES.Identifier || expectCall.callee.name !== "expect" || expectCall.arguments.length !== 1) {
8284
8514
  return null;
8285
8515
  }
8286
8516
  const actual = expectCall.arguments[0];
8287
- if (actual === void 0 || actual.type !== import_utils52.AST_NODE_TYPES.MemberExpression || actual.optional) {
8517
+ if (actual === void 0 || actual.type !== import_utils53.AST_NODE_TYPES.MemberExpression || actual.optional) {
8288
8518
  return null;
8289
8519
  }
8290
8520
  if (!isPureReceiver(actual.object)) {
@@ -8298,7 +8528,7 @@ var prefer_whole_object_assertion_default = createRule({
8298
8528
  }
8299
8529
  key = { kind: "index", index };
8300
8530
  } else {
8301
- if (actual.property.type !== import_utils52.AST_NODE_TYPES.Identifier || COLLECTION_PROPERTIES.has(actual.property.name) || LITERAL_KEY_HAZARDS.has(actual.property.name)) {
8531
+ if (actual.property.type !== import_utils53.AST_NODE_TYPES.Identifier || COLLECTION_PROPERTIES.has(actual.property.name) || LITERAL_KEY_HAZARDS.has(actual.property.name)) {
8302
8532
  return null;
8303
8533
  }
8304
8534
  key = { kind: "property", name: actual.property.name };
@@ -8310,7 +8540,7 @@ var prefer_whole_object_assertion_default = createRule({
8310
8540
  return null;
8311
8541
  }
8312
8542
  const expected = call.arguments[0];
8313
- if (call.arguments.length !== 1 || expected === void 0 || expected.type === import_utils52.AST_NODE_TYPES.SpreadElement) {
8543
+ if (call.arguments.length !== 1 || expected === void 0 || expected.type === import_utils53.AST_NODE_TYPES.SpreadElement) {
8314
8544
  return null;
8315
8545
  }
8316
8546
  const literal = literalText(expected, (node) => sourceCode.getText(node));
@@ -8386,7 +8616,7 @@ var prefer_whole_object_assertion_default = createRule({
8386
8616
  }
8387
8617
  });
8388
8618
  }
8389
- function checkBody(body) {
8619
+ function checkBody(body2) {
8390
8620
  let run = [];
8391
8621
  const flush = () => {
8392
8622
  const first = run[0];
@@ -8399,7 +8629,7 @@ var prefer_whole_object_assertion_default = createRule({
8399
8629
  }
8400
8630
  run = [];
8401
8631
  };
8402
- for (const statement of body) {
8632
+ for (const statement of body2) {
8403
8633
  const assertion = parseAssertion(statement);
8404
8634
  const previous = run.at(-1);
8405
8635
  if (assertion !== null && previous !== void 0 && previous.key.kind === assertion.key.kind && sourceCode.getText(previous.receiver) === sourceCode.getText(assertion.receiver)) {
@@ -8425,7 +8655,7 @@ var prefer_whole_object_assertion_default = createRule({
8425
8655
  });
8426
8656
 
8427
8657
  // src/rules/prefer-zod-enum.ts
8428
- var import_utils53 = require("@typescript-eslint/utils");
8658
+ var import_utils54 = require("@typescript-eslint/utils");
8429
8659
  var prefer_zod_enum_default = createRule({
8430
8660
  name: "prefer-zod-enum",
8431
8661
  meta: {
@@ -8445,33 +8675,39 @@ var prefer_zod_enum_default = createRule({
8445
8675
  const zodNamespaces = /* @__PURE__ */ new Set();
8446
8676
  function enumValues(node) {
8447
8677
  const callee = node.callee;
8448
- if (callee.type !== import_utils53.AST_NODE_TYPES.MemberExpression || callee.computed || callee.object.type !== import_utils53.AST_NODE_TYPES.Identifier || !zodNamespaces.has(callee.object.name) || callee.property.type !== import_utils53.AST_NODE_TYPES.Identifier || callee.property.name !== "union" || node.arguments.length !== 1) {
8678
+ if (callee.type !== import_utils54.AST_NODE_TYPES.MemberExpression || callee.computed || callee.object.type !== import_utils54.AST_NODE_TYPES.Identifier || !zodNamespaces.has(callee.object.name) || callee.property.type !== import_utils54.AST_NODE_TYPES.Identifier || callee.property.name !== "union" || node.arguments.length !== 1) {
8449
8679
  return null;
8450
8680
  }
8451
8681
  const argument = node.arguments[0];
8452
- if (argument === void 0 || argument.type !== import_utils53.AST_NODE_TYPES.ArrayExpression || argument.elements.length === 0) {
8682
+ if (argument === void 0 || argument.type !== import_utils54.AST_NODE_TYPES.ArrayExpression || argument.elements.length === 0) {
8453
8683
  return null;
8454
8684
  }
8455
8685
  const values = [];
8686
+ let canFix = true;
8456
8687
  for (const element of argument.elements) {
8457
- if (element === null || element.type !== import_utils53.AST_NODE_TYPES.CallExpression || element.arguments.length !== 1 || element.callee.type !== import_utils53.AST_NODE_TYPES.MemberExpression || element.callee.computed || element.callee.object.type !== import_utils53.AST_NODE_TYPES.Identifier || !zodNamespaces.has(element.callee.object.name) || element.callee.property.type !== import_utils53.AST_NODE_TYPES.Identifier || element.callee.property.name !== "literal") {
8688
+ if (element?.type === import_utils54.AST_NODE_TYPES.SpreadElement) {
8689
+ canFix = false;
8690
+ continue;
8691
+ }
8692
+ if (element === null || element.type !== import_utils54.AST_NODE_TYPES.CallExpression || element.callee.type !== import_utils54.AST_NODE_TYPES.MemberExpression || element.callee.computed || element.callee.object.type !== import_utils54.AST_NODE_TYPES.Identifier || !zodNamespaces.has(element.callee.object.name) || element.callee.property.type !== import_utils54.AST_NODE_TYPES.Identifier || element.callee.property.name !== "literal") {
8458
8693
  return null;
8459
8694
  }
8460
8695
  const value = element.arguments[0];
8461
- if (value === void 0 || value.type !== import_utils53.AST_NODE_TYPES.Literal || typeof value.value !== "string") {
8462
- return null;
8696
+ if (element.arguments.length !== 1 || value === void 0 || value.type !== import_utils54.AST_NODE_TYPES.Literal || typeof value.value !== "string") {
8697
+ canFix = false;
8698
+ continue;
8463
8699
  }
8464
8700
  values.push(value);
8465
8701
  }
8466
- return values;
8702
+ return canFix ? values : void 0;
8467
8703
  }
8468
8704
  function buildFix(node, values) {
8469
8705
  const argument = node.arguments[0];
8470
- if (argument === void 0 || argument.type !== import_utils53.AST_NODE_TYPES.ArrayExpression || sourceCode.getCommentsInside(argument).length > 0) {
8706
+ if (argument === void 0 || argument.type !== import_utils54.AST_NODE_TYPES.ArrayExpression || sourceCode.getCommentsInside(argument).length > 0) {
8471
8707
  return void 0;
8472
8708
  }
8473
8709
  const callee = node.callee;
8474
- if (callee.type !== import_utils53.AST_NODE_TYPES.MemberExpression || callee.property.type !== import_utils53.AST_NODE_TYPES.Identifier) {
8710
+ if (callee.type !== import_utils54.AST_NODE_TYPES.MemberExpression || callee.property.type !== import_utils54.AST_NODE_TYPES.Identifier) {
8475
8711
  return void 0;
8476
8712
  }
8477
8713
  return (fixer) => [
@@ -8488,7 +8724,7 @@ var prefer_zod_enum_default = createRule({
8488
8724
  return;
8489
8725
  }
8490
8726
  for (const specifier of node.specifiers) {
8491
- if (specifier.type === import_utils53.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils53.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils53.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils53.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
8727
+ if (specifier.type === import_utils54.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils54.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils54.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils54.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
8492
8728
  zodNamespaces.add(specifier.local.name);
8493
8729
  }
8494
8730
  }
@@ -8498,7 +8734,7 @@ var prefer_zod_enum_default = createRule({
8498
8734
  if (values === null) {
8499
8735
  return;
8500
8736
  }
8501
- const fix = buildFix(node, values);
8737
+ const fix = values === void 0 ? void 0 : buildFix(node, values);
8502
8738
  context.report({
8503
8739
  node,
8504
8740
  messageId: "preferEnum",
@@ -8510,7 +8746,7 @@ var prefer_zod_enum_default = createRule({
8510
8746
  });
8511
8747
 
8512
8748
  // src/rules/prefer-zod-infer.ts
8513
- var import_utils54 = require("@typescript-eslint/utils");
8749
+ var import_utils55 = require("@typescript-eslint/utils");
8514
8750
  var SHAPE_PRESERVING_METHODS = /* @__PURE__ */ new Set([
8515
8751
  "describe",
8516
8752
  "refine",
@@ -8547,44 +8783,44 @@ var ZOD_TYPE_CONSTRAINTS = /* @__PURE__ */ new Set([
8547
8783
  "Schema"
8548
8784
  ]);
8549
8785
  var LEAF_NODE_TYPES = {
8550
- string: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8551
- email: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8552
- url: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8553
- uuid: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8554
- ulid: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8555
- cuid: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8556
- cuid2: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8557
- nanoid: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8558
- iso: [import_utils54.AST_NODE_TYPES.TSStringKeyword],
8559
- number: [import_utils54.AST_NODE_TYPES.TSNumberKeyword],
8560
- int: [import_utils54.AST_NODE_TYPES.TSNumberKeyword],
8561
- float32: [import_utils54.AST_NODE_TYPES.TSNumberKeyword],
8562
- float64: [import_utils54.AST_NODE_TYPES.TSNumberKeyword],
8563
- boolean: [import_utils54.AST_NODE_TYPES.TSBooleanKeyword],
8564
- bigint: [import_utils54.AST_NODE_TYPES.TSBigIntKeyword],
8565
- symbol: [import_utils54.AST_NODE_TYPES.TSSymbolKeyword],
8566
- any: [import_utils54.AST_NODE_TYPES.TSAnyKeyword],
8567
- unknown: [import_utils54.AST_NODE_TYPES.TSUnknownKeyword],
8568
- never: [import_utils54.AST_NODE_TYPES.TSNeverKeyword],
8569
- void: [import_utils54.AST_NODE_TYPES.TSVoidKeyword],
8570
- null: [import_utils54.AST_NODE_TYPES.TSNullKeyword],
8571
- undefined: [import_utils54.AST_NODE_TYPES.TSUndefinedKeyword],
8572
- literal: [import_utils54.AST_NODE_TYPES.TSLiteralType],
8573
- date: [import_utils54.AST_NODE_TYPES.TSTypeReference],
8574
- array: [import_utils54.AST_NODE_TYPES.TSArrayType, import_utils54.AST_NODE_TYPES.TSTypeReference],
8575
- tuple: [import_utils54.AST_NODE_TYPES.TSTupleType],
8576
- object: [import_utils54.AST_NODE_TYPES.TSTypeLiteral, import_utils54.AST_NODE_TYPES.TSTypeReference],
8577
- strictObject: [import_utils54.AST_NODE_TYPES.TSTypeLiteral, import_utils54.AST_NODE_TYPES.TSTypeReference],
8578
- looseObject: [import_utils54.AST_NODE_TYPES.TSTypeLiteral, import_utils54.AST_NODE_TYPES.TSTypeReference],
8579
- record: [import_utils54.AST_NODE_TYPES.TSTypeReference, import_utils54.AST_NODE_TYPES.TSTypeLiteral],
8580
- map: [import_utils54.AST_NODE_TYPES.TSTypeReference],
8581
- set: [import_utils54.AST_NODE_TYPES.TSTypeReference],
8582
- promise: [import_utils54.AST_NODE_TYPES.TSTypeReference],
8583
- enum: [import_utils54.AST_NODE_TYPES.TSUnionType, import_utils54.AST_NODE_TYPES.TSTypeReference, import_utils54.AST_NODE_TYPES.TSLiteralType],
8584
- nativeEnum: [import_utils54.AST_NODE_TYPES.TSUnionType, import_utils54.AST_NODE_TYPES.TSTypeReference, import_utils54.AST_NODE_TYPES.TSLiteralType],
8585
- union: [import_utils54.AST_NODE_TYPES.TSUnionType, import_utils54.AST_NODE_TYPES.TSTypeReference],
8586
- discriminatedUnion: [import_utils54.AST_NODE_TYPES.TSUnionType, import_utils54.AST_NODE_TYPES.TSTypeReference],
8587
- intersection: [import_utils54.AST_NODE_TYPES.TSIntersectionType, import_utils54.AST_NODE_TYPES.TSTypeReference]
8786
+ string: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8787
+ email: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8788
+ url: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8789
+ uuid: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8790
+ ulid: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8791
+ cuid: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8792
+ cuid2: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8793
+ nanoid: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8794
+ iso: [import_utils55.AST_NODE_TYPES.TSStringKeyword],
8795
+ number: [import_utils55.AST_NODE_TYPES.TSNumberKeyword],
8796
+ int: [import_utils55.AST_NODE_TYPES.TSNumberKeyword],
8797
+ float32: [import_utils55.AST_NODE_TYPES.TSNumberKeyword],
8798
+ float64: [import_utils55.AST_NODE_TYPES.TSNumberKeyword],
8799
+ boolean: [import_utils55.AST_NODE_TYPES.TSBooleanKeyword],
8800
+ bigint: [import_utils55.AST_NODE_TYPES.TSBigIntKeyword],
8801
+ symbol: [import_utils55.AST_NODE_TYPES.TSSymbolKeyword],
8802
+ any: [import_utils55.AST_NODE_TYPES.TSAnyKeyword],
8803
+ unknown: [import_utils55.AST_NODE_TYPES.TSUnknownKeyword],
8804
+ never: [import_utils55.AST_NODE_TYPES.TSNeverKeyword],
8805
+ void: [import_utils55.AST_NODE_TYPES.TSVoidKeyword],
8806
+ null: [import_utils55.AST_NODE_TYPES.TSNullKeyword],
8807
+ undefined: [import_utils55.AST_NODE_TYPES.TSUndefinedKeyword],
8808
+ literal: [import_utils55.AST_NODE_TYPES.TSLiteralType],
8809
+ date: [import_utils55.AST_NODE_TYPES.TSTypeReference],
8810
+ array: [import_utils55.AST_NODE_TYPES.TSArrayType, import_utils55.AST_NODE_TYPES.TSTypeReference],
8811
+ tuple: [import_utils55.AST_NODE_TYPES.TSTupleType],
8812
+ object: [import_utils55.AST_NODE_TYPES.TSTypeLiteral, import_utils55.AST_NODE_TYPES.TSTypeReference],
8813
+ strictObject: [import_utils55.AST_NODE_TYPES.TSTypeLiteral, import_utils55.AST_NODE_TYPES.TSTypeReference],
8814
+ looseObject: [import_utils55.AST_NODE_TYPES.TSTypeLiteral, import_utils55.AST_NODE_TYPES.TSTypeReference],
8815
+ record: [import_utils55.AST_NODE_TYPES.TSTypeReference, import_utils55.AST_NODE_TYPES.TSTypeLiteral],
8816
+ map: [import_utils55.AST_NODE_TYPES.TSTypeReference],
8817
+ set: [import_utils55.AST_NODE_TYPES.TSTypeReference],
8818
+ promise: [import_utils55.AST_NODE_TYPES.TSTypeReference],
8819
+ enum: [import_utils55.AST_NODE_TYPES.TSUnionType, import_utils55.AST_NODE_TYPES.TSTypeReference, import_utils55.AST_NODE_TYPES.TSLiteralType],
8820
+ nativeEnum: [import_utils55.AST_NODE_TYPES.TSUnionType, import_utils55.AST_NODE_TYPES.TSTypeReference, import_utils55.AST_NODE_TYPES.TSLiteralType],
8821
+ union: [import_utils55.AST_NODE_TYPES.TSUnionType, import_utils55.AST_NODE_TYPES.TSTypeReference],
8822
+ discriminatedUnion: [import_utils55.AST_NODE_TYPES.TSUnionType, import_utils55.AST_NODE_TYPES.TSTypeReference],
8823
+ intersection: [import_utils55.AST_NODE_TYPES.TSIntersectionType, import_utils55.AST_NODE_TYPES.TSTypeReference]
8588
8824
  };
8589
8825
  function normalizeSchemaName(name) {
8590
8826
  return name.replace(/Schema$/i, "").replace(/^Z(?=[A-Z])/, "").toLowerCase();
@@ -8593,20 +8829,20 @@ function normalizeTypeName(name) {
8593
8829
  return name.replace(/Type$/, "").toLowerCase();
8594
8830
  }
8595
8831
  function unwrapNullish(annotation) {
8596
- if (annotation.type !== import_utils54.AST_NODE_TYPES.TSUnionType) {
8832
+ if (annotation.type !== import_utils55.AST_NODE_TYPES.TSUnionType) {
8597
8833
  return {
8598
8834
  core: annotation,
8599
- nullable: annotation.type === import_utils54.AST_NODE_TYPES.TSNullKeyword
8835
+ nullable: annotation.type === import_utils55.AST_NODE_TYPES.TSNullKeyword
8600
8836
  };
8601
8837
  }
8602
8838
  const rest = [];
8603
8839
  let nullable = false;
8604
8840
  for (const member of annotation.types) {
8605
- if (member.type === import_utils54.AST_NODE_TYPES.TSNullKeyword) {
8841
+ if (member.type === import_utils55.AST_NODE_TYPES.TSNullKeyword) {
8606
8842
  nullable = true;
8607
8843
  continue;
8608
8844
  }
8609
- if (member.type === import_utils54.AST_NODE_TYPES.TSUndefinedKeyword) {
8845
+ if (member.type === import_utils55.AST_NODE_TYPES.TSUndefinedKeyword) {
8610
8846
  continue;
8611
8847
  }
8612
8848
  rest.push(member);
@@ -8671,14 +8907,14 @@ var prefer_zod_infer_default = createRule({
8671
8907
  function zodCallChain(node) {
8672
8908
  const chain = [];
8673
8909
  let current = node;
8674
- while (current.type === import_utils54.AST_NODE_TYPES.CallExpression) {
8910
+ while (current.type === import_utils55.AST_NODE_TYPES.CallExpression) {
8675
8911
  const callee = current.callee;
8676
- if (callee.type !== import_utils54.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils54.AST_NODE_TYPES.Identifier) {
8912
+ if (callee.type !== import_utils55.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils55.AST_NODE_TYPES.Identifier) {
8677
8913
  return null;
8678
8914
  }
8679
8915
  chain.push(current);
8680
8916
  const receiver = callee.object;
8681
- if (receiver.type === import_utils54.AST_NODE_TYPES.Identifier) {
8917
+ if (receiver.type === import_utils55.AST_NODE_TYPES.Identifier) {
8682
8918
  return zodNamespaces.has(receiver.name) ? chain.reverse() : null;
8683
8919
  }
8684
8920
  current = receiver;
@@ -8687,19 +8923,19 @@ var prefer_zod_infer_default = createRule({
8687
8923
  }
8688
8924
  function methodName(call) {
8689
8925
  const callee = call.callee;
8690
- return callee.type === import_utils54.AST_NODE_TYPES.MemberExpression && callee.property.type === import_utils54.AST_NODE_TYPES.Identifier ? callee.property.name : "";
8926
+ return callee.type === import_utils55.AST_NODE_TYPES.MemberExpression && callee.property.type === import_utils55.AST_NODE_TYPES.Identifier ? callee.property.name : "";
8691
8927
  }
8692
8928
  function schemaField(node) {
8693
8929
  const modifiers = [];
8694
8930
  let current = node;
8695
8931
  let leaf = null;
8696
- while (current.type === import_utils54.AST_NODE_TYPES.CallExpression) {
8932
+ while (current.type === import_utils55.AST_NODE_TYPES.CallExpression) {
8697
8933
  const callee = current.callee;
8698
- if (callee.type !== import_utils54.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils54.AST_NODE_TYPES.Identifier) {
8934
+ if (callee.type !== import_utils55.AST_NODE_TYPES.MemberExpression || callee.computed || callee.property.type !== import_utils55.AST_NODE_TYPES.Identifier) {
8699
8935
  break;
8700
8936
  }
8701
8937
  const receiver = callee.object;
8702
- if (receiver.type === import_utils54.AST_NODE_TYPES.Identifier && zodNamespaces.has(receiver.name)) {
8938
+ if (receiver.type === import_utils55.AST_NODE_TYPES.Identifier && zodNamespaces.has(receiver.name)) {
8703
8939
  leaf = callee.property.name;
8704
8940
  break;
8705
8941
  }
@@ -8730,16 +8966,16 @@ var prefer_zod_infer_default = createRule({
8730
8966
  return null;
8731
8967
  }
8732
8968
  const shape = base.arguments[0];
8733
- if (shape === void 0 || shape.type !== import_utils54.AST_NODE_TYPES.ObjectExpression) {
8969
+ if (shape === void 0 || shape.type !== import_utils55.AST_NODE_TYPES.ObjectExpression) {
8734
8970
  return null;
8735
8971
  }
8736
8972
  const fields = /* @__PURE__ */ new Map();
8737
8973
  for (const property of shape.properties) {
8738
- if (property.type !== import_utils54.AST_NODE_TYPES.Property || property.computed) {
8974
+ if (property.type !== import_utils55.AST_NODE_TYPES.Property || property.computed) {
8739
8975
  return null;
8740
8976
  }
8741
8977
  const { key } = property;
8742
- const name = key.type === import_utils54.AST_NODE_TYPES.Identifier ? key.name : key.type === import_utils54.AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
8978
+ const name = key.type === import_utils55.AST_NODE_TYPES.Identifier ? key.name : key.type === import_utils55.AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
8743
8979
  if (name === null) {
8744
8980
  return null;
8745
8981
  }
@@ -8750,11 +8986,11 @@ var prefer_zod_infer_default = createRule({
8750
8986
  function typeMembers(members) {
8751
8987
  const result = /* @__PURE__ */ new Map();
8752
8988
  for (const member of members) {
8753
- if (member.type !== import_utils54.AST_NODE_TYPES.TSPropertySignature || member.computed) {
8989
+ if (member.type !== import_utils55.AST_NODE_TYPES.TSPropertySignature || member.computed) {
8754
8990
  return null;
8755
8991
  }
8756
8992
  const { key } = member;
8757
- const name = key.type === import_utils54.AST_NODE_TYPES.Identifier ? key.name : key.type === import_utils54.AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
8993
+ const name = key.type === import_utils55.AST_NODE_TYPES.Identifier ? key.name : key.type === import_utils55.AST_NODE_TYPES.Literal && typeof key.value === "string" ? key.value : null;
8758
8994
  if (name === null) {
8759
8995
  return null;
8760
8996
  }
@@ -8768,8 +9004,8 @@ var prefer_zod_infer_default = createRule({
8768
9004
  return result.size === 0 ? null : result;
8769
9005
  }
8770
9006
  function collectConstrainedNames(node) {
8771
- if (node.type === import_utils54.AST_NODE_TYPES.TSTypeReference) {
8772
- if (node.typeName.type === import_utils54.AST_NODE_TYPES.Identifier) {
9007
+ if (node.type === import_utils55.AST_NODE_TYPES.TSTypeReference) {
9008
+ if (node.typeName.type === import_utils55.AST_NODE_TYPES.Identifier) {
8773
9009
  constrainedTypeNames.add(node.typeName.name);
8774
9010
  }
8775
9011
  for (const argument of node.typeArguments?.params ?? []) {
@@ -8777,11 +9013,11 @@ var prefer_zod_infer_default = createRule({
8777
9013
  }
8778
9014
  return;
8779
9015
  }
8780
- if (node.type === import_utils54.AST_NODE_TYPES.TSArrayType) {
9016
+ if (node.type === import_utils55.AST_NODE_TYPES.TSArrayType) {
8781
9017
  collectConstrainedNames(node.elementType);
8782
9018
  return;
8783
9019
  }
8784
- if (node.type === import_utils54.AST_NODE_TYPES.TSUnionType || node.type === import_utils54.AST_NODE_TYPES.TSIntersectionType) {
9020
+ if (node.type === import_utils55.AST_NODE_TYPES.TSUnionType || node.type === import_utils55.AST_NODE_TYPES.TSIntersectionType) {
8785
9021
  for (const member of node.types) {
8786
9022
  collectConstrainedNames(member);
8787
9023
  }
@@ -8825,13 +9061,13 @@ var prefer_zod_infer_default = createRule({
8825
9061
  return;
8826
9062
  }
8827
9063
  for (const specifier of node.specifiers) {
8828
- if (specifier.type === import_utils54.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils54.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils54.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils54.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
9064
+ if (specifier.type === import_utils55.AST_NODE_TYPES.ImportNamespaceSpecifier || specifier.type === import_utils55.AST_NODE_TYPES.ImportDefaultSpecifier || specifier.type === import_utils55.AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === import_utils55.AST_NODE_TYPES.Identifier && specifier.imported.name === "z") {
8829
9065
  zodNamespaces.add(specifier.local.name);
8830
9066
  }
8831
9067
  }
8832
9068
  },
8833
9069
  VariableDeclarator(node) {
8834
- if (node.id.type !== import_utils54.AST_NODE_TYPES.Identifier || node.init == null) {
9070
+ if (node.id.type !== import_utils55.AST_NODE_TYPES.Identifier || node.init == null) {
8835
9071
  return;
8836
9072
  }
8837
9073
  const fields = schemaFields(node.init);
@@ -8839,16 +9075,16 @@ var prefer_zod_infer_default = createRule({
8839
9075
  schemas.push({ name: node.id.name, fields });
8840
9076
  }
8841
9077
  },
8842
- /** Guard (f): `XSchema.transform(...)` anywhere in the module. */
9078
+ /** Records `XSchema.transform(...)` and equivalent module-level reshaping. */
8843
9079
  "MemberExpression[computed=false]"(node) {
8844
- if (node.object.type === import_utils54.AST_NODE_TYPES.Identifier && node.property.type === import_utils54.AST_NODE_TYPES.Identifier && MODULE_LEVEL_RESHAPERS.has(node.property.name)) {
9080
+ if (node.object.type === import_utils55.AST_NODE_TYPES.Identifier && node.property.type === import_utils55.AST_NODE_TYPES.Identifier && MODULE_LEVEL_RESHAPERS.has(node.property.name)) {
8845
9081
  reshapedSchemaNames.add(node.object.name);
8846
9082
  }
8847
9083
  },
8848
- /** Guard (c): `z.ZodType<T>` and every other type argument it carries. */
9084
+ /** Records every type argument carried by a Zod constraint. */
8849
9085
  TSTypeReference(node) {
8850
9086
  const { typeName } = node;
8851
- const referenced = typeName.type === import_utils54.AST_NODE_TYPES.Identifier ? typeName.name : typeName.type === import_utils54.AST_NODE_TYPES.TSQualifiedName && typeName.right.type === import_utils54.AST_NODE_TYPES.Identifier ? typeName.right.name : null;
9087
+ const referenced = typeName.type === import_utils55.AST_NODE_TYPES.Identifier ? typeName.name : typeName.type === import_utils55.AST_NODE_TYPES.TSQualifiedName && typeName.right.type === import_utils55.AST_NODE_TYPES.Identifier ? typeName.right.name : null;
8852
9088
  if (referenced === null || !ZOD_TYPE_CONSTRAINTS.has(referenced)) {
8853
9089
  return;
8854
9090
  }
@@ -8866,7 +9102,7 @@ var prefer_zod_infer_default = createRule({
8866
9102
  }
8867
9103
  },
8868
9104
  TSTypeAliasDeclaration(node) {
8869
- if (node.typeParameters !== void 0 || node.typeAnnotation.type !== import_utils54.AST_NODE_TYPES.TSTypeLiteral) {
9105
+ if (node.typeParameters !== void 0 || node.typeAnnotation.type !== import_utils55.AST_NODE_TYPES.TSTypeLiteral) {
8870
9106
  return;
8871
9107
  }
8872
9108
  const members = typeMembers(node.typeAnnotation.members);
@@ -8911,10 +9147,10 @@ var prefer_zod_infer_default = createRule({
8911
9147
  });
8912
9148
 
8913
9149
  // src/rules/require-assert-never.ts
8914
- var import_utils55 = require("@typescript-eslint/utils");
9150
+ var import_utils56 = require("@typescript-eslint/utils");
8915
9151
  var isRuntimeHandlingStatement = (statement) => {
8916
- if (statement.type === import_utils55.AST_NODE_TYPES.EmptyStatement) return false;
8917
- if (statement.type === import_utils55.AST_NODE_TYPES.BlockStatement) {
9152
+ if (statement.type === import_utils56.AST_NODE_TYPES.EmptyStatement) return false;
9153
+ if (statement.type === import_utils56.AST_NODE_TYPES.BlockStatement) {
8918
9154
  return statement.body.some(isRuntimeHandlingStatement);
8919
9155
  }
8920
9156
  return true;
@@ -8930,7 +9166,7 @@ var isCommentOnlyNoopDefault = (defaultCase, sourceCode) => {
8930
9166
  return colonToken !== null && sourceCode.getCommentsAfter(colonToken).length > 0;
8931
9167
  }
8932
9168
  const only = defaultCase.consequent[0];
8933
- if (only !== void 0 && defaultCase.consequent.length === 1 && only.type === import_utils55.AST_NODE_TYPES.BlockStatement && only.body.length === 0) {
9169
+ if (only !== void 0 && defaultCase.consequent.length === 1 && only.type === import_utils56.AST_NODE_TYPES.BlockStatement && only.body.length === 0) {
8934
9170
  return sourceCode.getCommentsInside(only).length > 0;
8935
9171
  }
8936
9172
  return false;
@@ -8970,7 +9206,7 @@ var require_assert_never_default = createRule({
8970
9206
  });
8971
9207
 
8972
9208
  // src/rules/require-fetch-timeout.ts
8973
- var import_utils56 = require("@typescript-eslint/utils");
9209
+ var import_utils57 = require("@typescript-eslint/utils");
8974
9210
  var GLOBAL_OBJECTS2 = /* @__PURE__ */ new Set([
8975
9211
  "globalThis",
8976
9212
  "window",
@@ -8986,14 +9222,14 @@ function matchesAnyPattern3(filename, patterns) {
8986
9222
  return false;
8987
9223
  }
8988
9224
  function initProvablyLacksSignal(init) {
8989
- if (init.type !== import_utils56.AST_NODE_TYPES.ObjectExpression) {
9225
+ if (init.type !== import_utils57.AST_NODE_TYPES.ObjectExpression) {
8990
9226
  return false;
8991
9227
  }
8992
9228
  for (const prop of init.properties) {
8993
- if (prop.type === import_utils56.AST_NODE_TYPES.SpreadElement) {
9229
+ if (prop.type === import_utils57.AST_NODE_TYPES.SpreadElement) {
8994
9230
  return false;
8995
9231
  }
8996
- if (prop.key.type === import_utils56.AST_NODE_TYPES.Identifier && prop.key.name === "signal" || prop.key.type === import_utils56.AST_NODE_TYPES.Literal && prop.key.value === "signal") {
9232
+ if (prop.key.type === import_utils57.AST_NODE_TYPES.Identifier && prop.key.name === "signal" || prop.key.type === import_utils57.AST_NODE_TYPES.Literal && prop.key.value === "signal") {
8997
9233
  return false;
8998
9234
  }
8999
9235
  if (prop.computed) {
@@ -9003,7 +9239,7 @@ function initProvablyLacksSignal(init) {
9003
9239
  return true;
9004
9240
  }
9005
9241
  function isStringish(node) {
9006
- return node.type === import_utils56.AST_NODE_TYPES.Literal && typeof node.value === "string" || node.type === import_utils56.AST_NODE_TYPES.TemplateLiteral;
9242
+ return node.type === import_utils57.AST_NODE_TYPES.Literal && typeof node.value === "string" || node.type === import_utils57.AST_NODE_TYPES.TemplateLiteral;
9007
9243
  }
9008
9244
  var require_fetch_timeout_default = createRule({
9009
9245
  name: "require-fetch-timeout",
@@ -9040,14 +9276,14 @@ var require_fetch_timeout_default = createRule({
9040
9276
  }
9041
9277
  function resolvesToGlobal(identifier) {
9042
9278
  const scope = context.sourceCode.getScope(identifier);
9043
- const variable = import_utils56.ASTUtils.findVariable(scope, identifier.name);
9279
+ const variable = import_utils57.ASTUtils.findVariable(scope, identifier.name);
9044
9280
  return variable === null || variable.defs.length === 0;
9045
9281
  }
9046
9282
  function isGlobalFetchCall2(callee) {
9047
- if (callee.type === import_utils56.AST_NODE_TYPES.Identifier) {
9283
+ if (callee.type === import_utils57.AST_NODE_TYPES.Identifier) {
9048
9284
  return callee.name === "fetch" && resolvesToGlobal(callee);
9049
9285
  }
9050
- return callee.type === import_utils56.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils56.AST_NODE_TYPES.Identifier && callee.property.name === "fetch" && callee.object.type === import_utils56.AST_NODE_TYPES.Identifier && GLOBAL_OBJECTS2.has(callee.object.name) && resolvesToGlobal(callee.object);
9286
+ return callee.type === import_utils57.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils57.AST_NODE_TYPES.Identifier && callee.property.name === "fetch" && callee.object.type === import_utils57.AST_NODE_TYPES.Identifier && GLOBAL_OBJECTS2.has(callee.object.name) && resolvesToGlobal(callee.object);
9051
9287
  }
9052
9288
  return {
9053
9289
  CallExpression(node) {
@@ -9067,7 +9303,7 @@ var require_fetch_timeout_default = createRule({
9067
9303
  });
9068
9304
 
9069
9305
  // src/rules/require-interface-for-injected-service.ts
9070
- var import_utils57 = require("@typescript-eslint/utils");
9306
+ var import_utils58 = require("@typescript-eslint/utils");
9071
9307
  var CONFIGISH_TYPE_RE = /(?:Options|Opts|Config|Configuration|Settings|Params|Props|Args|Env|Environment|Callbacks|Flags)$/;
9072
9308
  var CONFIGISH_NAME_RE = /^(?:options|opts|config|configuration|settings|params|props|args|env|environment|callbacks|flags|logger|log|clock)$/i;
9073
9309
  var HTTP_TRANSPORT_TYPE_RE = /^(?:KyInstance|AxiosInstance|Session)$/;
@@ -9075,20 +9311,20 @@ var BUILTIN_CONTAINER_TYPE_RE = /^(?:Record|Map|WeakMap|Set|WeakSet|Array|Readon
9075
9311
  var TRANSPORT_WRAPPER_NAME_RE = /Client$/;
9076
9312
  var ROUTER_FACTORY_NAME = "Router";
9077
9313
  var FRAMEWORK_HTTP_TYPES = /* @__PURE__ */ new Set(["Request", "Response", "NextFunction"]);
9078
- var isExportedClass = (node) => node.parent.type === import_utils57.AST_NODE_TYPES.ExportNamedDeclaration || node.parent.type === import_utils57.AST_NODE_TYPES.ExportDefaultDeclaration;
9079
- var qualifiedName = (name) => name.type === import_utils57.AST_NODE_TYPES.Identifier ? name.name : name.type === import_utils57.AST_NODE_TYPES.TSQualifiedName ? `${qualifiedName(name.left)}.${name.right.name}` : "";
9314
+ var isExportedClass = (node) => node.parent.type === import_utils58.AST_NODE_TYPES.ExportNamedDeclaration || node.parent.type === import_utils58.AST_NODE_TYPES.ExportDefaultDeclaration;
9315
+ var qualifiedName = (name) => name.type === import_utils58.AST_NODE_TYPES.Identifier ? name.name : name.type === import_utils58.AST_NODE_TYPES.TSQualifiedName ? `${qualifiedName(name.left)}.${name.right.name}` : "";
9080
9316
  var readTypeReference = (annotation) => {
9081
- if (annotation === void 0 || annotation.type !== import_utils57.AST_NODE_TYPES.TSTypeReference) return null;
9317
+ if (annotation === void 0 || annotation.type !== import_utils58.AST_NODE_TYPES.TSTypeReference) return null;
9082
9318
  const { typeName } = annotation;
9083
- const rightmost = typeName.type === import_utils57.AST_NODE_TYPES.Identifier ? typeName.name : typeName.type === import_utils57.AST_NODE_TYPES.TSQualifiedName ? typeName.right.name : null;
9319
+ const rightmost = typeName.type === import_utils58.AST_NODE_TYPES.Identifier ? typeName.name : typeName.type === import_utils58.AST_NODE_TYPES.TSQualifiedName ? typeName.right.name : null;
9084
9320
  if (rightmost === null) return null;
9085
9321
  return { typeName: rightmost, display: qualifiedName(typeName) };
9086
9322
  };
9087
9323
  var namedParameterCollaborator = (annotated) => {
9088
9324
  let target = annotated;
9089
- if (target.type === import_utils57.AST_NODE_TYPES.TSParameterProperty) target = target.parameter;
9090
- if (target.type === import_utils57.AST_NODE_TYPES.AssignmentPattern) target = target.left;
9091
- if (target.type !== import_utils57.AST_NODE_TYPES.Identifier) return null;
9325
+ if (target.type === import_utils58.AST_NODE_TYPES.TSParameterProperty) target = target.parameter;
9326
+ if (target.type === import_utils58.AST_NODE_TYPES.AssignmentPattern) target = target.left;
9327
+ if (target.type !== import_utils58.AST_NODE_TYPES.Identifier) return null;
9092
9328
  const reference = readTypeReference(target.typeAnnotation?.typeAnnotation);
9093
9329
  if (reference === null) return null;
9094
9330
  return { name: target.name, ...reference };
@@ -9096,8 +9332,8 @@ var namedParameterCollaborator = (annotated) => {
9096
9332
  var propertySignatureTypes = (members) => {
9097
9333
  const types = /* @__PURE__ */ new Map();
9098
9334
  for (const member of members) {
9099
- if (member.type !== import_utils57.AST_NODE_TYPES.TSPropertySignature) continue;
9100
- if (member.computed || member.key.type !== import_utils57.AST_NODE_TYPES.Identifier) continue;
9335
+ if (member.type !== import_utils58.AST_NODE_TYPES.TSPropertySignature) continue;
9336
+ if (member.computed || member.key.type !== import_utils58.AST_NODE_TYPES.Identifier) continue;
9101
9337
  const reference = readTypeReference(member.typeAnnotation?.typeAnnotation);
9102
9338
  if (reference === null) continue;
9103
9339
  types.set(member.key.name, reference);
@@ -9108,18 +9344,18 @@ var fileTypeIndex = (program) => {
9108
9344
  const objects = /* @__PURE__ */ new Map();
9109
9345
  const functionAliases = /* @__PURE__ */ new Set();
9110
9346
  for (const statement of program.body) {
9111
- const declaration = statement.type === import_utils57.AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : statement;
9112
- if (declaration?.type === import_utils57.AST_NODE_TYPES.TSInterfaceDeclaration) {
9347
+ const declaration = statement.type === import_utils58.AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : statement;
9348
+ if (declaration?.type === import_utils58.AST_NODE_TYPES.TSInterfaceDeclaration) {
9113
9349
  objects.set(declaration.id.name, propertySignatureTypes(declaration.body.body));
9114
9350
  continue;
9115
9351
  }
9116
- if (declaration?.type !== import_utils57.AST_NODE_TYPES.TSTypeAliasDeclaration) continue;
9352
+ if (declaration?.type !== import_utils58.AST_NODE_TYPES.TSTypeAliasDeclaration) continue;
9117
9353
  const aliased = declaration.typeAnnotation;
9118
- if (aliased.type === import_utils57.AST_NODE_TYPES.TSFunctionType || aliased.type === import_utils57.AST_NODE_TYPES.TSConstructorType) {
9354
+ if (aliased.type === import_utils58.AST_NODE_TYPES.TSFunctionType || aliased.type === import_utils58.AST_NODE_TYPES.TSConstructorType) {
9119
9355
  functionAliases.add(declaration.id.name);
9120
9356
  continue;
9121
9357
  }
9122
- const literals = aliased.type === import_utils57.AST_NODE_TYPES.TSTypeLiteral ? [aliased] : aliased.type === import_utils57.AST_NODE_TYPES.TSIntersectionType ? aliased.types.filter((part) => part.type === import_utils57.AST_NODE_TYPES.TSTypeLiteral) : [];
9358
+ const literals = aliased.type === import_utils58.AST_NODE_TYPES.TSTypeLiteral ? [aliased] : aliased.type === import_utils58.AST_NODE_TYPES.TSIntersectionType ? aliased.types.filter((part) => part.type === import_utils58.AST_NODE_TYPES.TSTypeLiteral) : [];
9123
9359
  if (literals.length === 0) continue;
9124
9360
  const merged = /* @__PURE__ */ new Map();
9125
9361
  for (const literal of literals) {
@@ -9132,10 +9368,10 @@ var fileTypeIndex = (program) => {
9132
9368
  return { objects, functionAliases };
9133
9369
  };
9134
9370
  var bagMemberTypes = (annotation, declared) => {
9135
- if (annotation.type === import_utils57.AST_NODE_TYPES.TSTypeLiteral) {
9371
+ if (annotation.type === import_utils58.AST_NODE_TYPES.TSTypeLiteral) {
9136
9372
  return propertySignatureTypes(annotation.members);
9137
9373
  }
9138
- if (annotation.type !== import_utils57.AST_NODE_TYPES.TSTypeReference || annotation.typeName.type !== import_utils57.AST_NODE_TYPES.Identifier) {
9374
+ if (annotation.type !== import_utils58.AST_NODE_TYPES.TSTypeReference || annotation.typeName.type !== import_utils58.AST_NODE_TYPES.Identifier) {
9139
9375
  return null;
9140
9376
  }
9141
9377
  return declared().objects.get(annotation.typeName.name) ?? null;
@@ -9147,11 +9383,11 @@ var objectPatternCollaborators = (pattern, declared) => {
9147
9383
  if (members === null) return [];
9148
9384
  const collaborators = [];
9149
9385
  for (const property of pattern.properties) {
9150
- if (property.type !== import_utils57.AST_NODE_TYPES.Property || property.computed) continue;
9151
- if (property.key.type !== import_utils57.AST_NODE_TYPES.Identifier) continue;
9386
+ if (property.type !== import_utils58.AST_NODE_TYPES.Property || property.computed) continue;
9387
+ if (property.key.type !== import_utils58.AST_NODE_TYPES.Identifier) continue;
9152
9388
  const key = property.key.name;
9153
- const bound = property.value.type === import_utils57.AST_NODE_TYPES.AssignmentPattern ? property.value.left : property.value;
9154
- if (bound.type !== import_utils57.AST_NODE_TYPES.Identifier) continue;
9389
+ const bound = property.value.type === import_utils58.AST_NODE_TYPES.AssignmentPattern ? property.value.left : property.value;
9390
+ if (bound.type !== import_utils58.AST_NODE_TYPES.Identifier) continue;
9155
9391
  if (CONFIGISH_NAME_RE.test(key)) continue;
9156
9392
  const reference = members.get(key);
9157
9393
  if (reference === void 0) continue;
@@ -9161,8 +9397,8 @@ var objectPatternCollaborators = (pattern, declared) => {
9161
9397
  };
9162
9398
  var parameterCollaborators = (parameter, declared) => {
9163
9399
  let target = parameter;
9164
- if (target.type === import_utils57.AST_NODE_TYPES.AssignmentPattern) target = target.left;
9165
- if (target.type === import_utils57.AST_NODE_TYPES.ObjectPattern) {
9400
+ if (target.type === import_utils58.AST_NODE_TYPES.AssignmentPattern) target = target.left;
9401
+ if (target.type === import_utils58.AST_NODE_TYPES.ObjectPattern) {
9166
9402
  return objectPatternCollaborators(target, declared);
9167
9403
  }
9168
9404
  const named2 = namedParameterCollaborator(parameter);
@@ -9176,22 +9412,22 @@ var typeParameterNames = (...declarations) => {
9176
9412
  return names;
9177
9413
  };
9178
9414
  var readConstructor = (ctor, declared, typeParameters) => {
9179
- const body = ctor.value.body;
9415
+ const body2 = ctor.value.body;
9180
9416
  const storedFrom = /* @__PURE__ */ new Set();
9181
9417
  let constructedFields = 0;
9182
- if (body !== null && body !== void 0) {
9183
- for (const statement of body.body) {
9184
- if (statement.type !== import_utils57.AST_NODE_TYPES.ExpressionStatement) continue;
9418
+ if (body2 !== null && body2 !== void 0) {
9419
+ for (const statement of body2.body) {
9420
+ if (statement.type !== import_utils58.AST_NODE_TYPES.ExpressionStatement) continue;
9185
9421
  const expression = statement.expression;
9186
- if (expression.type !== import_utils57.AST_NODE_TYPES.AssignmentExpression || expression.operator !== "=" || expression.left.type !== import_utils57.AST_NODE_TYPES.MemberExpression || expression.left.object.type !== import_utils57.AST_NODE_TYPES.ThisExpression) {
9422
+ if (expression.type !== import_utils58.AST_NODE_TYPES.AssignmentExpression || expression.operator !== "=" || expression.left.type !== import_utils58.AST_NODE_TYPES.MemberExpression || expression.left.object.type !== import_utils58.AST_NODE_TYPES.ThisExpression) {
9187
9423
  continue;
9188
9424
  }
9189
9425
  const source = expression.right;
9190
- if (source.type === import_utils57.AST_NODE_TYPES.NewExpression) {
9426
+ if (source.type === import_utils58.AST_NODE_TYPES.NewExpression) {
9191
9427
  constructedFields += 1;
9192
- } else if (source.type === import_utils57.AST_NODE_TYPES.Identifier) {
9428
+ } else if (source.type === import_utils58.AST_NODE_TYPES.Identifier) {
9193
9429
  storedFrom.add(source.name);
9194
- } else if (source.type === import_utils57.AST_NODE_TYPES.MemberExpression && source.object.type === import_utils57.AST_NODE_TYPES.Identifier) {
9430
+ } else if (source.type === import_utils58.AST_NODE_TYPES.MemberExpression && source.object.type === import_utils58.AST_NODE_TYPES.Identifier) {
9195
9431
  storedFrom.add(source.object.name);
9196
9432
  }
9197
9433
  }
@@ -9199,7 +9435,7 @@ var readConstructor = (ctor, declared, typeParameters) => {
9199
9435
  const collaborators = [];
9200
9436
  for (const parameter of ctor.value.params) {
9201
9437
  for (const reference of parameterCollaborators(parameter, declared)) {
9202
- const stored = parameter.type === import_utils57.AST_NODE_TYPES.TSParameterProperty || storedFrom.has(reference.name);
9438
+ const stored = parameter.type === import_utils58.AST_NODE_TYPES.TSParameterProperty || storedFrom.has(reference.name);
9203
9439
  if (!stored) continue;
9204
9440
  if (CONFIGISH_TYPE_RE.test(reference.typeName)) continue;
9205
9441
  if (CONFIGISH_NAME_RE.test(reference.name)) continue;
@@ -9232,20 +9468,20 @@ var subtreeHas = (root, found) => {
9232
9468
  visit(root);
9233
9469
  return hit;
9234
9470
  };
9235
- var isFrameworkWiring = (body) => subtreeHas(body, (node) => {
9236
- if (node.type === import_utils57.AST_NODE_TYPES.CallExpression) {
9471
+ var isFrameworkWiring = (body2) => subtreeHas(body2, (node) => {
9472
+ if (node.type === import_utils58.AST_NODE_TYPES.CallExpression) {
9237
9473
  const { callee } = node;
9238
- if (callee.type === import_utils57.AST_NODE_TYPES.Identifier) return callee.name === ROUTER_FACTORY_NAME;
9239
- return callee.type === import_utils57.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils57.AST_NODE_TYPES.Identifier && callee.property.name === ROUTER_FACTORY_NAME;
9474
+ if (callee.type === import_utils58.AST_NODE_TYPES.Identifier) return callee.name === ROUTER_FACTORY_NAME;
9475
+ return callee.type === import_utils58.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils58.AST_NODE_TYPES.Identifier && callee.property.name === ROUTER_FACTORY_NAME;
9240
9476
  }
9241
- return node.type === import_utils57.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils57.AST_NODE_TYPES.TSQualifiedName && FRAMEWORK_HTTP_TYPES.has(node.typeName.right.name);
9477
+ return node.type === import_utils58.AST_NODE_TYPES.TSTypeReference && node.typeName.type === import_utils58.AST_NODE_TYPES.TSQualifiedName && FRAMEWORK_HTTP_TYPES.has(node.typeName.right.name);
9242
9478
  });
9243
9479
  var stem2 = (name) => name.replace(/^I(?=[A-Z])/, "").replace(/Impl$/, "");
9244
9480
  var fileInterfaceNames = (program) => {
9245
9481
  const names = [];
9246
9482
  for (const statement of program.body) {
9247
- const declaration = statement.type === import_utils57.AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : statement;
9248
- if (declaration?.type === import_utils57.AST_NODE_TYPES.TSInterfaceDeclaration) names.push(declaration.id.name);
9483
+ const declaration = statement.type === import_utils58.AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : statement;
9484
+ if (declaration?.type === import_utils58.AST_NODE_TYPES.TSInterfaceDeclaration) names.push(declaration.id.name);
9249
9485
  }
9250
9486
  return names;
9251
9487
  };
@@ -9260,14 +9496,14 @@ var isTransportWrapper = (className, collaborators, program) => {
9260
9496
  return target.endsWith(other) || other.endsWith(target);
9261
9497
  });
9262
9498
  };
9263
- var publicMethodNames = (body) => {
9499
+ var publicMethodNames = (body2) => {
9264
9500
  const names = [];
9265
- for (const member of body.body) {
9266
- if (member.type !== import_utils57.AST_NODE_TYPES.MethodDefinition) continue;
9501
+ for (const member of body2.body) {
9502
+ if (member.type !== import_utils58.AST_NODE_TYPES.MethodDefinition) continue;
9267
9503
  if (member.kind !== "method" || member.static) continue;
9268
9504
  if (member.accessibility === "private" || member.accessibility === "protected") continue;
9269
- if (member.key.type === import_utils57.AST_NODE_TYPES.PrivateIdentifier) continue;
9270
- if (member.key.type === import_utils57.AST_NODE_TYPES.Identifier) names.push(member.key.name);
9505
+ if (member.key.type === import_utils58.AST_NODE_TYPES.PrivateIdentifier) continue;
9506
+ if (member.key.type === import_utils58.AST_NODE_TYPES.Identifier) names.push(member.key.name);
9271
9507
  else names.push("\u2026");
9272
9508
  }
9273
9509
  return names;
@@ -9300,7 +9536,7 @@ var require_interface_for_injected_service_default = createRule({
9300
9536
  if (node.implements.length > 0) return;
9301
9537
  if (node.decorators.length > 0) return;
9302
9538
  const ctor = node.body.body.find(
9303
- (member) => member.type === import_utils57.AST_NODE_TYPES.MethodDefinition && member.kind === "constructor"
9539
+ (member) => member.type === import_utils58.AST_NODE_TYPES.MethodDefinition && member.kind === "constructor"
9304
9540
  );
9305
9541
  if (ctor === void 0) return;
9306
9542
  const { collaborators, constructedFields } = readConstructor(
@@ -9329,18 +9565,18 @@ var require_interface_for_injected_service_default = createRule({
9329
9565
  });
9330
9566
 
9331
9567
  // src/rules/require-zod-form-validation.ts
9332
- var import_utils58 = require("@typescript-eslint/utils");
9568
+ var import_utils59 = require("@typescript-eslint/utils");
9333
9569
  var looksLikeZodSchema = (node) => {
9334
9570
  let current = node;
9335
9571
  while (true) {
9336
- if (current.type === import_utils58.AST_NODE_TYPES.Identifier) {
9572
+ if (current.type === import_utils59.AST_NODE_TYPES.Identifier) {
9337
9573
  return current.name === "z" || ZOD_SCHEMA_NAME_RE.test(current.name);
9338
9574
  }
9339
- if (current.type === import_utils58.AST_NODE_TYPES.CallExpression) {
9575
+ if (current.type === import_utils59.AST_NODE_TYPES.CallExpression) {
9340
9576
  current = current.callee;
9341
9577
  continue;
9342
9578
  }
9343
- if (current.type === import_utils58.AST_NODE_TYPES.MemberExpression) {
9579
+ if (current.type === import_utils59.AST_NODE_TYPES.MemberExpression) {
9344
9580
  current = current.object;
9345
9581
  continue;
9346
9582
  }
@@ -9348,23 +9584,23 @@ var looksLikeZodSchema = (node) => {
9348
9584
  }
9349
9585
  };
9350
9586
  var isZodParseCall = (node) => {
9351
- if (node.type !== import_utils58.AST_NODE_TYPES.CallExpression) return false;
9587
+ if (node.type !== import_utils59.AST_NODE_TYPES.CallExpression) return false;
9352
9588
  const callee = node.callee;
9353
- if (callee.type !== import_utils58.AST_NODE_TYPES.MemberExpression) return false;
9589
+ if (callee.type !== import_utils59.AST_NODE_TYPES.MemberExpression) return false;
9354
9590
  if (callee.computed) return false;
9355
- if (callee.property.type !== import_utils58.AST_NODE_TYPES.Identifier) return false;
9591
+ if (callee.property.type !== import_utils59.AST_NODE_TYPES.Identifier) return false;
9356
9592
  const method = callee.property.name;
9357
9593
  if (method !== "parse" && method !== "safeParse") return false;
9358
9594
  return looksLikeZodSchema(callee.object);
9359
9595
  };
9360
9596
  var isFormDataMethodCall = (node) => {
9361
9597
  let current = node;
9362
- if (current.type === import_utils58.AST_NODE_TYPES.AwaitExpression) {
9598
+ if (current.type === import_utils59.AST_NODE_TYPES.AwaitExpression) {
9363
9599
  current = current.argument;
9364
9600
  }
9365
- if (current.type !== import_utils58.AST_NODE_TYPES.CallExpression) return false;
9601
+ if (current.type !== import_utils59.AST_NODE_TYPES.CallExpression) return false;
9366
9602
  const callee = current.callee;
9367
- return callee.type === import_utils58.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils58.AST_NODE_TYPES.Identifier && callee.property.name === "formData";
9603
+ return callee.type === import_utils59.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils59.AST_NODE_TYPES.Identifier && callee.property.name === "formData";
9368
9604
  };
9369
9605
  var require_zod_form_validation_default = createRule({
9370
9606
  name: "require-zod-form-validation",
@@ -9384,14 +9620,14 @@ var require_zod_form_validation_default = createRule({
9384
9620
  return {};
9385
9621
  }
9386
9622
  const isFormSourceIdentifier = (node) => {
9387
- if (node.type !== import_utils58.AST_NODE_TYPES.Identifier) return false;
9623
+ if (node.type !== import_utils59.AST_NODE_TYPES.Identifier) return false;
9388
9624
  if (/formdata/i.test(node.name)) return true;
9389
9625
  let scope = context.sourceCode.getScope(node);
9390
9626
  while (scope !== null) {
9391
9627
  const variable = scope.set.get(node.name);
9392
9628
  if (variable !== void 0 && variable.defs.length === 1) {
9393
9629
  const def = variable.defs[0];
9394
- if (def !== void 0 && def.type === "Variable" && def.node.type === import_utils58.AST_NODE_TYPES.VariableDeclarator && def.node.init !== null) {
9630
+ if (def !== void 0 && def.type === "Variable" && def.node.type === import_utils59.AST_NODE_TYPES.VariableDeclarator && def.node.init !== null) {
9395
9631
  return isFormDataMethodCall(def.node.init);
9396
9632
  }
9397
9633
  return false;
@@ -9402,8 +9638,8 @@ var require_zod_form_validation_default = createRule({
9402
9638
  };
9403
9639
  const isFormDataGetCall = (node) => {
9404
9640
  const callee = node.callee;
9405
- if (callee.type !== import_utils58.AST_NODE_TYPES.MemberExpression) return false;
9406
- if (callee.property.type !== import_utils58.AST_NODE_TYPES.Identifier || callee.property.name !== "get") {
9641
+ if (callee.type !== import_utils59.AST_NODE_TYPES.MemberExpression) return false;
9642
+ if (callee.property.type !== import_utils59.AST_NODE_TYPES.Identifier || callee.property.name !== "get") {
9407
9643
  return false;
9408
9644
  }
9409
9645
  return isFormSourceIdentifier(callee.object);
@@ -9418,11 +9654,11 @@ var require_zod_form_validation_default = createRule({
9418
9654
  };
9419
9655
  const isInstanceofNarrowing = (node) => {
9420
9656
  const parent = node.parent;
9421
- return parent !== null && parent !== void 0 && parent.type === import_utils58.AST_NODE_TYPES.BinaryExpression && parent.operator === "instanceof" && parent.left === node;
9657
+ return parent !== null && parent !== void 0 && parent.type === import_utils59.AST_NODE_TYPES.BinaryExpression && parent.operator === "instanceof" && parent.left === node && parent.right.type === import_utils59.AST_NODE_TYPES.Identifier && (parent.right.name === "File" || parent.right.name === "Blob");
9422
9658
  };
9423
9659
  const boundDeclarator = (node) => {
9424
9660
  const parent = node.parent;
9425
- if (parent.type === import_utils58.AST_NODE_TYPES.VariableDeclarator && parent.init === node && parent.id.type === import_utils58.AST_NODE_TYPES.Identifier) {
9661
+ if (parent.type === import_utils59.AST_NODE_TYPES.VariableDeclarator && parent.init === node && parent.id.type === import_utils59.AST_NODE_TYPES.Identifier) {
9426
9662
  return parent;
9427
9663
  }
9428
9664
  return null;
@@ -9450,7 +9686,7 @@ var require_zod_form_validation_default = createRule({
9450
9686
  });
9451
9687
 
9452
9688
  // src/rules/store-insert-requires-on-conflict.ts
9453
- var import_utils59 = require("@typescript-eslint/utils");
9689
+ var import_utils60 = require("@typescript-eslint/utils");
9454
9690
  var INSERT_WRITE = /\bINSERT\s+(?:OR\s+\w+\s+)?INTO\s+[\w."'`?$:@-]+\s*(?:\([^)]*\)\s*)?(?:VALUES|SELECT|DEFAULT\s+VALUES)\b/i;
9455
9691
  var CONFLICT_HANDLED = /\bON\s+CONFLICT\b|\bON\s+DUPLICATE\s+KEY\b|\bINSERT\s+OR\s+(?:IGNORE|REPLACE)\b/i;
9456
9692
  var INSERT_GATE = /insert/i;
@@ -9481,7 +9717,7 @@ var store_insert_requires_on_conflict_default = createRule({
9481
9717
  });
9482
9718
 
9483
9719
  // src/rules/zod-naming-convention.ts
9484
- var import_utils60 = require("@typescript-eslint/utils");
9720
+ var import_utils61 = require("@typescript-eslint/utils");
9485
9721
  var CONVENTIONS = {
9486
9722
  prefix: { test: ZOD_PREFIX_RE, messageId: "zPrefix" },
9487
9723
  suffix: { test: ZOD_SUFFIX_RE, messageId: "schemaSuffix" },
@@ -9506,15 +9742,15 @@ var NON_SCHEMA_TERMINALS = /* @__PURE__ */ new Set([
9506
9742
  "registry",
9507
9743
  "implement"
9508
9744
  ]);
9509
- var terminalMethodName = (callee) => !callee.computed && callee.property.type === import_utils60.AST_NODE_TYPES.Identifier ? callee.property.name : null;
9745
+ var terminalMethodName = (callee) => !callee.computed && callee.property.type === import_utils61.AST_NODE_TYPES.Identifier ? callee.property.name : null;
9510
9746
  var calleeChainStartsWithZ = (node) => {
9511
9747
  let current = node;
9512
- while (current.type === import_utils60.AST_NODE_TYPES.MemberExpression) {
9748
+ while (current.type === import_utils61.AST_NODE_TYPES.MemberExpression) {
9513
9749
  const receiver = current.object;
9514
- if (receiver.type === import_utils60.AST_NODE_TYPES.Identifier && receiver.name === "z") {
9750
+ if (receiver.type === import_utils61.AST_NODE_TYPES.Identifier && receiver.name === "z") {
9515
9751
  return true;
9516
9752
  }
9517
- if (receiver.type === import_utils60.AST_NODE_TYPES.CallExpression) {
9753
+ if (receiver.type === import_utils61.AST_NODE_TYPES.CallExpression) {
9518
9754
  current = receiver.callee;
9519
9755
  continue;
9520
9756
  }
@@ -9559,13 +9795,13 @@ var zod_naming_convention_default = createRule({
9559
9795
  VariableDeclarator(node) {
9560
9796
  const init = node.init;
9561
9797
  if (init === null || init === void 0) return;
9562
- if (init.type !== import_utils60.AST_NODE_TYPES.CallExpression) return;
9798
+ if (init.type !== import_utils61.AST_NODE_TYPES.CallExpression) return;
9563
9799
  const callee = init.callee;
9564
- if (callee.type !== import_utils60.AST_NODE_TYPES.MemberExpression) return;
9800
+ if (callee.type !== import_utils61.AST_NODE_TYPES.MemberExpression) return;
9565
9801
  if (!calleeChainStartsWithZ(callee)) return;
9566
9802
  const terminal = terminalMethodName(callee);
9567
9803
  if (terminal !== null && NON_SCHEMA_TERMINALS.has(terminal)) return;
9568
- if (node.id.type !== import_utils60.AST_NODE_TYPES.Identifier) return;
9804
+ if (node.id.type !== import_utils61.AST_NODE_TYPES.Identifier) return;
9569
9805
  if (test.test(node.id.name)) return;
9570
9806
  if (acceptsSchemaWord && CONTAINS_SCHEMA_RE.test(node.id.name)) return;
9571
9807
  context.report({
@@ -9589,47 +9825,47 @@ var renamedRules = {
9589
9825
  var retiredRules = {
9590
9826
  "ban-loose-type-guards-in-tests": {
9591
9827
  removedIn: "5.0.0",
9592
- reason: "Read at 39 findings with 0 true positives in the #183 corpus audit. Delete the config entry; no replacement."
9828
+ reason: "Delete the config entry and suppressions; there is no replacement."
9593
9829
  },
9594
9830
  "no-implicit-attribute-access": {
9595
9831
  removedIn: "5.0.0",
9596
- reason: "Read at 50 findings with 0 true positives in the #183 corpus audit. Delete the config entry; no replacement."
9832
+ reason: "Delete the config entry and suppressions; there is no replacement."
9597
9833
  },
9598
9834
  "no-sequential-await": {
9599
9835
  removedIn: "3.0.0",
9600
- reason: "218 findings, 100% range-contained in core `no-await-in-loop`, which the shipped config already enables. Delete the entry; `no-await-in-loop` covers it."
9836
+ reason: "Delete the entry; core `no-await-in-loop` covers it."
9601
9837
  },
9602
9838
  "no-template-literal-in-log": {
9603
9839
  removedIn: "2.3.1",
9604
- reason: "Withdrawn. Delete the config entry; no replacement."
9840
+ reason: "Delete the config entry and suppressions; there is no replacement."
9605
9841
  },
9606
9842
  "no-unsafe-cast": {
9607
9843
  removedIn: "3.0.0",
9608
- reason: '1,089 findings, matching `@typescript-eslint/consistent-type-assertions` ("never") at the identical line and column with zero residue. Delete the entry; keep that rule enabled.'
9844
+ reason: "Delete the entry; keep `@typescript-eslint/consistent-type-assertions` enabled."
9609
9845
  },
9610
9846
  "prefer-setup-file-mocks": {
9611
9847
  removedIn: "5.0.0",
9612
- reason: "Read at 50 findings with 0 true positives in the #183 corpus audit. Delete the config entry; no replacement."
9848
+ reason: "Delete the config entry and suppressions; there is no replacement."
9613
9849
  },
9614
9850
  "prefer-shadcn": {
9615
9851
  removedIn: "3.0.0",
9616
- reason: "645 findings, a subset of `react/forbid-elements`; its 24-position residue was all design-system primitives being told not to be the design system. Delete the entry."
9852
+ reason: "Delete the entry; use `react/forbid-elements` for element restrictions."
9617
9853
  },
9618
9854
  "primary-export-file-name": {
9619
9855
  removedIn: "4.0.0",
9620
- reason: "Renamed files after one of their exports \u2014 316 findings over 1,966 files sampled 11 harmful / 15 useless / 4 valuable, including telling `next.config.ts` to become `next-config.ts`. Delete the config entry."
9856
+ reason: "Delete the config entry and suppressions; there is no replacement."
9621
9857
  },
9622
9858
  "require-parameterized-tests": {
9623
9859
  removedIn: "4.0.0",
9624
- reason: "Landed in #153 and never wired up: absent from the `rules` record, every preset, and eslint.strict.mjs. Nothing to migrate."
9860
+ reason: "Delete stale references; the rule was never registered."
9625
9861
  },
9626
9862
  "require-schema-validate-search": {
9627
9863
  removedIn: "3.0.0",
9628
- reason: "14 findings, all matched line-and-column by `@typescript-eslint/consistent-type-assertions`. Delete the entry."
9864
+ reason: "Delete the entry; use `@typescript-eslint/consistent-type-assertions`."
9629
9865
  },
9630
9866
  "single-public-export": {
9631
9867
  removedIn: "3.0.0",
9632
- reason: "3 findings, all also reported by the then-live `primary-export-file-name` (itself withdrawn in 4.0.0). Delete the entry."
9868
+ reason: "Delete the config entry and suppressions; there is no replacement."
9633
9869
  }
9634
9870
  };
9635
9871
 
@@ -9648,6 +9884,7 @@ var rules = {
9648
9884
  "no-insecure-random-id": no_insecure_random_id_default,
9649
9885
  "no-json-stringify-error": no_json_stringify_error_default,
9650
9886
  "no-log-only-catch": no_log_only_catch_default,
9887
+ "no-long-comment": no_long_comment_default,
9651
9888
  "no-offset-pagination": no_offset_pagination_default,
9652
9889
  "no-positional-tuple-return": no_positional_tuple_return_default,
9653
9890
  "no-raw-env": no_raw_env_default,
@@ -9663,6 +9900,7 @@ var rules = {
9663
9900
  "no-storage-in-stateless-modules": no_storage_in_stateless_modules_default,
9664
9901
  "no-string-concat-in-loop": no_string_concat_in_loop_default,
9665
9902
  "no-tautological-expect": no_tautological_expect_default,
9903
+ "no-typed-doc-sections": no_typed_doc_sections_default,
9666
9904
  "no-trailing-value-narration": no_trailing_value_narration_default,
9667
9905
  "no-declaration-comment-wall": no_declaration_comment_wall_default,
9668
9906
  "no-union-in-comment": no_union_in_comment_default,
@@ -9678,6 +9916,7 @@ var rules = {
9678
9916
  "prefer-schema-for-api-payload": prefer_schema_for_api_payload_default,
9679
9917
  "prefer-semantic-colors": prefer_semantic_colors_default,
9680
9918
  "prefer-server-actions": prefer_server_actions_default,
9919
+ "prefer-single-sentence-comment": prefer_single_sentence_comment_default,
9681
9920
  "prefer-string-literal-union": prefer_string_literal_union_default,
9682
9921
  "prefer-whole-object-assertion": prefer_whole_object_assertion_default,
9683
9922
  "prefer-zod-enum": prefer_zod_enum_default,
@@ -9691,7 +9930,7 @@ var rules = {
9691
9930
  };
9692
9931
  var meta = {
9693
9932
  name: "@sarj/eslint-plugin",
9694
- version: "9.6.0"
9933
+ version: "9.7.0"
9695
9934
  };
9696
9935
  var recommendedRules = {
9697
9936
  "@sarj/enforce-file-structure": "warn",
@@ -9706,6 +9945,7 @@ var recommendedRules = {
9706
9945
  "@sarj/no-insecure-random-id": "warn",
9707
9946
  "@sarj/no-json-stringify-error": "warn",
9708
9947
  "@sarj/no-log-only-catch": "warn",
9948
+ "@sarj/no-long-comment": "warn",
9709
9949
  "@sarj/no-offset-pagination": "warn",
9710
9950
  "@sarj/no-positional-tuple-return": "warn",
9711
9951
  "@sarj/no-repeated-string-literal": "warn",
@@ -9718,6 +9958,7 @@ var recommendedRules = {
9718
9958
  "@sarj/no-sleep-in-test-body": "warn",
9719
9959
  "@sarj/no-string-concat-in-loop": "warn",
9720
9960
  "@sarj/no-tautological-expect": "warn",
9961
+ "@sarj/no-typed-doc-sections": "warn",
9721
9962
  "@sarj/no-trailing-value-narration": "warn",
9722
9963
  "@sarj/no-declaration-comment-wall": "warn",
9723
9964
  "@sarj/no-union-in-comment": "warn",
@@ -9733,6 +9974,7 @@ var recommendedRules = {
9733
9974
  "@sarj/prefer-schema-for-api-payload": "warn",
9734
9975
  "@sarj/prefer-semantic-colors": ["warn", { requireSemanticTokens: true }],
9735
9976
  "@sarj/prefer-server-actions": "warn",
9977
+ "@sarj/prefer-single-sentence-comment": "warn",
9736
9978
  "@sarj/prefer-string-literal-union": "warn",
9737
9979
  "@sarj/prefer-whole-object-assertion": "warn",
9738
9980
  "@sarj/prefer-zod-enum": "warn",
@@ -9758,6 +10000,7 @@ var strictRules = {
9758
10000
  "@sarj/no-insecure-random-id": "error",
9759
10001
  "@sarj/no-json-stringify-error": "error",
9760
10002
  "@sarj/no-log-only-catch": "error",
10003
+ "@sarj/no-long-comment": "error",
9761
10004
  "@sarj/no-offset-pagination": "error",
9762
10005
  "@sarj/no-positional-tuple-return": "error",
9763
10006
  "@sarj/no-raw-env": "error",
@@ -9773,6 +10016,7 @@ var strictRules = {
9773
10016
  "@sarj/no-storage-in-stateless-modules": "error",
9774
10017
  "@sarj/no-string-concat-in-loop": "error",
9775
10018
  "@sarj/no-tautological-expect": "error",
10019
+ "@sarj/no-typed-doc-sections": "error",
9776
10020
  "@sarj/no-trailing-value-narration": "error",
9777
10021
  "@sarj/no-declaration-comment-wall": "error",
9778
10022
  "@sarj/no-union-in-comment": "error",
@@ -9788,6 +10032,7 @@ var strictRules = {
9788
10032
  "@sarj/prefer-schema-for-api-payload": "error",
9789
10033
  "@sarj/prefer-semantic-colors": ["error", { requireSemanticTokens: true }],
9790
10034
  "@sarj/prefer-server-actions": "error",
10035
+ "@sarj/prefer-single-sentence-comment": "warn",
9791
10036
  "@sarj/prefer-string-literal-union": "error",
9792
10037
  "@sarj/prefer-whole-object-assertion": "error",
9793
10038
  "@sarj/prefer-zod-enum": "error",