eslint-plugin-react-web-api 1.19.0-next.4 → 1.20.0-beta.12
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/README.md +27 -27
- package/dist/index.d.mts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +22 -9
- package/dist/index.mjs +22 -9
- package/package.json +15 -13
package/README.md
CHANGED
|
@@ -25,10 +25,10 @@ export default [
|
|
|
25
25
|
"react-web-api": reactWebAPI,
|
|
26
26
|
rules: {
|
|
27
27
|
// react-web-api recommended rules
|
|
28
|
-
"react-web-api/no-leaked-
|
|
29
|
-
"react-web-api/no-leaked-interval": "
|
|
30
|
-
"react-web-api/no-leaked-
|
|
31
|
-
"react-web-api/no-leaked-
|
|
28
|
+
"react-web-api/no-leaked-event-listener": "warn",
|
|
29
|
+
"react-web-api/no-leaked-interval": "warn",
|
|
30
|
+
"react-web-api/no-leaked-resize-observer": "warn",
|
|
31
|
+
"react-web-api/no-leaked-timeout": "warn",
|
|
32
32
|
}
|
|
33
33
|
],
|
|
34
34
|
},
|
|
@@ -37,26 +37,26 @@ export default [
|
|
|
37
37
|
|
|
38
38
|
## Rules
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| `no-leaked-
|
|
47
|
-
| `no-leaked-
|
|
48
|
-
| `no-leaked-
|
|
49
|
-
| `no-leaked-intersection-observer` | Prevents leaked `IntersectionObserver` |
|
|
50
|
-
| `no-leaked-mutation-observer` | Prevents leaked `MutationObserver` |
|
|
51
|
-
| `no-leaked-performance-observer` | Prevents leaked `PerformanceObserver` |
|
|
52
|
-
| `no-leaked-websocket` | Prevents leaked `WebSocket` |
|
|
53
|
-
| `no-leaked-broadcast-channel` | Prevents leaked `BroadcastChannel` |
|
|
54
|
-
| `no-leaked-geolocation` | Prevents leaked `Geolocation.watchPosition()` |
|
|
55
|
-
| `no-leaked-absolute-orientation-sensor` | Prevents leaked `AbsoluteOrientationSensor` |
|
|
56
|
-
| `no-leaked-relative-accelerometer` | Prevents leaked `Accelerometer` |
|
|
57
|
-
| `no-leaked-ambient-light-sensor` | Prevents leaked `AmbientLightSensor` |
|
|
58
|
-
| `no-leaked-gravity-sensor` | Prevents leaked `GravitySensor` |
|
|
59
|
-
| `no-leaked-gyroscope` | Prevents leaked `Gyroscope` |
|
|
60
|
-
| `no-leaked-linear-acceleration-sensor` | Prevents leaked `LinearAccelerationSensor` |
|
|
61
|
-
| `no-leaked-magnetometer` | Prevents leaked `Magnetometer` |
|
|
62
|
-
| `no-leaked-orientation-sensor` | Prevents leaked `OrientationSensor` |
|
|
40
|
+
<https://eslint-react.xyz/docs/rules/overview#web-api-rules>
|
|
41
|
+
|
|
42
|
+
## Rules to be implemented
|
|
43
|
+
|
|
44
|
+
| Rule | Description | 💭 | |
|
|
45
|
+
| :-------------------------------------- | :-------------------------------------------- | :-: | :-: |
|
|
46
|
+
| `no-leaked-idle-callback` | Prevents leaked `requestIdleCallback` | | 🚧 |
|
|
47
|
+
| `no-leaked-animation-frame` | Prevents leaked `requestAnimationFrame` | | 🚧 |
|
|
48
|
+
| `no-leaked-event-source` | Prevents leaked `EventSource` | | 🚧 |
|
|
49
|
+
| `no-leaked-intersection-observer` | Prevents leaked `IntersectionObserver` | | 🚧 |
|
|
50
|
+
| `no-leaked-mutation-observer` | Prevents leaked `MutationObserver` | | 🚧 |
|
|
51
|
+
| `no-leaked-performance-observer` | Prevents leaked `PerformanceObserver` | | 🚧 |
|
|
52
|
+
| `no-leaked-websocket` | Prevents leaked `WebSocket` | | 🚧 |
|
|
53
|
+
| `no-leaked-broadcast-channel` | Prevents leaked `BroadcastChannel` | | 🚧 |
|
|
54
|
+
| `no-leaked-geolocation` | Prevents leaked `Geolocation.watchPosition()` | | 🚧 |
|
|
55
|
+
| `no-leaked-absolute-orientation-sensor` | Prevents leaked `AbsoluteOrientationSensor` | | 🚧 |
|
|
56
|
+
| `no-leaked-relative-accelerometer` | Prevents leaked `Accelerometer` | | 🚧 |
|
|
57
|
+
| `no-leaked-ambient-light-sensor` | Prevents leaked `AmbientLightSensor` | | 🚧 |
|
|
58
|
+
| `no-leaked-gravity-sensor` | Prevents leaked `GravitySensor` | | 🚧 |
|
|
59
|
+
| `no-leaked-gyroscope` | Prevents leaked `Gyroscope` | | 🚧 |
|
|
60
|
+
| `no-leaked-linear-acceleration-sensor` | Prevents leaked `LinearAccelerationSensor` | | 🚧 |
|
|
61
|
+
| `no-leaked-magnetometer` | Prevents leaked `Magnetometer` | | 🚧 |
|
|
62
|
+
| `no-leaked-orientation-sensor` | Prevents leaked `OrientationSensor` | | 🚧 |
|
package/dist/index.d.mts
CHANGED
|
@@ -19,7 +19,6 @@ declare const _default: {
|
|
|
19
19
|
"no-leaked-resize-observer": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$2, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
|
|
20
20
|
"no-leaked-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$3, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
|
|
21
21
|
};
|
|
22
|
-
DEFAULT_ESLINT_REACT_SETTINGS: {};
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
export { _default as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ declare const _default: {
|
|
|
19
19
|
"no-leaked-resize-observer": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$2, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
|
|
20
20
|
"no-leaked-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$3, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
|
|
21
21
|
};
|
|
22
|
-
DEFAULT_ESLINT_REACT_SETTINGS: {};
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
export { _default as default };
|
package/dist/index.js
CHANGED
|
@@ -34,7 +34,7 @@ var VAR2__namespace = /*#__PURE__*/_interopNamespace(VAR2);
|
|
|
34
34
|
|
|
35
35
|
// package.json
|
|
36
36
|
var name = "eslint-plugin-react-web-api";
|
|
37
|
-
var version = "1.
|
|
37
|
+
var version = "1.20.0-beta.12";
|
|
38
38
|
var createRule = shared.createRuleForPlugin("web-api");
|
|
39
39
|
function getInstanceID(node, prev) {
|
|
40
40
|
switch (true) {
|
|
@@ -64,6 +64,9 @@ var ObserverEntry = tools.Data.taggedEnum();
|
|
|
64
64
|
|
|
65
65
|
// src/rules/no-leaked-event-listener.ts
|
|
66
66
|
var RULE_NAME = "no-leaked-event-listener";
|
|
67
|
+
var RULE_FEATURES = [
|
|
68
|
+
"CHK"
|
|
69
|
+
];
|
|
67
70
|
var defaultOptions = {
|
|
68
71
|
capture: tools.O.some(false),
|
|
69
72
|
once: tools.O.some(false),
|
|
@@ -150,7 +153,8 @@ var no_leaked_event_listener_default = createRule({
|
|
|
150
153
|
meta: {
|
|
151
154
|
type: "problem",
|
|
152
155
|
docs: {
|
|
153
|
-
description: "enforce that every 'addEventListener' in a component or custom hook has a corresponding 'removeEventListener'."
|
|
156
|
+
description: "enforce that every 'addEventListener' in a component or custom hook has a corresponding 'removeEventListener'.",
|
|
157
|
+
[Symbol.for("rule_features")]: RULE_FEATURES
|
|
154
158
|
},
|
|
155
159
|
messages: {
|
|
156
160
|
noLeakedEventListenerInEffect: "A 'addEventListener' in '{{effectMethodKind}}' should have a corresponding 'removeEventListener' in its cleanup function.",
|
|
@@ -269,6 +273,9 @@ var no_leaked_event_listener_default = createRule({
|
|
|
269
273
|
defaultOptions: []
|
|
270
274
|
});
|
|
271
275
|
var RULE_NAME2 = "no-leaked-interval";
|
|
276
|
+
var RULE_FEATURES2 = [
|
|
277
|
+
"CHK"
|
|
278
|
+
];
|
|
272
279
|
function getCallKind2(node) {
|
|
273
280
|
switch (true) {
|
|
274
281
|
case (node.callee.type === utils.AST_NODE_TYPES.Identifier && tsPattern.isMatching(tsPattern.P.union("setInterval", "clearInterval"), node.callee.name)):
|
|
@@ -283,7 +290,8 @@ var no_leaked_interval_default = createRule({
|
|
|
283
290
|
meta: {
|
|
284
291
|
type: "problem",
|
|
285
292
|
docs: {
|
|
286
|
-
description: "enforce that every 'setInterval' in a component or custom hook has a corresponding 'clearInterval'."
|
|
293
|
+
description: "enforce that every 'setInterval' in a component or custom hook has a corresponding 'clearInterval'.",
|
|
294
|
+
[Symbol.for("rule_features")]: RULE_FEATURES2
|
|
287
295
|
},
|
|
288
296
|
messages: {
|
|
289
297
|
noLeakedIntervalInEffect: "A 'setInterval' created in '{{ kind }}' must be cleared with 'clearInterval' in the cleanup function.",
|
|
@@ -381,6 +389,9 @@ var no_leaked_interval_default = createRule({
|
|
|
381
389
|
defaultOptions: []
|
|
382
390
|
});
|
|
383
391
|
var RULE_NAME3 = "no-leaked-resize-observer";
|
|
392
|
+
var RULE_FEATURES3 = [
|
|
393
|
+
"CHK"
|
|
394
|
+
];
|
|
384
395
|
function isNewResizeObserver(node) {
|
|
385
396
|
return node.type === utils.AST_NODE_TYPES.NewExpression && node.callee.type === utils.AST_NODE_TYPES.Identifier && node.callee.name === "ResizeObserver";
|
|
386
397
|
}
|
|
@@ -415,7 +426,8 @@ var no_leaked_resize_observer_default = createRule({
|
|
|
415
426
|
meta: {
|
|
416
427
|
type: "problem",
|
|
417
428
|
docs: {
|
|
418
|
-
description: "enforce cleanup of 'ResizeObserver' instances in components and custom hooks."
|
|
429
|
+
description: "enforce cleanup of 'ResizeObserver' instances in components and custom hooks.",
|
|
430
|
+
[Symbol.for("rule_features")]: RULE_FEATURES3
|
|
419
431
|
},
|
|
420
432
|
messages: {
|
|
421
433
|
noLeakedResizeObserver: "A 'ResizeObserver' instance created in 'useEffect' must be disconnected in the cleanup function.",
|
|
@@ -520,6 +532,9 @@ var no_leaked_resize_observer_default = createRule({
|
|
|
520
532
|
defaultOptions: []
|
|
521
533
|
});
|
|
522
534
|
var RULE_NAME4 = "no-leaked-timeout";
|
|
535
|
+
var RULE_FEATURES4 = [
|
|
536
|
+
"CHK"
|
|
537
|
+
];
|
|
523
538
|
function getCallKind4(node) {
|
|
524
539
|
switch (true) {
|
|
525
540
|
case (node.callee.type === utils.AST_NODE_TYPES.Identifier && tsPattern.isMatching(tsPattern.P.union("setTimeout", "clearTimeout"), node.callee.name)):
|
|
@@ -534,7 +549,8 @@ var no_leaked_timeout_default = createRule({
|
|
|
534
549
|
meta: {
|
|
535
550
|
type: "problem",
|
|
536
551
|
docs: {
|
|
537
|
-
description: "enforce that every 'setTimeout' in a component or custom hook has a corresponding 'clearTimeout'."
|
|
552
|
+
description: "enforce that every 'setTimeout' in a component or custom hook has a corresponding 'clearTimeout'.",
|
|
553
|
+
[Symbol.for("rule_features")]: RULE_FEATURES4
|
|
538
554
|
},
|
|
539
555
|
messages: {
|
|
540
556
|
noLeakedTimeoutInEffect: "A 'setTimeout' created in '{{ kind }}' must be cleared with 'clearTimeout' in the cleanup function.",
|
|
@@ -630,7 +646,6 @@ var no_leaked_timeout_default = createRule({
|
|
|
630
646
|
});
|
|
631
647
|
|
|
632
648
|
// src/index.ts
|
|
633
|
-
var DEFAULT_ESLINT_REACT_SETTINGS = {};
|
|
634
649
|
var src_default = {
|
|
635
650
|
meta: {
|
|
636
651
|
name,
|
|
@@ -641,9 +656,7 @@ var src_default = {
|
|
|
641
656
|
"no-leaked-interval": no_leaked_interval_default,
|
|
642
657
|
"no-leaked-resize-observer": no_leaked_resize_observer_default,
|
|
643
658
|
"no-leaked-timeout": no_leaked_timeout_default
|
|
644
|
-
}
|
|
645
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
646
|
-
DEFAULT_ESLINT_REACT_SETTINGS
|
|
659
|
+
}
|
|
647
660
|
};
|
|
648
661
|
|
|
649
662
|
module.exports = src_default;
|
package/dist/index.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import { AST_NODE_TYPES as AST_NODE_TYPES$1 } from '@typescript-eslint/types';
|
|
|
10
10
|
|
|
11
11
|
// package.json
|
|
12
12
|
var name = "eslint-plugin-react-web-api";
|
|
13
|
-
var version = "1.
|
|
13
|
+
var version = "1.20.0-beta.12";
|
|
14
14
|
var createRule = createRuleForPlugin("web-api");
|
|
15
15
|
function getInstanceID(node, prev) {
|
|
16
16
|
switch (true) {
|
|
@@ -40,6 +40,9 @@ var ObserverEntry = Data.taggedEnum();
|
|
|
40
40
|
|
|
41
41
|
// src/rules/no-leaked-event-listener.ts
|
|
42
42
|
var RULE_NAME = "no-leaked-event-listener";
|
|
43
|
+
var RULE_FEATURES = [
|
|
44
|
+
"CHK"
|
|
45
|
+
];
|
|
43
46
|
var defaultOptions = {
|
|
44
47
|
capture: O.some(false),
|
|
45
48
|
once: O.some(false),
|
|
@@ -126,7 +129,8 @@ var no_leaked_event_listener_default = createRule({
|
|
|
126
129
|
meta: {
|
|
127
130
|
type: "problem",
|
|
128
131
|
docs: {
|
|
129
|
-
description: "enforce that every 'addEventListener' in a component or custom hook has a corresponding 'removeEventListener'."
|
|
132
|
+
description: "enforce that every 'addEventListener' in a component or custom hook has a corresponding 'removeEventListener'.",
|
|
133
|
+
[Symbol.for("rule_features")]: RULE_FEATURES
|
|
130
134
|
},
|
|
131
135
|
messages: {
|
|
132
136
|
noLeakedEventListenerInEffect: "A 'addEventListener' in '{{effectMethodKind}}' should have a corresponding 'removeEventListener' in its cleanup function.",
|
|
@@ -245,6 +249,9 @@ var no_leaked_event_listener_default = createRule({
|
|
|
245
249
|
defaultOptions: []
|
|
246
250
|
});
|
|
247
251
|
var RULE_NAME2 = "no-leaked-interval";
|
|
252
|
+
var RULE_FEATURES2 = [
|
|
253
|
+
"CHK"
|
|
254
|
+
];
|
|
248
255
|
function getCallKind2(node) {
|
|
249
256
|
switch (true) {
|
|
250
257
|
case (node.callee.type === AST_NODE_TYPES.Identifier && isMatching(P.union("setInterval", "clearInterval"), node.callee.name)):
|
|
@@ -259,7 +266,8 @@ var no_leaked_interval_default = createRule({
|
|
|
259
266
|
meta: {
|
|
260
267
|
type: "problem",
|
|
261
268
|
docs: {
|
|
262
|
-
description: "enforce that every 'setInterval' in a component or custom hook has a corresponding 'clearInterval'."
|
|
269
|
+
description: "enforce that every 'setInterval' in a component or custom hook has a corresponding 'clearInterval'.",
|
|
270
|
+
[Symbol.for("rule_features")]: RULE_FEATURES2
|
|
263
271
|
},
|
|
264
272
|
messages: {
|
|
265
273
|
noLeakedIntervalInEffect: "A 'setInterval' created in '{{ kind }}' must be cleared with 'clearInterval' in the cleanup function.",
|
|
@@ -357,6 +365,9 @@ var no_leaked_interval_default = createRule({
|
|
|
357
365
|
defaultOptions: []
|
|
358
366
|
});
|
|
359
367
|
var RULE_NAME3 = "no-leaked-resize-observer";
|
|
368
|
+
var RULE_FEATURES3 = [
|
|
369
|
+
"CHK"
|
|
370
|
+
];
|
|
360
371
|
function isNewResizeObserver(node) {
|
|
361
372
|
return node.type === AST_NODE_TYPES.NewExpression && node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === "ResizeObserver";
|
|
362
373
|
}
|
|
@@ -391,7 +402,8 @@ var no_leaked_resize_observer_default = createRule({
|
|
|
391
402
|
meta: {
|
|
392
403
|
type: "problem",
|
|
393
404
|
docs: {
|
|
394
|
-
description: "enforce cleanup of 'ResizeObserver' instances in components and custom hooks."
|
|
405
|
+
description: "enforce cleanup of 'ResizeObserver' instances in components and custom hooks.",
|
|
406
|
+
[Symbol.for("rule_features")]: RULE_FEATURES3
|
|
395
407
|
},
|
|
396
408
|
messages: {
|
|
397
409
|
noLeakedResizeObserver: "A 'ResizeObserver' instance created in 'useEffect' must be disconnected in the cleanup function.",
|
|
@@ -496,6 +508,9 @@ var no_leaked_resize_observer_default = createRule({
|
|
|
496
508
|
defaultOptions: []
|
|
497
509
|
});
|
|
498
510
|
var RULE_NAME4 = "no-leaked-timeout";
|
|
511
|
+
var RULE_FEATURES4 = [
|
|
512
|
+
"CHK"
|
|
513
|
+
];
|
|
499
514
|
function getCallKind4(node) {
|
|
500
515
|
switch (true) {
|
|
501
516
|
case (node.callee.type === AST_NODE_TYPES.Identifier && isMatching(P.union("setTimeout", "clearTimeout"), node.callee.name)):
|
|
@@ -510,7 +525,8 @@ var no_leaked_timeout_default = createRule({
|
|
|
510
525
|
meta: {
|
|
511
526
|
type: "problem",
|
|
512
527
|
docs: {
|
|
513
|
-
description: "enforce that every 'setTimeout' in a component or custom hook has a corresponding 'clearTimeout'."
|
|
528
|
+
description: "enforce that every 'setTimeout' in a component or custom hook has a corresponding 'clearTimeout'.",
|
|
529
|
+
[Symbol.for("rule_features")]: RULE_FEATURES4
|
|
514
530
|
},
|
|
515
531
|
messages: {
|
|
516
532
|
noLeakedTimeoutInEffect: "A 'setTimeout' created in '{{ kind }}' must be cleared with 'clearTimeout' in the cleanup function.",
|
|
@@ -606,7 +622,6 @@ var no_leaked_timeout_default = createRule({
|
|
|
606
622
|
});
|
|
607
623
|
|
|
608
624
|
// src/index.ts
|
|
609
|
-
var DEFAULT_ESLINT_REACT_SETTINGS = {};
|
|
610
625
|
var src_default = {
|
|
611
626
|
meta: {
|
|
612
627
|
name,
|
|
@@ -617,9 +632,7 @@ var src_default = {
|
|
|
617
632
|
"no-leaked-interval": no_leaked_interval_default,
|
|
618
633
|
"no-leaked-resize-observer": no_leaked_resize_observer_default,
|
|
619
634
|
"no-leaked-timeout": no_leaked_timeout_default
|
|
620
|
-
}
|
|
621
|
-
// eslint-disable-next-line perfectionist/sort-objects
|
|
622
|
-
DEFAULT_ESLINT_REACT_SETTINGS
|
|
635
|
+
}
|
|
623
636
|
};
|
|
624
637
|
|
|
625
638
|
export { src_default as default };
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-web-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0-beta.12",
|
|
4
4
|
"description": "ESLint React's ESLint plugin for interacting with Web APIs",
|
|
5
5
|
"keywords": [
|
|
6
|
+
"react",
|
|
7
|
+
"web-api",
|
|
6
8
|
"eslint",
|
|
9
|
+
"eslint-react",
|
|
7
10
|
"eslint-plugin",
|
|
8
|
-
"web-api"
|
|
9
|
-
"react",
|
|
10
|
-
"dom"
|
|
11
|
+
"eslint-plugin-react-web-api"
|
|
11
12
|
],
|
|
12
13
|
"homepage": "https://github.com/rel1cx/eslint-react",
|
|
13
14
|
"bugs": {
|
|
@@ -46,20 +47,21 @@
|
|
|
46
47
|
"@typescript-eslint/types": "^8.18.0",
|
|
47
48
|
"@typescript-eslint/utils": "^8.18.0",
|
|
48
49
|
"birecord": "^0.1.1",
|
|
49
|
-
"ts-pattern": "^5.
|
|
50
|
-
"@eslint-react/
|
|
51
|
-
"@eslint-react/
|
|
52
|
-
"@eslint-react/
|
|
53
|
-
"@eslint-react/
|
|
54
|
-
"@eslint-react/types": "1.
|
|
55
|
-
"@eslint-react/
|
|
56
|
-
"@eslint-react/
|
|
50
|
+
"ts-pattern": "^5.6.0",
|
|
51
|
+
"@eslint-react/ast": "1.20.0-beta.12",
|
|
52
|
+
"@eslint-react/core": "1.20.0-beta.12",
|
|
53
|
+
"@eslint-react/jsx": "1.20.0-beta.12",
|
|
54
|
+
"@eslint-react/shared": "1.20.0-beta.12",
|
|
55
|
+
"@eslint-react/types": "1.20.0-beta.12",
|
|
56
|
+
"@eslint-react/var": "1.20.0-beta.12",
|
|
57
|
+
"@eslint-react/tools": "1.20.0-beta.12"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@types/react": "^19.0.1",
|
|
60
61
|
"@types/react-dom": "^19.0.2",
|
|
61
62
|
"string-ts": "^2.2.0",
|
|
62
|
-
"tsup": "^8.3.5"
|
|
63
|
+
"tsup": "^8.3.5",
|
|
64
|
+
"@workspace/configs": "0.0.0"
|
|
63
65
|
},
|
|
64
66
|
"peerDependencies": {
|
|
65
67
|
"eslint": "^8.57.0 || ^9.0.0",
|