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 +2 -0
- package/dist/index.js +84 -33
- package/package.json +14 -15
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.
|
|
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 =
|
|
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
|
|
200
|
-
return node.
|
|
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-
|
|
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:
|
|
1657
|
-
create:
|
|
1706
|
+
name: RULE_NAME13,
|
|
1707
|
+
create: create13,
|
|
1658
1708
|
defaultOptions: []
|
|
1659
1709
|
});
|
|
1660
|
-
function
|
|
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
|
|
1754
|
-
var
|
|
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")]:
|
|
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:
|
|
1777
|
-
create:
|
|
1826
|
+
name: RULE_NAME14,
|
|
1827
|
+
create: create14,
|
|
1778
1828
|
defaultOptions: []
|
|
1779
1829
|
});
|
|
1780
|
-
function
|
|
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
|
|
1799
|
-
var
|
|
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")]:
|
|
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:
|
|
1826
|
-
create:
|
|
1875
|
+
name: RULE_NAME15,
|
|
1876
|
+
create: create15,
|
|
1827
1877
|
defaultOptions: []
|
|
1828
1878
|
});
|
|
1829
|
-
function
|
|
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
|
|
1878
|
-
var
|
|
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")]:
|
|
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:
|
|
1895
|
-
create:
|
|
1944
|
+
name: RULE_NAME16,
|
|
1945
|
+
create: create16,
|
|
1896
1946
|
defaultOptions: []
|
|
1897
1947
|
});
|
|
1898
|
-
function
|
|
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
|
|
1954
|
-
var
|
|
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")]:
|
|
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:
|
|
1986
|
-
create:
|
|
2035
|
+
name: RULE_NAME17,
|
|
2036
|
+
create: create17,
|
|
1987
2037
|
defaultOptions: []
|
|
1988
2038
|
});
|
|
1989
|
-
function
|
|
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.
|
|
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.
|
|
39
|
-
"@typescript-eslint/types": "^8.
|
|
40
|
-
"@typescript-eslint/utils": "^8.
|
|
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.
|
|
44
|
-
"@eslint-react/ast": "2.0.0-beta.
|
|
45
|
-
"@eslint-react/core": "2.0.0-beta.
|
|
46
|
-
"@eslint-react/eff": "2.0.0-beta.
|
|
47
|
-
"@eslint-react/
|
|
48
|
-
"@eslint-react/shared": "2.0.0-beta.
|
|
49
|
-
"@eslint-react/
|
|
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.
|
|
53
|
-
"@types/react-dom": "^19.1.
|
|
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.
|
|
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": {
|