eslint-plugin-react-dom 3.0.0-beta.32 → 3.0.0-beta.34
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.js +88 -88
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
23
23
|
//#endregion
|
|
24
24
|
//#region package.json
|
|
25
25
|
var name$2 = "eslint-plugin-react-dom";
|
|
26
|
-
var version = "3.0.0-beta.
|
|
26
|
+
var version = "3.0.0-beta.34";
|
|
27
27
|
|
|
28
28
|
//#endregion
|
|
29
29
|
//#region src/utils/create-jsx-element-resolver.ts
|
|
@@ -67,72 +67,72 @@ function getDocsUrl(ruleName) {
|
|
|
67
67
|
const createRule = ESLintUtils.RuleCreator(getDocsUrl);
|
|
68
68
|
|
|
69
69
|
//#endregion
|
|
70
|
-
//#region src/rules/no-dangerously-set-innerhtml.ts
|
|
71
|
-
const RULE_NAME$17 = "no-dangerously-set-innerhtml";
|
|
72
|
-
|
|
73
|
-
var no_dangerously_set_innerhtml_default = createRule({
|
|
70
|
+
//#region src/rules/no-dangerously-set-innerhtml-with-children/no-dangerously-set-innerhtml-with-children.ts
|
|
71
|
+
const RULE_NAME$17 = "no-dangerously-set-innerhtml-with-children";
|
|
72
|
+
var no_dangerously_set_innerhtml_with_children_default = createRule({
|
|
74
73
|
meta: {
|
|
75
74
|
type: "problem",
|
|
76
|
-
docs: { description: "Disallows DOM elements from using 'dangerouslySetInnerHTML'." },
|
|
77
|
-
messages: { default: "
|
|
75
|
+
docs: { description: "Disallows DOM elements from using 'dangerouslySetInnerHTML' and 'children' at the same time." },
|
|
76
|
+
messages: { default: "A DOM component cannot use both children and 'dangerouslySetInnerHTML'." },
|
|
78
77
|
schema: []
|
|
79
78
|
},
|
|
80
79
|
name: RULE_NAME$17,
|
|
81
80
|
create: create$17,
|
|
82
81
|
defaultOptions: []
|
|
83
82
|
});
|
|
83
|
+
const DSIH$1 = "dangerouslySetInnerHTML";
|
|
84
|
+
/**
|
|
85
|
+
* Check if a JSX child node is considered significant (i.e., not just whitespace for formatting)
|
|
86
|
+
* @param node The JSX child node to check
|
|
87
|
+
* @returns `true` if the node is significant, `false` otherwise
|
|
88
|
+
*/
|
|
89
|
+
function isSignificantChildren(node) {
|
|
90
|
+
if (!core.isJsxText(node)) return true;
|
|
91
|
+
return !(node.raw.trim() === "" && node.raw.includes("\n"));
|
|
92
|
+
}
|
|
84
93
|
function create$17(context) {
|
|
85
94
|
if (!context.sourceCode.text.includes(DSIH$1)) return {};
|
|
86
95
|
return defineRuleListener({ JSXElement(node) {
|
|
87
|
-
const
|
|
88
|
-
if (
|
|
96
|
+
const findJsxAttribute = core.getJsxAttribute(context, node);
|
|
97
|
+
if (findJsxAttribute(DSIH$1) == null) return;
|
|
98
|
+
const childrenPropOrNode = findJsxAttribute("children") ?? node.children.find(isSignificantChildren);
|
|
99
|
+
if (childrenPropOrNode == null) return;
|
|
89
100
|
context.report({
|
|
90
101
|
messageId: "default",
|
|
91
|
-
node:
|
|
102
|
+
node: childrenPropOrNode
|
|
92
103
|
});
|
|
93
104
|
} });
|
|
94
105
|
}
|
|
95
106
|
|
|
96
107
|
//#endregion
|
|
97
|
-
//#region src/rules/no-dangerously-set-innerhtml-
|
|
98
|
-
const RULE_NAME$16 = "no-dangerously-set-innerhtml
|
|
99
|
-
|
|
108
|
+
//#region src/rules/no-dangerously-set-innerhtml/no-dangerously-set-innerhtml.ts
|
|
109
|
+
const RULE_NAME$16 = "no-dangerously-set-innerhtml";
|
|
110
|
+
const DSIH = "dangerouslySetInnerHTML";
|
|
111
|
+
var no_dangerously_set_innerhtml_default = createRule({
|
|
100
112
|
meta: {
|
|
101
113
|
type: "problem",
|
|
102
|
-
docs: { description: "Disallows DOM elements from using 'dangerouslySetInnerHTML'
|
|
103
|
-
messages: { default: "
|
|
114
|
+
docs: { description: "Disallows DOM elements from using 'dangerouslySetInnerHTML'." },
|
|
115
|
+
messages: { default: "Using 'dangerouslySetInnerHTML' may have security implications." },
|
|
104
116
|
schema: []
|
|
105
117
|
},
|
|
106
118
|
name: RULE_NAME$16,
|
|
107
119
|
create: create$16,
|
|
108
120
|
defaultOptions: []
|
|
109
121
|
});
|
|
110
|
-
const DSIH = "dangerouslySetInnerHTML";
|
|
111
|
-
/**
|
|
112
|
-
* Check if a JSX child node is considered significant (i.e., not just whitespace for formatting)
|
|
113
|
-
* @param node The JSX child node to check
|
|
114
|
-
* @returns `true` if the node is significant, `false` otherwise
|
|
115
|
-
*/
|
|
116
|
-
function isSignificantChildren(node) {
|
|
117
|
-
if (!core.isJsxText(node)) return true;
|
|
118
|
-
return !(node.raw.trim() === "" && node.raw.includes("\n"));
|
|
119
|
-
}
|
|
120
122
|
function create$16(context) {
|
|
121
123
|
if (!context.sourceCode.text.includes(DSIH)) return {};
|
|
122
124
|
return defineRuleListener({ JSXElement(node) {
|
|
123
|
-
const
|
|
124
|
-
if (
|
|
125
|
-
const childrenPropOrNode = findJsxAttribute("children") ?? node.children.find(isSignificantChildren);
|
|
126
|
-
if (childrenPropOrNode == null) return;
|
|
125
|
+
const dsihProp = core.getJsxAttribute(context, node)(DSIH);
|
|
126
|
+
if (dsihProp == null) return;
|
|
127
127
|
context.report({
|
|
128
128
|
messageId: "default",
|
|
129
|
-
node:
|
|
129
|
+
node: dsihProp
|
|
130
130
|
});
|
|
131
131
|
} });
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
//#endregion
|
|
135
|
-
//#region src/rules/no-find-dom-node.ts
|
|
135
|
+
//#region src/rules/no-find-dom-node/no-find-dom-node.ts
|
|
136
136
|
const RULE_NAME$15 = "no-find-dom-node";
|
|
137
137
|
var no_find_dom_node_default = createRule({
|
|
138
138
|
meta: {
|
|
@@ -168,7 +168,7 @@ function create$15(context) {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
//#endregion
|
|
171
|
-
//#region src/rules/no-flush-sync.ts
|
|
171
|
+
//#region src/rules/no-flush-sync/no-flush-sync.ts
|
|
172
172
|
const RULE_NAME$14 = "no-flush-sync";
|
|
173
173
|
var no_flush_sync_default = createRule({
|
|
174
174
|
meta: {
|
|
@@ -204,7 +204,7 @@ function create$14(context) {
|
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
//#endregion
|
|
207
|
-
//#region src/rules/no-hydrate.ts
|
|
207
|
+
//#region src/rules/no-hydrate/no-hydrate.ts
|
|
208
208
|
const RULE_NAME$13 = "no-hydrate";
|
|
209
209
|
var no_hydrate_default = createRule({
|
|
210
210
|
meta: {
|
|
@@ -269,7 +269,7 @@ function getFix$2(context, node) {
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
//#endregion
|
|
272
|
-
//#region src/rules/no-missing-button-type.ts
|
|
272
|
+
//#region src/rules/no-missing-button-type/no-missing-button-type.ts
|
|
273
273
|
const RULE_NAME$12 = "no-missing-button-type";
|
|
274
274
|
const BUTTON_TYPES = [
|
|
275
275
|
"button",
|
|
@@ -309,7 +309,7 @@ function create$12(context) {
|
|
|
309
309
|
}
|
|
310
310
|
|
|
311
311
|
//#endregion
|
|
312
|
-
//#region src/rules/no-missing-iframe-sandbox.ts
|
|
312
|
+
//#region src/rules/no-missing-iframe-sandbox/no-missing-iframe-sandbox.ts
|
|
313
313
|
const RULE_NAME$11 = "no-missing-iframe-sandbox";
|
|
314
314
|
var no_missing_iframe_sandbox_default = createRule({
|
|
315
315
|
meta: {
|
|
@@ -365,7 +365,7 @@ function create$11(context) {
|
|
|
365
365
|
}
|
|
366
366
|
|
|
367
367
|
//#endregion
|
|
368
|
-
//#region src/rules/no-namespace.ts
|
|
368
|
+
//#region src/rules/no-namespace/no-namespace.ts
|
|
369
369
|
const RULE_NAME$10 = "no-namespace";
|
|
370
370
|
var no_namespace_default = createRule({
|
|
371
371
|
meta: {
|
|
@@ -391,14 +391,20 @@ function create$10(context) {
|
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
//#endregion
|
|
394
|
-
//#region src/rules/no-render.ts
|
|
395
|
-
const RULE_NAME$9 = "no-render";
|
|
396
|
-
|
|
394
|
+
//#region src/rules/no-render-return-value/no-render-return-value.ts
|
|
395
|
+
const RULE_NAME$9 = "no-render-return-value";
|
|
396
|
+
const banParentTypes = [
|
|
397
|
+
AST_NODE_TYPES.VariableDeclarator,
|
|
398
|
+
AST_NODE_TYPES.Property,
|
|
399
|
+
AST_NODE_TYPES.ReturnStatement,
|
|
400
|
+
AST_NODE_TYPES.ArrowFunctionExpression,
|
|
401
|
+
AST_NODE_TYPES.AssignmentExpression
|
|
402
|
+
];
|
|
403
|
+
var no_render_return_value_default = createRule({
|
|
397
404
|
meta: {
|
|
398
405
|
type: "problem",
|
|
399
|
-
docs: { description: "
|
|
400
|
-
|
|
401
|
-
messages: { default: "[Deprecated] Use 'createRoot(node).render()' instead." },
|
|
406
|
+
docs: { description: "Disallows the return value of 'ReactDOM.render'." },
|
|
407
|
+
messages: { default: "Do not depend on the return value from 'ReactDOM.render'." },
|
|
402
408
|
schema: []
|
|
403
409
|
},
|
|
404
410
|
name: RULE_NAME$9,
|
|
@@ -406,25 +412,21 @@ var no_render_default = createRule({
|
|
|
406
412
|
defaultOptions: []
|
|
407
413
|
});
|
|
408
414
|
function create$9(context) {
|
|
409
|
-
if (!context.sourceCode.text.includes("render")) return {};
|
|
410
|
-
if (compare(getSettingsFromContext(context).version, "18.0.0", "<")) return {};
|
|
411
415
|
const reactDomNames = new Set(["ReactDOM", "ReactDOM"]);
|
|
412
416
|
const renderNames = /* @__PURE__ */ new Set();
|
|
413
417
|
return defineRuleListener({
|
|
414
418
|
CallExpression(node) {
|
|
415
419
|
switch (true) {
|
|
416
|
-
case node.callee.type === AST_NODE_TYPES.Identifier && renderNames.has(node.callee.name):
|
|
420
|
+
case node.callee.type === AST_NODE_TYPES.Identifier && renderNames.has(node.callee.name) && banParentTypes.includes(node.parent.type):
|
|
417
421
|
context.report({
|
|
418
422
|
messageId: "default",
|
|
419
|
-
node
|
|
420
|
-
fix: getFix$1(context, node)
|
|
423
|
+
node
|
|
421
424
|
});
|
|
422
425
|
return;
|
|
423
|
-
case node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier && node.callee.property.type === AST_NODE_TYPES.Identifier && node.callee.property.name === "render" && reactDomNames.has(node.callee.object.name):
|
|
426
|
+
case node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier && node.callee.property.type === AST_NODE_TYPES.Identifier && node.callee.property.name === "render" && reactDomNames.has(node.callee.object.name) && banParentTypes.includes(node.parent.type):
|
|
424
427
|
context.report({
|
|
425
428
|
messageId: "default",
|
|
426
|
-
node
|
|
427
|
-
fix: getFix$1(context, node)
|
|
429
|
+
node
|
|
428
430
|
});
|
|
429
431
|
return;
|
|
430
432
|
}
|
|
@@ -445,36 +447,16 @@ function create$9(context) {
|
|
|
445
447
|
}
|
|
446
448
|
});
|
|
447
449
|
}
|
|
448
|
-
/**
|
|
449
|
-
* Provides a fixer function to replace `render(app, container)` with `createRoot(container).render(app)`
|
|
450
|
-
* @param context The rule context
|
|
451
|
-
* @param node The `CallExpression` node to fix
|
|
452
|
-
* @returns A fixer function or null if the fix cannot be applied
|
|
453
|
-
*/
|
|
454
|
-
function getFix$1(context, node) {
|
|
455
|
-
const getText = (n) => context.sourceCode.getText(n);
|
|
456
|
-
return (fixer) => {
|
|
457
|
-
const [arg0, arg1] = node.arguments;
|
|
458
|
-
if (arg0 == null || arg1 == null) return null;
|
|
459
|
-
return [fixer.insertTextBefore(context.sourceCode.ast, "import { createRoot } from \"react-dom/client\";\n"), fixer.replaceText(node, `createRoot(${getText(arg1)}).render(${getText(arg0)})`)];
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
450
|
|
|
463
451
|
//#endregion
|
|
464
|
-
//#region src/rules/no-render-
|
|
465
|
-
const RULE_NAME$8 = "no-render
|
|
466
|
-
|
|
467
|
-
AST_NODE_TYPES.VariableDeclarator,
|
|
468
|
-
AST_NODE_TYPES.Property,
|
|
469
|
-
AST_NODE_TYPES.ReturnStatement,
|
|
470
|
-
AST_NODE_TYPES.ArrowFunctionExpression,
|
|
471
|
-
AST_NODE_TYPES.AssignmentExpression
|
|
472
|
-
];
|
|
473
|
-
var no_render_return_value_default = createRule({
|
|
452
|
+
//#region src/rules/no-render/no-render.ts
|
|
453
|
+
const RULE_NAME$8 = "no-render";
|
|
454
|
+
var no_render_default = createRule({
|
|
474
455
|
meta: {
|
|
475
456
|
type: "problem",
|
|
476
|
-
docs: { description: "
|
|
477
|
-
|
|
457
|
+
docs: { description: "Replaces usage of 'ReactDOM.render()' with 'createRoot(node).render()'." },
|
|
458
|
+
fixable: "code",
|
|
459
|
+
messages: { default: "[Deprecated] Use 'createRoot(node).render()' instead." },
|
|
478
460
|
schema: []
|
|
479
461
|
},
|
|
480
462
|
name: RULE_NAME$8,
|
|
@@ -482,21 +464,25 @@ var no_render_return_value_default = createRule({
|
|
|
482
464
|
defaultOptions: []
|
|
483
465
|
});
|
|
484
466
|
function create$8(context) {
|
|
467
|
+
if (!context.sourceCode.text.includes("render")) return {};
|
|
468
|
+
if (compare(getSettingsFromContext(context).version, "18.0.0", "<")) return {};
|
|
485
469
|
const reactDomNames = new Set(["ReactDOM", "ReactDOM"]);
|
|
486
470
|
const renderNames = /* @__PURE__ */ new Set();
|
|
487
471
|
return defineRuleListener({
|
|
488
472
|
CallExpression(node) {
|
|
489
473
|
switch (true) {
|
|
490
|
-
case node.callee.type === AST_NODE_TYPES.Identifier && renderNames.has(node.callee.name)
|
|
474
|
+
case node.callee.type === AST_NODE_TYPES.Identifier && renderNames.has(node.callee.name):
|
|
491
475
|
context.report({
|
|
492
476
|
messageId: "default",
|
|
493
|
-
node
|
|
477
|
+
node,
|
|
478
|
+
fix: getFix$1(context, node)
|
|
494
479
|
});
|
|
495
480
|
return;
|
|
496
|
-
case node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier && node.callee.property.type === AST_NODE_TYPES.Identifier && node.callee.property.name === "render" && reactDomNames.has(node.callee.object.name)
|
|
481
|
+
case node.callee.type === AST_NODE_TYPES.MemberExpression && node.callee.object.type === AST_NODE_TYPES.Identifier && node.callee.property.type === AST_NODE_TYPES.Identifier && node.callee.property.name === "render" && reactDomNames.has(node.callee.object.name):
|
|
497
482
|
context.report({
|
|
498
483
|
messageId: "default",
|
|
499
|
-
node
|
|
484
|
+
node,
|
|
485
|
+
fix: getFix$1(context, node)
|
|
500
486
|
});
|
|
501
487
|
return;
|
|
502
488
|
}
|
|
@@ -517,9 +503,23 @@ function create$8(context) {
|
|
|
517
503
|
}
|
|
518
504
|
});
|
|
519
505
|
}
|
|
506
|
+
/**
|
|
507
|
+
* Provides a fixer function to replace `render(app, container)` with `createRoot(container).render(app)`
|
|
508
|
+
* @param context The rule context
|
|
509
|
+
* @param node The `CallExpression` node to fix
|
|
510
|
+
* @returns A fixer function or null if the fix cannot be applied
|
|
511
|
+
*/
|
|
512
|
+
function getFix$1(context, node) {
|
|
513
|
+
const getText = (n) => context.sourceCode.getText(n);
|
|
514
|
+
return (fixer) => {
|
|
515
|
+
const [arg0, arg1] = node.arguments;
|
|
516
|
+
if (arg0 == null || arg1 == null) return null;
|
|
517
|
+
return [fixer.insertTextBefore(context.sourceCode.ast, "import { createRoot } from \"react-dom/client\";\n"), fixer.replaceText(node, `createRoot(${getText(arg1)}).render(${getText(arg0)})`)];
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
520
|
|
|
521
521
|
//#endregion
|
|
522
|
-
//#region src/rules/no-script-url.ts
|
|
522
|
+
//#region src/rules/no-script-url/no-script-url.ts
|
|
523
523
|
const RULE_NAME$7 = "no-script-url";
|
|
524
524
|
var no_script_url_default = createRule({
|
|
525
525
|
meta: {
|
|
@@ -544,7 +544,7 @@ function create$7(context) {
|
|
|
544
544
|
}
|
|
545
545
|
|
|
546
546
|
//#endregion
|
|
547
|
-
//#region src/rules/no-string-style-prop.ts
|
|
547
|
+
//#region src/rules/no-string-style-prop/no-string-style-prop.ts
|
|
548
548
|
const RULE_NAME$6 = "no-string-style-prop";
|
|
549
549
|
var no_string_style_prop_default = createRule({
|
|
550
550
|
meta: {
|
|
@@ -571,7 +571,7 @@ function create$6(context) {
|
|
|
571
571
|
}
|
|
572
572
|
|
|
573
573
|
//#endregion
|
|
574
|
-
//#region src/rules/no-unknown-property.ts
|
|
574
|
+
//#region src/rules/no-unknown-property/no-unknown-property.ts
|
|
575
575
|
const RULE_NAME$5 = "no-unknown-property";
|
|
576
576
|
const DEFAULTS = {
|
|
577
577
|
ignore: [],
|
|
@@ -1706,7 +1706,7 @@ function create$5(context) {
|
|
|
1706
1706
|
}
|
|
1707
1707
|
|
|
1708
1708
|
//#endregion
|
|
1709
|
-
//#region src/rules/no-unsafe-iframe-sandbox.ts
|
|
1709
|
+
//#region src/rules/no-unsafe-iframe-sandbox/no-unsafe-iframe-sandbox.ts
|
|
1710
1710
|
const RULE_NAME$4 = "no-unsafe-iframe-sandbox";
|
|
1711
1711
|
const UNSAFE_SANDBOX_VALUES = ["allow-scripts", "allow-same-origin"];
|
|
1712
1712
|
/**
|
|
@@ -1746,7 +1746,7 @@ function create$4(context) {
|
|
|
1746
1746
|
}
|
|
1747
1747
|
|
|
1748
1748
|
//#endregion
|
|
1749
|
-
//#region src/rules/no-unsafe-target-blank.ts
|
|
1749
|
+
//#region src/rules/no-unsafe-target-blank/no-unsafe-target-blank.ts
|
|
1750
1750
|
const RULE_NAME$3 = "no-unsafe-target-blank";
|
|
1751
1751
|
/**
|
|
1752
1752
|
* Check if a value appears to be an external link.
|
|
@@ -1825,7 +1825,7 @@ function create$3(context) {
|
|
|
1825
1825
|
}
|
|
1826
1826
|
|
|
1827
1827
|
//#endregion
|
|
1828
|
-
//#region src/rules/no-use-form-state.ts
|
|
1828
|
+
//#region src/rules/no-use-form-state/no-use-form-state.ts
|
|
1829
1829
|
const RULE_NAME$2 = "no-use-form-state";
|
|
1830
1830
|
var no_use_form_state_default = createRule({
|
|
1831
1831
|
meta: {
|
|
@@ -1887,7 +1887,7 @@ function getFix(context, node) {
|
|
|
1887
1887
|
}
|
|
1888
1888
|
|
|
1889
1889
|
//#endregion
|
|
1890
|
-
//#region src/rules/no-void-elements-with-children.ts
|
|
1890
|
+
//#region src/rules/no-void-elements-with-children/no-void-elements-with-children.ts
|
|
1891
1891
|
const RULE_NAME$1 = "no-void-elements-with-children";
|
|
1892
1892
|
const voidElements = new Set([
|
|
1893
1893
|
"area",
|
|
@@ -1935,7 +1935,7 @@ function create$1(context) {
|
|
|
1935
1935
|
}
|
|
1936
1936
|
|
|
1937
1937
|
//#endregion
|
|
1938
|
-
//#region src/rules/prefer-namespace-import.ts
|
|
1938
|
+
//#region src/rules/prefer-namespace-import/prefer-namespace-import.ts
|
|
1939
1939
|
const RULE_NAME = "prefer-namespace-import";
|
|
1940
1940
|
var prefer_namespace_import_default = createRule({
|
|
1941
1941
|
meta: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-dom",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.34",
|
|
4
4
|
"description": "ESLint React's ESLint plugin for DOM related rules.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"@typescript-eslint/utils": "canary",
|
|
44
44
|
"compare-versions": "^6.1.1",
|
|
45
45
|
"ts-pattern": "^5.9.0",
|
|
46
|
-
"@eslint-react/ast": "3.0.0-beta.
|
|
47
|
-
"@eslint-react/core": "3.0.0-beta.
|
|
48
|
-
"@eslint-react/shared": "3.0.0-beta.
|
|
49
|
-
"@eslint-react/
|
|
50
|
-
"@eslint-react/
|
|
46
|
+
"@eslint-react/ast": "3.0.0-beta.34",
|
|
47
|
+
"@eslint-react/core": "3.0.0-beta.34",
|
|
48
|
+
"@eslint-react/shared": "3.0.0-beta.34",
|
|
49
|
+
"@eslint-react/var": "3.0.0-beta.34",
|
|
50
|
+
"@eslint-react/eff": "3.0.0-beta.34"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/react": "^19.2.14",
|