@eslint-react/core 1.32.0 → 1.32.1-beta.1
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.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +16 -10
- package/dist/index.mjs +14 -10
- package/package.json +6 -6
package/dist/index.d.mts
CHANGED
|
@@ -166,9 +166,11 @@ declare function isFunctionOfRenderMethod(node: AST.TSESTreeFunction): boolean;
|
|
|
166
166
|
declare function isInsideRenderMethod(node: TSESTree.Node): boolean;
|
|
167
167
|
|
|
168
168
|
declare const RE_COMPONENT_NAME: RegExp;
|
|
169
|
-
declare
|
|
169
|
+
declare const RE_COMPONENT_NAME_LOOSE: RegExp;
|
|
170
170
|
declare function isComponentName(name: string): boolean;
|
|
171
|
-
declare function
|
|
171
|
+
declare function isComponentNameLoose(name: string): boolean;
|
|
172
|
+
declare function getComponentNameFromIdentifier(node: TSESTree.Identifier | TSESTree.Identifier[] | _): string | undefined;
|
|
173
|
+
declare function hasNoneOrLooseComponentName(context: RuleContext, node: AST.TSESTreeFunction): boolean;
|
|
172
174
|
|
|
173
175
|
type EREffectPhaseKind = "cleanup" | "setup";
|
|
174
176
|
type ERLifecyclePhaseKind = "mount" | "unmount";
|
|
@@ -385,4 +387,4 @@ declare const isCreateRefCall: isCallFromReact.ReturnType;
|
|
|
385
387
|
declare const isForwardRefCall: isCallFromReact.ReturnType;
|
|
386
388
|
declare const isMemoCall: isCallFromReact.ReturnType;
|
|
387
389
|
|
|
388
|
-
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, type ERClassComponent, type ERComponent, ERComponentFlag, ERComponentHint, type ERComponentKind, type EREffectKind, type EREffectPhaseKind, type ERFunctionComponent, type ERHook, type ERHookKind, type ERLifecyclePhaseKind, type ERPhaseKind, ERPhaseRelevance, type ERSemanticEntry, type ERSemanticNode, type ERStateKind, RE_COMPONENT_NAME, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId,
|
|
390
|
+
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, type ERClassComponent, type ERComponent, ERComponentFlag, ERComponentHint, type ERComponentKind, type EREffectKind, type EREffectPhaseKind, type ERFunctionComponent, type ERHook, type ERHookKind, type ERLifecyclePhaseKind, type ERPhaseKind, ERPhaseRelevance, type ERSemanticEntry, type ERSemanticNode, type ERStateKind, RE_COMPONENT_NAME, RE_COMPONENT_NAME_LOOSE, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId, hasNoneOrLooseComponentName, hasValidHierarchy, isAssignmentToThisState, isCallFromReact, isCallFromReactObject, isChildrenCount, isChildrenCountCall, isChildrenForEach, isChildrenForEachCall, isChildrenMap, isChildrenMapCall, isChildrenOnly, isChildrenOnlyCall, isChildrenToArray, isChildrenToArrayCall, isClassComponent, isCloneElement, isCloneElementCall, isComponentDidCatch, isComponentDidMount, isComponentName, isComponentNameLoose, isComponentWillUnmount, isCreateContext, isCreateContextCall, isCreateElement, isCreateElementCall, isCreateRef, isCreateRefCall, isDeclaredInRenderPropLoose, isDirectValueOfRenderPropertyLoose, isForwardRef, isForwardRefCall, isFromReact, isFromReactLoose, isFromReactObject, isFromReactStrict, isFunctionOfComponentDidMount, isFunctionOfComponentWillUnmount, isFunctionOfRenderMethod, isFunctionOfUseEffectCleanup, isFunctionOfUseEffectSetup, isGetDerivedStateFromError, isGetDerivedStateFromProps, isInitializedFromReact, isInsideRenderMethod, isInstanceIdEqual, isInversePhase, isMemo, isMemoCall, isPureComponent, isReactAPI, isReactAPICall, isReactHook, isReactHookCall, isReactHookCallWithName, isReactHookCallWithNameAlias, isReactHookCallWithNameLoose, isReactHookName, isRenderFunctionLoose, isRenderMethodLike, isRenderPropLoose, isThisSetState, isUseCallbackCall, isUseContextCall, isUseDebugValueCall, isUseDeferredValueCall, isUseEffectCall, isUseEffectCallLoose, isUseIdCall, isUseImperativeHandleCall, isUseInsertionEffectCall, isUseLayoutEffectCall, isUseMemoCall, isUseReducerCall, isUseRefCall, isUseStateCall, isUseSyncExternalStoreCall, isUseTransitionCall, useComponentCollector, useComponentCollectorLegacy, useHookCollector };
|
package/dist/index.d.ts
CHANGED
|
@@ -166,9 +166,11 @@ declare function isFunctionOfRenderMethod(node: AST.TSESTreeFunction): boolean;
|
|
|
166
166
|
declare function isInsideRenderMethod(node: TSESTree.Node): boolean;
|
|
167
167
|
|
|
168
168
|
declare const RE_COMPONENT_NAME: RegExp;
|
|
169
|
-
declare
|
|
169
|
+
declare const RE_COMPONENT_NAME_LOOSE: RegExp;
|
|
170
170
|
declare function isComponentName(name: string): boolean;
|
|
171
|
-
declare function
|
|
171
|
+
declare function isComponentNameLoose(name: string): boolean;
|
|
172
|
+
declare function getComponentNameFromIdentifier(node: TSESTree.Identifier | TSESTree.Identifier[] | _): string | undefined;
|
|
173
|
+
declare function hasNoneOrLooseComponentName(context: RuleContext, node: AST.TSESTreeFunction): boolean;
|
|
172
174
|
|
|
173
175
|
type EREffectPhaseKind = "cleanup" | "setup";
|
|
174
176
|
type ERLifecyclePhaseKind = "mount" | "unmount";
|
|
@@ -385,4 +387,4 @@ declare const isCreateRefCall: isCallFromReact.ReturnType;
|
|
|
385
387
|
declare const isForwardRefCall: isCallFromReact.ReturnType;
|
|
386
388
|
declare const isMemoCall: isCallFromReact.ReturnType;
|
|
387
389
|
|
|
388
|
-
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, type ERClassComponent, type ERComponent, ERComponentFlag, ERComponentHint, type ERComponentKind, type EREffectKind, type EREffectPhaseKind, type ERFunctionComponent, type ERHook, type ERHookKind, type ERLifecyclePhaseKind, type ERPhaseKind, ERPhaseRelevance, type ERSemanticEntry, type ERSemanticNode, type ERStateKind, RE_COMPONENT_NAME, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId,
|
|
390
|
+
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, type ERClassComponent, type ERComponent, ERComponentFlag, ERComponentHint, type ERComponentKind, type EREffectKind, type EREffectPhaseKind, type ERFunctionComponent, type ERHook, type ERHookKind, type ERLifecyclePhaseKind, type ERPhaseKind, ERPhaseRelevance, type ERSemanticEntry, type ERSemanticNode, type ERStateKind, RE_COMPONENT_NAME, RE_COMPONENT_NAME_LOOSE, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId, hasNoneOrLooseComponentName, hasValidHierarchy, isAssignmentToThisState, isCallFromReact, isCallFromReactObject, isChildrenCount, isChildrenCountCall, isChildrenForEach, isChildrenForEachCall, isChildrenMap, isChildrenMapCall, isChildrenOnly, isChildrenOnlyCall, isChildrenToArray, isChildrenToArrayCall, isClassComponent, isCloneElement, isCloneElementCall, isComponentDidCatch, isComponentDidMount, isComponentName, isComponentNameLoose, isComponentWillUnmount, isCreateContext, isCreateContextCall, isCreateElement, isCreateElementCall, isCreateRef, isCreateRefCall, isDeclaredInRenderPropLoose, isDirectValueOfRenderPropertyLoose, isForwardRef, isForwardRefCall, isFromReact, isFromReactLoose, isFromReactObject, isFromReactStrict, isFunctionOfComponentDidMount, isFunctionOfComponentWillUnmount, isFunctionOfRenderMethod, isFunctionOfUseEffectCleanup, isFunctionOfUseEffectSetup, isGetDerivedStateFromError, isGetDerivedStateFromProps, isInitializedFromReact, isInsideRenderMethod, isInstanceIdEqual, isInversePhase, isMemo, isMemoCall, isPureComponent, isReactAPI, isReactAPICall, isReactHook, isReactHookCall, isReactHookCallWithName, isReactHookCallWithNameAlias, isReactHookCallWithNameLoose, isReactHookName, isRenderFunctionLoose, isRenderMethodLike, isRenderPropLoose, isThisSetState, isUseCallbackCall, isUseContextCall, isUseDebugValueCall, isUseDeferredValueCall, isUseEffectCall, isUseEffectCallLoose, isUseIdCall, isUseImperativeHandleCall, isUseInsertionEffectCall, isUseLayoutEffectCall, isUseMemoCall, isUseReducerCall, isUseRefCall, isUseStateCall, isUseSyncExternalStoreCall, isUseTransitionCall, useComponentCollector, useComponentCollectorLegacy, useHookCollector };
|
package/dist/index.js
CHANGED
|
@@ -51,7 +51,7 @@ function isReactHookName(name) {
|
|
|
51
51
|
return name === "use" || RE_HOOK_NAME.test(name);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
// ../../node_modules/.pnpm/valibot@1.0.0-rc.
|
|
54
|
+
// ../../node_modules/.pnpm/valibot@1.0.0-rc.4_typescript@5.8.2/node_modules/valibot/dist/index.js
|
|
55
55
|
var store;
|
|
56
56
|
// @__NO_SIDE_EFFECTS__
|
|
57
57
|
function getGlobalConfig(config2) {
|
|
@@ -868,19 +868,23 @@ function getFunctionComponentIdentifier(context, node) {
|
|
|
868
868
|
}
|
|
869
869
|
return eff._;
|
|
870
870
|
}
|
|
871
|
-
var RE_COMPONENT_NAME = /^
|
|
871
|
+
var RE_COMPONENT_NAME = /^[A-Z]/u;
|
|
872
|
+
var RE_COMPONENT_NAME_LOOSE = /^_?[A-Z]/u;
|
|
873
|
+
function isComponentName(name) {
|
|
874
|
+
return RE_COMPONENT_NAME.test(name);
|
|
875
|
+
}
|
|
876
|
+
function isComponentNameLoose(name) {
|
|
877
|
+
return RE_COMPONENT_NAME_LOOSE.test(name);
|
|
878
|
+
}
|
|
872
879
|
function getComponentNameFromIdentifier(node) {
|
|
873
880
|
if (node == null) return eff._;
|
|
874
881
|
return Array.isArray(node) ? node.map((n) => n.name).join(".") : node.name;
|
|
875
882
|
}
|
|
876
|
-
function
|
|
877
|
-
return RE_COMPONENT_NAME.test(name);
|
|
878
|
-
}
|
|
879
|
-
function hasNoneOrValidComponentName(context, node) {
|
|
883
|
+
function hasNoneOrLooseComponentName(context, node) {
|
|
880
884
|
const id = getFunctionComponentIdentifier(context, node);
|
|
881
885
|
if (id == null) return true;
|
|
882
886
|
const name = Array.isArray(id) ? id.at(-1)?.name : id.name;
|
|
883
|
-
return name != null &&
|
|
887
|
+
return name != null && isComponentNameLoose(name);
|
|
884
888
|
}
|
|
885
889
|
function isClassComponent(node) {
|
|
886
890
|
if ("superClass" in node && node.superClass != null) {
|
|
@@ -1031,7 +1035,7 @@ function useComponentCollector(context, options = {}) {
|
|
|
1031
1035
|
const entry = getCurrentEntry();
|
|
1032
1036
|
if (entry == null) return;
|
|
1033
1037
|
const { body } = entry.node;
|
|
1034
|
-
const isComponent =
|
|
1038
|
+
const isComponent = hasNoneOrLooseComponentName(context, entry.node) && JSX3__namespace.isJSXValue(body, jsxCtx, hint) && hasValidHierarchy(context, entry.node, hint);
|
|
1035
1039
|
if (!isComponent) return;
|
|
1036
1040
|
const initPath = AST6__namespace.getFunctionInitPath(entry.node);
|
|
1037
1041
|
const id = getFunctionComponentIdentifier(context, entry.node);
|
|
@@ -1071,7 +1075,7 @@ function useComponentCollector(context, options = {}) {
|
|
|
1071
1075
|
"ReturnStatement[type]"(node) {
|
|
1072
1076
|
const entry = getCurrentEntry();
|
|
1073
1077
|
if (entry == null) return;
|
|
1074
|
-
const isComponent =
|
|
1078
|
+
const isComponent = hasNoneOrLooseComponentName(context, entry.node) && JSX3__namespace.isJSXValue(node.argument, jsxCtx, hint) && hasValidHierarchy(context, entry.node, hint);
|
|
1075
1079
|
if (!isComponent) return;
|
|
1076
1080
|
entry.isComponent = true;
|
|
1077
1081
|
const initPath = AST6__namespace.getFunctionInitPath(entry.node);
|
|
@@ -1207,11 +1211,12 @@ exports.ERComponentFlag = ERComponentFlag;
|
|
|
1207
1211
|
exports.ERComponentHint = ERComponentHint;
|
|
1208
1212
|
exports.ERPhaseRelevance = ERPhaseRelevance;
|
|
1209
1213
|
exports.RE_COMPONENT_NAME = RE_COMPONENT_NAME;
|
|
1214
|
+
exports.RE_COMPONENT_NAME_LOOSE = RE_COMPONENT_NAME_LOOSE;
|
|
1210
1215
|
exports.RE_HOOK_NAME = RE_HOOK_NAME;
|
|
1211
1216
|
exports.getComponentNameFromIdentifier = getComponentNameFromIdentifier;
|
|
1212
1217
|
exports.getFunctionComponentIdentifier = getFunctionComponentIdentifier;
|
|
1213
1218
|
exports.getInstanceId = getInstanceId;
|
|
1214
|
-
exports.
|
|
1219
|
+
exports.hasNoneOrLooseComponentName = hasNoneOrLooseComponentName;
|
|
1215
1220
|
exports.hasValidHierarchy = hasValidHierarchy;
|
|
1216
1221
|
exports.isAssignmentToThisState = isAssignmentToThisState;
|
|
1217
1222
|
exports.isCallFromReact = isCallFromReact;
|
|
@@ -1232,6 +1237,7 @@ exports.isCloneElementCall = isCloneElementCall;
|
|
|
1232
1237
|
exports.isComponentDidCatch = isComponentDidCatch;
|
|
1233
1238
|
exports.isComponentDidMount = isComponentDidMount;
|
|
1234
1239
|
exports.isComponentName = isComponentName;
|
|
1240
|
+
exports.isComponentNameLoose = isComponentNameLoose;
|
|
1235
1241
|
exports.isComponentWillUnmount = isComponentWillUnmount;
|
|
1236
1242
|
exports.isCreateContext = isCreateContext;
|
|
1237
1243
|
exports.isCreateContextCall = isCreateContextCall;
|
package/dist/index.mjs
CHANGED
|
@@ -24,7 +24,7 @@ function isReactHookName(name) {
|
|
|
24
24
|
return name === "use" || RE_HOOK_NAME.test(name);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// ../../node_modules/.pnpm/valibot@1.0.0-rc.
|
|
27
|
+
// ../../node_modules/.pnpm/valibot@1.0.0-rc.4_typescript@5.8.2/node_modules/valibot/dist/index.js
|
|
28
28
|
var store;
|
|
29
29
|
// @__NO_SIDE_EFFECTS__
|
|
30
30
|
function getGlobalConfig(config2) {
|
|
@@ -841,19 +841,23 @@ function getFunctionComponentIdentifier(context, node) {
|
|
|
841
841
|
}
|
|
842
842
|
return _;
|
|
843
843
|
}
|
|
844
|
-
var RE_COMPONENT_NAME = /^
|
|
844
|
+
var RE_COMPONENT_NAME = /^[A-Z]/u;
|
|
845
|
+
var RE_COMPONENT_NAME_LOOSE = /^_?[A-Z]/u;
|
|
846
|
+
function isComponentName(name) {
|
|
847
|
+
return RE_COMPONENT_NAME.test(name);
|
|
848
|
+
}
|
|
849
|
+
function isComponentNameLoose(name) {
|
|
850
|
+
return RE_COMPONENT_NAME_LOOSE.test(name);
|
|
851
|
+
}
|
|
845
852
|
function getComponentNameFromIdentifier(node) {
|
|
846
853
|
if (node == null) return _;
|
|
847
854
|
return Array.isArray(node) ? node.map((n) => n.name).join(".") : node.name;
|
|
848
855
|
}
|
|
849
|
-
function
|
|
850
|
-
return RE_COMPONENT_NAME.test(name);
|
|
851
|
-
}
|
|
852
|
-
function hasNoneOrValidComponentName(context, node) {
|
|
856
|
+
function hasNoneOrLooseComponentName(context, node) {
|
|
853
857
|
const id = getFunctionComponentIdentifier(context, node);
|
|
854
858
|
if (id == null) return true;
|
|
855
859
|
const name = Array.isArray(id) ? id.at(-1)?.name : id.name;
|
|
856
|
-
return name != null &&
|
|
860
|
+
return name != null && isComponentNameLoose(name);
|
|
857
861
|
}
|
|
858
862
|
function isClassComponent(node) {
|
|
859
863
|
if ("superClass" in node && node.superClass != null) {
|
|
@@ -1004,7 +1008,7 @@ function useComponentCollector(context, options = {}) {
|
|
|
1004
1008
|
const entry = getCurrentEntry();
|
|
1005
1009
|
if (entry == null) return;
|
|
1006
1010
|
const { body } = entry.node;
|
|
1007
|
-
const isComponent =
|
|
1011
|
+
const isComponent = hasNoneOrLooseComponentName(context, entry.node) && JSX3.isJSXValue(body, jsxCtx, hint) && hasValidHierarchy(context, entry.node, hint);
|
|
1008
1012
|
if (!isComponent) return;
|
|
1009
1013
|
const initPath = AST6.getFunctionInitPath(entry.node);
|
|
1010
1014
|
const id = getFunctionComponentIdentifier(context, entry.node);
|
|
@@ -1044,7 +1048,7 @@ function useComponentCollector(context, options = {}) {
|
|
|
1044
1048
|
"ReturnStatement[type]"(node) {
|
|
1045
1049
|
const entry = getCurrentEntry();
|
|
1046
1050
|
if (entry == null) return;
|
|
1047
|
-
const isComponent =
|
|
1051
|
+
const isComponent = hasNoneOrLooseComponentName(context, entry.node) && JSX3.isJSXValue(node.argument, jsxCtx, hint) && hasValidHierarchy(context, entry.node, hint);
|
|
1048
1052
|
if (!isComponent) return;
|
|
1049
1053
|
entry.isComponent = true;
|
|
1050
1054
|
const initPath = AST6.getFunctionInitPath(entry.node);
|
|
@@ -1174,4 +1178,4 @@ function isFunctionOfUseEffectCleanup(node) {
|
|
|
1174
1178
|
return enclosingFunction === functionOfReturnStatement && isFunctionOfUseEffectSetup(enclosingFunction);
|
|
1175
1179
|
}
|
|
1176
1180
|
|
|
1177
|
-
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, ERComponentFlag, ERComponentHint, ERPhaseRelevance, RE_COMPONENT_NAME, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId,
|
|
1181
|
+
export { DEFAULT_COMPONENT_HINT, DISPLAY_NAME_ASSIGNMENT_SELECTOR, ERComponentFlag, ERComponentHint, ERPhaseRelevance, RE_COMPONENT_NAME, RE_COMPONENT_NAME_LOOSE, RE_HOOK_NAME, getComponentNameFromIdentifier, getFunctionComponentIdentifier, getInstanceId, hasNoneOrLooseComponentName, hasValidHierarchy, isAssignmentToThisState, isCallFromReact, isCallFromReactObject, isChildrenCount, isChildrenCountCall, isChildrenForEach, isChildrenForEachCall, isChildrenMap, isChildrenMapCall, isChildrenOnly, isChildrenOnlyCall, isChildrenToArray, isChildrenToArrayCall, isClassComponent, isCloneElement, isCloneElementCall, isComponentDidCatch, isComponentDidMount, isComponentName, isComponentNameLoose, isComponentWillUnmount, isCreateContext, isCreateContextCall, isCreateElement, isCreateElementCall, isCreateRef, isCreateRefCall, isDeclaredInRenderPropLoose, isDirectValueOfRenderPropertyLoose, isForwardRef, isForwardRefCall, isFromReact, isFromReactLoose, isFromReactObject, isFromReactStrict, isFunctionOfComponentDidMount, isFunctionOfComponentWillUnmount, isFunctionOfRenderMethod, isFunctionOfUseEffectCleanup, isFunctionOfUseEffectSetup, isGetDerivedStateFromError, isGetDerivedStateFromProps, isInitializedFromReact, isInsideRenderMethod, isInstanceIdEqual, isInversePhase, isMemo, isMemoCall, isPureComponent, isReactAPI, isReactAPICall, isReactHook, isReactHookCall, isReactHookCallWithName, isReactHookCallWithNameAlias, isReactHookCallWithNameLoose, isReactHookName, isRenderFunctionLoose, isRenderMethodLike, isRenderPropLoose, isThisSetState, isUseCallbackCall, isUseContextCall, isUseDebugValueCall, isUseDeferredValueCall, isUseEffectCall, isUseEffectCallLoose, isUseIdCall, isUseImperativeHandleCall, isUseInsertionEffectCall, isUseLayoutEffectCall, isUseMemoCall, isUseReducerCall, isUseRefCall, isUseStateCall, isUseSyncExternalStoreCall, isUseTransitionCall, useComponentCollector, useComponentCollectorLegacy, useHookCollector };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eslint-react/core",
|
|
3
|
-
"version": "1.32.
|
|
3
|
+
"version": "1.32.1-beta.1",
|
|
4
4
|
"description": "ESLint React's ESLint utility module for static analysis of React core APIs and Patterns.",
|
|
5
5
|
"homepage": "https://github.com/Rel1cx/eslint-react",
|
|
6
6
|
"bugs": {
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"@typescript-eslint/utils": "^8.26.1",
|
|
42
42
|
"birecord": "^0.1.1",
|
|
43
43
|
"ts-pattern": "^5.6.2",
|
|
44
|
-
"@eslint-react/ast": "1.32.
|
|
45
|
-
"@eslint-react/eff": "1.32.
|
|
46
|
-
"@eslint-react/jsx": "1.32.
|
|
47
|
-
"@eslint-react/shared": "1.32.
|
|
48
|
-
"@eslint-react/var": "1.32.
|
|
44
|
+
"@eslint-react/ast": "1.32.1-beta.1",
|
|
45
|
+
"@eslint-react/eff": "1.32.1-beta.1",
|
|
46
|
+
"@eslint-react/jsx": "1.32.1-beta.1",
|
|
47
|
+
"@eslint-react/shared": "1.32.1-beta.1",
|
|
48
|
+
"@eslint-react/var": "1.32.1-beta.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"tsup": "^8.4.0",
|