eslint-plugin-react-web-api 5.24.0-beta.2 → 5.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +18 -9
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -27,7 +27,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region package.json
|
|
29
29
|
var name$1 = "eslint-plugin-react-web-api";
|
|
30
|
-
var version = "5.24.0
|
|
30
|
+
var version = "5.24.0";
|
|
31
31
|
|
|
32
32
|
//#endregion
|
|
33
33
|
//#region src/utils/create-rule.ts
|
|
@@ -38,6 +38,9 @@ const createRule = ESLintUtils.RuleCreator(getDocsUrl);
|
|
|
38
38
|
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region ../../.pkgs/eff/dist/index.js
|
|
41
|
+
function and(a, b) {
|
|
42
|
+
return (data) => a(data) && b(data);
|
|
43
|
+
}
|
|
41
44
|
function or(a, b) {
|
|
42
45
|
return (data) => a(data) || b(data);
|
|
43
46
|
}
|
|
@@ -584,6 +587,7 @@ function getOptions(context, node) {
|
|
|
584
587
|
//#endregion
|
|
585
588
|
//#region src/rules/no-leaked-event-listener/no-leaked-event-listener.ts
|
|
586
589
|
const RULE_NAME$5 = "no-leaked-event-listener";
|
|
590
|
+
const isUseEffectCallback$5 = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
587
591
|
function getCallKind$5(node) {
|
|
588
592
|
const name = Extract.getCalleeName(node);
|
|
589
593
|
if (name != null && isMatching(P.union("addEventListener", "removeEventListener"))(name)) return name;
|
|
@@ -691,7 +695,7 @@ function create$5(context) {
|
|
|
691
695
|
}
|
|
692
696
|
return {
|
|
693
697
|
["CallExpression"](node) {
|
|
694
|
-
const fn = Traverse.findParent(node,
|
|
698
|
+
const fn = Traverse.findParent(node, isUseEffectCallback$5);
|
|
695
699
|
if (fn == null) return;
|
|
696
700
|
const fKind = isUseEffectSetupCallback(fn) ? "setup" : "cleanup";
|
|
697
701
|
const setupFn = fKind === "setup" ? fn : Traverse.findParent(fn, Check.isFunction);
|
|
@@ -773,6 +777,7 @@ function resolveToObjectExpression(context, node) {
|
|
|
773
777
|
//#endregion
|
|
774
778
|
//#region src/rules/no-leaked-fetch/no-leaked-fetch.ts
|
|
775
779
|
const RULE_NAME$4 = "no-leaked-fetch";
|
|
780
|
+
const isUseEffectCallback$4 = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
776
781
|
function getCallKind$4(node) {
|
|
777
782
|
const name = Extract.getCalleeName(node);
|
|
778
783
|
if (name != null && isMatching(P.union("fetch", "abort"))(name)) return name;
|
|
@@ -861,7 +866,7 @@ function create$4(context) {
|
|
|
861
866
|
node
|
|
862
867
|
});
|
|
863
868
|
}).with("abort", () => {
|
|
864
|
-
const fn = Traverse.findParent(node,
|
|
869
|
+
const fn = Traverse.findParent(node, isUseEffectCallback$4);
|
|
865
870
|
if (fn == null || !isUseEffectCleanupCallback(fn)) return;
|
|
866
871
|
const controller = getAbortController(node);
|
|
867
872
|
if (controller == null) return;
|
|
@@ -912,6 +917,7 @@ function isFromObserver$1(context, node, name) {
|
|
|
912
917
|
//#endregion
|
|
913
918
|
//#region src/rules/no-leaked-intersection-observer/no-leaked-intersection-observer.ts
|
|
914
919
|
const RULE_NAME$3 = "no-leaked-intersection-observer";
|
|
920
|
+
const isUseEffectCallback$3 = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
915
921
|
function getCallKind$3(context, node) {
|
|
916
922
|
const callee = Extract.unwrap(node.callee);
|
|
917
923
|
if (callee.type !== AST_NODE_TYPES.MemberExpression) return "other";
|
|
@@ -942,7 +948,7 @@ function create$3(context) {
|
|
|
942
948
|
const dEntries = [];
|
|
943
949
|
return {
|
|
944
950
|
["CallExpression"](node) {
|
|
945
|
-
if (Traverse.findParent(node,
|
|
951
|
+
if (Traverse.findParent(node, isUseEffectCallback$3) == null) return;
|
|
946
952
|
const callee = Extract.unwrap(node.callee);
|
|
947
953
|
if (callee.type !== AST_NODE_TYPES.MemberExpression) return;
|
|
948
954
|
const { object } = callee;
|
|
@@ -973,7 +979,7 @@ function create$3(context) {
|
|
|
973
979
|
}).otherwise(() => null);
|
|
974
980
|
},
|
|
975
981
|
["NewExpression"](node) {
|
|
976
|
-
const fn = Traverse.findParent(node, (
|
|
982
|
+
const fn = Traverse.findParent(node, and(Check.isFunction, isUseEffectCallback$3));
|
|
977
983
|
if (fn == null) return;
|
|
978
984
|
if (!isNewObserver$1(node, "IntersectionObserver")) return;
|
|
979
985
|
const id = resolveEnclosingAssignmentTarget(node);
|
|
@@ -1020,6 +1026,7 @@ function create$3(context) {
|
|
|
1020
1026
|
//#endregion
|
|
1021
1027
|
//#region src/rules/no-leaked-interval/no-leaked-interval.ts
|
|
1022
1028
|
const RULE_NAME$2 = "no-leaked-interval";
|
|
1029
|
+
const isUseEffectCallback$2 = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
1023
1030
|
function getCallKind$2(node) {
|
|
1024
1031
|
const name = Extract.getCalleeName(node);
|
|
1025
1032
|
if (name != null && isMatching(P.union("setInterval", "clearInterval"))(name)) return name;
|
|
@@ -1048,7 +1055,7 @@ function create$2(context) {
|
|
|
1048
1055
|
}
|
|
1049
1056
|
return {
|
|
1050
1057
|
["CallExpression"](node) {
|
|
1051
|
-
if (Traverse.findParent(node,
|
|
1058
|
+
if (Traverse.findParent(node, isUseEffectCallback$2) == null) return;
|
|
1052
1059
|
match(getCallKind$2(node)).with("setInterval", () => {
|
|
1053
1060
|
const intervalIdNode = resolveEnclosingAssignmentTarget(node);
|
|
1054
1061
|
if (intervalIdNode == null) {
|
|
@@ -1105,6 +1112,7 @@ function isFromObserver(context, node, name) {
|
|
|
1105
1112
|
//#endregion
|
|
1106
1113
|
//#region src/rules/no-leaked-resize-observer/no-leaked-resize-observer.ts
|
|
1107
1114
|
const RULE_NAME$1 = "no-leaked-resize-observer";
|
|
1115
|
+
const isUseEffectCallback$1 = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
1108
1116
|
function getCallKind$1(context, node) {
|
|
1109
1117
|
const callee = Extract.unwrap(node.callee);
|
|
1110
1118
|
if (callee.type !== AST_NODE_TYPES.MemberExpression) return "other";
|
|
@@ -1135,7 +1143,7 @@ function create$1(context) {
|
|
|
1135
1143
|
const dEntries = [];
|
|
1136
1144
|
return {
|
|
1137
1145
|
["CallExpression"](node) {
|
|
1138
|
-
if (Traverse.findParent(node,
|
|
1146
|
+
if (Traverse.findParent(node, isUseEffectCallback$1) == null) return;
|
|
1139
1147
|
const callee = Extract.unwrap(node.callee);
|
|
1140
1148
|
if (callee.type !== AST_NODE_TYPES.MemberExpression) return;
|
|
1141
1149
|
const { object } = callee;
|
|
@@ -1166,7 +1174,7 @@ function create$1(context) {
|
|
|
1166
1174
|
}).otherwise(() => null);
|
|
1167
1175
|
},
|
|
1168
1176
|
["NewExpression"](node) {
|
|
1169
|
-
const fn = Traverse.findParent(node, (
|
|
1177
|
+
const fn = Traverse.findParent(node, and(Check.isFunction, isUseEffectCallback$1));
|
|
1170
1178
|
if (fn == null) return;
|
|
1171
1179
|
if (!isNewObserver(node, "ResizeObserver")) return;
|
|
1172
1180
|
const id = resolveEnclosingAssignmentTarget(node);
|
|
@@ -1213,6 +1221,7 @@ function create$1(context) {
|
|
|
1213
1221
|
//#endregion
|
|
1214
1222
|
//#region src/rules/no-leaked-timeout/no-leaked-timeout.ts
|
|
1215
1223
|
const RULE_NAME = "no-leaked-timeout";
|
|
1224
|
+
const isUseEffectCallback = or(isUseEffectSetupCallback, isUseEffectCleanupCallback);
|
|
1216
1225
|
function getCallKind(node) {
|
|
1217
1226
|
const name = Extract.getCalleeName(node);
|
|
1218
1227
|
if (name != null && isMatching(P.union("setTimeout", "clearTimeout"))(name)) return name;
|
|
@@ -1241,7 +1250,7 @@ function create(context) {
|
|
|
1241
1250
|
}
|
|
1242
1251
|
return {
|
|
1243
1252
|
["CallExpression"](node) {
|
|
1244
|
-
if (Traverse.findParent(node,
|
|
1253
|
+
if (Traverse.findParent(node, isUseEffectCallback) == null) return;
|
|
1245
1254
|
match(getCallKind(node)).with("setTimeout", () => {
|
|
1246
1255
|
const timeoutIdNode = resolveEnclosingAssignmentTarget(node);
|
|
1247
1256
|
if (timeoutIdNode == null) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-web-api",
|
|
3
|
-
"version": "5.24.0
|
|
3
|
+
"version": "5.24.0",
|
|
4
4
|
"description": "ESLint React's ESLint plugin for interacting with Web APIs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"dist"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@eslint-react/ast": "5.24.0
|
|
41
|
-
"@eslint-react/core": "5.24.0
|
|
42
|
-
"@eslint-react/eslint": "5.24.0
|
|
43
|
-
"@eslint-react/shared": "5.24.0
|
|
44
|
-
"@eslint-react/var": "5.24.0
|
|
40
|
+
"@eslint-react/ast": "5.24.0",
|
|
41
|
+
"@eslint-react/core": "5.24.0",
|
|
42
|
+
"@eslint-react/eslint": "5.24.0",
|
|
43
|
+
"@eslint-react/shared": "5.24.0",
|
|
44
|
+
"@eslint-react/var": "5.24.0",
|
|
45
45
|
"@typescript-eslint/types": "^8.71.0",
|
|
46
46
|
"@typescript-eslint/utils": "^8.71.0",
|
|
47
47
|
"ts-pattern": "^5.9.0"
|