@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.
- package/dist/cjs/index.cjs +4 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/rules/infinite-query-property-order/constants.cjs +13 -0
- package/dist/cjs/rules/infinite-query-property-order/constants.cjs.map +1 -0
- package/dist/cjs/rules/infinite-query-property-order/constants.d.cts +4 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.cjs +95 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.cjs.map +1 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.rule.d.cts +4 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.cjs +47 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.cjs.map +1 -0
- package/dist/cjs/rules/infinite-query-property-order/infinite-query-property-order.utils.d.cts +1 -0
- package/dist/cjs/rules/no-unstable-deps/no-unstable-deps.rule.cjs +1 -1
- package/dist/cjs/rules/no-unstable-deps/no-unstable-deps.rule.cjs.map +1 -1
- package/dist/cjs/rules.cjs +3 -1
- package/dist/cjs/rules.cjs.map +1 -1
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/rules/infinite-query-property-order/constants.d.ts +4 -0
- package/dist/esm/rules/infinite-query-property-order/constants.js +13 -0
- package/dist/esm/rules/infinite-query-property-order/constants.js.map +1 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.d.ts +4 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.js +95 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.rule.js.map +1 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.d.ts +1 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.js +47 -0
- package/dist/esm/rules/infinite-query-property-order/infinite-query-property-order.utils.js.map +1 -0
- package/dist/esm/rules/no-unstable-deps/no-unstable-deps.rule.js +1 -1
- package/dist/esm/rules/no-unstable-deps/no-unstable-deps.rule.js.map +1 -1
- package/dist/esm/rules.js +3 -1
- package/dist/esm/rules.js.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/infinite-query-property-order.rule.test.ts +182 -0
- package/src/__tests__/infinite-query-property-order.utils.test.ts +79 -0
- package/src/__tests__/test-utils.test.ts +104 -0
- package/src/__tests__/test-utils.ts +103 -0
- package/src/index.ts +2 -0
- package/src/rules/infinite-query-property-order/constants.ts +17 -0
- package/src/rules/infinite-query-property-order/infinite-query-property-order.rule.ts +112 -0
- package/src/rules/infinite-query-property-order/infinite-query-property-order.utils.ts +67 -0
- package/src/rules/no-unstable-deps/no-unstable-deps.rule.ts +1 -1
- 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
|
|
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
|
}
|