eslint-plugin-react-web-api 2.4.0-next.7 → 2.4.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 +7 -23
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_ESLINT_REACT_SETTINGS, WEBSITE_URL, getConfigAdapters } from "@eslint-react/shared";
|
|
2
2
|
import * as AST from "@eslint-react/ast";
|
|
3
|
-
import { ComponentPhaseRelevance, getInstanceId, getPhaseKindOfFunction,
|
|
3
|
+
import { ComponentPhaseRelevance, getInstanceId, getPhaseKindOfFunction, isInitializedFromReactNative, isInstanceIdEqual, isInversePhase } from "@eslint-react/core";
|
|
4
4
|
import { or, unit } from "@eslint-react/eff";
|
|
5
5
|
import { findAssignmentTarget, findProperty, findVariable, getVariableDefinitionNode, isNodeValueEqual } from "@eslint-react/var";
|
|
6
6
|
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
@@ -42,7 +42,7 @@ const settings = { "react-x": DEFAULT_ESLINT_REACT_SETTINGS };
|
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region package.json
|
|
44
44
|
var name = "eslint-plugin-react-web-api";
|
|
45
|
-
var version = "2.4.0
|
|
45
|
+
var version = "2.4.0";
|
|
46
46
|
|
|
47
47
|
//#endregion
|
|
48
48
|
//#region src/utils/create-rule.ts
|
|
@@ -54,7 +54,6 @@ const createRule = ESLintUtils.RuleCreator(getDocsUrl);
|
|
|
54
54
|
//#endregion
|
|
55
55
|
//#region src/rules/no-leaked-event-listener.ts
|
|
56
56
|
const RULE_NAME$3 = "no-leaked-event-listener";
|
|
57
|
-
const RULE_FEATURES$3 = [];
|
|
58
57
|
const defaultOptions = {
|
|
59
58
|
capture: false,
|
|
60
59
|
signal: unit
|
|
@@ -122,10 +121,7 @@ function getOptions(node, initialScope) {
|
|
|
122
121
|
var no_leaked_event_listener_default = createRule({
|
|
123
122
|
meta: {
|
|
124
123
|
type: "problem",
|
|
125
|
-
docs: {
|
|
126
|
-
description: "Prevents leaked `addEventListener` in a component or custom Hook.",
|
|
127
|
-
[Symbol.for("rule_features")]: RULE_FEATURES$3
|
|
128
|
-
},
|
|
124
|
+
docs: { description: "Prevents leaked `addEventListener` in a component or custom Hook." },
|
|
129
125
|
messages: {
|
|
130
126
|
expectedRemoveEventListenerInCleanup: "An 'addEventListener' in '{{effectMethodKind}}' should have a corresponding 'removeEventListener' in its cleanup function.",
|
|
131
127
|
expectedRemoveEventListenerInUnmount: "An 'addEventListener' in 'componentDidMount' should have a corresponding 'removeEventListener' in 'componentWillUnmount' method.",
|
|
@@ -182,7 +178,7 @@ function create$3(context) {
|
|
|
182
178
|
if (fKind == null) return;
|
|
183
179
|
if (!ComponentPhaseRelevance.has(fKind)) return;
|
|
184
180
|
match(getCallKind$3(node)).with("addEventListener", (callKind) => {
|
|
185
|
-
if (node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier &&
|
|
181
|
+
if (node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier && isInitializedFromReactNative(node.callee.object.name, context.sourceCode.getScope(node))) return;
|
|
186
182
|
const [type, listener, options] = node.arguments;
|
|
187
183
|
if (type == null || listener == null) return;
|
|
188
184
|
const opts = options == null ? defaultOptions : getOptions(options, context.sourceCode.getScope(options));
|
|
@@ -245,7 +241,6 @@ function create$3(context) {
|
|
|
245
241
|
//#endregion
|
|
246
242
|
//#region src/rules/no-leaked-interval.ts
|
|
247
243
|
const RULE_NAME$2 = "no-leaked-interval";
|
|
248
|
-
const RULE_FEATURES$2 = [];
|
|
249
244
|
function getCallKind$2(node) {
|
|
250
245
|
switch (true) {
|
|
251
246
|
case node.callee.type === AST_NODE_TYPES.Identifier && isMatching(P.union("setInterval", "clearInterval"))(node.callee.name): return node.callee.name;
|
|
@@ -256,10 +251,7 @@ function getCallKind$2(node) {
|
|
|
256
251
|
var no_leaked_interval_default = createRule({
|
|
257
252
|
meta: {
|
|
258
253
|
type: "problem",
|
|
259
|
-
docs: {
|
|
260
|
-
description: "Prevents leaked `setInterval` in a component or custom Hook.",
|
|
261
|
-
[Symbol.for("rule_features")]: RULE_FEATURES$2
|
|
262
|
-
},
|
|
254
|
+
docs: { description: "Prevents leaked `setInterval` in a component or custom Hook." },
|
|
263
255
|
messages: {
|
|
264
256
|
expectedClearIntervalInCleanup: "A 'setInterval' created in '{{ kind }}' must be cleared with 'clearInterval' in the cleanup function.",
|
|
265
257
|
expectedClearIntervalInUnmount: "A 'setInterval' created in '{{ kind }}' must be cleared with 'clearInterval' in the 'componentWillUnmount' method.",
|
|
@@ -359,7 +351,6 @@ function create$2(context) {
|
|
|
359
351
|
//#endregion
|
|
360
352
|
//#region src/rules/no-leaked-resize-observer.ts
|
|
361
353
|
const RULE_NAME$1 = "no-leaked-resize-observer";
|
|
362
|
-
const RULE_FEATURES$1 = [];
|
|
363
354
|
function isNewResizeObserver(node) {
|
|
364
355
|
return node?.type === AST_NODE_TYPES.NewExpression && node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === "ResizeObserver";
|
|
365
356
|
}
|
|
@@ -383,10 +374,7 @@ function getFunctionKind(node) {
|
|
|
383
374
|
var no_leaked_resize_observer_default = createRule({
|
|
384
375
|
meta: {
|
|
385
376
|
type: "problem",
|
|
386
|
-
docs: {
|
|
387
|
-
description: "Prevents leaked `ResizeObserver` in a component or custom Hook.",
|
|
388
|
-
[Symbol.for("rule_features")]: RULE_FEATURES$1
|
|
389
|
-
},
|
|
377
|
+
docs: { description: "Prevents leaked `ResizeObserver` in a component or custom Hook." },
|
|
390
378
|
messages: {
|
|
391
379
|
expectedDisconnectInControlFlow: "Dynamically added 'ResizeObserver.observe' should be cleared all at once using 'ResizeObserver.disconnect' in the cleanup function.",
|
|
392
380
|
expectedDisconnectOrUnobserveInCleanup: "A 'ResizeObserver' instance created in 'useEffect' must be disconnected in the cleanup function.",
|
|
@@ -505,7 +493,6 @@ function create$1(context) {
|
|
|
505
493
|
//#endregion
|
|
506
494
|
//#region src/rules/no-leaked-timeout.ts
|
|
507
495
|
const RULE_NAME = "no-leaked-timeout";
|
|
508
|
-
const RULE_FEATURES = [];
|
|
509
496
|
function getCallKind(node) {
|
|
510
497
|
switch (true) {
|
|
511
498
|
case node.callee.type === AST_NODE_TYPES.Identifier && isMatching(P.union("setTimeout", "clearTimeout"))(node.callee.name): return node.callee.name;
|
|
@@ -516,10 +503,7 @@ function getCallKind(node) {
|
|
|
516
503
|
var no_leaked_timeout_default = createRule({
|
|
517
504
|
meta: {
|
|
518
505
|
type: "problem",
|
|
519
|
-
docs: {
|
|
520
|
-
description: "Prevents leaked `setTimeout` in a component or custom Hook.",
|
|
521
|
-
[Symbol.for("rule_features")]: RULE_FEATURES
|
|
522
|
-
},
|
|
506
|
+
docs: { description: "Prevents leaked `setTimeout` in a component or custom Hook." },
|
|
523
507
|
messages: {
|
|
524
508
|
expectedClearTimeoutInCleanup: "A 'setTimeout' created in '{{ kind }}' must be cleared with 'clearTimeout' in the cleanup function.",
|
|
525
509
|
expectedClearTimeoutInUnmount: "A 'setTimeout' created in '{{ kind }}' must be cleared with 'clearTimeout' in the 'componentWillUnmount' method.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-web-api",
|
|
3
|
-
"version": "2.4.0
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "ESLint React's ESLint plugin for interacting with Web APIs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
"./package.json"
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@typescript-eslint/scope-manager": "^8.
|
|
42
|
-
"@typescript-eslint/types": "^8.
|
|
43
|
-
"@typescript-eslint/utils": "^8.
|
|
41
|
+
"@typescript-eslint/scope-manager": "^8.50.1",
|
|
42
|
+
"@typescript-eslint/types": "^8.50.1",
|
|
43
|
+
"@typescript-eslint/utils": "^8.50.1",
|
|
44
44
|
"string-ts": "^2.3.1",
|
|
45
45
|
"ts-pattern": "^5.9.0",
|
|
46
|
-
"@eslint-react/ast": "2.4.0
|
|
47
|
-
"@eslint-react/core": "2.4.0
|
|
48
|
-
"@eslint-react/eff": "2.4.0
|
|
49
|
-
"@eslint-react/shared": "2.4.0
|
|
50
|
-
"@eslint-react/var": "2.4.0
|
|
46
|
+
"@eslint-react/ast": "2.4.0",
|
|
47
|
+
"@eslint-react/core": "2.4.0",
|
|
48
|
+
"@eslint-react/eff": "2.4.0",
|
|
49
|
+
"@eslint-react/shared": "2.4.0",
|
|
50
|
+
"@eslint-react/var": "2.4.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/react": "^19.2.7",
|
|
54
54
|
"@types/react-dom": "^19.2.3",
|
|
55
|
-
"tsdown": "^0.18.
|
|
55
|
+
"tsdown": "^0.18.2",
|
|
56
56
|
"@local/configs": "0.0.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|