eslint-plugin-react-web-api 1.23.2-next.6 → 1.23.3-beta.2

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 (3) hide show
  1. package/dist/index.js +103 -35
  2. package/dist/index.mjs +103 -35
  3. package/package.json +10 -10
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.23.2-next.6";
37
+ var version = "1.23.3-beta.2";
38
38
  var createRule = shared.createRuleForPlugin("web-api");
39
39
  function getInstanceID(node, prev) {
40
40
  switch (true) {
@@ -102,7 +102,9 @@ function getOptions(node, initialScope) {
102
102
  return JSX__namespace.findPropInProperties(properties, initialScope)(propName);
103
103
  };
104
104
  const getPropValue = (prop) => {
105
- if (prop.type !== utils.AST_NODE_TYPES.Property) return eff.O.none();
105
+ if (prop.type !== utils.AST_NODE_TYPES.Property) {
106
+ return eff.O.none();
107
+ }
106
108
  const { value } = prop;
107
109
  switch (value.type) {
108
110
  case utils.AST_NODE_TYPES.Literal: {
@@ -134,7 +136,9 @@ function getOptions(node, initialScope) {
134
136
  const vCapture = eff.O.flatMap(pCapture, getPropValue).pipe(eff.O.filter(eff.isBoolean));
135
137
  const pSignal = findProp(node2.properties, "signal");
136
138
  const vSignal = eff.O.flatMap(pSignal, (prop) => {
137
- if (prop.type !== utils.AST_NODE_TYPES.Property) return eff.O.none();
139
+ if (prop.type !== utils.AST_NODE_TYPES.Property) {
140
+ return eff.O.none();
141
+ }
138
142
  const { value } = prop;
139
143
  return getSignalValueExpression(value, initialScope);
140
144
  });
@@ -163,8 +167,12 @@ var no_leaked_event_listener_default = createRule({
163
167
  },
164
168
  name: RULE_NAME,
165
169
  create(context) {
166
- if (!context.sourceCode.text.includes("addEventListener")) return {};
167
- if (!/use\w*Effect|componentDidMount|componentWillUnmount/u.test(context.sourceCode.text)) return {};
170
+ if (!context.sourceCode.text.includes("addEventListener")) {
171
+ return {};
172
+ }
173
+ if (!/use\w*Effect|componentDidMount|componentWillUnmount/u.test(context.sourceCode.text)) {
174
+ return {};
175
+ }
168
176
  const fStack = [];
169
177
  const aEntries = [];
170
178
  const rEntries = [];
@@ -181,7 +189,9 @@ var no_leaked_event_listener_default = createRule({
181
189
  function isInverseEntry(aEntry, rEntry) {
182
190
  const { type: aType, callee: aCallee, capture: aCapture, listener: aListener, phase: aPhase } = aEntry;
183
191
  const { type: rType, callee: rCallee, capture: rCapture, listener: rListener, phase: rPhase } = rEntry;
184
- if (!core.isInversePhase(aPhase, rPhase)) return false;
192
+ if (!core.isInversePhase(aPhase, rPhase)) {
193
+ return false;
194
+ }
185
195
  return isSameObject(aCallee, rCallee) && AST2__namespace.isNodeEqual(aListener, rListener) && VAR2__namespace.isNodeValueEqual(aType, rType, [
186
196
  context.sourceCode.getScope(aType),
187
197
  context.sourceCode.getScope(rType)
@@ -189,8 +199,12 @@ var no_leaked_event_listener_default = createRule({
189
199
  }
190
200
  function checkInlineFunction(node, callKind, options) {
191
201
  const [_, listener] = node.arguments;
192
- if (!AST2__namespace.isFunction(listener)) return eff.O.none();
193
- if (eff.O.isSome(options.signal)) return eff.O.none();
202
+ if (!AST2__namespace.isFunction(listener)) {
203
+ return eff.O.none();
204
+ }
205
+ if (eff.O.isSome(options.signal)) {
206
+ return eff.O.none();
207
+ }
194
208
  return eff.O.some({
195
209
  messageId: "noLeakedEventListenerOfInlineFunction",
196
210
  node: listener,
@@ -207,11 +221,17 @@ var no_leaked_event_listener_default = createRule({
207
221
  },
208
222
  ["CallExpression"](node) {
209
223
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
210
- if (!fNode || !fKind) return;
211
- if (!core.ERPhaseRelevance.has(fKind)) return;
224
+ if (!fNode || !fKind) {
225
+ return;
226
+ }
227
+ if (!core.ERPhaseRelevance.has(fKind)) {
228
+ return;
229
+ }
212
230
  tsPattern.match(getCallKind(node)).with("addEventListener", (callKind) => {
213
231
  const [type, listener, options] = node.arguments;
214
- if (!type || !listener) return;
232
+ if (!type || !listener) {
233
+ return;
234
+ }
215
235
  const opts = options ? getOptions(options, context.sourceCode.getScope(options)) : defaultOptions;
216
236
  const { callee } = node;
217
237
  eff.O.map(checkInlineFunction(node, callKind, opts), context.report);
@@ -226,7 +246,9 @@ var no_leaked_event_listener_default = createRule({
226
246
  });
227
247
  }).with("removeEventListener", (callKind) => {
228
248
  const [type, listener, options] = node.arguments;
229
- if (!type || !listener) return;
249
+ if (!type || !listener) {
250
+ return;
251
+ }
230
252
  const opts = options ? getOptions(options, context.sourceCode.getScope(options)) : defaultOptions;
231
253
  const { callee } = node;
232
254
  eff.O.map(checkInlineFunction(node, callKind, opts), context.report);
@@ -245,8 +267,12 @@ var no_leaked_event_listener_default = createRule({
245
267
  },
246
268
  ["Program:exit"]() {
247
269
  for (const aEntry of aEntries) {
248
- if (eff.O.exists(aEntry.signal, (signal) => abortedSignals.some((as) => isSameObject(as, signal)))) continue;
249
- if (rEntries.some((rEntry) => isInverseEntry(aEntry, rEntry))) continue;
270
+ if (eff.O.exists(aEntry.signal, (signal) => abortedSignals.some((as) => isSameObject(as, signal)))) {
271
+ continue;
272
+ }
273
+ if (rEntries.some((rEntry) => isInverseEntry(aEntry, rEntry))) {
274
+ continue;
275
+ }
250
276
  switch (aEntry.phase) {
251
277
  case "setup":
252
278
  case "cleanup":
@@ -302,7 +328,9 @@ var no_leaked_interval_default = createRule({
302
328
  },
303
329
  name: RULE_NAME2,
304
330
  create(context) {
305
- if (!context.sourceCode.text.includes("setInterval")) return {};
331
+ if (!context.sourceCode.text.includes("setInterval")) {
332
+ return {};
333
+ }
306
334
  const fStack = [];
307
335
  const sEntries = [];
308
336
  const cEntries = [];
@@ -321,8 +349,12 @@ var no_leaked_interval_default = createRule({
321
349
  switch (getCallKind2(node)) {
322
350
  case "setInterval": {
323
351
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
324
- if (!fNode || !fKind) break;
325
- if (!core.ERPhaseRelevance.has(fKind)) break;
352
+ if (!fNode || !fKind) {
353
+ break;
354
+ }
355
+ if (!core.ERPhaseRelevance.has(fKind)) {
356
+ break;
357
+ }
326
358
  const intervalIdNode = eff.O.getOrNull(VAR2__namespace.getVariableDeclaratorID(node));
327
359
  if (!intervalIdNode) {
328
360
  context.report({
@@ -342,10 +374,16 @@ var no_leaked_interval_default = createRule({
342
374
  }
343
375
  case "clearInterval": {
344
376
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
345
- if (!fNode || !fKind) break;
346
- if (!core.ERPhaseRelevance.has(fKind)) break;
377
+ if (!fNode || !fKind) {
378
+ break;
379
+ }
380
+ if (!core.ERPhaseRelevance.has(fKind)) {
381
+ break;
382
+ }
347
383
  const [intervalIdNode] = node.arguments;
348
- if (!intervalIdNode) break;
384
+ if (!intervalIdNode) {
385
+ break;
386
+ }
349
387
  cEntries.push({
350
388
  kind: "interval",
351
389
  node,
@@ -359,7 +397,9 @@ var no_leaked_interval_default = createRule({
359
397
  },
360
398
  ["Program:exit"]() {
361
399
  for (const sEntry of sEntries) {
362
- if (cEntries.some((cEntry) => isInverseEntry(sEntry, cEntry))) continue;
400
+ if (cEntries.some((cEntry) => isInverseEntry(sEntry, cEntry))) {
401
+ continue;
402
+ }
363
403
  switch (sEntry.phase) {
364
404
  case "setup":
365
405
  case "cleanup":
@@ -438,7 +478,9 @@ var no_leaked_resize_observer_default = createRule({
438
478
  },
439
479
  name: RULE_NAME3,
440
480
  create(context) {
441
- if (!context.sourceCode.text.includes("ResizeObserver")) return {};
481
+ if (!context.sourceCode.text.includes("ResizeObserver")) {
482
+ return {};
483
+ }
442
484
  const fStack = [];
443
485
  const observers = [];
444
486
  const oEntries = [];
@@ -454,8 +496,12 @@ var no_leaked_resize_observer_default = createRule({
454
496
  },
455
497
  ["CallExpression"](node) {
456
498
  const [_, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
457
- if (node.callee.type !== utils.AST_NODE_TYPES.MemberExpression) return;
458
- if (!core.ERPhaseRelevance.has(fKind)) return;
499
+ if (node.callee.type !== utils.AST_NODE_TYPES.MemberExpression) {
500
+ return;
501
+ }
502
+ if (!core.ERPhaseRelevance.has(fKind)) {
503
+ return;
504
+ }
459
505
  const { object } = node.callee;
460
506
  tsPattern.match(getCallKind3(node, context)).with("disconnect", () => {
461
507
  dEntries.push({
@@ -468,7 +514,9 @@ var no_leaked_resize_observer_default = createRule({
468
514
  });
469
515
  }).with("observe", () => {
470
516
  const [element] = node.arguments;
471
- if (!element) return;
517
+ if (!element) {
518
+ return;
519
+ }
472
520
  oEntries.push({
473
521
  kind: "observe",
474
522
  node,
@@ -480,7 +528,9 @@ var no_leaked_resize_observer_default = createRule({
480
528
  });
481
529
  }).with("unobserve", () => {
482
530
  const [element] = node.arguments;
483
- if (!element) return;
531
+ if (!element) {
532
+ return;
533
+ }
484
534
  uEntries.push({
485
535
  kind: "unobserve",
486
536
  node,
@@ -494,8 +544,12 @@ var no_leaked_resize_observer_default = createRule({
494
544
  },
495
545
  ["NewExpression"](node) {
496
546
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
497
- if (!fNode || !core.ERPhaseRelevance.has(fKind)) return;
498
- if (!isNewResizeObserver(node)) return;
547
+ if (!fNode || !core.ERPhaseRelevance.has(fKind)) {
548
+ return;
549
+ }
550
+ if (!isNewResizeObserver(node)) {
551
+ return;
552
+ }
499
553
  const id = getInstanceID(node);
500
554
  if (eff.O.isNone(id)) {
501
555
  context.report({
@@ -508,7 +562,9 @@ var no_leaked_resize_observer_default = createRule({
508
562
  },
509
563
  ["Program:exit"]() {
510
564
  for (const [node, id, _, phaseNode] of observers) {
511
- if (dEntries.some((e) => isInstanceIDEqual(e.observer, id, context))) continue;
565
+ if (dEntries.some((e) => isInstanceIDEqual(e.observer, id, context))) {
566
+ continue;
567
+ }
512
568
  const oentries = oEntries.filter((e) => isInstanceIDEqual(e.observer, id, context));
513
569
  const uentries = uEntries.filter((e) => isInstanceIDEqual(e.observer, id, context));
514
570
  const isDynamic = eff.or(AST2__namespace.isConditional, AST2__namespace.is(utils.AST_NODE_TYPES.CallExpression));
@@ -519,7 +575,9 @@ var no_leaked_resize_observer_default = createRule({
519
575
  continue;
520
576
  }
521
577
  for (const oEntry of oentries) {
522
- if (uentries.some((uEntry) => isInstanceIDEqual(uEntry.element, oEntry.element, context))) continue;
578
+ if (uentries.some((uEntry) => isInstanceIDEqual(uEntry.element, oEntry.element, context))) {
579
+ continue;
580
+ }
523
581
  context.report({ messageId: "noLeakedResizeObserver", node: oEntry.node });
524
582
  }
525
583
  }
@@ -558,7 +616,9 @@ var no_leaked_timeout_default = createRule({
558
616
  },
559
617
  name: RULE_NAME4,
560
618
  create(context) {
561
- if (!context.sourceCode.text.includes("setTimeout")) return {};
619
+ if (!context.sourceCode.text.includes("setTimeout")) {
620
+ return {};
621
+ }
562
622
  const fStack = [];
563
623
  const sEntries = [];
564
624
  const rEntries = [];
@@ -575,8 +635,12 @@ var no_leaked_timeout_default = createRule({
575
635
  },
576
636
  ["CallExpression"](node) {
577
637
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
578
- if (!fNode || !fKind) return;
579
- if (!core.ERPhaseRelevance.has(fKind)) return;
638
+ if (!fNode || !fKind) {
639
+ return;
640
+ }
641
+ if (!core.ERPhaseRelevance.has(fKind)) {
642
+ return;
643
+ }
580
644
  switch (getCallKind4(node)) {
581
645
  case "setTimeout": {
582
646
  const timeoutIdNode = eff.O.getOrNull(VAR2__namespace.getVariableDeclaratorID(node));
@@ -598,7 +662,9 @@ var no_leaked_timeout_default = createRule({
598
662
  }
599
663
  case "clearTimeout": {
600
664
  const [timeoutIdNode] = node.arguments;
601
- if (!timeoutIdNode) break;
665
+ if (!timeoutIdNode) {
666
+ break;
667
+ }
602
668
  rEntries.push({
603
669
  kind: "timeout",
604
670
  node,
@@ -612,7 +678,9 @@ var no_leaked_timeout_default = createRule({
612
678
  },
613
679
  ["Program:exit"]() {
614
680
  for (const sEntry of sEntries) {
615
- if (rEntries.some((rEntry) => isInverseEntry(sEntry, rEntry))) continue;
681
+ if (rEntries.some((rEntry) => isInverseEntry(sEntry, rEntry))) {
682
+ continue;
683
+ }
616
684
  switch (sEntry.phase) {
617
685
  case "setup":
618
686
  case "cleanup":
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.23.2-next.6";
13
+ var version = "1.23.3-beta.2";
14
14
  var createRule = createRuleForPlugin("web-api");
15
15
  function getInstanceID(node, prev) {
16
16
  switch (true) {
@@ -78,7 +78,9 @@ function getOptions(node, initialScope) {
78
78
  return JSX.findPropInProperties(properties, initialScope)(propName);
79
79
  };
80
80
  const getPropValue = (prop) => {
81
- if (prop.type !== AST_NODE_TYPES.Property) return O.none();
81
+ if (prop.type !== AST_NODE_TYPES.Property) {
82
+ return O.none();
83
+ }
82
84
  const { value } = prop;
83
85
  switch (value.type) {
84
86
  case AST_NODE_TYPES.Literal: {
@@ -110,7 +112,9 @@ function getOptions(node, initialScope) {
110
112
  const vCapture = O.flatMap(pCapture, getPropValue).pipe(O.filter(isBoolean));
111
113
  const pSignal = findProp(node2.properties, "signal");
112
114
  const vSignal = O.flatMap(pSignal, (prop) => {
113
- if (prop.type !== AST_NODE_TYPES.Property) return O.none();
115
+ if (prop.type !== AST_NODE_TYPES.Property) {
116
+ return O.none();
117
+ }
114
118
  const { value } = prop;
115
119
  return getSignalValueExpression(value, initialScope);
116
120
  });
@@ -139,8 +143,12 @@ var no_leaked_event_listener_default = createRule({
139
143
  },
140
144
  name: RULE_NAME,
141
145
  create(context) {
142
- if (!context.sourceCode.text.includes("addEventListener")) return {};
143
- if (!/use\w*Effect|componentDidMount|componentWillUnmount/u.test(context.sourceCode.text)) return {};
146
+ if (!context.sourceCode.text.includes("addEventListener")) {
147
+ return {};
148
+ }
149
+ if (!/use\w*Effect|componentDidMount|componentWillUnmount/u.test(context.sourceCode.text)) {
150
+ return {};
151
+ }
144
152
  const fStack = [];
145
153
  const aEntries = [];
146
154
  const rEntries = [];
@@ -157,7 +165,9 @@ var no_leaked_event_listener_default = createRule({
157
165
  function isInverseEntry(aEntry, rEntry) {
158
166
  const { type: aType, callee: aCallee, capture: aCapture, listener: aListener, phase: aPhase } = aEntry;
159
167
  const { type: rType, callee: rCallee, capture: rCapture, listener: rListener, phase: rPhase } = rEntry;
160
- if (!isInversePhase(aPhase, rPhase)) return false;
168
+ if (!isInversePhase(aPhase, rPhase)) {
169
+ return false;
170
+ }
161
171
  return isSameObject(aCallee, rCallee) && AST2.isNodeEqual(aListener, rListener) && VAR2.isNodeValueEqual(aType, rType, [
162
172
  context.sourceCode.getScope(aType),
163
173
  context.sourceCode.getScope(rType)
@@ -165,8 +175,12 @@ var no_leaked_event_listener_default = createRule({
165
175
  }
166
176
  function checkInlineFunction(node, callKind, options) {
167
177
  const [_, listener] = node.arguments;
168
- if (!AST2.isFunction(listener)) return O.none();
169
- if (O.isSome(options.signal)) return O.none();
178
+ if (!AST2.isFunction(listener)) {
179
+ return O.none();
180
+ }
181
+ if (O.isSome(options.signal)) {
182
+ return O.none();
183
+ }
170
184
  return O.some({
171
185
  messageId: "noLeakedEventListenerOfInlineFunction",
172
186
  node: listener,
@@ -183,11 +197,17 @@ var no_leaked_event_listener_default = createRule({
183
197
  },
184
198
  ["CallExpression"](node) {
185
199
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
186
- if (!fNode || !fKind) return;
187
- if (!ERPhaseRelevance.has(fKind)) return;
200
+ if (!fNode || !fKind) {
201
+ return;
202
+ }
203
+ if (!ERPhaseRelevance.has(fKind)) {
204
+ return;
205
+ }
188
206
  match(getCallKind(node)).with("addEventListener", (callKind) => {
189
207
  const [type, listener, options] = node.arguments;
190
- if (!type || !listener) return;
208
+ if (!type || !listener) {
209
+ return;
210
+ }
191
211
  const opts = options ? getOptions(options, context.sourceCode.getScope(options)) : defaultOptions;
192
212
  const { callee } = node;
193
213
  O.map(checkInlineFunction(node, callKind, opts), context.report);
@@ -202,7 +222,9 @@ var no_leaked_event_listener_default = createRule({
202
222
  });
203
223
  }).with("removeEventListener", (callKind) => {
204
224
  const [type, listener, options] = node.arguments;
205
- if (!type || !listener) return;
225
+ if (!type || !listener) {
226
+ return;
227
+ }
206
228
  const opts = options ? getOptions(options, context.sourceCode.getScope(options)) : defaultOptions;
207
229
  const { callee } = node;
208
230
  O.map(checkInlineFunction(node, callKind, opts), context.report);
@@ -221,8 +243,12 @@ var no_leaked_event_listener_default = createRule({
221
243
  },
222
244
  ["Program:exit"]() {
223
245
  for (const aEntry of aEntries) {
224
- if (O.exists(aEntry.signal, (signal) => abortedSignals.some((as) => isSameObject(as, signal)))) continue;
225
- if (rEntries.some((rEntry) => isInverseEntry(aEntry, rEntry))) continue;
246
+ if (O.exists(aEntry.signal, (signal) => abortedSignals.some((as) => isSameObject(as, signal)))) {
247
+ continue;
248
+ }
249
+ if (rEntries.some((rEntry) => isInverseEntry(aEntry, rEntry))) {
250
+ continue;
251
+ }
226
252
  switch (aEntry.phase) {
227
253
  case "setup":
228
254
  case "cleanup":
@@ -278,7 +304,9 @@ var no_leaked_interval_default = createRule({
278
304
  },
279
305
  name: RULE_NAME2,
280
306
  create(context) {
281
- if (!context.sourceCode.text.includes("setInterval")) return {};
307
+ if (!context.sourceCode.text.includes("setInterval")) {
308
+ return {};
309
+ }
282
310
  const fStack = [];
283
311
  const sEntries = [];
284
312
  const cEntries = [];
@@ -297,8 +325,12 @@ var no_leaked_interval_default = createRule({
297
325
  switch (getCallKind2(node)) {
298
326
  case "setInterval": {
299
327
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
300
- if (!fNode || !fKind) break;
301
- if (!ERPhaseRelevance.has(fKind)) break;
328
+ if (!fNode || !fKind) {
329
+ break;
330
+ }
331
+ if (!ERPhaseRelevance.has(fKind)) {
332
+ break;
333
+ }
302
334
  const intervalIdNode = O.getOrNull(VAR2.getVariableDeclaratorID(node));
303
335
  if (!intervalIdNode) {
304
336
  context.report({
@@ -318,10 +350,16 @@ var no_leaked_interval_default = createRule({
318
350
  }
319
351
  case "clearInterval": {
320
352
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
321
- if (!fNode || !fKind) break;
322
- if (!ERPhaseRelevance.has(fKind)) break;
353
+ if (!fNode || !fKind) {
354
+ break;
355
+ }
356
+ if (!ERPhaseRelevance.has(fKind)) {
357
+ break;
358
+ }
323
359
  const [intervalIdNode] = node.arguments;
324
- if (!intervalIdNode) break;
360
+ if (!intervalIdNode) {
361
+ break;
362
+ }
325
363
  cEntries.push({
326
364
  kind: "interval",
327
365
  node,
@@ -335,7 +373,9 @@ var no_leaked_interval_default = createRule({
335
373
  },
336
374
  ["Program:exit"]() {
337
375
  for (const sEntry of sEntries) {
338
- if (cEntries.some((cEntry) => isInverseEntry(sEntry, cEntry))) continue;
376
+ if (cEntries.some((cEntry) => isInverseEntry(sEntry, cEntry))) {
377
+ continue;
378
+ }
339
379
  switch (sEntry.phase) {
340
380
  case "setup":
341
381
  case "cleanup":
@@ -414,7 +454,9 @@ var no_leaked_resize_observer_default = createRule({
414
454
  },
415
455
  name: RULE_NAME3,
416
456
  create(context) {
417
- if (!context.sourceCode.text.includes("ResizeObserver")) return {};
457
+ if (!context.sourceCode.text.includes("ResizeObserver")) {
458
+ return {};
459
+ }
418
460
  const fStack = [];
419
461
  const observers = [];
420
462
  const oEntries = [];
@@ -430,8 +472,12 @@ var no_leaked_resize_observer_default = createRule({
430
472
  },
431
473
  ["CallExpression"](node) {
432
474
  const [_, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
433
- if (node.callee.type !== AST_NODE_TYPES.MemberExpression) return;
434
- if (!ERPhaseRelevance.has(fKind)) return;
475
+ if (node.callee.type !== AST_NODE_TYPES.MemberExpression) {
476
+ return;
477
+ }
478
+ if (!ERPhaseRelevance.has(fKind)) {
479
+ return;
480
+ }
435
481
  const { object } = node.callee;
436
482
  match(getCallKind3(node, context)).with("disconnect", () => {
437
483
  dEntries.push({
@@ -444,7 +490,9 @@ var no_leaked_resize_observer_default = createRule({
444
490
  });
445
491
  }).with("observe", () => {
446
492
  const [element] = node.arguments;
447
- if (!element) return;
493
+ if (!element) {
494
+ return;
495
+ }
448
496
  oEntries.push({
449
497
  kind: "observe",
450
498
  node,
@@ -456,7 +504,9 @@ var no_leaked_resize_observer_default = createRule({
456
504
  });
457
505
  }).with("unobserve", () => {
458
506
  const [element] = node.arguments;
459
- if (!element) return;
507
+ if (!element) {
508
+ return;
509
+ }
460
510
  uEntries.push({
461
511
  kind: "unobserve",
462
512
  node,
@@ -470,8 +520,12 @@ var no_leaked_resize_observer_default = createRule({
470
520
  },
471
521
  ["NewExpression"](node) {
472
522
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
473
- if (!fNode || !ERPhaseRelevance.has(fKind)) return;
474
- if (!isNewResizeObserver(node)) return;
523
+ if (!fNode || !ERPhaseRelevance.has(fKind)) {
524
+ return;
525
+ }
526
+ if (!isNewResizeObserver(node)) {
527
+ return;
528
+ }
475
529
  const id = getInstanceID(node);
476
530
  if (O.isNone(id)) {
477
531
  context.report({
@@ -484,7 +538,9 @@ var no_leaked_resize_observer_default = createRule({
484
538
  },
485
539
  ["Program:exit"]() {
486
540
  for (const [node, id, _, phaseNode] of observers) {
487
- if (dEntries.some((e) => isInstanceIDEqual(e.observer, id, context))) continue;
541
+ if (dEntries.some((e) => isInstanceIDEqual(e.observer, id, context))) {
542
+ continue;
543
+ }
488
544
  const oentries = oEntries.filter((e) => isInstanceIDEqual(e.observer, id, context));
489
545
  const uentries = uEntries.filter((e) => isInstanceIDEqual(e.observer, id, context));
490
546
  const isDynamic = or(AST2.isConditional, AST2.is(AST_NODE_TYPES.CallExpression));
@@ -495,7 +551,9 @@ var no_leaked_resize_observer_default = createRule({
495
551
  continue;
496
552
  }
497
553
  for (const oEntry of oentries) {
498
- if (uentries.some((uEntry) => isInstanceIDEqual(uEntry.element, oEntry.element, context))) continue;
554
+ if (uentries.some((uEntry) => isInstanceIDEqual(uEntry.element, oEntry.element, context))) {
555
+ continue;
556
+ }
499
557
  context.report({ messageId: "noLeakedResizeObserver", node: oEntry.node });
500
558
  }
501
559
  }
@@ -534,7 +592,9 @@ var no_leaked_timeout_default = createRule({
534
592
  },
535
593
  name: RULE_NAME4,
536
594
  create(context) {
537
- if (!context.sourceCode.text.includes("setTimeout")) return {};
595
+ if (!context.sourceCode.text.includes("setTimeout")) {
596
+ return {};
597
+ }
538
598
  const fStack = [];
539
599
  const sEntries = [];
540
600
  const rEntries = [];
@@ -551,8 +611,12 @@ var no_leaked_timeout_default = createRule({
551
611
  },
552
612
  ["CallExpression"](node) {
553
613
  const [fNode, fKind] = fStack.findLast((f) => f.at(1) !== "other") ?? [];
554
- if (!fNode || !fKind) return;
555
- if (!ERPhaseRelevance.has(fKind)) return;
614
+ if (!fNode || !fKind) {
615
+ return;
616
+ }
617
+ if (!ERPhaseRelevance.has(fKind)) {
618
+ return;
619
+ }
556
620
  switch (getCallKind4(node)) {
557
621
  case "setTimeout": {
558
622
  const timeoutIdNode = O.getOrNull(VAR2.getVariableDeclaratorID(node));
@@ -574,7 +638,9 @@ var no_leaked_timeout_default = createRule({
574
638
  }
575
639
  case "clearTimeout": {
576
640
  const [timeoutIdNode] = node.arguments;
577
- if (!timeoutIdNode) break;
641
+ if (!timeoutIdNode) {
642
+ break;
643
+ }
578
644
  rEntries.push({
579
645
  kind: "timeout",
580
646
  node,
@@ -588,7 +654,9 @@ var no_leaked_timeout_default = createRule({
588
654
  },
589
655
  ["Program:exit"]() {
590
656
  for (const sEntry of sEntries) {
591
- if (rEntries.some((rEntry) => isInverseEntry(sEntry, rEntry))) continue;
657
+ if (rEntries.some((rEntry) => isInverseEntry(sEntry, rEntry))) {
658
+ continue;
659
+ }
592
660
  switch (sEntry.phase) {
593
661
  case "setup":
594
662
  case "cleanup":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-web-api",
3
- "version": "1.23.2-next.6",
3
+ "version": "1.23.3-beta.2",
4
4
  "description": "ESLint React's ESLint plugin for interacting with Web APIs",
5
5
  "keywords": [
6
6
  "react",
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "license": "MIT",
23
23
  "author": "Eva1ent<rel1cx@proton.me>",
24
+ "sideEffects": false,
24
25
  "exports": {
25
26
  ".": {
26
27
  "import": {
@@ -35,6 +36,7 @@
35
36
  "./package.json": "./package.json"
36
37
  },
37
38
  "main": "dist/index.js",
39
+ "module": "dist/index.mjs",
38
40
  "types": "dist/index.d.ts",
39
41
  "files": [
40
42
  "dist",
@@ -46,13 +48,13 @@
46
48
  "@typescript-eslint/utils": "^8.19.1",
47
49
  "string-ts": "^2.2.0",
48
50
  "ts-pattern": "^5.6.0",
49
- "@eslint-react/ast": "1.23.2-next.6",
50
- "@eslint-react/core": "1.23.2-next.6",
51
- "@eslint-react/eff": "1.23.2-next.6",
52
- "@eslint-react/jsx": "1.23.2-next.6",
53
- "@eslint-react/shared": "1.23.2-next.6",
54
- "@eslint-react/var": "1.23.2-next.6",
55
- "@eslint-react/types": "1.23.2-next.6"
51
+ "@eslint-react/ast": "1.23.3-beta.2",
52
+ "@eslint-react/eff": "1.23.3-beta.2",
53
+ "@eslint-react/core": "1.23.3-beta.2",
54
+ "@eslint-react/jsx": "1.23.3-beta.2",
55
+ "@eslint-react/shared": "1.23.3-beta.2",
56
+ "@eslint-react/var": "1.23.3-beta.2",
57
+ "@eslint-react/types": "1.23.3-beta.2"
56
58
  },
57
59
  "devDependencies": {
58
60
  "@types/react": "^19.0.3",
@@ -79,8 +81,6 @@
79
81
  "publishConfig": {
80
82
  "access": "public"
81
83
  },
82
- "sideEffects": false,
83
- "module": "dist/index.mjs",
84
84
  "scripts": {
85
85
  "build": "tsup --dts-resolve",
86
86
  "lint:publish": "publint",