eslint-plugin-react-dom 2.0.0-beta.4 → 2.0.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -35,6 +35,7 @@ declare const _default: {
35
35
  readonly "no-render": _typescript_eslint_utils_ts_eslint.RuleModule<"noRender", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
36
36
  readonly "no-render-return-value": _typescript_eslint_utils_ts_eslint.RuleModule<"noRenderReturnValue", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
37
37
  readonly "no-script-url": _typescript_eslint_utils_ts_eslint.RuleModule<"noScriptUrl", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
38
+ readonly "no-string-style-prop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringStyleProp", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
38
39
  readonly "no-unknown-property": _typescript_eslint_utils_ts_eslint.RuleModule<"dataLowercaseRequired" | "invalidPropOnTag" | "unknownProp" | "unknownPropWithStandardName", unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
39
40
  readonly "no-unsafe-iframe-sandbox": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnsafeIframeSandbox", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
40
41
  readonly "no-unsafe-target-blank": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$2, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
@@ -67,6 +68,7 @@ declare const _default: {
67
68
  readonly "no-render": _typescript_eslint_utils_ts_eslint.RuleModule<"noRender", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
68
69
  readonly "no-render-return-value": _typescript_eslint_utils_ts_eslint.RuleModule<"noRenderReturnValue", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
69
70
  readonly "no-script-url": _typescript_eslint_utils_ts_eslint.RuleModule<"noScriptUrl", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
71
+ readonly "no-string-style-prop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringStyleProp", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
70
72
  readonly "no-unknown-property": _typescript_eslint_utils_ts_eslint.RuleModule<"dataLowercaseRequired" | "invalidPropOnTag" | "unknownProp" | "unknownPropWithStandardName", unknown[], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
71
73
  readonly "no-unsafe-iframe-sandbox": _typescript_eslint_utils_ts_eslint.RuleModule<"noUnsafeIframeSandbox", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
72
74
  readonly "no-unsafe-target-blank": _typescript_eslint_utils_ts_eslint.RuleModule<MessageID$2, [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.js CHANGED
@@ -2,7 +2,6 @@ import { getDocsUrl, getSettingsFromContext, DEFAULT_ESLINT_REACT_SETTINGS } fro
2
2
  import * as ER from '@eslint-react/core';
3
3
  import { ESLintUtils } from '@typescript-eslint/utils';
4
4
  import { unit } from '@eslint-react/eff';
5
- import * as AST from '@eslint-react/ast';
6
5
  import { AST_NODE_TYPES } from '@typescript-eslint/types';
7
6
  import { compare } from 'compare-versions';
8
7
  import { RegExp, Reporter } from '@eslint-react/kit';
@@ -33,6 +32,7 @@ var rules = {
33
32
  "react-dom/no-render": "error",
34
33
  "react-dom/no-render-return-value": "error",
35
34
  "react-dom/no-script-url": "warn",
35
+ "react-dom/no-string-style-prop": "error",
36
36
  "react-dom/no-unsafe-iframe-sandbox": "warn",
37
37
  "react-dom/no-unsafe-target-blank": "warn",
38
38
  "react-dom/no-use-form-state": "error",
@@ -44,7 +44,7 @@ var settings = {
44
44
 
45
45
  // package.json
46
46
  var name2 = "eslint-plugin-react-dom";
47
- var version = "2.0.0-beta.4";
47
+ var version = "2.0.0-beta.41";
48
48
  function createJsxElementResolver(context) {
49
49
  const { components, polymorphicPropName } = getSettingsFromContext(context);
50
50
  return {
@@ -186,7 +186,7 @@ function create2(context) {
186
186
  JSXElement(node) {
187
187
  const attributes = node.openingElement.attributes;
188
188
  const initialScope = context.sourceCode.getScope(node);
189
- const hasChildren = hasChildrenWithin(node) || ER.hasAttribute(context, "children", attributes, initialScope);
189
+ const hasChildren = node.children.some(isSignificantChildren) || ER.hasAttribute(context, "children", attributes, initialScope);
190
190
  if (hasChildren && ER.hasAttribute(context, dangerouslySetInnerHTML2, attributes, initialScope)) {
191
191
  context.report({
192
192
  messageId: "noDangerouslySetInnerhtmlWithChildren",
@@ -196,8 +196,14 @@ function create2(context) {
196
196
  }
197
197
  };
198
198
  }
199
- function hasChildrenWithin(node) {
200
- return node.children.length > 0 && node.children[0] != null && !AST.isLineBreak(node.children[0]);
199
+ function isWhiteSpace(node) {
200
+ return typeof node.value === "string" && node.raw.trim() === "";
201
+ }
202
+ function isPaddingSpaces(node) {
203
+ return ER.isJsxText(node) && isWhiteSpace(node) && node.raw.includes("\n");
204
+ }
205
+ function isSignificantChildren(node) {
206
+ return node.type !== AST_NODE_TYPES.JSXText || !isPaddingSpaces(node);
201
207
  }
202
208
  var RULE_NAME3 = "no-find-dom-node";
203
209
  var RULE_FEATURES3 = [];
@@ -690,7 +696,51 @@ function create11(context) {
690
696
  }
691
697
  };
692
698
  }
693
- var RULE_NAME12 = "no-unknown-property";
699
+ var RULE_NAME12 = "no-string-style-prop";
700
+ var RULE_FEATURES12 = [];
701
+ var no_string_style_prop_default = createRule({
702
+ meta: {
703
+ type: "problem",
704
+ docs: {
705
+ description: "Disallows the use of string style prop.",
706
+ [Symbol.for("rule_features")]: RULE_FEATURES12
707
+ },
708
+ messages: {
709
+ noStringStyleProp: "Do not use string style prop. Use an object instead."
710
+ },
711
+ schema: []
712
+ },
713
+ name: RULE_NAME12,
714
+ create: create12,
715
+ defaultOptions: []
716
+ });
717
+ function create12(context) {
718
+ return {
719
+ JSXAttribute(node) {
720
+ if (node.name.name !== "style") return;
721
+ const styleText = getAttributeValueText(context, node.value);
722
+ if (styleText == null) return;
723
+ context.report({
724
+ messageId: "noStringStyleProp",
725
+ node
726
+ });
727
+ }
728
+ };
729
+ }
730
+ function getAttributeValueText(context, node) {
731
+ if (node == null) return null;
732
+ switch (true) {
733
+ case (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string"):
734
+ return context.sourceCode.getText(node);
735
+ case (node.type === AST_NODE_TYPES.JSXExpressionContainer && node.expression.type === AST_NODE_TYPES.Literal && typeof node.expression.value === "string"):
736
+ return context.sourceCode.getText(node.expression);
737
+ case (node.type === AST_NODE_TYPES.JSXExpressionContainer && node.expression.type === AST_NODE_TYPES.TemplateLiteral):
738
+ return context.sourceCode.getText(node.expression);
739
+ default:
740
+ return null;
741
+ }
742
+ }
743
+ var RULE_NAME13 = "no-unknown-property";
694
744
  var DEFAULTS = {
695
745
  ignore: [],
696
746
  requireDataLowercase: false
@@ -1653,11 +1703,11 @@ var no_unknown_property_default = createRule({
1653
1703
  }
1654
1704
  }]
1655
1705
  },
1656
- name: RULE_NAME12,
1657
- create: create12,
1706
+ name: RULE_NAME13,
1707
+ create: create13,
1658
1708
  defaultOptions: []
1659
1709
  });
1660
- function create12(context) {
1710
+ function create13(context) {
1661
1711
  const report = Reporter.make(context);
1662
1712
  function getIgnoreConfig() {
1663
1713
  return context.options[0]?.ignore || DEFAULTS.ignore;
@@ -1750,8 +1800,8 @@ function testReactVersion(context, comparator, version2) {
1750
1800
  }
1751
1801
 
1752
1802
  // src/rules/no-unsafe-iframe-sandbox.ts
1753
- var RULE_NAME13 = "no-unsafe-iframe-sandbox";
1754
- var RULE_FEATURES12 = [];
1803
+ var RULE_NAME14 = "no-unsafe-iframe-sandbox";
1804
+ var RULE_FEATURES13 = [];
1755
1805
  var unsafeSandboxValues = [
1756
1806
  ["allow-scripts", "allow-same-origin"]
1757
1807
  ];
@@ -1766,18 +1816,18 @@ var no_unsafe_iframe_sandbox_default = createRule({
1766
1816
  type: "problem",
1767
1817
  docs: {
1768
1818
  description: "Enforces `sandbox` attribute for `iframe` elements is not set to unsafe combinations.",
1769
- [Symbol.for("rule_features")]: RULE_FEATURES12
1819
+ [Symbol.for("rule_features")]: RULE_FEATURES13
1770
1820
  },
1771
1821
  messages: {
1772
1822
  noUnsafeIframeSandbox: "Unsafe 'sandbox' attribute value on 'iframe' component."
1773
1823
  },
1774
1824
  schema: []
1775
1825
  },
1776
- name: RULE_NAME13,
1777
- create: create13,
1826
+ name: RULE_NAME14,
1827
+ create: create14,
1778
1828
  defaultOptions: []
1779
1829
  });
1780
- function create13(context) {
1830
+ function create14(context) {
1781
1831
  const resolver = createJsxElementResolver(context);
1782
1832
  return {
1783
1833
  JSXElement(node) {
@@ -1795,8 +1845,8 @@ function create13(context) {
1795
1845
  }
1796
1846
 
1797
1847
  // src/rules/no-unsafe-target-blank.ts
1798
- var RULE_NAME14 = "no-unsafe-target-blank";
1799
- var RULE_FEATURES13 = [
1848
+ var RULE_NAME15 = "no-unsafe-target-blank";
1849
+ var RULE_FEATURES14 = [
1800
1850
  "FIX"
1801
1851
  ];
1802
1852
  function isExternalLinkLike(value) {
@@ -1812,7 +1862,7 @@ var no_unsafe_target_blank_default = createRule({
1812
1862
  type: "problem",
1813
1863
  docs: {
1814
1864
  description: 'Disallow `target="_blank"` without `rel="noreferrer noopener"`.',
1815
- [Symbol.for("rule_features")]: RULE_FEATURES13
1865
+ [Symbol.for("rule_features")]: RULE_FEATURES14
1816
1866
  },
1817
1867
  fixable: "code",
1818
1868
  hasSuggestions: true,
@@ -1822,11 +1872,11 @@ var no_unsafe_target_blank_default = createRule({
1822
1872
  },
1823
1873
  schema: []
1824
1874
  },
1825
- name: RULE_NAME14,
1826
- create: create14,
1875
+ name: RULE_NAME15,
1876
+ create: create15,
1827
1877
  defaultOptions: []
1828
1878
  });
1829
- function create14(context) {
1879
+ function create15(context) {
1830
1880
  const resolver = createJsxElementResolver(context);
1831
1881
  return {
1832
1882
  JSXElement(node) {
@@ -1874,8 +1924,8 @@ function create14(context) {
1874
1924
  }
1875
1925
  };
1876
1926
  }
1877
- var RULE_NAME15 = "no-use-form-state";
1878
- var RULE_FEATURES14 = [
1927
+ var RULE_NAME16 = "no-use-form-state";
1928
+ var RULE_FEATURES15 = [
1879
1929
  "MOD"
1880
1930
  ];
1881
1931
  var no_use_form_state_default = createRule({
@@ -1883,7 +1933,7 @@ var no_use_form_state_default = createRule({
1883
1933
  type: "problem",
1884
1934
  docs: {
1885
1935
  description: "Replaces usages of `useFormState` with `useActionState`.",
1886
- [Symbol.for("rule_features")]: RULE_FEATURES14
1936
+ [Symbol.for("rule_features")]: RULE_FEATURES15
1887
1937
  },
1888
1938
  fixable: "code",
1889
1939
  messages: {
@@ -1891,11 +1941,11 @@ var no_use_form_state_default = createRule({
1891
1941
  },
1892
1942
  schema: []
1893
1943
  },
1894
- name: RULE_NAME15,
1895
- create: create15,
1944
+ name: RULE_NAME16,
1945
+ create: create16,
1896
1946
  defaultOptions: []
1897
1947
  });
1898
- function create15(context) {
1948
+ function create16(context) {
1899
1949
  if (!context.sourceCode.text.includes("useFormState")) return {};
1900
1950
  const settings2 = getSettingsFromContext(context);
1901
1951
  if (compare(settings2.version, "19.0.0", "<")) return {};
@@ -1950,8 +2000,8 @@ function getFix3(context, node) {
1950
2000
  ];
1951
2001
  };
1952
2002
  }
1953
- var RULE_NAME16 = "no-void-elements-with-children";
1954
- var RULE_FEATURES15 = [];
2003
+ var RULE_NAME17 = "no-void-elements-with-children";
2004
+ var RULE_FEATURES16 = [];
1955
2005
  var voidElements = /* @__PURE__ */ new Set([
1956
2006
  "area",
1957
2007
  "base",
@@ -1975,18 +2025,18 @@ var no_void_elements_with_children_default = createRule({
1975
2025
  type: "problem",
1976
2026
  docs: {
1977
2027
  description: "Disallow `children` in void DOM elements.",
1978
- [Symbol.for("rule_features")]: RULE_FEATURES15
2028
+ [Symbol.for("rule_features")]: RULE_FEATURES16
1979
2029
  },
1980
2030
  messages: {
1981
2031
  noVoidElementsWithChildren: "'{{element}}' is a void element tag and must not have children."
1982
2032
  },
1983
2033
  schema: []
1984
2034
  },
1985
- name: RULE_NAME16,
1986
- create: create16,
2035
+ name: RULE_NAME17,
2036
+ create: create17,
1987
2037
  defaultOptions: []
1988
2038
  });
1989
- function create16(context) {
2039
+ function create17(context) {
1990
2040
  const resolver = createJsxElementResolver(context);
1991
2041
  return {
1992
2042
  JSXElement(node) {
@@ -2037,6 +2087,7 @@ var plugin = {
2037
2087
  "no-render": no_render_default,
2038
2088
  "no-render-return-value": no_render_return_value_default,
2039
2089
  "no-script-url": no_script_url_default,
2090
+ "no-string-style-prop": no_string_style_prop_default,
2040
2091
  "no-unknown-property": no_unknown_property_default,
2041
2092
  "no-unsafe-iframe-sandbox": no_unsafe_iframe_sandbox_default,
2042
2093
  "no-unsafe-target-blank": no_unsafe_target_blank_default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-react-dom",
3
- "version": "2.0.0-beta.4",
3
+ "version": "2.0.0-beta.41",
4
4
  "description": "ESLint React's ESLint plugin for React DOM related rules.",
5
5
  "keywords": [
6
6
  "react",
@@ -35,27 +35,27 @@
35
35
  "./package.json"
36
36
  ],
37
37
  "dependencies": {
38
- "@typescript-eslint/scope-manager": "^8.35.0",
39
- "@typescript-eslint/types": "^8.35.0",
40
- "@typescript-eslint/utils": "^8.35.0",
38
+ "@typescript-eslint/scope-manager": "^8.40.0",
39
+ "@typescript-eslint/types": "^8.40.0",
40
+ "@typescript-eslint/utils": "^8.40.0",
41
41
  "compare-versions": "^6.1.1",
42
42
  "string-ts": "^2.2.1",
43
- "ts-pattern": "^5.7.1",
44
- "@eslint-react/ast": "2.0.0-beta.4",
45
- "@eslint-react/core": "2.0.0-beta.4",
46
- "@eslint-react/eff": "2.0.0-beta.4",
47
- "@eslint-react/kit": "2.0.0-beta.4",
48
- "@eslint-react/shared": "2.0.0-beta.4",
49
- "@eslint-react/var": "2.0.0-beta.4"
43
+ "ts-pattern": "^5.8.0",
44
+ "@eslint-react/ast": "2.0.0-beta.41",
45
+ "@eslint-react/core": "2.0.0-beta.41",
46
+ "@eslint-react/eff": "2.0.0-beta.41",
47
+ "@eslint-react/var": "2.0.0-beta.41",
48
+ "@eslint-react/shared": "2.0.0-beta.41",
49
+ "@eslint-react/kit": "2.0.0-beta.41"
50
50
  },
51
51
  "devDependencies": {
52
- "@types/react": "^19.1.8",
53
- "@types/react-dom": "^19.1.6",
52
+ "@types/react": "^19.1.11",
53
+ "@types/react-dom": "^19.1.7",
54
54
  "tsup": "^8.5.0",
55
55
  "@local/configs": "0.0.0"
56
56
  },
57
57
  "peerDependencies": {
58
- "eslint": "^9.29.0",
58
+ "eslint": "^9.33.0",
59
59
  "typescript": "^4.9.5 || ^5.4.5"
60
60
  },
61
61
  "peerDependenciesMeta": {
@@ -67,7 +67,6 @@
67
67
  }
68
68
  },
69
69
  "engines": {
70
- "bun": ">=1.0.15",
71
70
  "node": ">=20.19.0"
72
71
  },
73
72
  "publishConfig": {