eslint-plugin-react-x 1.17.4-next.0 → 1.17.4-next.10

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 CHANGED
@@ -48,6 +48,7 @@ export default [
48
48
  "react-x/no-default-props": "error",
49
49
  "react-x/no-direct-mutation-state": "error",
50
50
  "react-x/no-duplicate-key": "error",
51
+ "react-x/no-forward-ref": "warn",
51
52
  "react-x/no-implicit-key": "warn",
52
53
  "react-x/no-missing-key": "error",
53
54
  "react-x/no-nested-components": "warn",
@@ -97,6 +98,7 @@ export default [
97
98
  | `no-default-props` | Prevents using `defaultProps` property in favor of ES6 default parameters. | ✔️ | | |
98
99
  | `no-direct-mutation-state` | Prevents direct mutation of `this.state`. | ✔️ | | |
99
100
  | `no-duplicate-key` | Prevents duplicate `key` on elements in the same array or a list of `children`. | ✔️ | | |
101
+ | `no-forward-ref` | Prevents using `forwardRef`. | 🧐 | | |
100
102
  | `no-implicit-key` | Prevents `key` from not being explicitly specified (e.g. spreading `key` from objects). | 🧐 | | |
101
103
  | `no-leaked-conditional-rendering` | Prevents problematic leaked values from being rendered. | 🧐 | 💭 | |
102
104
  | `no-missing-component-display-name` | Enforces that all components have a `displayName` which can be used in devtools. | 🐞 | | |
package/dist/index.d.mts CHANGED
@@ -38,6 +38,7 @@ declare const _default: {
38
38
  "no-default-props": _typescript_eslint_utils_ts_eslint.RuleModule<"noDefaultProps", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
39
39
  "no-direct-mutation-state": _typescript_eslint_utils_ts_eslint.RuleModule<"noDirectMutationState", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
40
40
  "no-duplicate-key": _typescript_eslint_utils_ts_eslint.RuleModule<"noDuplicateKey", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
41
+ "no-forward-ref": _typescript_eslint_utils_ts_eslint.RuleModule<"noForwardRef", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
41
42
  "no-implicit-key": _typescript_eslint_utils_ts_eslint.RuleModule<"noImplicitKey", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
42
43
  "no-leaked-conditional-rendering": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedConditionalRendering", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
43
44
  "no-missing-component-display-name": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingComponentDisplayName", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.d.ts CHANGED
@@ -38,6 +38,7 @@ declare const _default: {
38
38
  "no-default-props": _typescript_eslint_utils_ts_eslint.RuleModule<"noDefaultProps", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
39
39
  "no-direct-mutation-state": _typescript_eslint_utils_ts_eslint.RuleModule<"noDirectMutationState", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
40
40
  "no-duplicate-key": _typescript_eslint_utils_ts_eslint.RuleModule<"noDuplicateKey", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
41
+ "no-forward-ref": _typescript_eslint_utils_ts_eslint.RuleModule<"noForwardRef", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
41
42
  "no-implicit-key": _typescript_eslint_utils_ts_eslint.RuleModule<"noImplicitKey", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
42
43
  "no-leaked-conditional-rendering": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedConditionalRendering", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
43
44
  "no-missing-component-display-name": _typescript_eslint_utils_ts_eslint.RuleModule<"noMissingComponentDisplayName", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.js CHANGED
@@ -8,10 +8,9 @@ var core = require('@eslint-react/core');
8
8
  var types = require('@typescript-eslint/types');
9
9
  var tsPattern = require('ts-pattern');
10
10
  var VAR = require('@eslint-react/var');
11
+ var compareVersions = require('compare-versions');
11
12
  var typeUtils = require('@typescript-eslint/type-utils');
12
13
  var utils = require('@typescript-eslint/utils');
13
- var astUtils = require('@typescript-eslint/utils/ast-utils');
14
- var compareVersions = require('compare-versions');
15
14
  var ts = require('typescript');
16
15
  var isImmutableType = require('is-immutable-type');
17
16
 
@@ -42,7 +41,7 @@ var ts__default = /*#__PURE__*/_interopDefault(ts);
42
41
 
43
42
  // package.json
44
43
  var name = "eslint-plugin-react-x";
45
- var version = "1.17.4-next.0";
44
+ var version = "1.17.4-next.10";
46
45
  var createRule = shared.createRuleForPlugin("x");
47
46
 
48
47
  // src/rules/avoid-shorthand-boolean.ts
@@ -1119,7 +1118,35 @@ var no_duplicate_key_default = createRule({
1119
1118
  },
1120
1119
  defaultOptions: []
1121
1120
  });
1122
- var RULE_NAME25 = "no-implicit-key";
1121
+ var RULE_NAME25 = "no-forward-ref";
1122
+ var no_forward_ref_default = createRule({
1123
+ meta: {
1124
+ type: "problem",
1125
+ docs: {
1126
+ description: "disallow the use of 'forwardRef'"
1127
+ },
1128
+ messages: {
1129
+ noForwardRef: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead."
1130
+ },
1131
+ schema: []
1132
+ },
1133
+ name: RULE_NAME25,
1134
+ create(context) {
1135
+ const { version: version2 } = shared.normalizeSettings(shared.decodeSettings(context.settings));
1136
+ if (compareVersions.compare(version2, "19.0.0", "<")) return {};
1137
+ return {
1138
+ CallExpression(node) {
1139
+ if (!core.isForwardRefCall(node, context)) return;
1140
+ context.report({
1141
+ messageId: "noForwardRef",
1142
+ node
1143
+ });
1144
+ }
1145
+ };
1146
+ },
1147
+ defaultOptions: []
1148
+ });
1149
+ var RULE_NAME26 = "no-implicit-key";
1123
1150
  var no_implicit_key_default = createRule({
1124
1151
  meta: {
1125
1152
  type: "problem",
@@ -1131,7 +1158,7 @@ var no_implicit_key_default = createRule({
1131
1158
  },
1132
1159
  schema: []
1133
1160
  },
1134
- name: RULE_NAME25,
1161
+ name: RULE_NAME26,
1135
1162
  create(context) {
1136
1163
  function getReportDescriptor(node) {
1137
1164
  const initialScope = context.sourceCode.getScope(node);
@@ -1174,7 +1201,7 @@ function isTrueLiteralType(type) {
1174
1201
  function unionTypeParts(type) {
1175
1202
  return isUnionType(type) ? type.types : [type];
1176
1203
  }
1177
- var RULE_NAME26 = "no-leaked-conditional-rendering";
1204
+ var RULE_NAME27 = "no-leaked-conditional-rendering";
1178
1205
  var tsHelpers = {
1179
1206
  isAnyType: (type) => isTypeFlagSet(type, ts__default.default.TypeFlags.TypeParameter | ts__default.default.TypeFlags.Any),
1180
1207
  isBigIntType: (type) => isTypeFlagSet(type, ts__default.default.TypeFlags.BigIntLike),
@@ -1278,7 +1305,7 @@ var no_leaked_conditional_rendering_default = createRule({
1278
1305
  },
1279
1306
  schema: []
1280
1307
  },
1281
- name: RULE_NAME26,
1308
+ name: RULE_NAME27,
1282
1309
  create(context) {
1283
1310
  if (!context.sourceCode.text.includes("&&") && !context.sourceCode.text.includes("?")) return {};
1284
1311
  const { version: version2 } = shared.normalizeSettings(shared.decodeSettings(context.settings));
@@ -1300,7 +1327,7 @@ var no_leaked_conditional_rendering_default = createRule({
1300
1327
  const isLeftUnaryNot = tsPattern.isMatching({ type: types.AST_NODE_TYPES.UnaryExpression, operator: "!" }, left);
1301
1328
  if (isLeftUnaryNot) return getReportDescriptor(right);
1302
1329
  const initialScope = context.sourceCode.getScope(left);
1303
- const isLeftNan = tsPattern.isMatching({ type: types.AST_NODE_TYPES.Identifier, name: "NaN" }, left) || astUtils.getStaticValue(left, initialScope)?.value === "NaN";
1330
+ const isLeftNan = tsPattern.isMatching({ type: types.AST_NODE_TYPES.Identifier, name: "NaN" }, left) || tools.O.exists(VAR__namespace.getStaticValue(left, initialScope), (v) => v === "NaN");
1304
1331
  if (isLeftNan) {
1305
1332
  return tools.O.some({
1306
1333
  messageId: "noLeakedConditionalRendering",
@@ -1335,7 +1362,7 @@ var no_leaked_conditional_rendering_default = createRule({
1335
1362
  },
1336
1363
  defaultOptions: []
1337
1364
  });
1338
- var RULE_NAME27 = "no-missing-component-display-name";
1365
+ var RULE_NAME28 = "no-missing-component-display-name";
1339
1366
  var no_missing_component_display_name_default = createRule({
1340
1367
  meta: {
1341
1368
  type: "problem",
@@ -1347,7 +1374,7 @@ var no_missing_component_display_name_default = createRule({
1347
1374
  },
1348
1375
  schema: []
1349
1376
  },
1350
- name: RULE_NAME27,
1377
+ name: RULE_NAME28,
1351
1378
  create(context) {
1352
1379
  if (!context.sourceCode.text.includes("memo") && !context.sourceCode.text.includes("forwardRef")) return {};
1353
1380
  const { ctx, listeners } = core.useComponentCollector(context);
@@ -1371,7 +1398,7 @@ var no_missing_component_display_name_default = createRule({
1371
1398
  },
1372
1399
  defaultOptions: []
1373
1400
  });
1374
- var RULE_NAME28 = "no-missing-key";
1401
+ var RULE_NAME29 = "no-missing-key";
1375
1402
  var no_missing_key_default = createRule({
1376
1403
  meta: {
1377
1404
  type: "problem",
@@ -1384,7 +1411,7 @@ var no_missing_key_default = createRule({
1384
1411
  },
1385
1412
  schema: []
1386
1413
  },
1387
- name: RULE_NAME28,
1414
+ name: RULE_NAME29,
1388
1415
  create(context) {
1389
1416
  const isWithinChildrenToArrayRef = tools.MutRef.make(false);
1390
1417
  function checkIteratorElement(node) {
@@ -1488,7 +1515,7 @@ var no_missing_key_default = createRule({
1488
1515
  },
1489
1516
  defaultOptions: []
1490
1517
  });
1491
- var RULE_NAME29 = "no-nested-components";
1518
+ var RULE_NAME30 = "no-nested-components";
1492
1519
  var no_nested_components_default = createRule({
1493
1520
  meta: {
1494
1521
  type: "problem",
@@ -1501,7 +1528,7 @@ var no_nested_components_default = createRule({
1501
1528
  },
1502
1529
  schema: []
1503
1530
  },
1504
- name: RULE_NAME29,
1531
+ name: RULE_NAME30,
1505
1532
  create(context) {
1506
1533
  const hint = core.ERComponentHint.SkipMapCallback | core.ERComponentHint.SkipNullLiteral | core.ERComponentHint.SkipUndefinedLiteral | core.ERComponentHint.SkipBooleanLiteral | core.ERComponentHint.SkipStringLiteral | core.ERComponentHint.SkipNumberLiteral | core.ERComponentHint.StrictLogical | core.ERComponentHint.StrictConditional;
1507
1534
  const collector = core.useComponentCollector(context, hint);
@@ -1585,7 +1612,7 @@ var no_nested_components_default = createRule({
1585
1612
  },
1586
1613
  defaultOptions: []
1587
1614
  });
1588
- var RULE_NAME30 = "no-prop-types";
1615
+ var RULE_NAME31 = "no-prop-types";
1589
1616
  var no_prop_types_default = createRule({
1590
1617
  meta: {
1591
1618
  type: "problem",
@@ -1597,7 +1624,7 @@ var no_prop_types_default = createRule({
1597
1624
  },
1598
1625
  schema: []
1599
1626
  },
1600
- name: RULE_NAME30,
1627
+ name: RULE_NAME31,
1601
1628
  create(context) {
1602
1629
  if (!context.sourceCode.text.includes("propTypes")) return {};
1603
1630
  return {
@@ -1624,7 +1651,7 @@ var no_prop_types_default = createRule({
1624
1651
  },
1625
1652
  defaultOptions: []
1626
1653
  });
1627
- var RULE_NAME31 = "no-redundant-should-component-update";
1654
+ var RULE_NAME32 = "no-redundant-should-component-update";
1628
1655
  function isShouldComponentUpdate(node) {
1629
1656
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
1630
1657
  }
@@ -1639,7 +1666,7 @@ var no_redundant_should_component_update_default = createRule({
1639
1666
  },
1640
1667
  schema: []
1641
1668
  },
1642
- name: RULE_NAME31,
1669
+ name: RULE_NAME32,
1643
1670
  create(context) {
1644
1671
  if (!context.sourceCode.text.includes("shouldComponentUpdate")) return {};
1645
1672
  const { ctx, listeners } = core.useComponentCollectorLegacy();
@@ -1667,7 +1694,7 @@ var no_redundant_should_component_update_default = createRule({
1667
1694
  },
1668
1695
  defaultOptions: []
1669
1696
  });
1670
- var RULE_NAME32 = "no-set-state-in-component-did-mount";
1697
+ var RULE_NAME33 = "no-set-state-in-component-did-mount";
1671
1698
  function isComponentDidMount(node) {
1672
1699
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
1673
1700
  }
@@ -1682,7 +1709,7 @@ var no_set_state_in_component_did_mount_default = createRule({
1682
1709
  },
1683
1710
  schema: []
1684
1711
  },
1685
- name: RULE_NAME32,
1712
+ name: RULE_NAME33,
1686
1713
  create(context) {
1687
1714
  if (!context.sourceCode.text.includes("componentDidMount")) return {};
1688
1715
  function getReportDescriptor(node) {
@@ -1710,7 +1737,7 @@ var no_set_state_in_component_did_mount_default = createRule({
1710
1737
  },
1711
1738
  defaultOptions: []
1712
1739
  });
1713
- var RULE_NAME33 = "no-set-state-in-component-did-update";
1740
+ var RULE_NAME34 = "no-set-state-in-component-did-update";
1714
1741
  function isComponentDidUpdate(node) {
1715
1742
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
1716
1743
  }
@@ -1725,7 +1752,7 @@ var no_set_state_in_component_did_update_default = createRule({
1725
1752
  },
1726
1753
  schema: []
1727
1754
  },
1728
- name: RULE_NAME33,
1755
+ name: RULE_NAME34,
1729
1756
  create(context) {
1730
1757
  if (!context.sourceCode.text.includes("componentDidUpdate")) return {};
1731
1758
  function getReportDescriptor(node) {
@@ -1753,7 +1780,7 @@ var no_set_state_in_component_did_update_default = createRule({
1753
1780
  },
1754
1781
  defaultOptions: []
1755
1782
  });
1756
- var RULE_NAME34 = "no-set-state-in-component-will-update";
1783
+ var RULE_NAME35 = "no-set-state-in-component-will-update";
1757
1784
  function isComponentWillUpdate3(node) {
1758
1785
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
1759
1786
  }
@@ -1768,7 +1795,7 @@ var no_set_state_in_component_will_update_default = createRule({
1768
1795
  },
1769
1796
  schema: []
1770
1797
  },
1771
- name: RULE_NAME34,
1798
+ name: RULE_NAME35,
1772
1799
  create(context) {
1773
1800
  if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
1774
1801
  function getReportDescriptor(node) {
@@ -1796,7 +1823,7 @@ var no_set_state_in_component_will_update_default = createRule({
1796
1823
  },
1797
1824
  defaultOptions: []
1798
1825
  });
1799
- var RULE_NAME35 = "no-string-refs";
1826
+ var RULE_NAME36 = "no-string-refs";
1800
1827
  function containsStringLiteral({ value }) {
1801
1828
  return value?.type === types.AST_NODE_TYPES.Literal && tools.isString(value.value);
1802
1829
  }
@@ -1816,7 +1843,7 @@ var no_string_refs_default = createRule({
1816
1843
  },
1817
1844
  schema: []
1818
1845
  },
1819
- name: RULE_NAME35,
1846
+ name: RULE_NAME36,
1820
1847
  create(context) {
1821
1848
  return {
1822
1849
  JSXAttribute(node) {
@@ -1832,7 +1859,7 @@ var no_string_refs_default = createRule({
1832
1859
  },
1833
1860
  defaultOptions: []
1834
1861
  });
1835
- var RULE_NAME36 = "no-unsafe-component-will-mount";
1862
+ var RULE_NAME37 = "no-unsafe-component-will-mount";
1836
1863
  function isUnsafeComponentWillMount(node) {
1837
1864
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
1838
1865
  }
@@ -1847,7 +1874,7 @@ var no_unsafe_component_will_mount_default = createRule({
1847
1874
  },
1848
1875
  schema: []
1849
1876
  },
1850
- name: RULE_NAME36,
1877
+ name: RULE_NAME37,
1851
1878
  create(context) {
1852
1879
  if (!context.sourceCode.text.includes("UNSAFE_componentWillMount")) return {};
1853
1880
  const { ctx, listeners } = core.useComponentCollectorLegacy();
@@ -1871,7 +1898,7 @@ var no_unsafe_component_will_mount_default = createRule({
1871
1898
  },
1872
1899
  defaultOptions: []
1873
1900
  });
1874
- var RULE_NAME37 = "no-unsafe-component-will-receive-props";
1901
+ var RULE_NAME38 = "no-unsafe-component-will-receive-props";
1875
1902
  function isUnsafeComponentWillReceiveProps(node) {
1876
1903
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
1877
1904
  }
@@ -1886,7 +1913,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
1886
1913
  },
1887
1914
  schema: []
1888
1915
  },
1889
- name: RULE_NAME37,
1916
+ name: RULE_NAME38,
1890
1917
  create(context) {
1891
1918
  if (!context.sourceCode.text.includes("UNSAFE_componentWillReceiveProps")) return {};
1892
1919
  const { ctx, listeners } = core.useComponentCollectorLegacy();
@@ -1910,7 +1937,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
1910
1937
  },
1911
1938
  defaultOptions: []
1912
1939
  });
1913
- var RULE_NAME38 = "no-unsafe-component-will-update";
1940
+ var RULE_NAME39 = "no-unsafe-component-will-update";
1914
1941
  function isUnsafeComponentWillUpdate(node) {
1915
1942
  return AST11__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
1916
1943
  }
@@ -1925,7 +1952,7 @@ var no_unsafe_component_will_update_default = createRule({
1925
1952
  },
1926
1953
  schema: []
1927
1954
  },
1928
- name: RULE_NAME38,
1955
+ name: RULE_NAME39,
1929
1956
  create(context) {
1930
1957
  if (!context.sourceCode.text.includes("UNSAFE_componentWillUpdate")) return {};
1931
1958
  const { ctx, listeners } = core.useComponentCollectorLegacy();
@@ -1949,7 +1976,7 @@ var no_unsafe_component_will_update_default = createRule({
1949
1976
  },
1950
1977
  defaultOptions: []
1951
1978
  });
1952
- var RULE_NAME39 = "no-unstable-context-value";
1979
+ var RULE_NAME40 = "no-unstable-context-value";
1953
1980
  var no_unstable_context_value_default = createRule({
1954
1981
  meta: {
1955
1982
  type: "problem",
@@ -1963,7 +1990,7 @@ var no_unstable_context_value_default = createRule({
1963
1990
  },
1964
1991
  schema: []
1965
1992
  },
1966
- name: RULE_NAME39,
1993
+ name: RULE_NAME40,
1967
1994
  create(context) {
1968
1995
  const { ctx, listeners } = core.useComponentCollector(context);
1969
1996
  const possibleValueConstructions = /* @__PURE__ */ new Map();
@@ -2016,7 +2043,7 @@ var no_unstable_context_value_default = createRule({
2016
2043
  },
2017
2044
  defaultOptions: []
2018
2045
  });
2019
- var RULE_NAME40 = "no-unstable-default-props";
2046
+ var RULE_NAME41 = "no-unstable-default-props";
2020
2047
  var no_unstable_default_props_default = createRule({
2021
2048
  meta: {
2022
2049
  type: "problem",
@@ -2028,7 +2055,7 @@ var no_unstable_default_props_default = createRule({
2028
2055
  },
2029
2056
  schema: []
2030
2057
  },
2031
- name: RULE_NAME40,
2058
+ name: RULE_NAME41,
2032
2059
  create(context) {
2033
2060
  const { ctx, listeners } = core.useComponentCollector(context);
2034
2061
  const possibleDestructuringDeclarators = /* @__PURE__ */ new WeakMap();
@@ -2081,7 +2108,7 @@ var no_unstable_default_props_default = createRule({
2081
2108
  },
2082
2109
  defaultOptions: []
2083
2110
  });
2084
- var RULE_NAME41 = "no-unused-class-component-members";
2111
+ var RULE_NAME42 = "no-unused-class-component-members";
2085
2112
  var LIFECYCLE_METHODS = /* @__PURE__ */ new Set([
2086
2113
  "componentDidCatch",
2087
2114
  "componentDidMount",
@@ -2125,7 +2152,7 @@ var no_unused_class_component_members_default = createRule({
2125
2152
  },
2126
2153
  schema: []
2127
2154
  },
2128
- name: RULE_NAME41,
2155
+ name: RULE_NAME42,
2129
2156
  create(context) {
2130
2157
  const classStack = [];
2131
2158
  const methodStack = [];
@@ -2208,7 +2235,7 @@ var no_unused_class_component_members_default = createRule({
2208
2235
  },
2209
2236
  defaultOptions: []
2210
2237
  });
2211
- var RULE_NAME42 = "no-unused-state";
2238
+ var RULE_NAME43 = "no-unused-state";
2212
2239
  function getName4(node) {
2213
2240
  if (node.type === types.AST_NODE_TYPES.TSAsExpression) {
2214
2241
  return getName4(node.expression);
@@ -2248,7 +2275,7 @@ var no_unused_state_default = createRule({
2248
2275
  },
2249
2276
  schema: []
2250
2277
  },
2251
- name: RULE_NAME42,
2278
+ name: RULE_NAME43,
2252
2279
  create(context) {
2253
2280
  const classStack = [];
2254
2281
  const methodStack = [];
@@ -2349,7 +2376,7 @@ var no_unused_state_default = createRule({
2349
2376
  },
2350
2377
  defaultOptions: []
2351
2378
  });
2352
- var RULE_NAME43 = "no-useless-fragment";
2379
+ var RULE_NAME44 = "no-useless-fragment";
2353
2380
  function check(node, context, allowExpressions) {
2354
2381
  const initialScope = context.sourceCode.getScope(node);
2355
2382
  if (JSX7__namespace.isKeyedElement(node, initialScope)) return;
@@ -2391,7 +2418,7 @@ var no_useless_fragment_default = createRule({
2391
2418
  }
2392
2419
  }]
2393
2420
  },
2394
- name: RULE_NAME43,
2421
+ name: RULE_NAME44,
2395
2422
  create(context, [option]) {
2396
2423
  const { allowExpressions = true } = option;
2397
2424
  return {
@@ -2408,7 +2435,7 @@ var no_useless_fragment_default = createRule({
2408
2435
  allowExpressions: true
2409
2436
  }]
2410
2437
  });
2411
- var RULE_NAME44 = "prefer-destructuring-assignment";
2438
+ var RULE_NAME45 = "prefer-destructuring-assignment";
2412
2439
  function isMemberExpressionWithObjectName(node) {
2413
2440
  return node.object.type === types.AST_NODE_TYPES.Identifier && "name" in node.object;
2414
2441
  }
@@ -2423,7 +2450,7 @@ var prefer_destructuring_assignment_default = createRule({
2423
2450
  },
2424
2451
  schema: []
2425
2452
  },
2426
- name: RULE_NAME44,
2453
+ name: RULE_NAME45,
2427
2454
  create(context) {
2428
2455
  const { ctx, listeners } = core.useComponentCollector(context);
2429
2456
  const memberExpressionWithNames = [];
@@ -2478,7 +2505,7 @@ var prefer_destructuring_assignment_default = createRule({
2478
2505
  },
2479
2506
  defaultOptions: []
2480
2507
  });
2481
- var RULE_NAME45 = "prefer-react-namespace-import";
2508
+ var RULE_NAME46 = "prefer-react-namespace-import";
2482
2509
  var prefer_react_namespace_import_default = createRule({
2483
2510
  meta: {
2484
2511
  type: "problem",
@@ -2491,7 +2518,7 @@ var prefer_react_namespace_import_default = createRule({
2491
2518
  },
2492
2519
  schema: []
2493
2520
  },
2494
- name: RULE_NAME45,
2521
+ name: RULE_NAME46,
2495
2522
  create(context) {
2496
2523
  const importSource = shared.decodeSettings(context.settings).importSource ?? "react";
2497
2524
  return {
@@ -2527,7 +2554,7 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
2527
2554
  },
2528
2555
  defaultOptions: []
2529
2556
  });
2530
- var RULE_NAME46 = "prefer-read-only-props";
2557
+ var RULE_NAME47 = "prefer-read-only-props";
2531
2558
  function isReadonlyType(type, services) {
2532
2559
  try {
2533
2560
  const im = isImmutableType.getTypeImmutability(services.program, type);
@@ -2547,7 +2574,7 @@ var prefer_read_only_props_default = createRule({
2547
2574
  },
2548
2575
  schema: []
2549
2576
  },
2550
- name: RULE_NAME46,
2577
+ name: RULE_NAME47,
2551
2578
  create(context) {
2552
2579
  const services = utils.ESLintUtils.getParserServices(context, false);
2553
2580
  const { ctx, listeners } = core.useComponentCollector(context);
@@ -2567,7 +2594,7 @@ var prefer_read_only_props_default = createRule({
2567
2594
  },
2568
2595
  defaultOptions: []
2569
2596
  });
2570
- var RULE_NAME47 = "prefer-shorthand-boolean";
2597
+ var RULE_NAME48 = "prefer-shorthand-boolean";
2571
2598
  var prefer_shorthand_boolean_default = createRule({
2572
2599
  meta: {
2573
2600
  type: "problem",
@@ -2580,7 +2607,7 @@ var prefer_shorthand_boolean_default = createRule({
2580
2607
  },
2581
2608
  schema: []
2582
2609
  },
2583
- name: RULE_NAME47,
2610
+ name: RULE_NAME48,
2584
2611
  create(context) {
2585
2612
  function getReportDescriptor(node) {
2586
2613
  const { value } = node;
@@ -2602,7 +2629,7 @@ var prefer_shorthand_boolean_default = createRule({
2602
2629
  },
2603
2630
  defaultOptions: []
2604
2631
  });
2605
- var RULE_NAME48 = "prefer-shorthand-fragment";
2632
+ var RULE_NAME49 = "prefer-shorthand-fragment";
2606
2633
  var prefer_shorthand_fragment_default = createRule({
2607
2634
  meta: {
2608
2635
  type: "problem",
@@ -2614,7 +2641,7 @@ var prefer_shorthand_fragment_default = createRule({
2614
2641
  },
2615
2642
  schema: []
2616
2643
  },
2617
- name: RULE_NAME48,
2644
+ name: RULE_NAME49,
2618
2645
  create(context) {
2619
2646
  function getReportDescriptor(node) {
2620
2647
  if (!core.isFragmentElement(node, context)) return tools.O.none();
@@ -2671,6 +2698,7 @@ var src_default = {
2671
2698
  "no-default-props": no_default_props_default,
2672
2699
  "no-direct-mutation-state": no_direct_mutation_state_default,
2673
2700
  "no-duplicate-key": no_duplicate_key_default,
2701
+ "no-forward-ref": no_forward_ref_default,
2674
2702
  "no-implicit-key": no_implicit_key_default,
2675
2703
  "no-leaked-conditional-rendering": no_leaked_conditional_rendering_default,
2676
2704
  "no-missing-component-display-name": no_missing_component_display_name_default,
package/dist/index.mjs CHANGED
@@ -6,16 +6,15 @@ import { isForwardRefCall, isThisSetState, isClassComponent, isChildrenCount, is
6
6
  import { AST_NODE_TYPES } from '@typescript-eslint/types';
7
7
  import { isMatching, P, match } from 'ts-pattern';
8
8
  import * as VAR from '@eslint-react/var';
9
+ import { compare } from 'compare-versions';
9
10
  import { getConstrainedTypeAtLocation, isTypeReadonly } from '@typescript-eslint/type-utils';
10
11
  import { ESLintUtils } from '@typescript-eslint/utils';
11
- import { getStaticValue } from '@typescript-eslint/utils/ast-utils';
12
- import { compare } from 'compare-versions';
13
12
  import ts from 'typescript';
14
13
  import { getTypeImmutability, isUnknown, isImmutable, isReadonlyShallow, isReadonlyDeep } from 'is-immutable-type';
15
14
 
16
15
  // package.json
17
16
  var name = "eslint-plugin-react-x";
18
- var version = "1.17.4-next.0";
17
+ var version = "1.17.4-next.10";
19
18
  var createRule = createRuleForPlugin("x");
20
19
 
21
20
  // src/rules/avoid-shorthand-boolean.ts
@@ -1092,7 +1091,35 @@ var no_duplicate_key_default = createRule({
1092
1091
  },
1093
1092
  defaultOptions: []
1094
1093
  });
1095
- var RULE_NAME25 = "no-implicit-key";
1094
+ var RULE_NAME25 = "no-forward-ref";
1095
+ var no_forward_ref_default = createRule({
1096
+ meta: {
1097
+ type: "problem",
1098
+ docs: {
1099
+ description: "disallow the use of 'forwardRef'"
1100
+ },
1101
+ messages: {
1102
+ noForwardRef: "In React 19, 'forwardRef' is no longer necessary. Pass 'ref' as a prop instead."
1103
+ },
1104
+ schema: []
1105
+ },
1106
+ name: RULE_NAME25,
1107
+ create(context) {
1108
+ const { version: version2 } = normalizeSettings(decodeSettings(context.settings));
1109
+ if (compare(version2, "19.0.0", "<")) return {};
1110
+ return {
1111
+ CallExpression(node) {
1112
+ if (!isForwardRefCall(node, context)) return;
1113
+ context.report({
1114
+ messageId: "noForwardRef",
1115
+ node
1116
+ });
1117
+ }
1118
+ };
1119
+ },
1120
+ defaultOptions: []
1121
+ });
1122
+ var RULE_NAME26 = "no-implicit-key";
1096
1123
  var no_implicit_key_default = createRule({
1097
1124
  meta: {
1098
1125
  type: "problem",
@@ -1104,7 +1131,7 @@ var no_implicit_key_default = createRule({
1104
1131
  },
1105
1132
  schema: []
1106
1133
  },
1107
- name: RULE_NAME25,
1134
+ name: RULE_NAME26,
1108
1135
  create(context) {
1109
1136
  function getReportDescriptor(node) {
1110
1137
  const initialScope = context.sourceCode.getScope(node);
@@ -1147,7 +1174,7 @@ function isTrueLiteralType(type) {
1147
1174
  function unionTypeParts(type) {
1148
1175
  return isUnionType(type) ? type.types : [type];
1149
1176
  }
1150
- var RULE_NAME26 = "no-leaked-conditional-rendering";
1177
+ var RULE_NAME27 = "no-leaked-conditional-rendering";
1151
1178
  var tsHelpers = {
1152
1179
  isAnyType: (type) => isTypeFlagSet(type, ts.TypeFlags.TypeParameter | ts.TypeFlags.Any),
1153
1180
  isBigIntType: (type) => isTypeFlagSet(type, ts.TypeFlags.BigIntLike),
@@ -1251,7 +1278,7 @@ var no_leaked_conditional_rendering_default = createRule({
1251
1278
  },
1252
1279
  schema: []
1253
1280
  },
1254
- name: RULE_NAME26,
1281
+ name: RULE_NAME27,
1255
1282
  create(context) {
1256
1283
  if (!context.sourceCode.text.includes("&&") && !context.sourceCode.text.includes("?")) return {};
1257
1284
  const { version: version2 } = normalizeSettings(decodeSettings(context.settings));
@@ -1273,7 +1300,7 @@ var no_leaked_conditional_rendering_default = createRule({
1273
1300
  const isLeftUnaryNot = isMatching({ type: AST_NODE_TYPES.UnaryExpression, operator: "!" }, left);
1274
1301
  if (isLeftUnaryNot) return getReportDescriptor(right);
1275
1302
  const initialScope = context.sourceCode.getScope(left);
1276
- const isLeftNan = isMatching({ type: AST_NODE_TYPES.Identifier, name: "NaN" }, left) || getStaticValue(left, initialScope)?.value === "NaN";
1303
+ const isLeftNan = isMatching({ type: AST_NODE_TYPES.Identifier, name: "NaN" }, left) || O.exists(VAR.getStaticValue(left, initialScope), (v) => v === "NaN");
1277
1304
  if (isLeftNan) {
1278
1305
  return O.some({
1279
1306
  messageId: "noLeakedConditionalRendering",
@@ -1308,7 +1335,7 @@ var no_leaked_conditional_rendering_default = createRule({
1308
1335
  },
1309
1336
  defaultOptions: []
1310
1337
  });
1311
- var RULE_NAME27 = "no-missing-component-display-name";
1338
+ var RULE_NAME28 = "no-missing-component-display-name";
1312
1339
  var no_missing_component_display_name_default = createRule({
1313
1340
  meta: {
1314
1341
  type: "problem",
@@ -1320,7 +1347,7 @@ var no_missing_component_display_name_default = createRule({
1320
1347
  },
1321
1348
  schema: []
1322
1349
  },
1323
- name: RULE_NAME27,
1350
+ name: RULE_NAME28,
1324
1351
  create(context) {
1325
1352
  if (!context.sourceCode.text.includes("memo") && !context.sourceCode.text.includes("forwardRef")) return {};
1326
1353
  const { ctx, listeners } = useComponentCollector(context);
@@ -1344,7 +1371,7 @@ var no_missing_component_display_name_default = createRule({
1344
1371
  },
1345
1372
  defaultOptions: []
1346
1373
  });
1347
- var RULE_NAME28 = "no-missing-key";
1374
+ var RULE_NAME29 = "no-missing-key";
1348
1375
  var no_missing_key_default = createRule({
1349
1376
  meta: {
1350
1377
  type: "problem",
@@ -1357,7 +1384,7 @@ var no_missing_key_default = createRule({
1357
1384
  },
1358
1385
  schema: []
1359
1386
  },
1360
- name: RULE_NAME28,
1387
+ name: RULE_NAME29,
1361
1388
  create(context) {
1362
1389
  const isWithinChildrenToArrayRef = MutRef.make(false);
1363
1390
  function checkIteratorElement(node) {
@@ -1461,7 +1488,7 @@ var no_missing_key_default = createRule({
1461
1488
  },
1462
1489
  defaultOptions: []
1463
1490
  });
1464
- var RULE_NAME29 = "no-nested-components";
1491
+ var RULE_NAME30 = "no-nested-components";
1465
1492
  var no_nested_components_default = createRule({
1466
1493
  meta: {
1467
1494
  type: "problem",
@@ -1474,7 +1501,7 @@ var no_nested_components_default = createRule({
1474
1501
  },
1475
1502
  schema: []
1476
1503
  },
1477
- name: RULE_NAME29,
1504
+ name: RULE_NAME30,
1478
1505
  create(context) {
1479
1506
  const hint = ERComponentHint.SkipMapCallback | ERComponentHint.SkipNullLiteral | ERComponentHint.SkipUndefinedLiteral | ERComponentHint.SkipBooleanLiteral | ERComponentHint.SkipStringLiteral | ERComponentHint.SkipNumberLiteral | ERComponentHint.StrictLogical | ERComponentHint.StrictConditional;
1480
1507
  const collector = useComponentCollector(context, hint);
@@ -1558,7 +1585,7 @@ var no_nested_components_default = createRule({
1558
1585
  },
1559
1586
  defaultOptions: []
1560
1587
  });
1561
- var RULE_NAME30 = "no-prop-types";
1588
+ var RULE_NAME31 = "no-prop-types";
1562
1589
  var no_prop_types_default = createRule({
1563
1590
  meta: {
1564
1591
  type: "problem",
@@ -1570,7 +1597,7 @@ var no_prop_types_default = createRule({
1570
1597
  },
1571
1598
  schema: []
1572
1599
  },
1573
- name: RULE_NAME30,
1600
+ name: RULE_NAME31,
1574
1601
  create(context) {
1575
1602
  if (!context.sourceCode.text.includes("propTypes")) return {};
1576
1603
  return {
@@ -1597,7 +1624,7 @@ var no_prop_types_default = createRule({
1597
1624
  },
1598
1625
  defaultOptions: []
1599
1626
  });
1600
- var RULE_NAME31 = "no-redundant-should-component-update";
1627
+ var RULE_NAME32 = "no-redundant-should-component-update";
1601
1628
  function isShouldComponentUpdate(node) {
1602
1629
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "shouldComponentUpdate";
1603
1630
  }
@@ -1612,7 +1639,7 @@ var no_redundant_should_component_update_default = createRule({
1612
1639
  },
1613
1640
  schema: []
1614
1641
  },
1615
- name: RULE_NAME31,
1642
+ name: RULE_NAME32,
1616
1643
  create(context) {
1617
1644
  if (!context.sourceCode.text.includes("shouldComponentUpdate")) return {};
1618
1645
  const { ctx, listeners } = useComponentCollectorLegacy();
@@ -1640,7 +1667,7 @@ var no_redundant_should_component_update_default = createRule({
1640
1667
  },
1641
1668
  defaultOptions: []
1642
1669
  });
1643
- var RULE_NAME32 = "no-set-state-in-component-did-mount";
1670
+ var RULE_NAME33 = "no-set-state-in-component-did-mount";
1644
1671
  function isComponentDidMount(node) {
1645
1672
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
1646
1673
  }
@@ -1655,7 +1682,7 @@ var no_set_state_in_component_did_mount_default = createRule({
1655
1682
  },
1656
1683
  schema: []
1657
1684
  },
1658
- name: RULE_NAME32,
1685
+ name: RULE_NAME33,
1659
1686
  create(context) {
1660
1687
  if (!context.sourceCode.text.includes("componentDidMount")) return {};
1661
1688
  function getReportDescriptor(node) {
@@ -1683,7 +1710,7 @@ var no_set_state_in_component_did_mount_default = createRule({
1683
1710
  },
1684
1711
  defaultOptions: []
1685
1712
  });
1686
- var RULE_NAME33 = "no-set-state-in-component-did-update";
1713
+ var RULE_NAME34 = "no-set-state-in-component-did-update";
1687
1714
  function isComponentDidUpdate(node) {
1688
1715
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentDidUpdate";
1689
1716
  }
@@ -1698,7 +1725,7 @@ var no_set_state_in_component_did_update_default = createRule({
1698
1725
  },
1699
1726
  schema: []
1700
1727
  },
1701
- name: RULE_NAME33,
1728
+ name: RULE_NAME34,
1702
1729
  create(context) {
1703
1730
  if (!context.sourceCode.text.includes("componentDidUpdate")) return {};
1704
1731
  function getReportDescriptor(node) {
@@ -1726,7 +1753,7 @@ var no_set_state_in_component_did_update_default = createRule({
1726
1753
  },
1727
1754
  defaultOptions: []
1728
1755
  });
1729
- var RULE_NAME34 = "no-set-state-in-component-will-update";
1756
+ var RULE_NAME35 = "no-set-state-in-component-will-update";
1730
1757
  function isComponentWillUpdate3(node) {
1731
1758
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "componentWillUpdate";
1732
1759
  }
@@ -1741,7 +1768,7 @@ var no_set_state_in_component_will_update_default = createRule({
1741
1768
  },
1742
1769
  schema: []
1743
1770
  },
1744
- name: RULE_NAME34,
1771
+ name: RULE_NAME35,
1745
1772
  create(context) {
1746
1773
  if (!context.sourceCode.text.includes("componentWillUpdate")) return {};
1747
1774
  function getReportDescriptor(node) {
@@ -1769,7 +1796,7 @@ var no_set_state_in_component_will_update_default = createRule({
1769
1796
  },
1770
1797
  defaultOptions: []
1771
1798
  });
1772
- var RULE_NAME35 = "no-string-refs";
1799
+ var RULE_NAME36 = "no-string-refs";
1773
1800
  function containsStringLiteral({ value }) {
1774
1801
  return value?.type === AST_NODE_TYPES.Literal && isString(value.value);
1775
1802
  }
@@ -1789,7 +1816,7 @@ var no_string_refs_default = createRule({
1789
1816
  },
1790
1817
  schema: []
1791
1818
  },
1792
- name: RULE_NAME35,
1819
+ name: RULE_NAME36,
1793
1820
  create(context) {
1794
1821
  return {
1795
1822
  JSXAttribute(node) {
@@ -1805,7 +1832,7 @@ var no_string_refs_default = createRule({
1805
1832
  },
1806
1833
  defaultOptions: []
1807
1834
  });
1808
- var RULE_NAME36 = "no-unsafe-component-will-mount";
1835
+ var RULE_NAME37 = "no-unsafe-component-will-mount";
1809
1836
  function isUnsafeComponentWillMount(node) {
1810
1837
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillMount";
1811
1838
  }
@@ -1820,7 +1847,7 @@ var no_unsafe_component_will_mount_default = createRule({
1820
1847
  },
1821
1848
  schema: []
1822
1849
  },
1823
- name: RULE_NAME36,
1850
+ name: RULE_NAME37,
1824
1851
  create(context) {
1825
1852
  if (!context.sourceCode.text.includes("UNSAFE_componentWillMount")) return {};
1826
1853
  const { ctx, listeners } = useComponentCollectorLegacy();
@@ -1844,7 +1871,7 @@ var no_unsafe_component_will_mount_default = createRule({
1844
1871
  },
1845
1872
  defaultOptions: []
1846
1873
  });
1847
- var RULE_NAME37 = "no-unsafe-component-will-receive-props";
1874
+ var RULE_NAME38 = "no-unsafe-component-will-receive-props";
1848
1875
  function isUnsafeComponentWillReceiveProps(node) {
1849
1876
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillReceiveProps";
1850
1877
  }
@@ -1859,7 +1886,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
1859
1886
  },
1860
1887
  schema: []
1861
1888
  },
1862
- name: RULE_NAME37,
1889
+ name: RULE_NAME38,
1863
1890
  create(context) {
1864
1891
  if (!context.sourceCode.text.includes("UNSAFE_componentWillReceiveProps")) return {};
1865
1892
  const { ctx, listeners } = useComponentCollectorLegacy();
@@ -1883,7 +1910,7 @@ var no_unsafe_component_will_receive_props_default = createRule({
1883
1910
  },
1884
1911
  defaultOptions: []
1885
1912
  });
1886
- var RULE_NAME38 = "no-unsafe-component-will-update";
1913
+ var RULE_NAME39 = "no-unsafe-component-will-update";
1887
1914
  function isUnsafeComponentWillUpdate(node) {
1888
1915
  return AST11.isOneOf([AST_NODE_TYPES.MethodDefinition, AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === AST_NODE_TYPES.Identifier && node.key.name === "UNSAFE_componentWillUpdate";
1889
1916
  }
@@ -1898,7 +1925,7 @@ var no_unsafe_component_will_update_default = createRule({
1898
1925
  },
1899
1926
  schema: []
1900
1927
  },
1901
- name: RULE_NAME38,
1928
+ name: RULE_NAME39,
1902
1929
  create(context) {
1903
1930
  if (!context.sourceCode.text.includes("UNSAFE_componentWillUpdate")) return {};
1904
1931
  const { ctx, listeners } = useComponentCollectorLegacy();
@@ -1922,7 +1949,7 @@ var no_unsafe_component_will_update_default = createRule({
1922
1949
  },
1923
1950
  defaultOptions: []
1924
1951
  });
1925
- var RULE_NAME39 = "no-unstable-context-value";
1952
+ var RULE_NAME40 = "no-unstable-context-value";
1926
1953
  var no_unstable_context_value_default = createRule({
1927
1954
  meta: {
1928
1955
  type: "problem",
@@ -1936,7 +1963,7 @@ var no_unstable_context_value_default = createRule({
1936
1963
  },
1937
1964
  schema: []
1938
1965
  },
1939
- name: RULE_NAME39,
1966
+ name: RULE_NAME40,
1940
1967
  create(context) {
1941
1968
  const { ctx, listeners } = useComponentCollector(context);
1942
1969
  const possibleValueConstructions = /* @__PURE__ */ new Map();
@@ -1989,7 +2016,7 @@ var no_unstable_context_value_default = createRule({
1989
2016
  },
1990
2017
  defaultOptions: []
1991
2018
  });
1992
- var RULE_NAME40 = "no-unstable-default-props";
2019
+ var RULE_NAME41 = "no-unstable-default-props";
1993
2020
  var no_unstable_default_props_default = createRule({
1994
2021
  meta: {
1995
2022
  type: "problem",
@@ -2001,7 +2028,7 @@ var no_unstable_default_props_default = createRule({
2001
2028
  },
2002
2029
  schema: []
2003
2030
  },
2004
- name: RULE_NAME40,
2031
+ name: RULE_NAME41,
2005
2032
  create(context) {
2006
2033
  const { ctx, listeners } = useComponentCollector(context);
2007
2034
  const possibleDestructuringDeclarators = /* @__PURE__ */ new WeakMap();
@@ -2054,7 +2081,7 @@ var no_unstable_default_props_default = createRule({
2054
2081
  },
2055
2082
  defaultOptions: []
2056
2083
  });
2057
- var RULE_NAME41 = "no-unused-class-component-members";
2084
+ var RULE_NAME42 = "no-unused-class-component-members";
2058
2085
  var LIFECYCLE_METHODS = /* @__PURE__ */ new Set([
2059
2086
  "componentDidCatch",
2060
2087
  "componentDidMount",
@@ -2098,7 +2125,7 @@ var no_unused_class_component_members_default = createRule({
2098
2125
  },
2099
2126
  schema: []
2100
2127
  },
2101
- name: RULE_NAME41,
2128
+ name: RULE_NAME42,
2102
2129
  create(context) {
2103
2130
  const classStack = [];
2104
2131
  const methodStack = [];
@@ -2181,7 +2208,7 @@ var no_unused_class_component_members_default = createRule({
2181
2208
  },
2182
2209
  defaultOptions: []
2183
2210
  });
2184
- var RULE_NAME42 = "no-unused-state";
2211
+ var RULE_NAME43 = "no-unused-state";
2185
2212
  function getName4(node) {
2186
2213
  if (node.type === AST_NODE_TYPES.TSAsExpression) {
2187
2214
  return getName4(node.expression);
@@ -2221,7 +2248,7 @@ var no_unused_state_default = createRule({
2221
2248
  },
2222
2249
  schema: []
2223
2250
  },
2224
- name: RULE_NAME42,
2251
+ name: RULE_NAME43,
2225
2252
  create(context) {
2226
2253
  const classStack = [];
2227
2254
  const methodStack = [];
@@ -2322,7 +2349,7 @@ var no_unused_state_default = createRule({
2322
2349
  },
2323
2350
  defaultOptions: []
2324
2351
  });
2325
- var RULE_NAME43 = "no-useless-fragment";
2352
+ var RULE_NAME44 = "no-useless-fragment";
2326
2353
  function check(node, context, allowExpressions) {
2327
2354
  const initialScope = context.sourceCode.getScope(node);
2328
2355
  if (JSX7.isKeyedElement(node, initialScope)) return;
@@ -2364,7 +2391,7 @@ var no_useless_fragment_default = createRule({
2364
2391
  }
2365
2392
  }]
2366
2393
  },
2367
- name: RULE_NAME43,
2394
+ name: RULE_NAME44,
2368
2395
  create(context, [option]) {
2369
2396
  const { allowExpressions = true } = option;
2370
2397
  return {
@@ -2381,7 +2408,7 @@ var no_useless_fragment_default = createRule({
2381
2408
  allowExpressions: true
2382
2409
  }]
2383
2410
  });
2384
- var RULE_NAME44 = "prefer-destructuring-assignment";
2411
+ var RULE_NAME45 = "prefer-destructuring-assignment";
2385
2412
  function isMemberExpressionWithObjectName(node) {
2386
2413
  return node.object.type === AST_NODE_TYPES.Identifier && "name" in node.object;
2387
2414
  }
@@ -2396,7 +2423,7 @@ var prefer_destructuring_assignment_default = createRule({
2396
2423
  },
2397
2424
  schema: []
2398
2425
  },
2399
- name: RULE_NAME44,
2426
+ name: RULE_NAME45,
2400
2427
  create(context) {
2401
2428
  const { ctx, listeners } = useComponentCollector(context);
2402
2429
  const memberExpressionWithNames = [];
@@ -2451,7 +2478,7 @@ var prefer_destructuring_assignment_default = createRule({
2451
2478
  },
2452
2479
  defaultOptions: []
2453
2480
  });
2454
- var RULE_NAME45 = "prefer-react-namespace-import";
2481
+ var RULE_NAME46 = "prefer-react-namespace-import";
2455
2482
  var prefer_react_namespace_import_default = createRule({
2456
2483
  meta: {
2457
2484
  type: "problem",
@@ -2464,7 +2491,7 @@ var prefer_react_namespace_import_default = createRule({
2464
2491
  },
2465
2492
  schema: []
2466
2493
  },
2467
- name: RULE_NAME45,
2494
+ name: RULE_NAME46,
2468
2495
  create(context) {
2469
2496
  const importSource = decodeSettings(context.settings).importSource ?? "react";
2470
2497
  return {
@@ -2500,7 +2527,7 @@ ${importStringPrefix} ${specifiers} from ${importSourceQuoted}${semiColon}`
2500
2527
  },
2501
2528
  defaultOptions: []
2502
2529
  });
2503
- var RULE_NAME46 = "prefer-read-only-props";
2530
+ var RULE_NAME47 = "prefer-read-only-props";
2504
2531
  function isReadonlyType(type, services) {
2505
2532
  try {
2506
2533
  const im = getTypeImmutability(services.program, type);
@@ -2520,7 +2547,7 @@ var prefer_read_only_props_default = createRule({
2520
2547
  },
2521
2548
  schema: []
2522
2549
  },
2523
- name: RULE_NAME46,
2550
+ name: RULE_NAME47,
2524
2551
  create(context) {
2525
2552
  const services = ESLintUtils.getParserServices(context, false);
2526
2553
  const { ctx, listeners } = useComponentCollector(context);
@@ -2540,7 +2567,7 @@ var prefer_read_only_props_default = createRule({
2540
2567
  },
2541
2568
  defaultOptions: []
2542
2569
  });
2543
- var RULE_NAME47 = "prefer-shorthand-boolean";
2570
+ var RULE_NAME48 = "prefer-shorthand-boolean";
2544
2571
  var prefer_shorthand_boolean_default = createRule({
2545
2572
  meta: {
2546
2573
  type: "problem",
@@ -2553,7 +2580,7 @@ var prefer_shorthand_boolean_default = createRule({
2553
2580
  },
2554
2581
  schema: []
2555
2582
  },
2556
- name: RULE_NAME47,
2583
+ name: RULE_NAME48,
2557
2584
  create(context) {
2558
2585
  function getReportDescriptor(node) {
2559
2586
  const { value } = node;
@@ -2575,7 +2602,7 @@ var prefer_shorthand_boolean_default = createRule({
2575
2602
  },
2576
2603
  defaultOptions: []
2577
2604
  });
2578
- var RULE_NAME48 = "prefer-shorthand-fragment";
2605
+ var RULE_NAME49 = "prefer-shorthand-fragment";
2579
2606
  var prefer_shorthand_fragment_default = createRule({
2580
2607
  meta: {
2581
2608
  type: "problem",
@@ -2587,7 +2614,7 @@ var prefer_shorthand_fragment_default = createRule({
2587
2614
  },
2588
2615
  schema: []
2589
2616
  },
2590
- name: RULE_NAME48,
2617
+ name: RULE_NAME49,
2591
2618
  create(context) {
2592
2619
  function getReportDescriptor(node) {
2593
2620
  if (!isFragmentElement(node, context)) return O.none();
@@ -2644,6 +2671,7 @@ var src_default = {
2644
2671
  "no-default-props": no_default_props_default,
2645
2672
  "no-direct-mutation-state": no_direct_mutation_state_default,
2646
2673
  "no-duplicate-key": no_duplicate_key_default,
2674
+ "no-forward-ref": no_forward_ref_default,
2647
2675
  "no-implicit-key": no_implicit_key_default,
2648
2676
  "no-leaked-conditional-rendering": no_leaked_conditional_rendering_default,
2649
2677
  "no-missing-component-display-name": no_missing_component_display_name_default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-x",
3
- "version": "1.17.4-next.0",
3
+ "version": "1.17.4-next.10",
4
4
  "description": "A set of composable ESLint rules for libraries and frameworks that use React as a UI runtime.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -49,17 +49,17 @@
49
49
  "compare-versions": "^6.1.1",
50
50
  "is-immutable-type": "^5.0.0",
51
51
  "ts-pattern": "^5.5.0",
52
- "@eslint-react/ast": "1.17.4-next.0",
53
- "@eslint-react/jsx": "1.17.4-next.0",
54
- "@eslint-react/core": "1.17.4-next.0",
55
- "@eslint-react/shared": "1.17.4-next.0",
56
- "@eslint-react/types": "1.17.4-next.0",
57
- "@eslint-react/tools": "1.17.4-next.0",
58
- "@eslint-react/var": "1.17.4-next.0"
52
+ "@eslint-react/ast": "1.17.4-next.10",
53
+ "@eslint-react/core": "1.17.4-next.10",
54
+ "@eslint-react/tools": "1.17.4-next.10",
55
+ "@eslint-react/shared": "1.17.4-next.10",
56
+ "@eslint-react/jsx": "1.17.4-next.10",
57
+ "@eslint-react/var": "1.17.4-next.10",
58
+ "@eslint-react/types": "1.17.4-next.10"
59
59
  },
60
60
  "devDependencies": {
61
- "@types/react": "^18.3.12",
62
- "@types/react-dom": "^18.3.1",
61
+ "@types/react": "^19.0.1",
62
+ "@types/react-dom": "^19.0.1",
63
63
  "string-ts": "^2.2.0",
64
64
  "ts-api-utils": "^2.0.0",
65
65
  "tsup": "^8.3.5"