eslint-plugin-react-x 2.8.2-next.6 → 2.8.3-beta.7

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 (2) hide show
  1. package/dist/index.js +240 -149
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -66,7 +66,7 @@ const rules$7 = {
66
66
  //#endregion
67
67
  //#region package.json
68
68
  var name$6 = "eslint-plugin-react-x";
69
- var version = "2.8.2-next.6";
69
+ var version = "2.8.3-beta.7";
70
70
 
71
71
  //#endregion
72
72
  //#region src/utils/create-rule.ts
@@ -170,7 +170,7 @@ function getTypeVariants(types) {
170
170
 
171
171
  //#endregion
172
172
  //#region src/rules/jsx-dollar.ts
173
- const RULE_NAME$63 = "jsx-dollar";
173
+ const RULE_NAME$64 = "jsx-dollar";
174
174
  var jsx_dollar_default = createRule({
175
175
  meta: {
176
176
  type: "problem",
@@ -183,11 +183,11 @@ var jsx_dollar_default = createRule({
183
183
  },
184
184
  schema: []
185
185
  },
186
- name: RULE_NAME$63,
187
- create: create$63,
186
+ name: RULE_NAME$64,
187
+ create: create$64,
188
188
  defaultOptions: []
189
189
  });
190
- function create$63(context) {
190
+ function create$64(context) {
191
191
  /**
192
192
  * Visitor function for JSXElement and JSXFragment nodes
193
193
  * @param node The JSXElement or JSXFragment node to be checked
@@ -228,7 +228,7 @@ function create$63(context) {
228
228
 
229
229
  //#endregion
230
230
  //#region src/rules/jsx-key-before-spread.ts
231
- const RULE_NAME$62 = "jsx-key-before-spread";
231
+ const RULE_NAME$63 = "jsx-key-before-spread";
232
232
  var jsx_key_before_spread_default = createRule({
233
233
  meta: {
234
234
  type: "problem",
@@ -236,11 +236,11 @@ var jsx_key_before_spread_default = createRule({
236
236
  messages: { default: "The 'key' prop must be placed before any spread props when using the new JSX transform." },
237
237
  schema: []
238
238
  },
239
- name: RULE_NAME$62,
240
- create: create$62,
239
+ name: RULE_NAME$63,
240
+ create: create$63,
241
241
  defaultOptions: []
242
242
  });
243
- function create$62(context) {
243
+ function create$63(context) {
244
244
  const { jsx } = {
245
245
  ...core.getJsxConfigFromContext(context),
246
246
  ...core.getJsxConfigFromAnnotation(context)
@@ -264,7 +264,7 @@ function create$62(context) {
264
264
 
265
265
  //#endregion
266
266
  //#region src/rules/jsx-no-comment-textnodes.ts
267
- const RULE_NAME$61 = "jsx-no-comment-textnodes";
267
+ const RULE_NAME$62 = "jsx-no-comment-textnodes";
268
268
  var jsx_no_comment_textnodes_default = createRule({
269
269
  meta: {
270
270
  type: "problem",
@@ -272,11 +272,11 @@ var jsx_no_comment_textnodes_default = createRule({
272
272
  messages: { default: "Possible misused comment in text node. Comments inside children section of tag should be placed inside braces." },
273
273
  schema: []
274
274
  },
275
- name: RULE_NAME$61,
276
- create: create$61,
275
+ name: RULE_NAME$62,
276
+ create: create$62,
277
277
  defaultOptions: []
278
278
  });
279
- function create$61(context) {
279
+ function create$62(context) {
280
280
  function hasCommentLike(node) {
281
281
  if (ast.isOneOf([AST_NODE_TYPES.JSXAttribute, AST_NODE_TYPES.JSXExpressionContainer])(node.parent)) return false;
282
282
  return /^\s*\/(?:\/|\*)/mu.test(context.sourceCode.getText(node));
@@ -297,7 +297,7 @@ function create$61(context) {
297
297
 
298
298
  //#endregion
299
299
  //#region src/rules/jsx-no-duplicate-props.ts
300
- const RULE_NAME$60 = "jsx-no-duplicate-props";
300
+ const RULE_NAME$61 = "jsx-no-duplicate-props";
301
301
  var jsx_no_duplicate_props_default = createRule({
302
302
  meta: {
303
303
  type: "problem",
@@ -305,11 +305,11 @@ var jsx_no_duplicate_props_default = createRule({
305
305
  messages: { default: "This JSX property is assigned multiple times." },
306
306
  schema: []
307
307
  },
308
- name: RULE_NAME$60,
309
- create: create$60,
308
+ name: RULE_NAME$61,
309
+ create: create$61,
310
310
  defaultOptions: []
311
311
  });
312
- function create$60(context) {
312
+ function create$61(context) {
313
313
  return { JSXOpeningElement(node) {
314
314
  const props = [];
315
315
  for (const attr of node.attributes) {
@@ -330,7 +330,7 @@ function create$60(context) {
330
330
 
331
331
  //#endregion
332
332
  //#region src/rules/jsx-no-iife.ts
333
- const RULE_NAME$59 = "jsx-no-iife";
333
+ const RULE_NAME$60 = "jsx-no-iife";
334
334
  var jsx_no_iife_default = createRule({
335
335
  meta: {
336
336
  type: "problem",
@@ -338,11 +338,11 @@ var jsx_no_iife_default = createRule({
338
338
  messages: { default: "Avoid using immediately-invoked function expressions in JSX." },
339
339
  schema: []
340
340
  },
341
- name: RULE_NAME$59,
342
- create: create$59,
341
+ name: RULE_NAME$60,
342
+ create: create$60,
343
343
  defaultOptions: []
344
344
  });
345
- function create$59(context) {
345
+ function create$60(context) {
346
346
  return {
347
347
  "JSXElement :function"(node) {
348
348
  if (node.parent.type === AST_NODE_TYPES.CallExpression && node.parent.callee === node) context.report({
@@ -361,7 +361,7 @@ function create$59(context) {
361
361
 
362
362
  //#endregion
363
363
  //#region src/rules/jsx-no-undef.ts
364
- const RULE_NAME$58 = "jsx-no-undef";
364
+ const RULE_NAME$59 = "jsx-no-undef";
365
365
  var jsx_no_undef_default = createRule({
366
366
  meta: {
367
367
  type: "problem",
@@ -369,11 +369,11 @@ var jsx_no_undef_default = createRule({
369
369
  messages: { default: "JSX variable '{{name}}' is not defined." },
370
370
  schema: []
371
371
  },
372
- name: RULE_NAME$58,
373
- create: create$58,
372
+ name: RULE_NAME$59,
373
+ create: create$59,
374
374
  defaultOptions: []
375
375
  });
376
- function create$58(context) {
376
+ function create$59(context) {
377
377
  return { JSXOpeningElement(node) {
378
378
  const name = match(node.name).with({ type: AST_NODE_TYPES.JSXIdentifier }, (n) => n.name).with({
379
379
  type: AST_NODE_TYPES.JSXMemberExpression,
@@ -392,7 +392,7 @@ function create$58(context) {
392
392
 
393
393
  //#endregion
394
394
  //#region src/rules/jsx-shorthand-boolean.ts
395
- const RULE_NAME$57 = "jsx-shorthand-boolean";
395
+ const RULE_NAME$58 = "jsx-shorthand-boolean";
396
396
  const defaultOptions$4 = [1];
397
397
  const schema$3 = [{
398
398
  type: "integer",
@@ -406,11 +406,11 @@ var jsx_shorthand_boolean_default = createRule({
406
406
  messages: { default: "{{message}}" },
407
407
  schema: schema$3
408
408
  },
409
- name: RULE_NAME$57,
410
- create: create$57,
409
+ name: RULE_NAME$58,
410
+ create: create$58,
411
411
  defaultOptions: defaultOptions$4
412
412
  });
413
- function create$57(context) {
413
+ function create$58(context) {
414
414
  const policy = context.options[0] ?? defaultOptions$4[0];
415
415
  return { JSXAttribute(node) {
416
416
  const { value } = node;
@@ -438,7 +438,7 @@ function create$57(context) {
438
438
 
439
439
  //#endregion
440
440
  //#region src/rules/jsx-shorthand-fragment.ts
441
- const RULE_NAME$56 = "jsx-shorthand-fragment";
441
+ const RULE_NAME$57 = "jsx-shorthand-fragment";
442
442
  const defaultOptions$3 = [1];
443
443
  const schema$2 = [{
444
444
  type: "integer",
@@ -452,11 +452,11 @@ var jsx_shorthand_fragment_default = createRule({
452
452
  messages: { default: "{{message}}" },
453
453
  schema: schema$2
454
454
  },
455
- name: RULE_NAME$56,
456
- create: create$56,
455
+ name: RULE_NAME$57,
456
+ create: create$57,
457
457
  defaultOptions: defaultOptions$3
458
458
  });
459
- function create$56(context) {
459
+ function create$57(context) {
460
460
  const policy = context.options[0] ?? defaultOptions$3[0];
461
461
  const jsxConfig = {
462
462
  ...core.getJsxConfigFromContext(context),
@@ -491,7 +491,7 @@ function create$56(context) {
491
491
 
492
492
  //#endregion
493
493
  //#region src/rules/jsx-uses-react.ts
494
- const RULE_NAME$55 = "jsx-uses-react";
494
+ const RULE_NAME$56 = "jsx-uses-react";
495
495
  var jsx_uses_react_default = createRule({
496
496
  meta: {
497
497
  type: "problem",
@@ -499,11 +499,11 @@ var jsx_uses_react_default = createRule({
499
499
  messages: { default: "Marked {{name}} as used." },
500
500
  schema: []
501
501
  },
502
- name: RULE_NAME$55,
503
- create: create$55,
502
+ name: RULE_NAME$56,
503
+ create: create$56,
504
504
  defaultOptions: []
505
505
  });
506
- function create$55(context) {
506
+ function create$56(context) {
507
507
  const { jsx, jsxFactory, jsxFragmentFactory } = {
508
508
  ...core.getJsxConfigFromContext(context),
509
509
  ...core.getJsxConfigFromAnnotation(context)
@@ -534,7 +534,7 @@ function debugReport(context, node, name) {
534
534
 
535
535
  //#endregion
536
536
  //#region src/rules/jsx-uses-vars.ts
537
- const RULE_NAME$54 = "jsx-uses-vars";
537
+ const RULE_NAME$55 = "jsx-uses-vars";
538
538
  var jsx_uses_vars_default = createRule({
539
539
  meta: {
540
540
  type: "problem",
@@ -542,11 +542,11 @@ var jsx_uses_vars_default = createRule({
542
542
  messages: { default: "An identifier in JSX is marked as used." },
543
543
  schema: []
544
544
  },
545
- name: RULE_NAME$54,
546
- create: create$54,
545
+ name: RULE_NAME$55,
546
+ create: create$55,
547
547
  defaultOptions: []
548
548
  });
549
- function create$54(context) {
549
+ function create$55(context) {
550
550
  return { JSXOpeningElement(node) {
551
551
  switch (node.name.type) {
552
552
  case AST_NODE_TYPES.JSXIdentifier:
@@ -564,7 +564,7 @@ function create$54(context) {
564
564
 
565
565
  //#endregion
566
566
  //#region src/rules/no-access-state-in-setstate.ts
567
- const RULE_NAME$53 = "no-access-state-in-setstate";
567
+ const RULE_NAME$54 = "no-access-state-in-setstate";
568
568
  function isKeyLiteral$2(node, key) {
569
569
  return match(key).with({ type: AST_NODE_TYPES.Literal }, constTrue).with({
570
570
  type: AST_NODE_TYPES.TemplateLiteral,
@@ -578,11 +578,11 @@ var no_access_state_in_setstate_default = createRule({
578
578
  messages: { default: "Do not access 'this.state' within 'setState'. Use the update function instead." },
579
579
  schema: []
580
580
  },
581
- name: RULE_NAME$53,
582
- create: create$53,
581
+ name: RULE_NAME$54,
582
+ create: create$54,
583
583
  defaultOptions: []
584
584
  });
585
- function create$53(context) {
585
+ function create$54(context) {
586
586
  if (!context.sourceCode.text.includes("setState")) return {};
587
587
  const classStack = [];
588
588
  const methodStack = [];
@@ -653,7 +653,7 @@ function create$53(context) {
653
653
 
654
654
  //#endregion
655
655
  //#region src/rules/no-array-index-key.ts
656
- const RULE_NAME$52 = "no-array-index-key";
656
+ const RULE_NAME$53 = "no-array-index-key";
657
657
  const REACT_CHILDREN_METHOD = ["forEach", "map"];
658
658
  function getIndexParamPosition(methodName) {
659
659
  switch (methodName) {
@@ -712,11 +712,11 @@ var no_array_index_key_default = createRule({
712
712
  messages: { default: "Do not use item index in the array as its key." },
713
713
  schema: []
714
714
  },
715
- name: RULE_NAME$52,
716
- create: create$52,
715
+ name: RULE_NAME$53,
716
+ create: create$53,
717
717
  defaultOptions: []
718
718
  });
719
- function create$52(context) {
719
+ function create$53(context) {
720
720
  const indexParamNames = [];
721
721
  function isArrayIndex(node) {
722
722
  return node.type === AST_NODE_TYPES.Identifier && indexParamNames.some((name) => name != null && name === node.name);
@@ -782,7 +782,7 @@ function create$52(context) {
782
782
 
783
783
  //#endregion
784
784
  //#region src/rules/no-children-count.ts
785
- const RULE_NAME$51 = "no-children-count";
785
+ const RULE_NAME$52 = "no-children-count";
786
786
  var no_children_count_default = createRule({
787
787
  meta: {
788
788
  type: "problem",
@@ -790,11 +790,11 @@ var no_children_count_default = createRule({
790
790
  messages: { default: "Using 'Children.count' is uncommon and can lead to fragile code. Use alternatives instead." },
791
791
  schema: []
792
792
  },
793
- name: RULE_NAME$51,
794
- create: create$51,
793
+ name: RULE_NAME$52,
794
+ create: create$52,
795
795
  defaultOptions: []
796
796
  });
797
- function create$51(context) {
797
+ function create$52(context) {
798
798
  return { MemberExpression(node) {
799
799
  if (core.isChildrenCount(context, node)) context.report({
800
800
  messageId: "default",
@@ -805,7 +805,7 @@ function create$51(context) {
805
805
 
806
806
  //#endregion
807
807
  //#region src/rules/no-children-for-each.ts
808
- const RULE_NAME$50 = "no-children-for-each";
808
+ const RULE_NAME$51 = "no-children-for-each";
809
809
  var no_children_for_each_default = createRule({
810
810
  meta: {
811
811
  type: "problem",
@@ -813,11 +813,11 @@ var no_children_for_each_default = createRule({
813
813
  messages: { default: "Using 'Children.forEach' is uncommon and can lead to fragile code. Use alternatives instead." },
814
814
  schema: []
815
815
  },
816
- name: RULE_NAME$50,
817
- create: create$50,
816
+ name: RULE_NAME$51,
817
+ create: create$51,
818
818
  defaultOptions: []
819
819
  });
820
- function create$50(context) {
820
+ function create$51(context) {
821
821
  return { MemberExpression(node) {
822
822
  if (core.isChildrenForEach(context, node)) context.report({
823
823
  messageId: "default",
@@ -828,7 +828,7 @@ function create$50(context) {
828
828
 
829
829
  //#endregion
830
830
  //#region src/rules/no-children-map.ts
831
- const RULE_NAME$49 = "no-children-map";
831
+ const RULE_NAME$50 = "no-children-map";
832
832
  var no_children_map_default = createRule({
833
833
  meta: {
834
834
  type: "problem",
@@ -836,11 +836,11 @@ var no_children_map_default = createRule({
836
836
  messages: { default: "Using 'Children.map' is uncommon and can lead to fragile code. Use alternatives instead." },
837
837
  schema: []
838
838
  },
839
- name: RULE_NAME$49,
840
- create: create$49,
839
+ name: RULE_NAME$50,
840
+ create: create$50,
841
841
  defaultOptions: []
842
842
  });
843
- function create$49(context) {
843
+ function create$50(context) {
844
844
  return { MemberExpression(node) {
845
845
  if (core.isChildrenMap(context, node)) context.report({
846
846
  messageId: "default",
@@ -851,7 +851,7 @@ function create$49(context) {
851
851
 
852
852
  //#endregion
853
853
  //#region src/rules/no-children-only.ts
854
- const RULE_NAME$48 = "no-children-only";
854
+ const RULE_NAME$49 = "no-children-only";
855
855
  var no_children_only_default = createRule({
856
856
  meta: {
857
857
  type: "problem",
@@ -859,11 +859,11 @@ var no_children_only_default = createRule({
859
859
  messages: { default: "Using 'Children.only' is uncommon and can lead to fragile code. Use alternatives instead." },
860
860
  schema: []
861
861
  },
862
- name: RULE_NAME$48,
863
- create: create$48,
862
+ name: RULE_NAME$49,
863
+ create: create$49,
864
864
  defaultOptions: []
865
865
  });
866
- function create$48(context) {
866
+ function create$49(context) {
867
867
  return { MemberExpression(node) {
868
868
  if (core.isChildrenOnly(context, node)) context.report({
869
869
  messageId: "default",
@@ -874,7 +874,7 @@ function create$48(context) {
874
874
 
875
875
  //#endregion
876
876
  //#region src/rules/no-children-prop.ts
877
- const RULE_NAME$47 = "no-children-prop";
877
+ const RULE_NAME$48 = "no-children-prop";
878
878
  var no_children_prop_default = createRule({
879
879
  meta: {
880
880
  type: "problem",
@@ -882,11 +882,11 @@ var no_children_prop_default = createRule({
882
882
  messages: { default: "Do not pass 'children' as props." },
883
883
  schema: []
884
884
  },
885
- name: RULE_NAME$47,
886
- create: create$47,
885
+ name: RULE_NAME$48,
886
+ create: create$48,
887
887
  defaultOptions: []
888
888
  });
889
- function create$47(context) {
889
+ function create$48(context) {
890
890
  return { JSXElement(node) {
891
891
  const childrenProp = core.getJsxAttribute(context, node)("children");
892
892
  if (childrenProp != null) context.report({
@@ -898,7 +898,7 @@ function create$47(context) {
898
898
 
899
899
  //#endregion
900
900
  //#region src/rules/no-children-to-array.ts
901
- const RULE_NAME$46 = "no-children-to-array";
901
+ const RULE_NAME$47 = "no-children-to-array";
902
902
  var no_children_to_array_default = createRule({
903
903
  meta: {
904
904
  type: "problem",
@@ -906,11 +906,11 @@ var no_children_to_array_default = createRule({
906
906
  messages: { default: "Using 'Children.toArray' is uncommon and can lead to fragile code. Use alternatives instead." },
907
907
  schema: []
908
908
  },
909
- name: RULE_NAME$46,
910
- create: create$46,
909
+ name: RULE_NAME$47,
910
+ create: create$47,
911
911
  defaultOptions: []
912
912
  });
913
- function create$46(context) {
913
+ function create$47(context) {
914
914
  return { MemberExpression(node) {
915
915
  if (core.isChildrenToArray(context, node)) context.report({
916
916
  messageId: "default",
@@ -921,7 +921,7 @@ function create$46(context) {
921
921
 
922
922
  //#endregion
923
923
  //#region src/rules/no-class-component.ts
924
- const RULE_NAME$45 = "no-class-component";
924
+ const RULE_NAME$46 = "no-class-component";
925
925
  var no_class_component_default = createRule({
926
926
  meta: {
927
927
  type: "problem",
@@ -929,11 +929,11 @@ var no_class_component_default = createRule({
929
929
  messages: { default: "Avoid using class components. Use function components instead." },
930
930
  schema: []
931
931
  },
932
- name: RULE_NAME$45,
933
- create: create$45,
932
+ name: RULE_NAME$46,
933
+ create: create$46,
934
934
  defaultOptions: []
935
935
  });
936
- function create$45(context) {
936
+ function create$46(context) {
937
937
  if (!context.sourceCode.text.includes("Component")) return {};
938
938
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
939
939
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -950,7 +950,7 @@ function create$45(context) {
950
950
 
951
951
  //#endregion
952
952
  //#region src/rules/no-clone-element.ts
953
- const RULE_NAME$44 = "no-clone-element";
953
+ const RULE_NAME$45 = "no-clone-element";
954
954
  var no_clone_element_default = createRule({
955
955
  meta: {
956
956
  type: "problem",
@@ -958,11 +958,11 @@ var no_clone_element_default = createRule({
958
958
  messages: { default: "Using 'cloneElement' is uncommon and can lead to fragile code. Use alternatives instead." },
959
959
  schema: []
960
960
  },
961
- name: RULE_NAME$44,
962
- create: create$44,
961
+ name: RULE_NAME$45,
962
+ create: create$45,
963
963
  defaultOptions: []
964
964
  });
965
- function create$44(context) {
965
+ function create$45(context) {
966
966
  return { CallExpression(node) {
967
967
  if (core.isCloneElementCall(context, node)) context.report({
968
968
  messageId: "default",
@@ -973,7 +973,7 @@ function create$44(context) {
973
973
 
974
974
  //#endregion
975
975
  //#region src/rules/no-component-will-mount.ts
976
- const RULE_NAME$43 = "no-component-will-mount";
976
+ const RULE_NAME$44 = "no-component-will-mount";
977
977
  var no_component_will_mount_default = createRule({
978
978
  meta: {
979
979
  type: "problem",
@@ -982,11 +982,11 @@ var no_component_will_mount_default = createRule({
982
982
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillMount' instead." },
983
983
  schema: []
984
984
  },
985
- name: RULE_NAME$43,
986
- create: create$43,
985
+ name: RULE_NAME$44,
986
+ create: create$44,
987
987
  defaultOptions: []
988
988
  });
989
- function create$43(context) {
989
+ function create$44(context) {
990
990
  if (!context.sourceCode.text.includes("componentWillMount")) return {};
991
991
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
992
992
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1006,7 +1006,7 @@ function create$43(context) {
1006
1006
 
1007
1007
  //#endregion
1008
1008
  //#region src/rules/no-component-will-receive-props.ts
1009
- const RULE_NAME$42 = "no-component-will-receive-props";
1009
+ const RULE_NAME$43 = "no-component-will-receive-props";
1010
1010
  var no_component_will_receive_props_default = createRule({
1011
1011
  meta: {
1012
1012
  type: "problem",
@@ -1015,11 +1015,11 @@ var no_component_will_receive_props_default = createRule({
1015
1015
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillReceiveProps' instead." },
1016
1016
  schema: []
1017
1017
  },
1018
- name: RULE_NAME$42,
1019
- create: create$42,
1018
+ name: RULE_NAME$43,
1019
+ create: create$43,
1020
1020
  defaultOptions: []
1021
1021
  });
1022
- function create$42(context) {
1022
+ function create$43(context) {
1023
1023
  if (!context.sourceCode.text.includes("componentWillReceiveProps")) return {};
1024
1024
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1025
1025
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1039,7 +1039,7 @@ function create$42(context) {
1039
1039
 
1040
1040
  //#endregion
1041
1041
  //#region src/rules/no-component-will-update.ts
1042
- const RULE_NAME$41 = "no-component-will-update";
1042
+ const RULE_NAME$42 = "no-component-will-update";
1043
1043
  var no_component_will_update_default = createRule({
1044
1044
  meta: {
1045
1045
  type: "problem",
@@ -1048,11 +1048,11 @@ var no_component_will_update_default = createRule({
1048
1048
  messages: { default: "[Deprecated] Use 'UNSAFE_componentWillUpdate' instead." },
1049
1049
  schema: []
1050
1050
  },
1051
- name: RULE_NAME$41,
1052
- create: create$41,
1051
+ name: RULE_NAME$42,
1052
+ create: create$42,
1053
1053
  defaultOptions: []
1054
1054
  });
1055
- function create$41(context) {
1055
+ function create$42(context) {
1056
1056
  if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
1057
1057
  const { ctx, visitor } = core.useComponentCollectorLegacy(context);
1058
1058
  return defineRuleListener(visitor, { "Program:exit"(program) {
@@ -1072,7 +1072,7 @@ function create$41(context) {
1072
1072
 
1073
1073
  //#endregion
1074
1074
  //#region src/rules/no-context-provider.ts
1075
- const RULE_NAME$40 = "no-context-provider";
1075
+ const RULE_NAME$41 = "no-context-provider";
1076
1076
  var no_context_provider_default = createRule({
1077
1077
  meta: {
1078
1078
  type: "problem",
@@ -1081,11 +1081,11 @@ var no_context_provider_default = createRule({
1081
1081
  messages: { default: "In React 19, you can render '<Context>' as a provider instead of '<Context.Provider>'." },
1082
1082
  schema: []
1083
1083
  },
1084
- name: RULE_NAME$40,
1085
- create: create$40,
1084
+ name: RULE_NAME$41,
1085
+ create: create$41,
1086
1086
  defaultOptions: []
1087
1087
  });
1088
- function create$40(context) {
1088
+ function create$41(context) {
1089
1089
  if (!context.sourceCode.text.includes("Provider")) return {};
1090
1090
  const { version } = getSettingsFromContext(context);
1091
1091
  if (compare(version, "19.0.0", "<")) return {};
@@ -1112,7 +1112,7 @@ function create$40(context) {
1112
1112
 
1113
1113
  //#endregion
1114
1114
  //#region src/rules/no-create-ref.ts
1115
- const RULE_NAME$39 = "no-create-ref";
1115
+ const RULE_NAME$40 = "no-create-ref";
1116
1116
  var no_create_ref_default = createRule({
1117
1117
  meta: {
1118
1118
  type: "problem",
@@ -1120,11 +1120,11 @@ var no_create_ref_default = createRule({
1120
1120
  messages: { default: "[Deprecated] Use 'useRef' instead." },
1121
1121
  schema: []
1122
1122
  },
1123
- name: RULE_NAME$39,
1124
- create: create$39,
1123
+ name: RULE_NAME$40,
1124
+ create: create$40,
1125
1125
  defaultOptions: []
1126
1126
  });
1127
- function create$39(context) {
1127
+ function create$40(context) {
1128
1128
  return { CallExpression(node) {
1129
1129
  if (core.isCreateRefCall(context, node) && ast.findParentNode(node, core.isClassComponent) == null) context.report({
1130
1130
  messageId: "default",
@@ -1135,7 +1135,7 @@ function create$39(context) {
1135
1135
 
1136
1136
  //#endregion
1137
1137
  //#region src/rules/no-default-props.ts
1138
- const RULE_NAME$38 = "no-default-props";
1138
+ const RULE_NAME$39 = "no-default-props";
1139
1139
  var no_default_props_default = createRule({
1140
1140
  meta: {
1141
1141
  type: "problem",
@@ -1143,11 +1143,11 @@ var no_default_props_default = createRule({
1143
1143
  messages: { default: "[Deprecated] Use ES6 default parameters instead." },
1144
1144
  schema: []
1145
1145
  },
1146
- name: RULE_NAME$38,
1147
- create: create$38,
1146
+ name: RULE_NAME$39,
1147
+ create: create$39,
1148
1148
  defaultOptions: []
1149
1149
  });
1150
- function create$38(context) {
1150
+ function create$39(context) {
1151
1151
  if (!context.sourceCode.text.includes("defaultProps")) return {};
1152
1152
  return { AssignmentExpression(node) {
1153
1153
  if (node.operator !== "=" || node.left.type !== AST_NODE_TYPES.MemberExpression) return;
@@ -1167,7 +1167,7 @@ function create$38(context) {
1167
1167
 
1168
1168
  //#endregion
1169
1169
  //#region src/rules/no-direct-mutation-state.ts
1170
- const RULE_NAME$37 = "no-direct-mutation-state";
1170
+ const RULE_NAME$38 = "no-direct-mutation-state";
1171
1171
  function isConstructorFunction(node) {
1172
1172
  return ast.isOneOf([AST_NODE_TYPES.FunctionDeclaration, AST_NODE_TYPES.FunctionExpression])(node) && ast.isMethodOrProperty(node.parent) && node.parent.key.type === AST_NODE_TYPES.Identifier && node.parent.key.name === "constructor";
1173
1173
  }
@@ -1178,11 +1178,11 @@ var no_direct_mutation_state_default = createRule({
1178
1178
  messages: { default: "Do not mutate state directly. Use 'setState()' instead." },
1179
1179
  schema: []
1180
1180
  },
1181
- name: RULE_NAME$37,
1182
- create: create$37,
1181
+ name: RULE_NAME$38,
1182
+ create: create$38,
1183
1183
  defaultOptions: []
1184
1184
  });
1185
- function create$37(context) {
1185
+ function create$38(context) {
1186
1186
  return { AssignmentExpression(node) {
1187
1187
  if (!core.isAssignmentToThisState(node)) return;
1188
1188
  const parentClass = ast.findParentNode(node, ast.isOneOf([AST_NODE_TYPES.ClassDeclaration, AST_NODE_TYPES.ClassExpression]));
@@ -1196,7 +1196,7 @@ function create$37(context) {
1196
1196
 
1197
1197
  //#endregion
1198
1198
  //#region src/rules/no-duplicate-key.ts
1199
- const RULE_NAME$36 = "no-duplicate-key";
1199
+ const RULE_NAME$37 = "no-duplicate-key";
1200
1200
  var no_duplicate_key_default = createRule({
1201
1201
  meta: {
1202
1202
  type: "problem",
@@ -1204,11 +1204,11 @@ var no_duplicate_key_default = createRule({
1204
1204
  messages: { default: "The 'key' prop must be unique to its sibling elements." },
1205
1205
  schema: []
1206
1206
  },
1207
- name: RULE_NAME$36,
1208
- create: create$36,
1207
+ name: RULE_NAME$37,
1208
+ create: create$37,
1209
1209
  defaultOptions: []
1210
1210
  });
1211
- function create$36(context) {
1211
+ function create$37(context) {
1212
1212
  if (!context.sourceCode.text.includes("key=")) return {};
1213
1213
  const keyedEntries = /* @__PURE__ */ new Map();
1214
1214
  function isKeyValueEqual(a, b) {
@@ -1263,7 +1263,7 @@ function create$36(context) {
1263
1263
 
1264
1264
  //#endregion
1265
1265
  //#region src/rules/no-forward-ref.ts
1266
- const RULE_NAME$35 = "no-forward-ref";
1266
+ const RULE_NAME$36 = "no-forward-ref";
1267
1267
  var no_forward_ref_default = createRule({
1268
1268
  meta: {
1269
1269
  type: "problem",
@@ -1272,11 +1272,11 @@ var no_forward_ref_default = createRule({
1272
1272
  messages: { default: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead." },
1273
1273
  schema: []
1274
1274
  },
1275
- name: RULE_NAME$35,
1276
- create: create$35,
1275
+ name: RULE_NAME$36,
1276
+ create: create$36,
1277
1277
  defaultOptions: []
1278
1278
  });
1279
- function create$35(context) {
1279
+ function create$36(context) {
1280
1280
  if (!context.sourceCode.text.includes("forwardRef")) return {};
1281
1281
  const { version } = getSettingsFromContext(context);
1282
1282
  if (compare(version, "19.0.0", "<")) return {};
@@ -1371,7 +1371,7 @@ function getComponentPropsFixes(context, fixer, node, typeArguments) {
1371
1371
 
1372
1372
  //#endregion
1373
1373
  //#region src/rules/no-implicit-key.ts
1374
- const RULE_NAME$34 = "no-implicit-key";
1374
+ const RULE_NAME$35 = "no-implicit-key";
1375
1375
  var no_implicit_key_default = createRule({
1376
1376
  meta: {
1377
1377
  type: "problem",
@@ -1379,11 +1379,11 @@ var no_implicit_key_default = createRule({
1379
1379
  messages: { default: "Do not use implicit 'key' props." },
1380
1380
  schema: []
1381
1381
  },
1382
- name: RULE_NAME$34,
1383
- create: create$34,
1382
+ name: RULE_NAME$35,
1383
+ create: create$35,
1384
1384
  defaultOptions: []
1385
1385
  });
1386
- function create$34(context) {
1386
+ function create$35(context) {
1387
1387
  return { JSXOpeningElement(node) {
1388
1388
  const keyProp = core.getJsxAttribute(context, node.parent)("key");
1389
1389
  const isKeyPropOnElement = node.attributes.some((n) => n.type === AST_NODE_TYPES.JSXAttribute && n.name.type === AST_NODE_TYPES.JSXIdentifier && n.name.name === "key");
@@ -1396,7 +1396,7 @@ function create$34(context) {
1396
1396
 
1397
1397
  //#endregion
1398
1398
  //#region src/rules/no-leaked-conditional-rendering.ts
1399
- const RULE_NAME$33 = "no-leaked-conditional-rendering";
1399
+ const RULE_NAME$34 = "no-leaked-conditional-rendering";
1400
1400
  var no_leaked_conditional_rendering_default = createRule({
1401
1401
  meta: {
1402
1402
  type: "problem",
@@ -1404,11 +1404,11 @@ var no_leaked_conditional_rendering_default = createRule({
1404
1404
  messages: { default: "Potential leaked value {{value}} that might cause unintentionally rendered values or rendering crashes." },
1405
1405
  schema: []
1406
1406
  },
1407
- name: RULE_NAME$33,
1408
- create: create$33,
1407
+ name: RULE_NAME$34,
1408
+ create: create$34,
1409
1409
  defaultOptions: []
1410
1410
  });
1411
- function create$33(context) {
1411
+ function create$34(context) {
1412
1412
  if (!context.sourceCode.text.includes("&&")) return {};
1413
1413
  const { version } = getSettingsFromContext(context);
1414
1414
  const allowedVariants = [
@@ -1465,7 +1465,7 @@ function create$33(context) {
1465
1465
 
1466
1466
  //#endregion
1467
1467
  //#region src/rules/no-missing-component-display-name.ts
1468
- const RULE_NAME$32 = "no-missing-component-display-name";
1468
+ const RULE_NAME$33 = "no-missing-component-display-name";
1469
1469
  var no_missing_component_display_name_default = createRule({
1470
1470
  meta: {
1471
1471
  type: "problem",
@@ -1473,11 +1473,11 @@ var no_missing_component_display_name_default = createRule({
1473
1473
  messages: { default: "Add missing 'displayName' for component." },
1474
1474
  schema: []
1475
1475
  },
1476
- name: RULE_NAME$32,
1477
- create: create$32,
1476
+ name: RULE_NAME$33,
1477
+ create: create$33,
1478
1478
  defaultOptions: []
1479
1479
  });
1480
- function create$32(context) {
1480
+ function create$33(context) {
1481
1481
  if (!context.sourceCode.text.includes("memo") && !context.sourceCode.text.includes("forwardRef")) return {};
1482
1482
  const { ctx, visitor } = core.useComponentCollector(context, {
1483
1483
  collectDisplayName: true,
@@ -1499,7 +1499,7 @@ function create$32(context) {
1499
1499
 
1500
1500
  //#endregion
1501
1501
  //#region src/rules/no-missing-context-display-name.ts
1502
- const RULE_NAME$31 = "no-missing-context-display-name";
1502
+ const RULE_NAME$32 = "no-missing-context-display-name";
1503
1503
  var no_missing_context_display_name_default = createRule({
1504
1504
  meta: {
1505
1505
  type: "problem",
@@ -1508,11 +1508,11 @@ var no_missing_context_display_name_default = createRule({
1508
1508
  messages: { default: "Add missing 'displayName' for context." },
1509
1509
  schema: []
1510
1510
  },
1511
- name: RULE_NAME$31,
1512
- create: create$31,
1511
+ name: RULE_NAME$32,
1512
+ create: create$32,
1513
1513
  defaultOptions: []
1514
1514
  });
1515
- function create$31(context) {
1515
+ function create$32(context) {
1516
1516
  if (!context.sourceCode.text.includes("createContext")) return {};
1517
1517
  const createCalls = [];
1518
1518
  const displayNameAssignments = [];
@@ -1564,7 +1564,7 @@ function create$31(context) {
1564
1564
 
1565
1565
  //#endregion
1566
1566
  //#region src/rules/no-missing-key.ts
1567
- const RULE_NAME$30 = "no-missing-key";
1567
+ const RULE_NAME$31 = "no-missing-key";
1568
1568
  var no_missing_key_default = createRule({
1569
1569
  meta: {
1570
1570
  type: "problem",
@@ -1575,11 +1575,11 @@ var no_missing_key_default = createRule({
1575
1575
  },
1576
1576
  schema: []
1577
1577
  },
1578
- name: RULE_NAME$30,
1579
- create: create$30,
1578
+ name: RULE_NAME$31,
1579
+ create: create$31,
1580
1580
  defaultOptions: []
1581
1581
  });
1582
- function create$30(ctx) {
1582
+ function create$31(ctx) {
1583
1583
  let inChildrenToArray = false;
1584
1584
  function check(node) {
1585
1585
  if (node.type === AST_NODE_TYPES.JSXElement) return core.getJsxAttribute(ctx, node)("key") == null ? {
@@ -1643,7 +1643,7 @@ function create$30(ctx) {
1643
1643
 
1644
1644
  //#endregion
1645
1645
  //#region src/rules/no-misused-capture-owner-stack.ts
1646
- const RULE_NAME$29 = "no-misused-capture-owner-stack";
1646
+ const RULE_NAME$30 = "no-misused-capture-owner-stack";
1647
1647
  var no_misused_capture_owner_stack_default = createRule({
1648
1648
  meta: {
1649
1649
  type: "problem",
@@ -1654,11 +1654,11 @@ var no_misused_capture_owner_stack_default = createRule({
1654
1654
  },
1655
1655
  schema: []
1656
1656
  },
1657
- name: RULE_NAME$29,
1658
- create: create$29,
1657
+ name: RULE_NAME$30,
1658
+ create: create$30,
1659
1659
  defaultOptions: []
1660
1660
  });
1661
- function create$29(context) {
1661
+ function create$30(context) {
1662
1662
  if (!context.sourceCode.text.includes("captureOwnerStack")) return {};
1663
1663
  const { importSource } = getSettingsFromContext(context);
1664
1664
  return {
@@ -1689,7 +1689,7 @@ function isDevelopmentOnlyCheck(node) {
1689
1689
 
1690
1690
  //#endregion
1691
1691
  //#region src/rules/no-nested-component-definitions.ts
1692
- const RULE_NAME$28 = "no-nested-component-definitions";
1692
+ const RULE_NAME$29 = "no-nested-component-definitions";
1693
1693
  var no_nested_component_definitions_default = createRule({
1694
1694
  meta: {
1695
1695
  type: "problem",
@@ -1697,11 +1697,11 @@ var no_nested_component_definitions_default = createRule({
1697
1697
  messages: { default: "Do not nest component definitions inside other components or props. {{suggestion}}" },
1698
1698
  schema: []
1699
1699
  },
1700
- name: RULE_NAME$28,
1701
- create: create$28,
1700
+ name: RULE_NAME$29,
1701
+ create: create$29,
1702
1702
  defaultOptions: []
1703
1703
  });
1704
- function create$28(context) {
1704
+ function create$29(context) {
1705
1705
  const hint = core.ComponentDetectionHint.SkipArrayMapCallback | core.ComponentDetectionHint.SkipNullLiteral | core.ComponentDetectionHint.SkipUndefined | core.ComponentDetectionHint.SkipBooleanLiteral | core.ComponentDetectionHint.SkipStringLiteral | core.ComponentDetectionHint.SkipNumberLiteral | core.ComponentDetectionHint.StrictLogical | core.ComponentDetectionHint.StrictConditional;
1706
1706
  const fCollector = core.useComponentCollector(context, { hint });
1707
1707
  const cCollector = core.useComponentCollectorLegacy(context);
@@ -1806,7 +1806,7 @@ function isInsideCreateElementProps(context, node) {
1806
1806
 
1807
1807
  //#endregion
1808
1808
  //#region src/rules/no-nested-lazy-component-declarations.ts
1809
- const RULE_NAME$27 = "no-nested-lazy-component-declarations";
1809
+ const RULE_NAME$28 = "no-nested-lazy-component-declarations";
1810
1810
  var no_nested_lazy_component_declarations_default = createRule({
1811
1811
  meta: {
1812
1812
  type: "problem",
@@ -1814,11 +1814,11 @@ var no_nested_lazy_component_declarations_default = createRule({
1814
1814
  messages: { default: "Do not declare lazy components inside other components. Instead, always declare them at the top level of your module." },
1815
1815
  schema: []
1816
1816
  },
1817
- name: RULE_NAME$27,
1818
- create: create$27,
1817
+ name: RULE_NAME$28,
1818
+ create: create$28,
1819
1819
  defaultOptions: []
1820
1820
  });
1821
- function create$27(context) {
1821
+ function create$28(context) {
1822
1822
  const hint = core.ComponentDetectionHint.None;
1823
1823
  const collector = core.useComponentCollector(context, { hint });
1824
1824
  const collectorLegacy = core.useComponentCollectorLegacy(context);
@@ -1845,6 +1845,96 @@ function create$27(context) {
1845
1845
  });
1846
1846
  }
1847
1847
 
1848
+ //#endregion
1849
+ //#region src/rules/no-non-async-server-functions.ts
1850
+ const RULE_NAME$27 = "no-non-async-server-functions";
1851
+ var no_non_async_server_functions_default = createRule({
1852
+ meta: {
1853
+ type: "problem",
1854
+ docs: { description: "Enforces that server functions are async. If a file has a top-level 'use server' directive, exported functions/methods must be async. Functions with their own 'use server' directive must also be async." },
1855
+ fixable: "code",
1856
+ messages: { default: "Server functions must be async." },
1857
+ schema: []
1858
+ },
1859
+ name: RULE_NAME$27,
1860
+ create: create$27,
1861
+ defaultOptions: []
1862
+ });
1863
+ function create$27(context) {
1864
+ if (!context.sourceCode.text.includes("use server")) return {};
1865
+ const hasFileLevelUseServerDirective = ast.getFileDirectives(context.sourceCode.ast).some((d) => d.value === "use server");
1866
+ /**
1867
+ * Check if `node` is an async function, and report if not
1868
+ * @param node The function node to check
1869
+ * @returns Whether a report was made
1870
+ */
1871
+ function getAsyncFix(node) {
1872
+ if (node.type === AST_NODE_TYPES.FunctionDeclaration || node.type === AST_NODE_TYPES.FunctionExpression) {
1873
+ const fnToken = context.sourceCode.getFirstToken(node);
1874
+ if (fnToken != null) return (fixer) => fixer.insertTextBefore(fnToken, "async ");
1875
+ return null;
1876
+ }
1877
+ if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) return (fixer) => fixer.insertTextBefore(node, "async ");
1878
+ return null;
1879
+ }
1880
+ function reportNonAsyncFunction(node) {
1881
+ if (!ast.isFunction(node)) return false;
1882
+ if (!node.async) {
1883
+ context.report({
1884
+ messageId: "default",
1885
+ node,
1886
+ fix: getAsyncFix(node)
1887
+ });
1888
+ return true;
1889
+ }
1890
+ return false;
1891
+ }
1892
+ /**
1893
+ * Check non-exported local functions for 'use server' directives, and report if they are not async
1894
+ * @param node The function node to check
1895
+ */
1896
+ function checkLocalServerFunction(node) {
1897
+ if (ast.getFunctionDirectives(node).some((d) => d.value === "use server")) reportNonAsyncFunction(node);
1898
+ }
1899
+ /**
1900
+ * Find function declarations from exports and check them
1901
+ * @param id The identifier of the exported function
1902
+ * @param node The export declaration node
1903
+ */
1904
+ function findAndCheckExportedFunctionDeclarations(id, node) {
1905
+ const variableNode = getVariableDefinitionNode(findVariable(id.name, context.sourceCode.getScope(node)), 0);
1906
+ if (variableNode == null) return;
1907
+ reportNonAsyncFunction(variableNode);
1908
+ }
1909
+ return {
1910
+ ArrowFunctionExpression(node) {
1911
+ checkLocalServerFunction(node);
1912
+ },
1913
+ ExportDefaultDeclaration(node) {
1914
+ if (!hasFileLevelUseServerDirective) return;
1915
+ const decl = node.declaration;
1916
+ if (reportNonAsyncFunction(decl)) return;
1917
+ if (ast.isIdentifier(decl)) findAndCheckExportedFunctionDeclarations(decl, node);
1918
+ },
1919
+ ExportNamedDeclaration(node) {
1920
+ if (!hasFileLevelUseServerDirective) return;
1921
+ if (node.declaration != null) {
1922
+ const decl = node.declaration;
1923
+ if (reportNonAsyncFunction(decl)) return;
1924
+ if (decl.type === AST_NODE_TYPES.VariableDeclaration) for (const declarator of decl.declarations) reportNonAsyncFunction(declarator.init);
1925
+ return;
1926
+ }
1927
+ if (node.source == null && node.specifiers.length > 0) for (const spec of node.specifiers) findAndCheckExportedFunctionDeclarations(spec.local, node);
1928
+ },
1929
+ FunctionDeclaration(node) {
1930
+ checkLocalServerFunction(node);
1931
+ },
1932
+ FunctionExpression(node) {
1933
+ checkLocalServerFunction(node);
1934
+ }
1935
+ };
1936
+ }
1937
+
1848
1938
  //#endregion
1849
1939
  //#region src/rules/no-prop-types.ts
1850
1940
  const RULE_NAME$26 = "no-prop-types";
@@ -3477,6 +3567,7 @@ const plugin = {
3477
3567
  "no-nested-component-definitions": no_nested_component_definitions_default,
3478
3568
  "no-nested-lazy-component-declarations": no_nested_lazy_component_declarations_default,
3479
3569
  "no-prop-types": no_prop_types_default,
3570
+ "no-non-async-server-functions": no_non_async_server_functions_default,
3480
3571
  "no-redundant-should-component-update": no_redundant_should_component_update_default,
3481
3572
  "no-set-state-in-component-did-mount": no_set_state_in_component_did_mount_default,
3482
3573
  "no-set-state-in-component-did-update": no_set_state_in_component_did_update_default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-x",
3
- "version": "2.8.2-next.6",
3
+ "version": "2.8.3-beta.7",
4
4
  "description": "A set of composable ESLint rules for for libraries and frameworks that use React as a UI runtime.",
5
5
  "keywords": [
6
6
  "react",
@@ -45,11 +45,11 @@
45
45
  "is-immutable-type": "^5.0.1",
46
46
  "ts-api-utils": "^2.4.0",
47
47
  "ts-pattern": "^5.9.0",
48
- "@eslint-react/ast": "2.8.2-next.6",
49
- "@eslint-react/core": "2.8.2-next.6",
50
- "@eslint-react/shared": "2.8.2-next.6",
51
- "@eslint-react/eff": "2.8.2-next.6",
52
- "@eslint-react/var": "2.8.2-next.6"
48
+ "@eslint-react/ast": "2.8.3-beta.7",
49
+ "@eslint-react/core": "2.8.3-beta.7",
50
+ "@eslint-react/eff": "2.8.3-beta.7",
51
+ "@eslint-react/shared": "2.8.3-beta.7",
52
+ "@eslint-react/var": "2.8.3-beta.7"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@types/react": "^19.2.10",