@tanstack/eslint-plugin-query 5.100.14 → 5.101.1
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/build/legacy/_tsup-dts-rollup.d.cts +2 -0
- package/build/legacy/_tsup-dts-rollup.d.ts +2 -0
- package/build/legacy/{chunk-3LUKIACS.js → chunk-WVNZFPYE.js} +138 -20
- package/build/legacy/chunk-WVNZFPYE.js.map +1 -0
- package/build/legacy/index.cjs +137 -19
- package/build/legacy/index.cjs.map +1 -1
- package/build/legacy/index.js +1 -1
- package/build/legacy/rules.cjs +137 -19
- package/build/legacy/rules.cjs.map +1 -1
- package/build/legacy/rules.js +1 -1
- package/build/modern/_tsup-dts-rollup.d.cts +2 -0
- package/build/modern/_tsup-dts-rollup.d.ts +2 -0
- package/build/modern/{chunk-DL47ZJZ5.js → chunk-VALYN6GR.js} +136 -20
- package/build/modern/chunk-VALYN6GR.js.map +1 -0
- package/build/modern/index.cjs +135 -19
- package/build/modern/index.cjs.map +1 -1
- package/build/modern/index.js +1 -1
- package/build/modern/rules.cjs +135 -19
- package/build/modern/rules.cjs.map +1 -1
- package/build/modern/rules.js +1 -1
- package/package.json +1 -1
- package/src/rules/no-rest-destructuring/no-rest-destructuring.rule.ts +30 -7
- package/src/rules/no-rest-destructuring/no-rest-destructuring.utils.ts +45 -1
- package/src/rules/no-unstable-deps/no-unstable-deps.rule.ts +143 -30
- package/build/legacy/chunk-3LUKIACS.js.map +0 -1
- package/build/modern/chunk-DL47ZJZ5.js.map +0 -1
|
@@ -2,6 +2,7 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
|
2
2
|
import type { ESLint } from 'eslint';
|
|
3
3
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
4
4
|
import type { Linter } from 'eslint';
|
|
5
|
+
import type { ParserServices } from '@typescript-eslint/utils';
|
|
5
6
|
import { RuleListener } from '@typescript-eslint/utils/ts-eslint';
|
|
6
7
|
import { RuleModule } from '@typescript-eslint/utils/ts-eslint';
|
|
7
8
|
import type { TSESLint } from '@typescript-eslint/utils';
|
|
@@ -182,6 +183,7 @@ export declare const name_alias_7 = "stable-query-client";
|
|
|
182
183
|
|
|
183
184
|
export declare const NoRestDestructuringUtils: {
|
|
184
185
|
isObjectRestDestructuring(node: TSESTree.Node): boolean;
|
|
186
|
+
isQueryResultCall(node: TSESTree.CallExpression, parserServices: Partial<ParserServices> | null | undefined): boolean;
|
|
185
187
|
};
|
|
186
188
|
|
|
187
189
|
declare type Options = Parameters<Create>[1];
|
|
@@ -2,6 +2,7 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
|
2
2
|
import type { ESLint } from 'eslint';
|
|
3
3
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
4
4
|
import type { Linter } from 'eslint';
|
|
5
|
+
import type { ParserServices } from '@typescript-eslint/utils';
|
|
5
6
|
import { RuleListener } from '@typescript-eslint/utils/ts-eslint';
|
|
6
7
|
import { RuleModule } from '@typescript-eslint/utils/ts-eslint';
|
|
7
8
|
import type { TSESLint } from '@typescript-eslint/utils';
|
|
@@ -182,6 +183,7 @@ export declare const name_alias_7 = "stable-query-client";
|
|
|
182
183
|
|
|
183
184
|
export declare const NoRestDestructuringUtils: {
|
|
184
185
|
isObjectRestDestructuring(node: TSESTree.Node): boolean;
|
|
186
|
+
isQueryResultCall(node: TSESTree.CallExpression, parserServices: Partial<ParserServices> | null | undefined): boolean;
|
|
185
187
|
};
|
|
186
188
|
|
|
187
189
|
declare type Options = Parameters<Create>[1];
|
|
@@ -894,12 +894,42 @@ import { AST_NODE_TYPES as AST_NODE_TYPES6, ESLintUtils as ESLintUtils3 } from "
|
|
|
894
894
|
|
|
895
895
|
// src/rules/no-rest-destructuring/no-rest-destructuring.utils.ts
|
|
896
896
|
import { AST_NODE_TYPES as AST_NODE_TYPES5 } from "@typescript-eslint/utils";
|
|
897
|
+
var QUERY_RESULT_TYPE_NAMES = /* @__PURE__ */ new Set([
|
|
898
|
+
"UseBaseQueryResult",
|
|
899
|
+
"UseQueryResult",
|
|
900
|
+
"UseSuspenseQueryResult",
|
|
901
|
+
"DefinedUseQueryResult",
|
|
902
|
+
"UseInfiniteQueryResult",
|
|
903
|
+
"UseSuspenseInfiniteQueryResult",
|
|
904
|
+
"DefinedUseInfiniteQueryResult",
|
|
905
|
+
"QueryObserverResult",
|
|
906
|
+
"InfiniteQueryObserverResult"
|
|
907
|
+
]);
|
|
908
|
+
function isQueryResultType(type) {
|
|
909
|
+
if (type.aliasSymbol && QUERY_RESULT_TYPE_NAMES.has(type.aliasSymbol.name)) {
|
|
910
|
+
return true;
|
|
911
|
+
}
|
|
912
|
+
const symbol = type.getSymbol();
|
|
913
|
+
if (symbol && QUERY_RESULT_TYPE_NAMES.has(symbol.name)) {
|
|
914
|
+
return true;
|
|
915
|
+
}
|
|
916
|
+
return type.isUnion() && type.types.some(isQueryResultType);
|
|
917
|
+
}
|
|
897
918
|
var NoRestDestructuringUtils = {
|
|
898
919
|
isObjectRestDestructuring(node) {
|
|
899
920
|
if (node.type !== AST_NODE_TYPES5.ObjectPattern) {
|
|
900
921
|
return false;
|
|
901
922
|
}
|
|
902
923
|
return node.properties.some((p) => p.type === AST_NODE_TYPES5.RestElement);
|
|
924
|
+
},
|
|
925
|
+
isQueryResultCall(node, parserServices) {
|
|
926
|
+
if (!(parserServices == null ? void 0 : parserServices.program) || !parserServices.esTreeNodeToTSNodeMap) {
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
const checker = parserServices.program.getTypeChecker();
|
|
930
|
+
const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.callee);
|
|
931
|
+
const signatures = checker.getTypeAtLocation(tsNode).getCallSignatures();
|
|
932
|
+
return signatures.some((sig) => isQueryResultType(sig.getReturnType()));
|
|
903
933
|
}
|
|
904
934
|
};
|
|
905
935
|
|
|
@@ -932,11 +962,22 @@ var rule3 = createRule3({
|
|
|
932
962
|
const queryResultVariables = /* @__PURE__ */ new Set();
|
|
933
963
|
return {
|
|
934
964
|
CallExpression: (node) => {
|
|
935
|
-
if (
|
|
965
|
+
if (node.parent.type !== AST_NODE_TYPES6.VariableDeclarator) {
|
|
936
966
|
return;
|
|
937
967
|
}
|
|
938
968
|
const returnValue = node.parent.id;
|
|
939
|
-
|
|
969
|
+
const isDirectHook = ASTUtils.isIdentifierWithOneOfNames(node.callee, queryHooks) && helpers.isTanstackQueryImport(node.callee);
|
|
970
|
+
if (!isDirectHook) {
|
|
971
|
+
const canReportQueryResult = returnValue.type === AST_NODE_TYPES6.Identifier || NoRestDestructuringUtils.isObjectRestDestructuring(returnValue);
|
|
972
|
+
if (!canReportQueryResult || !NoRestDestructuringUtils.isQueryResultCall(
|
|
973
|
+
node,
|
|
974
|
+
context.sourceCode.parserServices
|
|
975
|
+
)) {
|
|
976
|
+
return;
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
const calleeName = ASTUtils.isIdentifier(node.callee) ? node.callee.name : null;
|
|
980
|
+
if (calleeName !== "useQueries" && calleeName !== "useSuspenseQueries") {
|
|
940
981
|
if (NoRestDestructuringUtils.isObjectRestDestructuring(returnValue)) {
|
|
941
982
|
return context.report({
|
|
942
983
|
node: node.parent,
|
|
@@ -1017,7 +1058,10 @@ var rule4 = createRule4({
|
|
|
1017
1058
|
defaultOptions: [],
|
|
1018
1059
|
create: detectTanstackQueryImports((context, _options, helpers) => {
|
|
1019
1060
|
const trackedVariables = {};
|
|
1061
|
+
const trackedCustomHooks = {};
|
|
1020
1062
|
const hookAliasMap = {};
|
|
1063
|
+
const pendingVariableDeclarators = [];
|
|
1064
|
+
const pendingDependencyChecks = [];
|
|
1021
1065
|
function getReactHook(node) {
|
|
1022
1066
|
if (node.callee.type === "Identifier") {
|
|
1023
1067
|
const calleeName = node.callee.name;
|
|
@@ -1045,6 +1089,9 @@ var rule4 = createRule4({
|
|
|
1045
1089
|
}
|
|
1046
1090
|
}
|
|
1047
1091
|
}
|
|
1092
|
+
function isCustomHookName(hookName) {
|
|
1093
|
+
return /^use[A-Z0-9]/.test(hookName);
|
|
1094
|
+
}
|
|
1048
1095
|
function hasCombineProperty(callExpression) {
|
|
1049
1096
|
if (callExpression.arguments.length === 0) return false;
|
|
1050
1097
|
const firstArg = callExpression.arguments[0];
|
|
@@ -1054,6 +1101,60 @@ var rule4 = createRule4({
|
|
|
1054
1101
|
(prop) => prop.type === AST_NODE_TYPES7.Property && prop.key.type === AST_NODE_TYPES7.Identifier && prop.key.name === "combine"
|
|
1055
1102
|
);
|
|
1056
1103
|
}
|
|
1104
|
+
function getDirectQueryHook(callExpression) {
|
|
1105
|
+
if (callExpression.callee.type !== AST_NODE_TYPES7.Identifier || !allHookNames.includes(callExpression.callee.name) || !helpers.isTanstackQueryImport(callExpression.callee)) {
|
|
1106
|
+
return void 0;
|
|
1107
|
+
}
|
|
1108
|
+
if ((callExpression.callee.name === "useQueries" || callExpression.callee.name === "useSuspenseQueries") && hasCombineProperty(callExpression)) {
|
|
1109
|
+
return void 0;
|
|
1110
|
+
}
|
|
1111
|
+
return callExpression.callee.name;
|
|
1112
|
+
}
|
|
1113
|
+
function getTrackedQueryHook(callExpression) {
|
|
1114
|
+
const directQueryHook = getDirectQueryHook(callExpression);
|
|
1115
|
+
if (directQueryHook !== void 0) {
|
|
1116
|
+
return directQueryHook;
|
|
1117
|
+
}
|
|
1118
|
+
if (callExpression.callee.type === AST_NODE_TYPES7.Identifier) {
|
|
1119
|
+
return trackedCustomHooks[callExpression.callee.name];
|
|
1120
|
+
}
|
|
1121
|
+
return void 0;
|
|
1122
|
+
}
|
|
1123
|
+
function getReturnedQueryHook(body) {
|
|
1124
|
+
var _a;
|
|
1125
|
+
if (body.type === AST_NODE_TYPES7.CallExpression) {
|
|
1126
|
+
return getDirectQueryHook(body);
|
|
1127
|
+
}
|
|
1128
|
+
if (body.type !== AST_NODE_TYPES7.BlockStatement) {
|
|
1129
|
+
return void 0;
|
|
1130
|
+
}
|
|
1131
|
+
const returnStatements = body.body.filter(
|
|
1132
|
+
(statement) => statement.type === AST_NODE_TYPES7.ReturnStatement
|
|
1133
|
+
);
|
|
1134
|
+
if (returnStatements.length !== 1) {
|
|
1135
|
+
return void 0;
|
|
1136
|
+
}
|
|
1137
|
+
const returnArgument = (_a = returnStatements[0]) == null ? void 0 : _a.argument;
|
|
1138
|
+
if ((returnArgument == null ? void 0 : returnArgument.type) === AST_NODE_TYPES7.CallExpression) {
|
|
1139
|
+
return getDirectQueryHook(returnArgument);
|
|
1140
|
+
}
|
|
1141
|
+
return void 0;
|
|
1142
|
+
}
|
|
1143
|
+
function checkDependencyArray(reactHook, depsArray) {
|
|
1144
|
+
depsArray.elements.forEach((dep) => {
|
|
1145
|
+
if (dep !== null && dep.type === AST_NODE_TYPES7.Identifier && trackedVariables[dep.name] !== void 0) {
|
|
1146
|
+
const queryHook = trackedVariables[dep.name];
|
|
1147
|
+
context.report({
|
|
1148
|
+
node: dep,
|
|
1149
|
+
messageId: "noUnstableDeps",
|
|
1150
|
+
data: {
|
|
1151
|
+
queryHook,
|
|
1152
|
+
reactHook
|
|
1153
|
+
}
|
|
1154
|
+
});
|
|
1155
|
+
}
|
|
1156
|
+
});
|
|
1157
|
+
}
|
|
1057
1158
|
return {
|
|
1058
1159
|
ImportDeclaration(node) {
|
|
1059
1160
|
if (node.specifiers.length > 0 && node.importKind === "value" && node.source.value === "React") {
|
|
@@ -1064,33 +1165,50 @@ var rule4 = createRule4({
|
|
|
1064
1165
|
});
|
|
1065
1166
|
}
|
|
1066
1167
|
},
|
|
1168
|
+
FunctionDeclaration(node) {
|
|
1169
|
+
if (node.id === null || !isCustomHookName(node.id.name)) {
|
|
1170
|
+
return;
|
|
1171
|
+
}
|
|
1172
|
+
const queryHook = getReturnedQueryHook(node.body);
|
|
1173
|
+
if (queryHook !== void 0) {
|
|
1174
|
+
trackedCustomHooks[node.id.name] = queryHook;
|
|
1175
|
+
}
|
|
1176
|
+
},
|
|
1067
1177
|
VariableDeclarator(node) {
|
|
1068
|
-
if (node.
|
|
1069
|
-
|
|
1070
|
-
|
|
1178
|
+
if (node.id.type === AST_NODE_TYPES7.Identifier && isCustomHookName(node.id.name) && node.init !== null && (node.init.type === AST_NODE_TYPES7.ArrowFunctionExpression || node.init.type === AST_NODE_TYPES7.FunctionExpression)) {
|
|
1179
|
+
const queryHook = getReturnedQueryHook(node.init.body);
|
|
1180
|
+
if (queryHook !== void 0) {
|
|
1181
|
+
trackedCustomHooks[node.id.name] = queryHook;
|
|
1071
1182
|
}
|
|
1072
|
-
|
|
1183
|
+
}
|
|
1184
|
+
if (node.init !== null && node.init.type === AST_NODE_TYPES7.CallExpression) {
|
|
1185
|
+
pendingVariableDeclarators.push(node);
|
|
1073
1186
|
}
|
|
1074
1187
|
},
|
|
1075
1188
|
CallExpression: (node) => {
|
|
1076
1189
|
var _a;
|
|
1077
1190
|
const reactHook = getReactHook(node);
|
|
1078
1191
|
if (reactHook !== void 0 && node.arguments.length > 1 && ((_a = node.arguments[1]) == null ? void 0 : _a.type) === AST_NODE_TYPES7.ArrayExpression) {
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
const queryHook = trackedVariables[dep.name];
|
|
1083
|
-
context.report({
|
|
1084
|
-
node: dep,
|
|
1085
|
-
messageId: "noUnstableDeps",
|
|
1086
|
-
data: {
|
|
1087
|
-
queryHook,
|
|
1088
|
-
reactHook
|
|
1089
|
-
}
|
|
1090
|
-
});
|
|
1091
|
-
}
|
|
1192
|
+
pendingDependencyChecks.push({
|
|
1193
|
+
reactHook,
|
|
1194
|
+
depsArray: node.arguments[1]
|
|
1092
1195
|
});
|
|
1093
1196
|
}
|
|
1197
|
+
},
|
|
1198
|
+
"Program:exit"() {
|
|
1199
|
+
pendingVariableDeclarators.forEach((node) => {
|
|
1200
|
+
var _a;
|
|
1201
|
+
if (((_a = node.init) == null ? void 0 : _a.type) !== AST_NODE_TYPES7.CallExpression) {
|
|
1202
|
+
return;
|
|
1203
|
+
}
|
|
1204
|
+
const queryHook = getTrackedQueryHook(node.init);
|
|
1205
|
+
if (queryHook !== void 0) {
|
|
1206
|
+
collectVariableNames(node.id, queryHook);
|
|
1207
|
+
}
|
|
1208
|
+
});
|
|
1209
|
+
pendingDependencyChecks.forEach(({ reactHook, depsArray }) => {
|
|
1210
|
+
checkDependencyArray(reactHook, depsArray);
|
|
1211
|
+
});
|
|
1094
1212
|
}
|
|
1095
1213
|
};
|
|
1096
1214
|
})
|
|
@@ -1604,4 +1722,4 @@ var rules = {
|
|
|
1604
1722
|
export {
|
|
1605
1723
|
rules
|
|
1606
1724
|
};
|
|
1607
|
-
//# sourceMappingURL=chunk-
|
|
1725
|
+
//# sourceMappingURL=chunk-WVNZFPYE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/rules/exhaustive-deps/exhaustive-deps.rule.ts","../../src/utils/ast-utils.ts","../../src/utils/unique-by.ts","../../src/utils/get-docs-url.ts","../../src/utils/detect-react-query-imports.ts","../../src/rules/exhaustive-deps/exhaustive-deps.utils.ts","../../src/rules/stable-query-client/stable-query-client.rule.ts","../../src/rules/no-rest-destructuring/no-rest-destructuring.rule.ts","../../src/rules/no-rest-destructuring/no-rest-destructuring.utils.ts","../../src/rules/no-unstable-deps/no-unstable-deps.rule.ts","../../src/utils/create-property-order-rule.ts","../../src/utils/sort-data-by-order.ts","../../src/rules/infinite-query-property-order/constants.ts","../../src/rules/infinite-query-property-order/infinite-query-property-order.rule.ts","../../src/rules/no-void-query-fn/no-void-query-fn.rule.ts","../../src/rules/mutation-property-order/constants.ts","../../src/rules/mutation-property-order/mutation-property-order.rule.ts","../../src/rules/prefer-query-options/prefer-query-options.rule.ts","../../src/rules.ts"],"sourcesContent":["import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport { ExhaustiveDepsUtils } from './exhaustive-deps.utils'\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nconst QUERY_KEY = 'queryKey'\nconst QUERY_FN = 'queryFn'\n\nexport const name = 'exhaustive-deps'\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\ntype RuleOption = {\n allowlist?: {\n variables?: Array<string>\n types?: Array<string>\n }\n}\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description: 'Exhaustive deps rule for useQuery',\n recommended: 'error',\n },\n messages: {\n missingDeps: `The following dependencies are missing in your queryKey: {{deps}}`,\n fixTo: 'Fix to {{result}}',\n },\n hasSuggestions: true,\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n allowlist: {\n type: 'object',\n properties: {\n variables: { type: 'array', items: { type: 'string' } },\n types: { type: 'array', items: { type: 'string' } },\n },\n additionalProperties: false,\n },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context) => {\n return {\n ObjectExpression: (node: TSESTree.ObjectExpression) => {\n const scopeManager = context.sourceCode.scopeManager\n\n const queryKey = ASTUtils.findPropertyWithIdentifierKey(\n node.properties,\n QUERY_KEY,\n )\n const queryFn = ASTUtils.findPropertyWithIdentifierKey(\n node.properties,\n QUERY_FN,\n )\n\n if (\n scopeManager === null ||\n queryKey === undefined ||\n queryFn === undefined ||\n !ASTUtils.isNodeOfOneOf(queryFn.value, [\n AST_NODE_TYPES.ArrowFunctionExpression,\n AST_NODE_TYPES.FunctionExpression,\n AST_NODE_TYPES.ConditionalExpression,\n ])\n ) {\n return\n }\n\n const queryKeyNode = dereferenceVariablesAndTypeAssertions(\n queryKey.value,\n context,\n )\n\n const queryFnNodes = ExhaustiveDepsUtils.getQueryFnNodes(queryFn)\n\n const externalRefs = queryFnNodes.flatMap((fnNode) =>\n ASTUtils.getExternalRefs({\n scopeManager,\n sourceCode: context.sourceCode,\n node: fnNode,\n }),\n )\n\n const relevantRefs = externalRefs.filter((reference) =>\n queryFnNodes.some((fnNode) =>\n ExhaustiveDepsUtils.isRelevantReference({\n sourceCode: context.sourceCode,\n reference,\n scopeManager,\n node: fnNode,\n filename: context.filename,\n }),\n ),\n )\n\n const ruleOptions = context.options.at(0) as RuleOption | undefined\n const allowlistedVariables = new Set(\n ruleOptions?.allowlist?.variables ?? [],\n )\n const allowlistedTypes = new Set(ruleOptions?.allowlist?.types ?? [])\n\n const requiredRefs = relevantRefs.flatMap((ref) => {\n if (ref.identifier.type !== AST_NODE_TYPES.Identifier) return []\n\n const refPath = ExhaustiveDepsUtils.computeRefPath({\n identifier: ref.identifier,\n sourceCode: context.sourceCode,\n })\n\n if (refPath === null) return []\n\n return [\n {\n ...refPath,\n allowlistedByType:\n ExhaustiveDepsUtils.variableIsAllowlistedByType({\n allowlistedTypes,\n variable: ref.resolved ?? null,\n }),\n },\n ]\n })\n\n if (requiredRefs.length === 0) return\n\n const queryKeyDeps = ExhaustiveDepsUtils.collectQueryKeyDeps({\n sourceCode: context.sourceCode,\n scopeManager: scopeManager,\n queryKeyNode: queryKeyNode,\n })\n\n const missingPaths = ExhaustiveDepsUtils.computeFilteredMissingPaths({\n requiredRefs: requiredRefs,\n allowlistedVariables: allowlistedVariables,\n existingRootIdentifiers: queryKeyDeps.roots,\n existingFullPaths: queryKeyDeps.paths,\n })\n\n if (missingPaths.length === 0) return\n\n const missingAsText = missingPaths.join(', ')\n const suggestions = buildSuggestions({\n queryKeyNode,\n missingPaths,\n missingAsText,\n sourceCode: context.sourceCode,\n })\n\n context.report({\n node,\n messageId: 'missingDeps',\n data: { deps: missingAsText },\n suggest: suggestions,\n })\n },\n }\n }),\n})\n\nfunction buildSuggestions(params: {\n queryKeyNode: TSESTree.Node\n missingPaths: Array<string>\n missingAsText: string\n sourceCode: Readonly<TSESLint.SourceCode>\n}): TSESLint.ReportSuggestionArray<string> {\n const { queryKeyNode, missingPaths, missingAsText, sourceCode } = params\n\n if (queryKeyNode.type !== AST_NODE_TYPES.ArrayExpression) {\n return []\n }\n\n const closingBracket = sourceCode.getLastToken(queryKeyNode)\n if (!closingBracket) return []\n\n const existingElements = queryKeyNode.elements\n .filter((el): el is NonNullable<typeof el> => el !== null)\n .map((el) => sourceCode.getText(el))\n\n const resultText = `[${[...existingElements, ...missingPaths].join(', ')}]`\n\n if (queryKeyNode.elements.length === 0) {\n return [\n {\n messageId: 'fixTo',\n data: { result: resultText },\n fix: (fixer) => fixer.replaceText(queryKeyNode, resultText),\n },\n ]\n }\n\n const tokenBefore = sourceCode.getTokenBefore(closingBracket)\n const separator = tokenBefore?.value === ',' ? ' ' : ', '\n\n return [\n {\n messageId: 'fixTo',\n data: { result: resultText },\n fix: (fixer) =>\n fixer.insertTextBefore(closingBracket, `${separator}${missingAsText}`),\n },\n ]\n}\n\nfunction dereferenceVariablesAndTypeAssertions(\n queryKeyNode: TSESTree.Node,\n context: Readonly<TSESLint.RuleContext<string, ReadonlyArray<unknown>>>,\n) {\n const visitedNodes = new Set<TSESTree.Node>()\n\n for (let i = 0; i < 1 << 8; ++i) {\n if (visitedNodes.has(queryKeyNode)) {\n return queryKeyNode\n }\n visitedNodes.add(queryKeyNode)\n\n switch (queryKeyNode.type) {\n case AST_NODE_TYPES.TSAsExpression:\n queryKeyNode = queryKeyNode.expression\n break\n case AST_NODE_TYPES.Identifier: {\n const expression = ASTUtils.getReferencedExpressionByIdentifier({\n context,\n node: queryKeyNode,\n })\n\n if (expression == null) {\n return queryKeyNode\n }\n queryKeyNode = expression\n break\n }\n default:\n return queryKeyNode\n }\n }\n return queryKeyNode\n}\n","import { AST_NODE_TYPES } from '@typescript-eslint/utils'\nimport { uniqueBy } from './unique-by'\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils'\n\nexport const ASTUtils = {\n isNodeOfOneOf<T extends AST_NODE_TYPES>(\n node: TSESTree.Node,\n types: ReadonlyArray<T>,\n ): node is TSESTree.Node & { type: T } {\n return types.includes(node.type as T)\n },\n isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier {\n return node.type === AST_NODE_TYPES.Identifier\n },\n isIdentifierWithName(\n node: TSESTree.Node,\n name: string,\n ): node is TSESTree.Identifier {\n return ASTUtils.isIdentifier(node) && node.name === name\n },\n isIdentifierWithOneOfNames<T extends Array<string>>(\n node: TSESTree.Node,\n name: T,\n ): node is TSESTree.Identifier & { name: T[number] } {\n return ASTUtils.isIdentifier(node) && name.includes(node.name)\n },\n isProperty(node: TSESTree.Node): node is TSESTree.Property {\n return node.type === AST_NODE_TYPES.Property\n },\n isObjectExpression(node: TSESTree.Node): node is TSESTree.ObjectExpression {\n return node.type === AST_NODE_TYPES.ObjectExpression\n },\n isPropertyWithIdentifierKey(\n node: TSESTree.Node,\n key: string,\n ): node is TSESTree.Property {\n return (\n ASTUtils.isProperty(node) && ASTUtils.isIdentifierWithName(node.key, key)\n )\n },\n findPropertyWithIdentifierKey(\n properties: Array<TSESTree.ObjectLiteralElement>,\n key: string,\n ): TSESTree.Property | undefined {\n return properties.find((x): x is TSESTree.Property =>\n ASTUtils.isPropertyWithIdentifierKey(x, key),\n )\n },\n getNestedIdentifiers(node: TSESTree.Node): Array<TSESTree.Identifier> {\n const identifiers: Array<TSESTree.Identifier> = []\n\n if (ASTUtils.isIdentifier(node)) {\n identifiers.push(node)\n }\n\n if ('arguments' in node) {\n node.arguments.forEach((x) => {\n identifiers.push(...ASTUtils.getNestedIdentifiers(x))\n })\n }\n\n if ('elements' in node) {\n node.elements.forEach((x) => {\n if (x !== null) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(x))\n }\n })\n }\n\n if ('properties' in node) {\n node.properties.forEach((x) => {\n identifiers.push(...ASTUtils.getNestedIdentifiers(x))\n })\n }\n\n if ('expressions' in node) {\n node.expressions.forEach((x) => {\n identifiers.push(...ASTUtils.getNestedIdentifiers(x))\n })\n }\n\n if ('left' in node) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.left))\n }\n\n if ('right' in node) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.right))\n }\n\n if (node.type === AST_NODE_TYPES.Property) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.value))\n }\n\n if (node.type === AST_NODE_TYPES.SpreadElement) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.argument))\n }\n\n if (node.type === AST_NODE_TYPES.MemberExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.object))\n }\n\n if (node.type === AST_NODE_TYPES.UnaryExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.argument))\n }\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.expression))\n }\n\n if (node.type === AST_NODE_TYPES.TSNonNullExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.expression))\n }\n\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.body))\n }\n\n if (node.type === AST_NODE_TYPES.FunctionExpression) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.body))\n }\n\n if (node.type === AST_NODE_TYPES.BlockStatement) {\n identifiers.push(\n ...node.body.map((body) => ASTUtils.getNestedIdentifiers(body)).flat(),\n )\n }\n\n if (node.type === AST_NODE_TYPES.ReturnStatement && node.argument) {\n identifiers.push(...ASTUtils.getNestedIdentifiers(node.argument))\n }\n\n return identifiers\n },\n traverseUpOnly(\n identifier: TSESTree.Node,\n allowedNodeTypes: Array<AST_NODE_TYPES>,\n ): TSESTree.Node {\n const parent = identifier.parent\n\n if (parent !== undefined && allowedNodeTypes.includes(parent.type)) {\n return ASTUtils.traverseUpOnly(parent, allowedNodeTypes)\n }\n\n return identifier\n },\n isDeclaredInNode(params: {\n functionNode: TSESTree.Node\n reference: TSESLint.Scope.Reference\n scopeManager: TSESLint.Scope.ScopeManager\n }) {\n const { functionNode, reference, scopeManager } = params\n const scope = scopeManager.acquire(functionNode)\n\n if (scope === null) {\n return false\n }\n\n return scope.set.has(reference.identifier.name)\n },\n getExternalRefs(params: {\n scopeManager: TSESLint.Scope.ScopeManager\n sourceCode: Readonly<TSESLint.SourceCode>\n node: TSESTree.Node\n }): Array<TSESLint.Scope.Reference> {\n const { scopeManager, sourceCode, node } = params\n const scope = scopeManager.acquire(node)\n\n if (scope === null) {\n return []\n }\n\n const collectReferences = (\n currentScope: TSESLint.Scope.Scope,\n ): Array<TSESLint.Scope.Reference> => {\n const references = [...currentScope.references]\n\n for (const childScope of currentScope.childScopes) {\n references.push(...collectReferences(childScope))\n }\n\n return references\n }\n\n const references = collectReferences(scope)\n .filter((x) => x.isRead() && !scope.set.has(x.identifier.name))\n .map((x) => {\n const referenceNode = ASTUtils.traverseUpOnly(x.identifier, [\n AST_NODE_TYPES.MemberExpression,\n AST_NODE_TYPES.Identifier,\n ])\n\n return {\n variable: x,\n node: referenceNode,\n text: sourceCode.getText(referenceNode),\n }\n })\n\n const localRefIds = new Set(\n [...scope.set.values()].map((x) => sourceCode.getText(x.identifiers[0])),\n )\n\n const externalRefs = references.filter(\n (x) => x.variable.resolved === null || !localRefIds.has(x.text),\n )\n\n return uniqueBy(externalRefs, (x) => x.text).map((x) => x.variable)\n },\n mapKeyNodeToText(\n node: TSESTree.Node,\n sourceCode: Readonly<TSESLint.SourceCode>,\n ) {\n return sourceCode.getText(\n ASTUtils.traverseUpOnly(node, [\n AST_NODE_TYPES.MemberExpression,\n AST_NODE_TYPES.TSNonNullExpression,\n AST_NODE_TYPES.Identifier,\n ]),\n )\n },\n mapKeyNodeToBaseText(\n node: TSESTree.Node,\n sourceCode: Readonly<TSESLint.SourceCode>,\n ) {\n return ASTUtils.mapKeyNodeToText(node, sourceCode).replace(\n /(?:\\?(\\.)|!)/g,\n '$1',\n )\n },\n isValidReactComponentOrHookName(\n identifier: TSESTree.Identifier | null | undefined,\n ) {\n return (\n identifier !== null &&\n identifier !== undefined &&\n /^(use|[A-Z])/.test(identifier.name)\n )\n },\n getFunctionAncestor(\n sourceCode: Readonly<TSESLint.SourceCode>,\n node: TSESTree.Node,\n ) {\n for (const ancestor of sourceCode.getAncestors(node)) {\n if (\n ASTUtils.isNodeOfOneOf(ancestor, [\n AST_NODE_TYPES.FunctionDeclaration,\n AST_NODE_TYPES.FunctionExpression,\n AST_NODE_TYPES.ArrowFunctionExpression,\n ])\n ) {\n return ancestor\n }\n\n if (\n ancestor.parent?.type === AST_NODE_TYPES.VariableDeclarator &&\n ancestor.parent.id.type === AST_NODE_TYPES.Identifier &&\n ASTUtils.isNodeOfOneOf(ancestor, [\n AST_NODE_TYPES.FunctionDeclaration,\n AST_NODE_TYPES.FunctionExpression,\n AST_NODE_TYPES.ArrowFunctionExpression,\n ])\n ) {\n return ancestor\n }\n }\n\n return undefined\n },\n getReferencedExpressionByIdentifier(params: {\n node: TSESTree.Node\n context: Readonly<TSESLint.RuleContext<string, ReadonlyArray<unknown>>>\n }) {\n const { node, context } = params\n\n // we need the fallbacks for backwards compat with eslint < 8.37.0\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const sourceCode = context.sourceCode ?? context.getSourceCode()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const scope = context.sourceCode.getScope(node)\n ? sourceCode.getScope(node)\n : context.getScope()\n\n const resolvedNode = scope.references.find((ref) => ref.identifier === node)\n ?.resolved?.defs[0]?.node\n\n if (resolvedNode?.type !== AST_NODE_TYPES.VariableDeclarator) {\n return null\n }\n\n return resolvedNode.init\n },\n getClosestVariableDeclarator(node: TSESTree.Node) {\n let currentNode: TSESTree.Node | undefined = node\n\n while (currentNode.type !== AST_NODE_TYPES.Program) {\n if (currentNode.type === AST_NODE_TYPES.VariableDeclarator) {\n return currentNode\n }\n\n currentNode = currentNode.parent\n }\n\n return undefined\n },\n getNestedReturnStatements(\n node: TSESTree.Node,\n ): Array<TSESTree.ReturnStatement> {\n const returnStatements: Array<TSESTree.ReturnStatement> = []\n\n if (node.type === AST_NODE_TYPES.ReturnStatement) {\n returnStatements.push(node)\n }\n\n if ('body' in node && node.body !== undefined && node.body !== null) {\n Array.isArray(node.body)\n ? node.body.forEach((x) => {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(x))\n })\n : returnStatements.push(\n ...ASTUtils.getNestedReturnStatements(node.body),\n )\n }\n\n if ('consequent' in node) {\n Array.isArray(node.consequent)\n ? node.consequent.forEach((x) => {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(x))\n })\n : returnStatements.push(\n ...ASTUtils.getNestedReturnStatements(node.consequent),\n )\n }\n\n if ('alternate' in node && node.alternate !== null) {\n Array.isArray(node.alternate)\n ? node.alternate.forEach((x) => {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(x))\n })\n : returnStatements.push(\n ...ASTUtils.getNestedReturnStatements(node.alternate),\n )\n }\n\n if ('cases' in node) {\n node.cases.forEach((x) => {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(x))\n })\n }\n\n if ('block' in node) {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(node.block))\n }\n\n if ('handler' in node && node.handler !== null) {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(node.handler))\n }\n\n if ('finalizer' in node && node.finalizer !== null) {\n returnStatements.push(\n ...ASTUtils.getNestedReturnStatements(node.finalizer),\n )\n }\n\n if (\n 'expression' in node &&\n node.expression !== true &&\n node.expression !== false\n ) {\n returnStatements.push(\n ...ASTUtils.getNestedReturnStatements(node.expression),\n )\n }\n\n if ('test' in node && node.test !== null) {\n returnStatements.push(...ASTUtils.getNestedReturnStatements(node.test))\n }\n\n return returnStatements\n },\n}\n","export function uniqueBy<T>(arr: Array<T>, fn: (x: T) => unknown): Array<T> {\n return arr.filter((x, i, a) => a.findIndex((y) => fn(x) === fn(y)) === i)\n}\n","export const getDocsUrl = (ruleName: string): string =>\n `https://tanstack.com/query/latest/docs/eslint/${ruleName}`\n","import { TSESTree } from '@typescript-eslint/utils'\nimport type { ESLintUtils, TSESLint } from '@typescript-eslint/utils'\n\ntype Create = Parameters<\n ReturnType<typeof ESLintUtils.RuleCreator>\n>[0]['create']\n\ntype Context = Parameters<Create>[0]\ntype Options = Parameters<Create>[1]\ntype Helpers = {\n isSpecificTanstackQueryImport: (\n node: TSESTree.Identifier,\n source: string,\n ) => boolean\n isTanstackQueryImport: (node: TSESTree.Identifier) => boolean\n}\n\ntype EnhancedCreate = (\n context: Context,\n options: Options,\n helpers: Helpers,\n) => ReturnType<Create>\n\nexport function detectTanstackQueryImports(create: EnhancedCreate): Create {\n return (context, optionsWithDefault) => {\n const tanstackQueryImportSpecifiers: Array<TSESTree.ImportClause> = []\n\n const helpers: Helpers = {\n isSpecificTanstackQueryImport(node, source) {\n return !!tanstackQueryImportSpecifiers.find((specifier) => {\n if (\n specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier &&\n specifier.parent.type ===\n TSESTree.AST_NODE_TYPES.ImportDeclaration &&\n specifier.parent.source.value === source\n ) {\n return node.name === specifier.local.name\n }\n\n return false\n })\n },\n isTanstackQueryImport(node) {\n return !!tanstackQueryImportSpecifiers.find((specifier) => {\n if (specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier) {\n return node.name === specifier.local.name\n }\n\n return false\n })\n },\n }\n\n const detectionInstructions: TSESLint.RuleListener = {\n ImportDeclaration(node) {\n if (\n node.specifiers.length > 0 &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (node.importKind === 'value' || node.importKind === undefined) &&\n node.source.value.startsWith('@tanstack/') &&\n node.source.value.endsWith('-query')\n ) {\n tanstackQueryImportSpecifiers.push(...node.specifiers)\n }\n },\n }\n\n // Call original rule definition\n const ruleInstructions = create(context, optionsWithDefault, helpers)\n const enhancedRuleInstructions: TSESLint.RuleListener = {}\n\n const allKeys = new Set(\n Object.keys(detectionInstructions).concat(Object.keys(ruleInstructions)),\n )\n\n // Iterate over ALL instructions keys so we can override original rule instructions\n // to prevent their execution if conditions to report errors are not met.\n allKeys.forEach((instruction) => {\n enhancedRuleInstructions[instruction] = (node) => {\n if (instruction in detectionInstructions) {\n detectionInstructions[instruction]?.(node)\n }\n\n const ruleInstruction = ruleInstructions[instruction]\n\n // TODO: canReportErrors()\n if (ruleInstruction) {\n return ruleInstruction(node)\n }\n\n return undefined\n }\n })\n\n return enhancedRuleInstructions\n }\n}\n","import { AST_NODE_TYPES } from '@typescript-eslint/utils'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils'\n\nexport const ExhaustiveDepsUtils = {\n isRelevantReference(params: {\n sourceCode: Readonly<TSESLint.SourceCode>\n reference: TSESLint.Scope.Reference\n scopeManager: TSESLint.Scope.ScopeManager\n node: TSESTree.Node\n filename: string\n }) {\n const { sourceCode, reference, scopeManager, node, filename } = params\n const component = ASTUtils.getFunctionAncestor(sourceCode, node)\n const queryFnScope = scopeManager.acquire(node)\n\n if (queryFnScope === null || reference.isValueReference === false) {\n return false\n }\n\n let currentScope = reference.resolved?.scope ?? null\n while (currentScope !== null) {\n if (currentScope === queryFnScope) {\n return false\n }\n\n currentScope = currentScope.upper\n }\n\n if (component !== undefined) {\n if (\n !ASTUtils.isDeclaredInNode({\n scopeManager,\n reference,\n functionNode: component,\n })\n ) {\n return false\n }\n } else {\n const isVueFile = filename.endsWith('.vue')\n\n if (!isVueFile) {\n return false\n }\n\n const definition = reference.resolved?.defs[0]\n const isGlobalVariable = definition === undefined\n const isImport = definition?.type === 'ImportBinding'\n\n if (isGlobalVariable || isImport) {\n return false\n }\n }\n\n return (\n reference.identifier.name !== 'undefined' &&\n reference.identifier.parent.type !== AST_NODE_TYPES.NewExpression &&\n !ExhaustiveDepsUtils.isInstanceOfKind(reference.identifier.parent)\n )\n },\n\n /**\n * Given required refs and existing queryKey entries, compute missing dependency paths\n * respecting allowlisted variables and types.\n */\n computeFilteredMissingPaths(params: {\n requiredRefs: Array<{\n path: string\n root: string\n allowlistedByType: boolean\n }>\n allowlistedVariables: Set<string>\n existingRootIdentifiers: Set<string>\n existingFullPaths: Set<string>\n }): Array<string> {\n const {\n requiredRefs,\n allowlistedVariables,\n existingRootIdentifiers,\n existingFullPaths,\n } = params\n\n const missingPaths = new Set<string>()\n\n for (const { root, path, allowlistedByType } of requiredRefs) {\n // If root itself is present in the key, it covers all members\n if (existingRootIdentifiers.has(root)) continue\n if (allowlistedVariables.has(root)) continue\n if (existingFullPaths.has(path)) continue\n if (allowlistedByType) continue\n\n missingPaths.add(path)\n }\n\n // Collapse descendants: if a root is already missing, drop deeper paths\n for (const path of missingPaths) {\n const root = path.split('.')[0]\n if (root !== path && root !== undefined && missingPaths.has(root)) {\n missingPaths.delete(path)\n }\n }\n\n return Array.from(missingPaths)\n },\n\n /**\n * Extract existing queryKey deps as root identifiers and full member paths.\n */\n collectQueryKeyDeps(params: {\n sourceCode: Readonly<TSESLint.SourceCode>\n scopeManager: TSESLint.Scope.ScopeManager\n queryKeyNode: TSESTree.Node\n }): { roots: Set<string>; paths: Set<string> } {\n const { sourceCode, scopeManager, queryKeyNode } = params\n const roots = new Set<string>()\n const paths = new Set<string>()\n const visitorKeys = sourceCode.visitorKeys\n\n function addRoot(name: string) {\n const cleaned = ExhaustiveDepsUtils.normalizeChain(name)\n roots.add(cleaned)\n paths.add(cleaned)\n }\n function addFull(text: string) {\n const cleaned = ExhaustiveDepsUtils.normalizeChain(text)\n paths.add(cleaned)\n }\n function addRefPath(\n refPath: {\n path: string\n root: string\n coversRootMembers: boolean\n } | null,\n ) {\n if (!refPath) return\n\n if (refPath.coversRootMembers) {\n addRoot(refPath.root)\n return\n }\n\n addFull(refPath.path)\n }\n\n function visitChildren(node: TSESTree.Node): void {\n const keys = (visitorKeys[node.type] ?? []) as ReadonlyArray<\n keyof TSESTree.Node\n >\n\n for (const key of keys) {\n const value = node[key]\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (ExhaustiveDepsUtils.isNode(item)) {\n visit(item)\n }\n }\n continue\n }\n\n if (ExhaustiveDepsUtils.isNode(value)) {\n visit(value)\n }\n }\n }\n\n function visit(node: TSESTree.Node | null | undefined): void {\n if (!node) return\n\n switch (node.type) {\n case AST_NODE_TYPES.Identifier: {\n addRefPath(\n ExhaustiveDepsUtils.computeRefPath({\n identifier: node,\n sourceCode: sourceCode,\n }),\n )\n return\n }\n case AST_NODE_TYPES.ArrowFunctionExpression:\n case AST_NODE_TYPES.FunctionExpression:\n for (const reference of ExhaustiveDepsUtils.collectExternalRefsInFunction(\n {\n functionNode: node,\n scopeManager: scopeManager,\n },\n )) {\n if (reference.identifier.type !== AST_NODE_TYPES.Identifier) {\n continue\n }\n\n addRefPath(\n ExhaustiveDepsUtils.computeRefPath({\n identifier: reference.identifier,\n sourceCode: sourceCode,\n }),\n )\n }\n return\n case AST_NODE_TYPES.Property:\n visit(node.value)\n return\n case AST_NODE_TYPES.MemberExpression:\n if (\n node.parent.type === AST_NODE_TYPES.CallExpression &&\n node.parent.callee === node &&\n node.object.type === AST_NODE_TYPES.Identifier\n ) {\n addRoot(node.object.name)\n } else {\n visit(node.object)\n }\n return\n case AST_NODE_TYPES.CallExpression:\n node.arguments.forEach((argument) => visit(argument))\n switch (node.callee.type) {\n case AST_NODE_TYPES.Identifier:\n case AST_NODE_TYPES.MemberExpression:\n case AST_NODE_TYPES.ChainExpression:\n case AST_NODE_TYPES.TSNonNullExpression:\n visit(node.callee)\n break\n }\n return\n }\n\n visitChildren(node)\n }\n\n visit(queryKeyNode)\n\n return { roots, paths }\n },\n\n isNode(value: unknown): value is TSESTree.Node {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n typeof value.type === 'string'\n )\n },\n\n /**\n * Checks whether the resolved variable is allowlisted by its type annotation\n */\n variableIsAllowlistedByType(params: {\n allowlistedTypes: Set<string>\n variable: TSESLint.Scope.Variable | null\n }): boolean {\n const { allowlistedTypes, variable } = params\n if (allowlistedTypes.size === 0) return false\n if (!variable) return false\n\n for (const id of variable.identifiers) {\n if (id.typeAnnotation) {\n const typeIdentifiers = new Set<string>()\n ExhaustiveDepsUtils.collectTypeIdentifiers(\n id.typeAnnotation.typeAnnotation,\n typeIdentifiers,\n )\n for (const typeIdentifier of typeIdentifiers) {\n if (allowlistedTypes.has(typeIdentifier)) return true\n }\n }\n }\n\n return false\n },\n isInstanceOfKind(node: TSESTree.Node) {\n return (\n node.type === AST_NODE_TYPES.BinaryExpression &&\n node.operator === 'instanceof'\n )\n },\n\n /**\n * Normalizes a chain by removing optional chaining operators\n *\n * Example: `a?.b.c!` -> `a.b.c`\n */\n normalizeChain(text: string): string {\n return text.replace(/(?:\\?(\\.)|!)/g, '$1').replace(/\\s+/g, '')\n },\n\n /**\n * Computes the reference path for an identifier\n *\n * Example: `a.b.c!` -> `{ path: 'a.b.c', root: 'a' }`\n */\n computeRefPath(params: {\n identifier: TSESTree.Identifier\n sourceCode: Readonly<TSESLint.SourceCode>\n }): { path: string; root: string; coversRootMembers: boolean } | null {\n const { identifier, sourceCode } = params\n\n const fullChainNode = ASTUtils.traverseUpOnly(identifier, [\n AST_NODE_TYPES.MemberExpression,\n AST_NODE_TYPES.TSNonNullExpression,\n AST_NODE_TYPES.Identifier,\n ])\n\n const fullText = ExhaustiveDepsUtils.normalizeChain(\n sourceCode.getText(fullChainNode),\n )\n\n const parent = fullChainNode.parent\n let dependencyPath = fullText\n let coversRootMembers = fullText === identifier.name\n\n if (\n parent &&\n parent.type === AST_NODE_TYPES.CallExpression &&\n parent.callee === fullChainNode\n ) {\n const segments = fullText.split('.')\n if (segments.length > 1) {\n dependencyPath = segments.slice(0, -1).join('.')\n }\n\n coversRootMembers = false\n }\n\n dependencyPath =\n dependencyPath.split('.')[0] === '' ? identifier.name : dependencyPath\n const root = dependencyPath.split('.')[0]\n\n return {\n path: dependencyPath,\n root: root ?? identifier.name,\n coversRootMembers: coversRootMembers && dependencyPath === root,\n }\n },\n\n collectExternalRefsInFunction(params: {\n functionNode: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression\n scopeManager: TSESLint.Scope.ScopeManager\n }): Array<TSESLint.Scope.Reference> {\n const { functionNode, scopeManager } = params\n const functionScope = scopeManager.acquire(functionNode)\n\n if (functionScope === null) {\n return []\n }\n\n const externalRefs: Array<TSESLint.Scope.Reference> = []\n\n function collect(scope: TSESLint.Scope.Scope) {\n for (const reference of scope.references) {\n if (!reference.isRead() || reference.resolved === null) {\n continue\n }\n\n let currentScope: TSESLint.Scope.Scope | null = reference.resolved.scope\n let declaredInsideFunction = false\n\n while (currentScope !== null) {\n if (currentScope === functionScope) {\n declaredInsideFunction = true\n break\n }\n\n currentScope = currentScope.upper\n }\n\n if (!declaredInsideFunction) {\n externalRefs.push(reference)\n }\n }\n\n for (const childScope of scope.childScopes) {\n collect(childScope)\n }\n }\n\n collect(functionScope)\n\n return externalRefs\n },\n\n /**\n * Recursively collects type identifiers from a type annotation\n */\n collectTypeIdentifiers(typeNode: TSESTree.TypeNode, out: Set<string>): void {\n switch (typeNode.type) {\n case AST_NODE_TYPES.TSTypeReference: {\n if (typeNode.typeName.type === AST_NODE_TYPES.Identifier) {\n out.add(typeNode.typeName.name)\n }\n break\n }\n case AST_NODE_TYPES.TSUnionType:\n case AST_NODE_TYPES.TSIntersectionType: {\n typeNode.types.forEach((t) =>\n ExhaustiveDepsUtils.collectTypeIdentifiers(t, out),\n )\n break\n }\n case AST_NODE_TYPES.TSArrayType: {\n ExhaustiveDepsUtils.collectTypeIdentifiers(typeNode.elementType, out)\n break\n }\n case AST_NODE_TYPES.TSTupleType: {\n typeNode.elementTypes.forEach((et) =>\n ExhaustiveDepsUtils.collectTypeIdentifiers(et, out),\n )\n break\n }\n }\n },\n\n /**\n * Gets the function expression nodes from a queryFn property, handling conditional expressions.\n * When neither branch is skipToken, returns both branches so all deps are scanned.\n */\n getQueryFnNodes(queryFn: TSESTree.Property): Array<TSESTree.Node> {\n if (queryFn.value.type !== AST_NODE_TYPES.ConditionalExpression) {\n return [queryFn.value]\n }\n\n if (\n queryFn.value.consequent.type === AST_NODE_TYPES.Identifier &&\n queryFn.value.consequent.name === 'skipToken'\n ) {\n return [queryFn.value.alternate]\n }\n\n if (\n queryFn.value.alternate.type === AST_NODE_TYPES.Identifier &&\n queryFn.value.alternate.name === 'skipToken'\n ) {\n return [queryFn.value.consequent]\n }\n\n return [queryFn.value.consequent, queryFn.value.alternate]\n },\n}\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport type { TSESLint } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nexport const name = 'stable-query-client'\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description: 'Makes sure that QueryClient is stable',\n recommended: 'error',\n },\n messages: {\n unstable: [\n 'QueryClient is not stable. It should be either extracted from the component or wrapped in React.useState.',\n 'See https://tkdodo.eu/blog/react-query-fa-qs#2-the-queryclient-is-not-stable',\n ].join('\\n'),\n fixTo: 'Fix to {{result}}',\n },\n hasSuggestions: true,\n fixable: 'code',\n schema: [],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context, _, helpers) => {\n return {\n NewExpression: (node) => {\n if (\n node.callee.type !== AST_NODE_TYPES.Identifier ||\n node.callee.name !== 'QueryClient' ||\n node.parent.type !== AST_NODE_TYPES.VariableDeclarator ||\n !helpers.isSpecificTanstackQueryImport(\n node.callee,\n '@tanstack/react-query',\n )\n ) {\n return\n }\n\n const fnAncestor = ASTUtils.getFunctionAncestor(\n context.sourceCode,\n node,\n )\n const isReactServerComponent = fnAncestor?.async === true\n\n if (\n !ASTUtils.isValidReactComponentOrHookName(fnAncestor?.id) ||\n isReactServerComponent\n ) {\n return\n }\n\n context.report({\n node: node.parent,\n messageId: 'unstable',\n fix: (() => {\n const { parent } = node\n\n if (parent.id.type !== AST_NODE_TYPES.Identifier) {\n return\n }\n\n // we need the fallbacks for backwards compat with eslint < 8.37.0\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const sourceCode = context.sourceCode ?? context.getSourceCode()\n const nodeText = sourceCode.getText(node)\n const variableName = parent.id.name\n\n return (fixer: TSESLint.RuleFixer) => {\n return fixer.replaceTextRange(\n [parent.range[0], parent.range[1]],\n `[${variableName}] = React.useState(() => ${nodeText})`,\n )\n }\n })(),\n })\n },\n }\n }),\n})\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport { NoRestDestructuringUtils } from './no-rest-destructuring.utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nexport const name = 'no-rest-destructuring'\n\nconst queryHooks = [\n 'useQuery',\n 'useQueries',\n 'useInfiniteQuery',\n 'useSuspenseQuery',\n 'useSuspenseQueries',\n 'useSuspenseInfiniteQuery',\n]\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description: 'Disallows rest destructuring in queries',\n recommended: 'warn',\n },\n messages: {\n objectRestDestructure: `Object rest destructuring on a query will observe all changes to the query, leading to excessive re-renders.`,\n },\n schema: [],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context, _, helpers) => {\n const queryResultVariables = new Set<string>()\n\n return {\n CallExpression: (node) => {\n if (node.parent.type !== AST_NODE_TYPES.VariableDeclarator) {\n return\n }\n\n const returnValue = node.parent.id\n\n const isDirectHook =\n ASTUtils.isIdentifierWithOneOfNames(node.callee, queryHooks) &&\n helpers.isTanstackQueryImport(node.callee)\n\n if (!isDirectHook) {\n // The type-aware path can only report when the result is rest\n // destructured or assigned to an identifier that may later be\n // spread. Skip the expensive type lookup for any other binding.\n const canReportQueryResult =\n returnValue.type === AST_NODE_TYPES.Identifier ||\n NoRestDestructuringUtils.isObjectRestDestructuring(returnValue)\n\n if (\n !canReportQueryResult ||\n !NoRestDestructuringUtils.isQueryResultCall(\n node,\n context.sourceCode.parserServices,\n )\n ) {\n return\n }\n }\n\n const calleeName = ASTUtils.isIdentifier(node.callee)\n ? node.callee.name\n : null\n\n if (\n calleeName !== 'useQueries' &&\n calleeName !== 'useSuspenseQueries'\n ) {\n if (NoRestDestructuringUtils.isObjectRestDestructuring(returnValue)) {\n return context.report({\n node: node.parent,\n messageId: 'objectRestDestructure',\n })\n }\n\n if (returnValue.type === AST_NODE_TYPES.Identifier) {\n queryResultVariables.add(returnValue.name)\n }\n\n return\n }\n\n if (returnValue.type !== AST_NODE_TYPES.ArrayPattern) {\n if (returnValue.type === AST_NODE_TYPES.Identifier) {\n queryResultVariables.add(returnValue.name)\n }\n return\n }\n\n returnValue.elements.forEach((queryResult) => {\n if (queryResult === null) {\n return\n }\n if (NoRestDestructuringUtils.isObjectRestDestructuring(queryResult)) {\n context.report({\n node: queryResult,\n messageId: 'objectRestDestructure',\n })\n }\n })\n },\n\n VariableDeclarator: (node) => {\n if (\n node.init?.type === AST_NODE_TYPES.Identifier &&\n queryResultVariables.has(node.init.name) &&\n NoRestDestructuringUtils.isObjectRestDestructuring(node.id)\n ) {\n context.report({\n node,\n messageId: 'objectRestDestructure',\n })\n }\n },\n\n SpreadElement: (node) => {\n if (\n node.argument.type === AST_NODE_TYPES.Identifier &&\n queryResultVariables.has(node.argument.name)\n ) {\n context.report({\n node,\n messageId: 'objectRestDestructure',\n })\n }\n },\n }\n }),\n})\n","import { AST_NODE_TYPES } from '@typescript-eslint/utils'\nimport type {\n ParserServices,\n ParserServicesWithTypeInformation,\n TSESTree,\n} from '@typescript-eslint/utils'\n\ntype TypeChecker = ReturnType<\n ParserServicesWithTypeInformation['program']['getTypeChecker']\n>\ntype Type = ReturnType<TypeChecker['getTypeAtLocation']>\n\nconst QUERY_RESULT_TYPE_NAMES = new Set([\n 'UseBaseQueryResult',\n 'UseQueryResult',\n 'UseSuspenseQueryResult',\n 'DefinedUseQueryResult',\n 'UseInfiniteQueryResult',\n 'UseSuspenseInfiniteQueryResult',\n 'DefinedUseInfiniteQueryResult',\n 'QueryObserverResult',\n 'InfiniteQueryObserverResult',\n])\n\nfunction isQueryResultType(type: Type): boolean {\n if (type.aliasSymbol && QUERY_RESULT_TYPE_NAMES.has(type.aliasSymbol.name)) {\n return true\n }\n const symbol = type.getSymbol()\n if (symbol && QUERY_RESULT_TYPE_NAMES.has(symbol.name)) {\n return true\n }\n return type.isUnion() && type.types.some(isQueryResultType)\n}\n\nexport const NoRestDestructuringUtils = {\n isObjectRestDestructuring(node: TSESTree.Node): boolean {\n if (node.type !== AST_NODE_TYPES.ObjectPattern) {\n return false\n }\n return node.properties.some((p) => p.type === AST_NODE_TYPES.RestElement)\n },\n isQueryResultCall(\n node: TSESTree.CallExpression,\n parserServices: Partial<ParserServices> | null | undefined,\n ): boolean {\n if (!parserServices?.program || !parserServices.esTreeNodeToTSNodeMap) {\n return false\n }\n const checker = parserServices.program.getTypeChecker()\n const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.callee)\n const signatures = checker.getTypeAtLocation(tsNode).getCallSignatures()\n return signatures.some((sig) => isQueryResultType(sig.getReturnType()))\n },\n}\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport type { TSESTree } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nexport const name = 'no-unstable-deps'\n\nexport const reactHookNames = ['useEffect', 'useCallback', 'useMemo']\nexport const useQueryHookNames = [\n 'useQuery',\n 'useSuspenseQuery',\n 'useQueries',\n 'useSuspenseQueries',\n 'useInfiniteQuery',\n 'useSuspenseInfiniteQuery',\n]\nconst allHookNames = ['useMutation', ...useQueryHookNames]\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow putting the result of query hooks directly in a React hook dependency array',\n recommended: 'error',\n },\n messages: {\n noUnstableDeps: `The result of {{queryHook}} is not referentially stable, so don't pass it directly into the dependencies array of {{reactHook}}. Instead, destructure the return value of {{queryHook}} and pass the destructured values into the dependency array of {{reactHook}}.`,\n },\n schema: [],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context, _options, helpers) => {\n const trackedVariables: Record<string, string> = {}\n const trackedCustomHooks: Record<string, string> = {}\n const hookAliasMap: Record<string, string> = {}\n const pendingVariableDeclarators: Array<TSESTree.VariableDeclarator> = []\n const pendingDependencyChecks: Array<{\n reactHook: string\n depsArray: TSESTree.ArrayExpression\n }> = []\n\n function getReactHook(node: TSESTree.CallExpression): string | undefined {\n if (node.callee.type === 'Identifier') {\n const calleeName = node.callee.name\n // Check if the identifier is a known React hook or an alias\n if (reactHookNames.includes(calleeName) || calleeName in hookAliasMap) {\n return calleeName\n }\n } else if (\n node.callee.type === 'MemberExpression' &&\n node.callee.object.type === 'Identifier' &&\n node.callee.object.name === 'React' &&\n node.callee.property.type === 'Identifier' &&\n reactHookNames.includes(node.callee.property.name)\n ) {\n // Member expression case: `React.useCallback`\n return node.callee.property.name\n }\n return undefined\n }\n\n function collectVariableNames(\n pattern: TSESTree.BindingName,\n queryHook: string,\n ) {\n if (pattern.type === AST_NODE_TYPES.Identifier) {\n trackedVariables[pattern.name] = queryHook\n } else if (pattern.type === AST_NODE_TYPES.ArrayPattern) {\n for (const element of pattern.elements) {\n if (element === null) {\n continue\n }\n if (element.type === AST_NODE_TYPES.Identifier) {\n trackedVariables[element.name] = queryHook\n } else if (\n element.type === AST_NODE_TYPES.RestElement &&\n element.argument.type === AST_NODE_TYPES.Identifier\n ) {\n trackedVariables[element.argument.name] = queryHook\n }\n }\n }\n }\n\n function isCustomHookName(hookName: string): boolean {\n return /^use[A-Z0-9]/.test(hookName)\n }\n\n function hasCombineProperty(\n callExpression: TSESTree.CallExpression,\n ): boolean {\n if (callExpression.arguments.length === 0) return false\n\n const firstArg = callExpression.arguments[0]\n if (!firstArg || firstArg.type !== AST_NODE_TYPES.ObjectExpression)\n return false\n\n return firstArg.properties.some(\n (prop) =>\n prop.type === AST_NODE_TYPES.Property &&\n prop.key.type === AST_NODE_TYPES.Identifier &&\n prop.key.name === 'combine',\n )\n }\n\n function getDirectQueryHook(\n callExpression: TSESTree.CallExpression,\n ): string | undefined {\n if (\n callExpression.callee.type !== AST_NODE_TYPES.Identifier ||\n !allHookNames.includes(callExpression.callee.name) ||\n !helpers.isTanstackQueryImport(callExpression.callee)\n ) {\n return undefined\n }\n\n if (\n (callExpression.callee.name === 'useQueries' ||\n callExpression.callee.name === 'useSuspenseQueries') &&\n hasCombineProperty(callExpression)\n ) {\n return undefined\n }\n\n return callExpression.callee.name\n }\n\n function getTrackedQueryHook(\n callExpression: TSESTree.CallExpression,\n ): string | undefined {\n const directQueryHook = getDirectQueryHook(callExpression)\n if (directQueryHook !== undefined) {\n return directQueryHook\n }\n\n if (callExpression.callee.type === AST_NODE_TYPES.Identifier) {\n return trackedCustomHooks[callExpression.callee.name]\n }\n\n return undefined\n }\n\n function getReturnedQueryHook(\n body:\n | TSESTree.FunctionExpression['body']\n | TSESTree.ArrowFunctionExpression['body'],\n ): string | undefined {\n if (body.type === AST_NODE_TYPES.CallExpression) {\n return getDirectQueryHook(body)\n }\n\n if (body.type !== AST_NODE_TYPES.BlockStatement) {\n return undefined\n }\n\n const returnStatements = body.body.filter(\n (statement): statement is TSESTree.ReturnStatement =>\n statement.type === AST_NODE_TYPES.ReturnStatement,\n )\n if (returnStatements.length !== 1) {\n return undefined\n }\n\n const returnArgument = returnStatements[0]?.argument\n if (returnArgument?.type === AST_NODE_TYPES.CallExpression) {\n return getDirectQueryHook(returnArgument)\n }\n\n return undefined\n }\n\n function checkDependencyArray(\n reactHook: string,\n depsArray: TSESTree.ArrayExpression,\n ) {\n depsArray.elements.forEach((dep) => {\n if (\n dep !== null &&\n dep.type === AST_NODE_TYPES.Identifier &&\n trackedVariables[dep.name] !== undefined\n ) {\n const queryHook = trackedVariables[dep.name]\n context.report({\n node: dep,\n messageId: 'noUnstableDeps',\n data: {\n queryHook,\n reactHook,\n },\n })\n }\n })\n }\n\n return {\n ImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (\n node.specifiers.length > 0 &&\n node.importKind === 'value' &&\n node.source.value === 'React'\n ) {\n node.specifiers.forEach((specifier) => {\n if (\n specifier.type === AST_NODE_TYPES.ImportSpecifier &&\n specifier.imported.type === AST_NODE_TYPES.Identifier &&\n reactHookNames.includes(specifier.imported.name)\n ) {\n // Track alias or direct import\n hookAliasMap[specifier.local.name] = specifier.imported.name\n }\n })\n }\n },\n\n FunctionDeclaration(node) {\n if (node.id === null || !isCustomHookName(node.id.name)) {\n return\n }\n\n const queryHook = getReturnedQueryHook(node.body)\n if (queryHook !== undefined) {\n trackedCustomHooks[node.id.name] = queryHook\n }\n },\n\n VariableDeclarator(node) {\n if (\n node.id.type === AST_NODE_TYPES.Identifier &&\n isCustomHookName(node.id.name) &&\n node.init !== null &&\n (node.init.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n node.init.type === AST_NODE_TYPES.FunctionExpression)\n ) {\n const queryHook = getReturnedQueryHook(node.init.body)\n if (queryHook !== undefined) {\n trackedCustomHooks[node.id.name] = queryHook\n }\n }\n\n if (\n node.init !== null &&\n node.init.type === AST_NODE_TYPES.CallExpression\n ) {\n pendingVariableDeclarators.push(node)\n }\n },\n CallExpression: (node) => {\n const reactHook = getReactHook(node)\n if (\n reactHook !== undefined &&\n node.arguments.length > 1 &&\n node.arguments[1]?.type === AST_NODE_TYPES.ArrayExpression\n ) {\n pendingDependencyChecks.push({\n reactHook,\n depsArray: node.arguments[1],\n })\n }\n },\n 'Program:exit'() {\n pendingVariableDeclarators.forEach((node) => {\n if (node.init?.type !== AST_NODE_TYPES.CallExpression) {\n return\n }\n\n const queryHook = getTrackedQueryHook(node.init)\n if (queryHook !== undefined) {\n collectVariableNames(node.id, queryHook)\n }\n })\n\n pendingDependencyChecks.forEach(({ reactHook, depsArray }) => {\n checkDependencyArray(reactHook, depsArray)\n })\n },\n }\n }),\n})\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\n\nimport { getDocsUrl } from './get-docs-url'\nimport { detectTanstackQueryImports } from './detect-react-query-imports'\nimport { sortDataByOrder } from './sort-data-by-order'\nimport type { ExtraRuleDocs } from '../types'\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\nexport function createPropertyOrderRule<\n TFunc extends string,\n TProp extends string,\n>(\n options: Omit<Parameters<typeof createRule>[0], 'create'>,\n targetFunctions: ReadonlyArray<TFunc> | Array<TFunc>,\n orderRules: ReadonlyArray<\n Readonly<[ReadonlyArray<TProp>, ReadonlyArray<TProp>]>\n >,\n) {\n const targetFunctionSet = new Set(targetFunctions)\n function isTargetFunction(node: any): node is TFunc {\n return targetFunctionSet.has(node)\n }\n\n return createRule({\n ...options,\n create: detectTanstackQueryImports((context) => {\n return {\n CallExpression(node) {\n if (node.callee.type !== AST_NODE_TYPES.Identifier) {\n return\n }\n const functions = node.callee.name\n if (!isTargetFunction(functions)) {\n return\n }\n const argument = node.arguments[0]\n if (argument === undefined || argument.type !== 'ObjectExpression') {\n return\n }\n\n const allProperties = argument.properties\n\n // no need to sort if there is at max 1 property\n if (allProperties.length < 2) {\n return\n }\n\n const properties = allProperties.flatMap((p, index) => {\n if (\n p.type === AST_NODE_TYPES.Property &&\n p.key.type === AST_NODE_TYPES.Identifier\n ) {\n return { name: p.key.name, property: p }\n } else return { name: `_property_${index}`, property: p }\n })\n\n const sortedProperties = sortDataByOrder(\n properties,\n orderRules,\n 'name',\n )\n if (sortedProperties === null) {\n return\n }\n\n context.report({\n node: argument,\n data: { function: node.callee.name },\n messageId: 'invalidOrder',\n fix(fixer) {\n const sourceCode = context.sourceCode\n\n const reorderedText = sortedProperties.reduce(\n (sourceText, specifier, index) => {\n let textBetweenProperties = ''\n if (index < allProperties.length - 1) {\n textBetweenProperties = sourceCode\n .getText()\n .slice(\n allProperties[index]!.range[1],\n allProperties[index + 1]!.range[0],\n )\n }\n return (\n sourceText +\n sourceCode.getText(specifier.property) +\n textBetweenProperties\n )\n },\n '',\n )\n return fixer.replaceTextRange(\n [allProperties[0]!.range[0], allProperties.at(-1)!.range[1]],\n reorderedText,\n )\n },\n })\n },\n }\n }),\n })\n}\n","export function sortDataByOrder<T, TKey extends keyof T>(\n data: Array<T> | ReadonlyArray<T>,\n orderRules: ReadonlyArray<\n Readonly<[ReadonlyArray<T[TKey]>, ReadonlyArray<T[TKey]>]>\n >,\n key: TKey,\n): Array<T> | null {\n const getSubsetIndex = (\n item: T[TKey],\n subsets: ReadonlyArray<ReadonlyArray<T[TKey]> | Array<T[TKey]>>,\n ): number | null => {\n for (let i = 0; i < subsets.length; i++) {\n if (subsets[i]?.includes(item)) {\n return i\n }\n }\n return null\n }\n\n const orderSets = orderRules.reduce(\n (sets, [A, B]) => [...sets, A, B],\n [] as Array<ReadonlyArray<T[TKey]> | Array<T[TKey]>>,\n )\n\n const inOrderArray = data.filter(\n (item) => getSubsetIndex(item[key], orderSets) !== null,\n )\n\n let wasResorted = false as boolean\n\n // Sort by the relative order defined by the rules\n const sortedArray = inOrderArray.sort((a, b) => {\n const aKey = a[key],\n bKey = b[key]\n const aSubsetIndex = getSubsetIndex(aKey, orderSets)\n const bSubsetIndex = getSubsetIndex(bKey, orderSets)\n\n // If both items belong to different subsets, sort by their subset order\n if (\n aSubsetIndex !== null &&\n bSubsetIndex !== null &&\n aSubsetIndex !== bSubsetIndex\n ) {\n return aSubsetIndex - bSubsetIndex\n }\n\n // If both items belong to the same subset or neither is in the subset, keep their relative order\n return 0\n })\n\n const inOrderIterator = sortedArray.values()\n const result = data.map((item) => {\n if (getSubsetIndex(item[key], orderSets) !== null) {\n const sortedItem = inOrderIterator.next().value!\n if (sortedItem[key] !== item[key]) {\n wasResorted = true\n }\n return sortedItem\n }\n return item\n })\n\n if (!wasResorted) {\n return null\n }\n return result\n}\n","export const infiniteQueryFunctions = [\n 'infiniteQueryOptions',\n 'useInfiniteQuery',\n 'useSuspenseInfiniteQuery',\n] as const\n\nexport type InfiniteQueryFunctions = (typeof infiniteQueryFunctions)[number]\n\nexport const checkedProperties = [\n 'queryFn',\n 'getPreviousPageParam',\n 'getNextPageParam',\n] as const\n\nexport type InfiniteQueryProperties = (typeof checkedProperties)[number]\n\nexport const sortRules = [\n [['queryFn'], ['getPreviousPageParam', 'getNextPageParam']],\n] as const\n","import { createPropertyOrderRule } from '../../utils/create-property-order-rule'\nimport { infiniteQueryFunctions, sortRules } from './constants'\nimport type {\n InfiniteQueryFunctions,\n InfiniteQueryProperties,\n} from './constants'\n\nexport const name = 'infinite-query-property-order'\n\nexport const rule = createPropertyOrderRule<\n InfiniteQueryFunctions,\n InfiniteQueryProperties\n>(\n {\n name,\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Ensure correct order of inference sensitive properties for infinite queries',\n recommended: 'error',\n },\n messages: {\n invalidOrder: 'Invalid order of properties for `{{function}}`.',\n },\n schema: [],\n hasSuggestions: true,\n fixable: 'code',\n },\n defaultOptions: [],\n },\n infiniteQueryFunctions,\n sortRules,\n)\n","import { ESLintUtils } from '@typescript-eslint/utils'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport type { ParserServicesWithTypeInformation } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nexport const name = 'no-void-query-fn'\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description: 'Ensures queryFn returns a non-undefined value',\n recommended: 'error',\n },\n messages: {\n noVoidReturn: 'queryFn must return a non-undefined value',\n },\n schema: [],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context) => {\n return {\n Property(node) {\n if (\n !ASTUtils.isObjectExpression(node.parent) ||\n !ASTUtils.isIdentifierWithName(node.key, 'queryFn')\n ) {\n return\n }\n\n const parserServices = context.sourceCode.parserServices\n\n if (\n !parserServices ||\n !parserServices.esTreeNodeToTSNodeMap ||\n !parserServices.program\n ) {\n return\n }\n\n const checker = parserServices.program.getTypeChecker()\n const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node.value)\n const type = checker.getTypeAtLocation(tsNode)\n\n // Get the return type of the function\n if (type.getCallSignatures().length > 0) {\n const returnType = type.getCallSignatures()[0]?.getReturnType()\n\n if (!returnType) {\n return\n }\n\n // Check if return type is void or undefined\n if (isIllegalReturn(checker, returnType)) {\n context.report({\n node: node.value,\n messageId: 'noVoidReturn',\n })\n }\n }\n },\n }\n }),\n})\n\ntype Program = ParserServicesWithTypeInformation['program']\ntype TypeChecker = ReturnType<Program['getTypeChecker']>\ntype Type = ReturnType<TypeChecker['getTypeAtLocation']>\n\nfunction isIllegalReturn(checker: TypeChecker, type: Type): boolean {\n const awaited = checker.getAwaitedType(type)\n\n if (!awaited) return false\n\n if (awaited.isUnion()) {\n return awaited.types.some((t) => isIllegalReturn(checker, t))\n }\n\n const typeString = checker.typeToString(awaited)\n return typeString === 'void' || typeString === 'undefined'\n}\n","export const mutationFunctions = ['useMutation'] as const\n\nexport type MutationFunctions = (typeof mutationFunctions)[number]\n\nexport const checkedProperties = ['onMutate', 'onError', 'onSettled'] as const\n\nexport type MutationProperties = (typeof checkedProperties)[number]\n\nexport const sortRules = [[['onMutate'], ['onError', 'onSettled']]] as const\n","import { createPropertyOrderRule } from '../../utils/create-property-order-rule'\nimport { mutationFunctions, sortRules } from './constants'\nimport type { MutationFunctions, MutationProperties } from './constants'\n\nexport const name = 'mutation-property-order'\n\nexport const rule = createPropertyOrderRule<\n MutationFunctions,\n MutationProperties\n>(\n {\n name,\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Ensure correct order of inference-sensitive properties in useMutation()',\n recommended: 'error',\n },\n messages: {\n invalidOrder: 'Invalid order of properties for `{{function}}`.',\n },\n schema: [],\n hasSuggestions: true,\n fixable: 'code',\n },\n defaultOptions: [],\n },\n mutationFunctions,\n sortRules,\n)\n","import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'\nimport { ASTUtils } from '../../utils/ast-utils'\nimport { detectTanstackQueryImports } from '../../utils/detect-react-query-imports'\nimport { getDocsUrl } from '../../utils/get-docs-url'\nimport type { TSESLint, TSESTree } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from '../../types'\n\nexport const name = 'prefer-query-options'\n\nconst queryHooks = [\n 'useQuery',\n 'useInfiniteQuery',\n 'useSuspenseQuery',\n 'useSuspenseInfiniteQuery',\n 'usePrefetchQuery',\n 'usePrefetchInfiniteQuery',\n]\n\nconst queriesHooks = ['useQueries', 'useSuspenseQueries']\n\nconst filterHooks = ['useIsFetching']\n\nconst queryClientOptionMethods = [\n 'fetchQuery',\n 'prefetchQuery',\n 'fetchInfiniteQuery',\n 'prefetchInfiniteQuery',\n 'ensureQueryData',\n 'ensureInfiniteQueryData',\n]\n\nconst queryClientQueryKeyMethods = [\n 'getQueryData',\n 'setQueryData',\n 'getQueryState',\n 'setQueryDefaults',\n 'getQueryDefaults',\n]\n\nconst queryClientFilterMethods = [\n 'invalidateQueries',\n 'cancelQueries',\n 'refetchQueries',\n 'removeQueries',\n 'resetQueries',\n 'isFetching',\n 'getQueriesData',\n 'setQueriesData',\n]\n\nconst queryOptionsBuilders = ['queryOptions', 'infiniteQueryOptions']\n\nconst createRule = ESLintUtils.RuleCreator<ExtraRuleDocs>(getDocsUrl)\ntype Helpers = {\n isTanstackQueryImport: (node: TSESTree.Identifier) => boolean\n}\n\nexport const rule = createRule({\n name,\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Prefer using queryOptions() to co-locate queryKey and queryFn',\n recommended: 'strict',\n },\n messages: {\n preferQueryOptions:\n 'Prefer using queryOptions() or infiniteQueryOptions() to co-locate queryKey and queryFn.',\n preferQueryOptionsQueryKey:\n 'Prefer referencing a queryKey from a queryOptions() result instead of typing it manually.',\n },\n schema: [],\n },\n defaultOptions: [],\n\n create: detectTanstackQueryImports((context, _, helpers) => {\n function reportInlineQueryOptions(node: TSESTree.Node): void {\n if (ASTUtils.isObjectExpression(node) && hasInlineQueryOptions(node)) {\n context.report({\n node,\n messageId: 'preferQueryOptions',\n })\n }\n }\n\n function reportInlineFilterQueryKey(node: TSESTree.Node): void {\n if (ASTUtils.isObjectExpression(node) && hasInlineFilterQueryKey(node)) {\n context.report({\n node,\n messageId: 'preferQueryOptionsQueryKey',\n })\n }\n }\n\n return {\n CallExpression: (node) => {\n if (ASTUtils.isIdentifier(node.callee)) {\n const importedName = getTanstackImportName(\n context,\n helpers,\n node.callee,\n )\n\n if (importedName === null) {\n return\n }\n\n if (queryOptionsBuilders.includes(importedName)) {\n return\n }\n\n const options = node.arguments[0]\n\n if (options === undefined) {\n return\n }\n\n if (queryHooks.includes(importedName)) {\n reportInlineQueryOptions(options)\n return\n }\n\n if (\n queriesHooks.includes(importedName) &&\n ASTUtils.isObjectExpression(options)\n ) {\n const queries = ASTUtils.findPropertyWithIdentifierKey(\n options.properties,\n 'queries',\n )?.value\n\n if (queries !== undefined) {\n getQueryObjects(queries).forEach((query) => {\n reportInlineQueryOptions(query)\n })\n }\n\n return\n }\n\n if (filterHooks.includes(importedName)) {\n reportInlineFilterQueryKey(options)\n }\n\n return\n }\n\n if (\n node.callee.type !== AST_NODE_TYPES.MemberExpression ||\n !ASTUtils.isIdentifier(node.callee.property) ||\n !isTanstackQueryClient(node.callee.object, context, helpers)\n ) {\n return\n }\n\n const method = node.callee.property.name\n const options = node.arguments[0]\n\n if (options === undefined) {\n return\n }\n\n if (queryClientOptionMethods.includes(method)) {\n reportInlineQueryOptions(options)\n return\n }\n\n if (\n queryClientQueryKeyMethods.includes(method) &&\n isInlineArrayExpression(options)\n ) {\n context.report({\n node: options,\n messageId: 'preferQueryOptionsQueryKey',\n })\n return\n }\n\n if (queryClientFilterMethods.includes(method)) {\n reportInlineFilterQueryKey(options)\n }\n },\n }\n }),\n})\n\nfunction hasInlineQueryOptions(node: TSESTree.ObjectExpression): boolean {\n return (\n ASTUtils.findPropertyWithIdentifierKey(node.properties, 'queryKey') !==\n undefined ||\n ASTUtils.findPropertyWithIdentifierKey(node.properties, 'queryFn') !==\n undefined\n )\n}\n\nfunction hasInlineFilterQueryKey(node: TSESTree.ObjectExpression): boolean {\n const queryKey = ASTUtils.findPropertyWithIdentifierKey(\n node.properties,\n 'queryKey',\n )?.value\n\n return queryKey !== undefined && isInlineArrayExpression(queryKey)\n}\n\nfunction isInlineArrayExpression(node: TSESTree.Node): boolean {\n return unwrapTypeAssertions(node).type === AST_NODE_TYPES.ArrayExpression\n}\n\nfunction getReturnedObjectExpressions(\n node: TSESTree.Node,\n): Array<TSESTree.ObjectExpression> {\n if (ASTUtils.isObjectExpression(node)) {\n return [node]\n }\n\n if (\n node.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n node.type === AST_NODE_TYPES.FunctionExpression\n ) {\n return getReturnedObjectExpressions(node.body)\n }\n\n if (node.type === AST_NODE_TYPES.BlockStatement) {\n return node.body.flatMap((statement) => {\n if (\n statement.type === AST_NODE_TYPES.ReturnStatement &&\n statement.argument !== null\n ) {\n return getReturnedObjectExpressions(statement.argument)\n }\n\n return []\n })\n }\n\n if (node.type === AST_NODE_TYPES.ConditionalExpression) {\n return [\n ...getReturnedObjectExpressions(node.consequent),\n ...getReturnedObjectExpressions(node.alternate),\n ]\n }\n\n if (node.type === AST_NODE_TYPES.LogicalExpression) {\n return [\n ...getReturnedObjectExpressions(node.left),\n ...getReturnedObjectExpressions(node.right),\n ]\n }\n\n if (node.type === AST_NODE_TYPES.SequenceExpression) {\n return node.expressions.flatMap((expression) =>\n getReturnedObjectExpressions(expression),\n )\n }\n\n return []\n}\n\nfunction getQueryObjects(\n node: TSESTree.Node,\n): Array<TSESTree.ObjectExpression> {\n if (node.type === AST_NODE_TYPES.ArrayExpression) {\n return node.elements.flatMap((element) => {\n if (element !== null && ASTUtils.isObjectExpression(element)) {\n return [element]\n }\n\n return []\n })\n }\n\n if (\n node.type === AST_NODE_TYPES.CallExpression &&\n node.callee.type === AST_NODE_TYPES.MemberExpression &&\n ASTUtils.isIdentifierWithName(node.callee.property, 'map')\n ) {\n const mapper = node.arguments[0]\n\n if (\n mapper?.type === AST_NODE_TYPES.ArrowFunctionExpression ||\n mapper?.type === AST_NODE_TYPES.FunctionExpression\n ) {\n return getReturnedObjectExpressions(mapper)\n }\n }\n\n return []\n}\n\nfunction isTanstackQueryClient(\n node: TSESTree.Node,\n context: Readonly<TSESLint.RuleContext<string, ReadonlyArray<unknown>>>,\n helpers: Helpers,\n): boolean {\n const source = resolveQueryClientSource(node, context)\n\n if (\n source.type === AST_NODE_TYPES.CallExpression &&\n ASTUtils.isIdentifier(source.callee)\n ) {\n return (\n getTanstackImportName(context, helpers, source.callee) ===\n 'useQueryClient'\n )\n }\n\n if (\n source.type === AST_NODE_TYPES.NewExpression &&\n ASTUtils.isIdentifier(source.callee)\n ) {\n return (\n getTanstackImportName(context, helpers, source.callee) === 'QueryClient'\n )\n }\n\n return false\n}\n\nfunction getTanstackImportName(\n context: Readonly<TSESLint.RuleContext<string, ReadonlyArray<unknown>>>,\n helpers: Helpers,\n node: TSESTree.Identifier,\n): string | null {\n if (!helpers.isTanstackQueryImport(node)) {\n return null\n }\n\n const definition = context.sourceCode\n .getScope(node)\n .references.find((reference) => reference.identifier === node)?.resolved\n ?.defs[0]?.node\n\n if (\n definition?.type !== AST_NODE_TYPES.ImportSpecifier ||\n definition.imported.type !== AST_NODE_TYPES.Identifier\n ) {\n return null\n }\n\n return definition.imported.name\n}\n\nfunction resolveQueryClientSource(\n node: TSESTree.Node,\n context: Readonly<TSESLint.RuleContext<string, ReadonlyArray<unknown>>>,\n): TSESTree.Node {\n const visitedNodes = new Set<TSESTree.Node>()\n\n while (!visitedNodes.has(node)) {\n visitedNodes.add(node)\n\n if (node.type === AST_NODE_TYPES.ChainExpression) {\n node = node.expression\n continue\n }\n\n node = unwrapTypeAssertions(node)\n\n if (node.type !== AST_NODE_TYPES.Identifier) {\n return node\n }\n\n const expression = ASTUtils.getReferencedExpressionByIdentifier({\n context,\n node,\n })\n\n if (expression === null) {\n return node\n }\n\n node = expression\n }\n\n return node\n}\n\nfunction unwrapTypeAssertions(node: TSESTree.Node): TSESTree.Node {\n while (\n node.type === AST_NODE_TYPES.TSAsExpression ||\n node.type === AST_NODE_TYPES.TSSatisfiesExpression ||\n node.type === AST_NODE_TYPES.TSTypeAssertion\n ) {\n node = node.expression\n }\n\n return node\n}\n","import * as exhaustiveDeps from './rules/exhaustive-deps/exhaustive-deps.rule'\nimport * as stableQueryClient from './rules/stable-query-client/stable-query-client.rule'\nimport * as noRestDestructuring from './rules/no-rest-destructuring/no-rest-destructuring.rule'\nimport * as noUnstableDeps from './rules/no-unstable-deps/no-unstable-deps.rule'\nimport * as infiniteQueryPropertyOrder from './rules/infinite-query-property-order/infinite-query-property-order.rule'\nimport * as noVoidQueryFn from './rules/no-void-query-fn/no-void-query-fn.rule'\nimport * as mutationPropertyOrder from './rules/mutation-property-order/mutation-property-order.rule'\nimport * as preferQueryOptions from './rules/prefer-query-options/prefer-query-options.rule'\nimport type { ESLintUtils } from '@typescript-eslint/utils'\nimport type { ExtraRuleDocs } from './types'\n\nexport const rules: Record<\n string,\n ESLintUtils.RuleModule<\n string,\n ReadonlyArray<unknown>,\n ExtraRuleDocs,\n ESLintUtils.RuleListener\n >\n> = {\n [exhaustiveDeps.name]: exhaustiveDeps.rule,\n [stableQueryClient.name]: stableQueryClient.rule,\n [noRestDestructuring.name]: noRestDestructuring.rule,\n [noUnstableDeps.name]: noUnstableDeps.rule,\n [infiniteQueryPropertyOrder.name]: infiniteQueryPropertyOrder.rule,\n [noVoidQueryFn.name]: noVoidQueryFn.rule,\n [mutationPropertyOrder.name]: mutationPropertyOrder.rule,\n [preferQueryOptions.name]: preferQueryOptions.rule,\n}\n"],"mappings":"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","names":["AST_NODE_TYPES","name","references","AST_NODE_TYPES","AST_NODE_TYPES","name","AST_NODE_TYPES","AST_NODE_TYPES","ESLintUtils","name","createRule","ESLintUtils","rule","AST_NODE_TYPES","AST_NODE_TYPES","ESLintUtils","AST_NODE_TYPES","name","createRule","ESLintUtils","rule","AST_NODE_TYPES","AST_NODE_TYPES","ESLintUtils","name","createRule","ESLintUtils","rule","AST_NODE_TYPES","AST_NODE_TYPES","ESLintUtils","createRule","ESLintUtils","AST_NODE_TYPES","name","rule","ESLintUtils","name","createRule","ESLintUtils","rule","sortRules","name","rule","sortRules","AST_NODE_TYPES","ESLintUtils","name","queryHooks","createRule","ESLintUtils","rule","options","AST_NODE_TYPES","name","rule"]}
|