@tanstack/eslint-plugin-query 5.56.1 → 5.57.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.
Files changed (41) hide show
  1. package/dist/cjs/index.cjs +4 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/rules/infinite-query-property-order/constants.cjs +13 -0
  4. package/dist/cjs/rules/infinite-query-property-order/constants.cjs.map +1 -0
  5. package/dist/cjs/rules/infinite-query-property-order/constants.d.cts +4 -0
  6. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.cjs +95 -0
  7. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.cjs.map +1 -0
  8. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.d.cts +4 -0
  9. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.cjs +47 -0
  10. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.cjs.map +1 -0
  11. package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.d.cts +1 -0
  12. package/dist/cjs/rules/no-unstable-deps/no-unstable-deps.rule.cjs +1 -1
  13. package/dist/cjs/rules/no-unstable-deps/no-unstable-deps.rule.cjs.map +1 -1
  14. package/dist/cjs/rules.cjs +3 -1
  15. package/dist/cjs/rules.cjs.map +1 -1
  16. package/dist/esm/index.js +4 -2
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/rules/infinite-query-property-order/constants.d.ts +4 -0
  19. package/dist/esm/rules/infinite-query-property-order/constants.js +13 -0
  20. package/dist/esm/rules/infinite-query-property-order/constants.js.map +1 -0
  21. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.d.ts +4 -0
  22. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.js +95 -0
  23. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.js.map +1 -0
  24. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.d.ts +1 -0
  25. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.js +47 -0
  26. package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.js.map +1 -0
  27. package/dist/esm/rules/no-unstable-deps/no-unstable-deps.rule.js +1 -1
  28. package/dist/esm/rules/no-unstable-deps/no-unstable-deps.rule.js.map +1 -1
  29. package/dist/esm/rules.js +3 -1
  30. package/dist/esm/rules.js.map +1 -1
  31. package/package.json +2 -1
  32. package/src/__tests__/infinite-query-property-order.rule.test.ts +182 -0
  33. package/src/__tests__/infinite-query-property-order.utils.test.ts +79 -0
  34. package/src/__tests__/test-utils.test.ts +104 -0
  35. package/src/__tests__/test-utils.ts +103 -0
  36. package/src/index.ts +2 -0
  37. package/src/rules/infinite-query-property-order/constants.ts +17 -0
  38. package/src/rules/infinite-query-property-order/infinite-query-property-order.rule.ts +112 -0
  39. package/src/rules/infinite-query-property-order/infinite-query-property-order.utils.ts +67 -0
  40. package/src/rules/no-unstable-deps/no-unstable-deps.rule.ts +1 -1
  41. package/src/rules.ts +2 -0
@@ -0,0 +1,67 @@
1
+ export function sortDataByOrder<T, TKey extends keyof T>(
2
+ data: Array<T> | ReadonlyArray<T>,
3
+ orderRules: ReadonlyArray<
4
+ Readonly<[ReadonlyArray<T[TKey]>, ReadonlyArray<T[TKey]>]>
5
+ >,
6
+ key: TKey,
7
+ ): Array<T> | null {
8
+ const getSubsetIndex = (
9
+ item: T[TKey],
10
+ subsets: ReadonlyArray<ReadonlyArray<T[TKey]> | Array<T[TKey]>>,
11
+ ): number | null => {
12
+ for (let i = 0; i < subsets.length; i++) {
13
+ if (subsets[i]?.includes(item)) {
14
+ return i
15
+ }
16
+ }
17
+ return null
18
+ }
19
+
20
+ const orderSets = orderRules.reduce(
21
+ (sets, [A, B]) => [...sets, A, B],
22
+ [] as Array<ReadonlyArray<T[TKey]> | Array<T[TKey]>>,
23
+ )
24
+
25
+ const inOrderArray = data.filter(
26
+ (item) => getSubsetIndex(item[key], orderSets) !== null,
27
+ )
28
+
29
+ let wasResorted = false as boolean
30
+
31
+ // Sort by the relative order defined by the rules
32
+ const sortedArray = inOrderArray.sort((a, b) => {
33
+ const aKey = a[key],
34
+ bKey = b[key]
35
+ const aSubsetIndex = getSubsetIndex(aKey, orderSets)
36
+ const bSubsetIndex = getSubsetIndex(bKey, orderSets)
37
+
38
+ // If both items belong to different subsets, sort by their subset order
39
+ if (
40
+ aSubsetIndex !== null &&
41
+ bSubsetIndex !== null &&
42
+ aSubsetIndex !== bSubsetIndex
43
+ ) {
44
+ return aSubsetIndex - bSubsetIndex
45
+ }
46
+
47
+ // If both items belong to the same subset or neither is in the subset, keep their relative order
48
+ return 0
49
+ })
50
+
51
+ const inOrderIterator = sortedArray.values()
52
+ const result = data.map((item) => {
53
+ if (getSubsetIndex(item[key], orderSets) !== null) {
54
+ const sortedItem = inOrderIterator.next().value!
55
+ if (sortedItem[key] !== item[key]) {
56
+ wasResorted = true
57
+ }
58
+ return sortedItem
59
+ }
60
+ return item
61
+ })
62
+
63
+ if (!wasResorted) {
64
+ return null
65
+ }
66
+ return result
67
+ }
@@ -24,7 +24,7 @@ export const rule = createRule({
24
24
  type: 'problem',
25
25
  docs: {
26
26
  description:
27
- 'Disallow putting the result of useMutation directly in a React hook dependency array',
27
+ 'Disallow putting the result of query hooks directly in a React hook dependency array',
28
28
  recommended: 'error',
29
29
  },
30
30
  messages: {
package/src/rules.ts CHANGED
@@ -2,6 +2,7 @@ import * as exhaustiveDeps from './rules/exhaustive-deps/exhaustive-deps.rule'
2
2
  import * as stableQueryClient from './rules/stable-query-client/stable-query-client.rule'
3
3
  import * as noRestDestructuring from './rules/no-rest-destructuring/no-rest-destructuring.rule'
4
4
  import * as noUnstableDeps from './rules/no-unstable-deps/no-unstable-deps.rule'
5
+ import * as infiniteQueryPropertyOrder from './rules/infinite-query-property-order/infinite-query-property-order.rule'
5
6
  import type { ESLintUtils } from '@typescript-eslint/utils'
6
7
  import type { ExtraRuleDocs } from './types'
7
8
 
@@ -18,4 +19,5 @@ export const rules: Record<
18
19
  [stableQueryClient.name]: stableQueryClient.rule,
19
20
  [noRestDestructuring.name]: noRestDestructuring.rule,
20
21
  [noUnstableDeps.name]: noUnstableDeps.rule,
22
+ [infiniteQueryPropertyOrder.name]: infiniteQueryPropertyOrder.rule,
21
23
  }