@generaltranslation/gt-next-lint 14.0.25 → 14.0.27
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/rules/no-dynamic-jsx.d.ts.map +1 -1
- package/dist/rules/no-dynamic-jsx.js +52 -33
- package/dist/rules/no-dynamic-jsx.js.map +1 -1
- package/dist/rules/no-dynamic-string.d.ts.map +1 -1
- package/dist/rules/no-dynamic-string.js +80 -43
- package/dist/rules/no-dynamic-string.js.map +1 -1
- package/dist/rules/utils.d.ts +9 -0
- package/dist/rules/utils.d.ts.map +1 -0
- package/dist/rules/utils.js +25 -0
- package/dist/rules/utils.js.map +1 -0
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-dynamic-jsx.d.ts","sourceRoot":"","sources":["../../src/rules/no-dynamic-jsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"no-dynamic-jsx.d.ts","sourceRoot":"","sources":["../../src/rules/no-dynamic-jsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAcnC,eAAO,MAAM,YAAY,EAAE,IAAI,CAAC,UAuO/B,CAAC"}
|
|
@@ -10,12 +10,9 @@
|
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.noDynamicJsx = void 0;
|
|
13
|
-
const
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
14
|
const TRANSLATION_COMPONENTS = ['T'];
|
|
15
15
|
const VARIABLE_COMPONENTS = ['Var', 'DateTime', 'Num', 'Currency'];
|
|
16
|
-
function isGTModule(source) {
|
|
17
|
-
return GT_MODULES.includes(source);
|
|
18
|
-
}
|
|
19
16
|
function isTranslationComponent(name) {
|
|
20
17
|
return TRANSLATION_COMPONENTS.includes(name);
|
|
21
18
|
}
|
|
@@ -50,17 +47,26 @@ exports.noDynamicJsx = {
|
|
|
50
47
|
},
|
|
51
48
|
};
|
|
52
49
|
function getElementName(node) {
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
if (!(0, utils_1.isAstNode)(node) || !(0, utils_1.isAstNode)(node.openingElement))
|
|
51
|
+
return null;
|
|
52
|
+
const name = node.openingElement.name;
|
|
53
|
+
if (!(0, utils_1.isAstNode)(name))
|
|
55
54
|
return null;
|
|
56
55
|
if (name.type === 'JSXIdentifier') {
|
|
57
|
-
return
|
|
56
|
+
return (0, utils_1.getNodeName)(name);
|
|
58
57
|
}
|
|
59
58
|
if (name.type === 'JSXMemberExpression') {
|
|
60
59
|
const obj = name.object;
|
|
61
60
|
const prop = name.property;
|
|
62
|
-
if (obj
|
|
63
|
-
|
|
61
|
+
if ((0, utils_1.isAstNode)(obj) &&
|
|
62
|
+
(0, utils_1.isAstNode)(prop) &&
|
|
63
|
+
obj.type === 'JSXIdentifier' &&
|
|
64
|
+
prop.type === 'JSXIdentifier') {
|
|
65
|
+
const objectName = (0, utils_1.getNodeName)(obj);
|
|
66
|
+
const propertyName = (0, utils_1.getNodeName)(prop);
|
|
67
|
+
return objectName && propertyName
|
|
68
|
+
? `${objectName}.${propertyName}`
|
|
69
|
+
: null;
|
|
64
70
|
}
|
|
65
71
|
}
|
|
66
72
|
return null;
|
|
@@ -84,8 +90,10 @@ exports.noDynamicJsx = {
|
|
|
84
90
|
return false;
|
|
85
91
|
}
|
|
86
92
|
function isInsideJSXAttribute(node) {
|
|
93
|
+
if (!(0, utils_1.isAstNode)(node))
|
|
94
|
+
return false;
|
|
87
95
|
// Walk up the AST to check if this expression is inside a JSX attribute
|
|
88
|
-
let currentNode = node.parent;
|
|
96
|
+
let currentNode = (0, utils_1.isAstNode)(node.parent) ? node.parent : null;
|
|
89
97
|
while (currentNode) {
|
|
90
98
|
if (currentNode.type === 'JSXAttribute') {
|
|
91
99
|
return true;
|
|
@@ -94,38 +102,40 @@ exports.noDynamicJsx = {
|
|
|
94
102
|
if (currentNode.type === 'JSXElement') {
|
|
95
103
|
return false;
|
|
96
104
|
}
|
|
97
|
-
currentNode = currentNode.parent;
|
|
105
|
+
currentNode = (0, utils_1.isAstNode)(currentNode.parent) ? currentNode.parent : null;
|
|
98
106
|
}
|
|
99
107
|
return false;
|
|
100
108
|
}
|
|
101
|
-
// Check if the node is a string literal or template literal
|
|
102
|
-
function isStringLiteral(expression) {
|
|
103
|
-
// For JSXExpressionContainer, check the expression inside
|
|
104
|
-
return ((expression.type === 'Literal' &&
|
|
105
|
-
typeof expression.value === 'string') ||
|
|
106
|
-
(expression.type === 'TemplateLiteral' &&
|
|
107
|
-
expression.expressions.length === 0) // No interpolation
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
109
|
// Check if the node is a comment
|
|
111
110
|
function isComment(expression) {
|
|
111
|
+
if (!(0, utils_1.isAstNode)(expression))
|
|
112
|
+
return false;
|
|
112
113
|
return expression.type === 'Block' || expression.type === 'Line';
|
|
113
114
|
}
|
|
114
115
|
// Check if empty
|
|
115
116
|
function isEmpty(expression) {
|
|
117
|
+
if (!(0, utils_1.isAstNode)(expression))
|
|
118
|
+
return false;
|
|
116
119
|
return expression.type === 'JSXEmptyExpression';
|
|
117
120
|
}
|
|
118
121
|
return {
|
|
119
122
|
// Track imports from GT-Next modules
|
|
120
123
|
ImportDeclaration(node) {
|
|
124
|
+
if (!(0, utils_1.isAstNode)(node) || !(0, utils_1.isAstNode)(node.source))
|
|
125
|
+
return;
|
|
121
126
|
if (node.source?.type === 'Literal' &&
|
|
122
127
|
typeof node.source.value === 'string') {
|
|
123
128
|
const source = node.source.value;
|
|
124
|
-
if (isGTModule(source)) {
|
|
125
|
-
|
|
129
|
+
if ((0, utils_1.isGTModule)(source)) {
|
|
130
|
+
const specifiers = Array.isArray(node.specifiers)
|
|
131
|
+
? node.specifiers
|
|
132
|
+
: [];
|
|
133
|
+
for (const specifier of specifiers) {
|
|
134
|
+
if (!(0, utils_1.isAstNode)(specifier))
|
|
135
|
+
continue;
|
|
126
136
|
if (specifier.type === 'ImportSpecifier') {
|
|
127
|
-
const importedName = specifier.imported
|
|
128
|
-
const localName = specifier.local
|
|
137
|
+
const importedName = (0, utils_1.getNodeName)(specifier.imported) || '';
|
|
138
|
+
const localName = (0, utils_1.getNodeName)(specifier.local) || '';
|
|
129
139
|
if (isTranslationComponent(importedName)) {
|
|
130
140
|
state.imports.translationComponents.add(localName);
|
|
131
141
|
}
|
|
@@ -134,7 +144,7 @@ exports.noDynamicJsx = {
|
|
|
134
144
|
}
|
|
135
145
|
}
|
|
136
146
|
else if (specifier.type === 'ImportNamespaceSpecifier') {
|
|
137
|
-
const localName = specifier.local
|
|
147
|
+
const localName = (0, utils_1.getNodeName)(specifier.local) || '';
|
|
138
148
|
state.imports.namespaceImports.add(localName);
|
|
139
149
|
}
|
|
140
150
|
}
|
|
@@ -143,10 +153,15 @@ exports.noDynamicJsx = {
|
|
|
143
153
|
},
|
|
144
154
|
// Track variable assignments from GT components
|
|
145
155
|
VariableDeclarator(node) {
|
|
146
|
-
if (node
|
|
147
|
-
node.
|
|
148
|
-
|
|
149
|
-
|
|
156
|
+
if ((0, utils_1.isAstNode)(node) &&
|
|
157
|
+
(0, utils_1.isAstNode)(node.id) &&
|
|
158
|
+
(0, utils_1.isAstNode)(node.init) &&
|
|
159
|
+
node.id.type === 'Identifier' &&
|
|
160
|
+
node.init.type === 'Identifier') {
|
|
161
|
+
const varName = (0, utils_1.getNodeName)(node.id);
|
|
162
|
+
const assignedFrom = (0, utils_1.getNodeName)(node.init);
|
|
163
|
+
if (!varName || !assignedFrom)
|
|
164
|
+
return;
|
|
150
165
|
if (state.imports.translationComponents.has(assignedFrom)) {
|
|
151
166
|
state.imports.assignedTranslationComponents.add(varName);
|
|
152
167
|
}
|
|
@@ -157,6 +172,8 @@ exports.noDynamicJsx = {
|
|
|
157
172
|
},
|
|
158
173
|
// Detect unwrapped dynamic content
|
|
159
174
|
JSXExpressionContainer(node) {
|
|
175
|
+
if (!(0, utils_1.isAstNode)(node))
|
|
176
|
+
return;
|
|
160
177
|
// Skip expressions inside JSX attributes (e.g., <Image width={16} />)
|
|
161
178
|
if (isInsideJSXAttribute(node)) {
|
|
162
179
|
return;
|
|
@@ -164,7 +181,7 @@ exports.noDynamicJsx = {
|
|
|
164
181
|
// Skip expressions with just a string literal (e.g., {'Hello'})
|
|
165
182
|
// Skip expressions with just a comment
|
|
166
183
|
// Skip expressions with just an empty statement
|
|
167
|
-
if ((node.expression && isStringLiteral(node.expression)) ||
|
|
184
|
+
if ((node.expression && (0, utils_1.isStringLiteral)(node.expression)) ||
|
|
168
185
|
isComment(node.expression) ||
|
|
169
186
|
isEmpty(node.expression)) {
|
|
170
187
|
return;
|
|
@@ -173,7 +190,7 @@ exports.noDynamicJsx = {
|
|
|
173
190
|
let inTranslationComponent = false;
|
|
174
191
|
let inVariableComponent = false;
|
|
175
192
|
// Walk up the AST to find parent JSX elements
|
|
176
|
-
let currentNode = node.parent;
|
|
193
|
+
let currentNode = (0, utils_1.isAstNode)(node.parent) ? node.parent : null;
|
|
177
194
|
while (currentNode) {
|
|
178
195
|
if (currentNode.type === 'JSXElement') {
|
|
179
196
|
const elementName = getElementName(currentNode);
|
|
@@ -193,12 +210,14 @@ exports.noDynamicJsx = {
|
|
|
193
210
|
}
|
|
194
211
|
}
|
|
195
212
|
}
|
|
196
|
-
currentNode = currentNode.parent
|
|
213
|
+
currentNode = (0, utils_1.isAstNode)(currentNode.parent)
|
|
214
|
+
? currentNode.parent
|
|
215
|
+
: null;
|
|
197
216
|
}
|
|
198
217
|
// Report if we're inside a translation component but not inside a variable component
|
|
199
218
|
if (inTranslationComponent && !inVariableComponent) {
|
|
200
219
|
context.report({
|
|
201
|
-
node,
|
|
220
|
+
node: node,
|
|
202
221
|
messageId: 'dynamicJsx',
|
|
203
222
|
});
|
|
204
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-dynamic-jsx.js","sourceRoot":"","sources":["../../src/rules/no-dynamic-jsx.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"no-dynamic-jsx.js","sourceRoot":"","sources":["../../src/rules/no-dynamic-jsx.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-dynamic-string.d.ts","sourceRoot":"","sources":["../../src/rules/no-dynamic-string.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"no-dynamic-string.d.ts","sourceRoot":"","sources":["../../src/rules/no-dynamic-string.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAcnC,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,UA6NlC,CAAC"}
|
|
@@ -8,11 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.noDynamicString = void 0;
|
|
11
|
-
const
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
12
|
const TRANSLATION_FUNCTIONS = ['useGT', 'getGT'];
|
|
13
|
-
function isGTModule(source) {
|
|
14
|
-
return GT_MODULES.includes(source);
|
|
15
|
-
}
|
|
16
13
|
function isTranslationFunction(name) {
|
|
17
14
|
return TRANSLATION_FUNCTIONS.includes(name);
|
|
18
15
|
}
|
|
@@ -37,7 +34,7 @@ exports.noDynamicString = {
|
|
|
37
34
|
// Track variables assigned from translation function calls
|
|
38
35
|
const translationVariables = new Set();
|
|
39
36
|
function trackImport(localName, importedName, source) {
|
|
40
|
-
if (isGTModule(source) && isTranslationFunction(importedName)) {
|
|
37
|
+
if ((0, utils_1.isGTModule)(source) && isTranslationFunction(importedName)) {
|
|
41
38
|
trackedFunctions.set(localName, {
|
|
42
39
|
name: importedName,
|
|
43
40
|
isTranslationFunction: true,
|
|
@@ -45,23 +42,20 @@ exports.noDynamicString = {
|
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
44
|
function trackNamespaceImport(localName, source) {
|
|
48
|
-
if (isGTModule(source)) {
|
|
45
|
+
if ((0, utils_1.isGTModule)(source)) {
|
|
49
46
|
trackedFunctions.set(localName, {
|
|
50
47
|
name: localName,
|
|
51
48
|
isTranslationFunction: false, // It's a namespace, not directly callable
|
|
52
49
|
});
|
|
53
50
|
}
|
|
54
51
|
}
|
|
55
|
-
function isStringLiteral(node) {
|
|
56
|
-
return ((node.type === 'Literal' && typeof node.value === 'string') ||
|
|
57
|
-
(node.type === 'TemplateLiteral' && node.expressions.length === 0) // Template literal with no interpolation
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
52
|
function validateTranslationCall(node) {
|
|
53
|
+
if (!(0, utils_1.isAstNode)(node) || !Array.isArray(node.arguments))
|
|
54
|
+
return;
|
|
61
55
|
const firstArg = node.arguments[0];
|
|
62
56
|
if (!firstArg)
|
|
63
57
|
return; // No arguments
|
|
64
|
-
if (!isStringLiteral(firstArg)) {
|
|
58
|
+
if (!(0, utils_1.isStringLiteral)(firstArg)) {
|
|
65
59
|
context.report({
|
|
66
60
|
node: firstArg,
|
|
67
61
|
messageId: 'dynamicString',
|
|
@@ -69,9 +63,13 @@ exports.noDynamicString = {
|
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
65
|
function handleCallExpression(node) {
|
|
66
|
+
if (!(0, utils_1.isAstNode)(node) || !(0, utils_1.isAstNode)(node.callee))
|
|
67
|
+
return;
|
|
72
68
|
if (node.callee.type === 'Identifier') {
|
|
73
69
|
// Direct function calls: t(), useGT(), etc.
|
|
74
|
-
const functionName = node.callee
|
|
70
|
+
const functionName = (0, utils_1.getNodeName)(node.callee);
|
|
71
|
+
if (!functionName)
|
|
72
|
+
return;
|
|
75
73
|
if (trackedFunctions.has(functionName)) {
|
|
76
74
|
const tracked = trackedFunctions.get(functionName);
|
|
77
75
|
if (tracked.isTranslationFunction) {
|
|
@@ -85,8 +83,10 @@ exports.noDynamicString = {
|
|
|
85
83
|
}
|
|
86
84
|
else if (node.callee.type === 'MemberExpression') {
|
|
87
85
|
// Member expressions: GT.tx(), namespace.function()
|
|
88
|
-
const objectName = node.callee.object
|
|
89
|
-
const propertyName = node.callee.property
|
|
86
|
+
const objectName = (0, utils_1.getNodeName)(node.callee.object);
|
|
87
|
+
const propertyName = (0, utils_1.getNodeName)(node.callee.property);
|
|
88
|
+
if (!objectName || !propertyName)
|
|
89
|
+
return;
|
|
90
90
|
if (trackedFunctions.has(objectName) &&
|
|
91
91
|
isTranslationFunction(propertyName)) {
|
|
92
92
|
validateTranslationCall(node);
|
|
@@ -95,82 +95,119 @@ exports.noDynamicString = {
|
|
|
95
95
|
}
|
|
96
96
|
function handleAssignment(node) {
|
|
97
97
|
// Track variables assigned from translation function calls
|
|
98
|
-
if (node
|
|
98
|
+
if ((0, utils_1.isAstNode)(node) &&
|
|
99
|
+
node.type === 'VariableDeclarator' &&
|
|
100
|
+
(0, utils_1.isAstNode)(node.id) &&
|
|
99
101
|
node.id.type === 'Identifier' &&
|
|
100
|
-
node.init) {
|
|
102
|
+
(0, utils_1.isAstNode)(node.init)) {
|
|
101
103
|
if (node.init.type === 'CallExpression') {
|
|
102
104
|
const callExpression = node.init;
|
|
103
|
-
if (callExpression.callee
|
|
104
|
-
|
|
105
|
+
if ((0, utils_1.isAstNode)(callExpression.callee) &&
|
|
106
|
+
callExpression.callee.type === 'Identifier') {
|
|
107
|
+
const functionName = (0, utils_1.getNodeName)(callExpression.callee);
|
|
108
|
+
if (!functionName)
|
|
109
|
+
return;
|
|
105
110
|
if (trackedFunctions.has(functionName)) {
|
|
106
111
|
const tracked = trackedFunctions.get(functionName);
|
|
107
112
|
if (tracked.isTranslationFunction) {
|
|
108
113
|
// This variable now holds a translation function
|
|
109
|
-
|
|
114
|
+
const variableName = (0, utils_1.getNodeName)(node.id);
|
|
115
|
+
if (variableName)
|
|
116
|
+
translationVariables.add(variableName);
|
|
110
117
|
}
|
|
111
118
|
}
|
|
112
119
|
}
|
|
113
|
-
else if (callExpression.callee
|
|
120
|
+
else if ((0, utils_1.isAstNode)(callExpression.callee) &&
|
|
121
|
+
callExpression.callee.type === 'MemberExpression') {
|
|
114
122
|
// Handle namespace calls like: const t = GT.useGT();
|
|
115
|
-
const objectName = callExpression.callee.object
|
|
116
|
-
const propertyName = callExpression.callee.property
|
|
117
|
-
if (
|
|
123
|
+
const objectName = (0, utils_1.getNodeName)(callExpression.callee.object);
|
|
124
|
+
const propertyName = (0, utils_1.getNodeName)(callExpression.callee.property);
|
|
125
|
+
if (objectName &&
|
|
126
|
+
propertyName &&
|
|
127
|
+
trackedFunctions.has(objectName) &&
|
|
118
128
|
isTranslationFunction(propertyName)) {
|
|
119
129
|
// This variable now holds a translation function
|
|
120
|
-
|
|
130
|
+
const variableName = (0, utils_1.getNodeName)(node.id);
|
|
131
|
+
if (variableName)
|
|
132
|
+
translationVariables.add(variableName);
|
|
121
133
|
}
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
136
|
else if (node.init.type === 'AwaitExpression' &&
|
|
137
|
+
(0, utils_1.isAstNode)(node.init.argument) &&
|
|
125
138
|
node.init.argument.type === 'CallExpression') {
|
|
126
139
|
// Handle await getGT() case
|
|
127
140
|
const callExpression = node.init.argument;
|
|
128
|
-
if (callExpression.callee
|
|
129
|
-
|
|
141
|
+
if ((0, utils_1.isAstNode)(callExpression.callee) &&
|
|
142
|
+
callExpression.callee.type === 'Identifier') {
|
|
143
|
+
const functionName = (0, utils_1.getNodeName)(callExpression.callee);
|
|
144
|
+
if (!functionName)
|
|
145
|
+
return;
|
|
130
146
|
if (trackedFunctions.has(functionName)) {
|
|
131
147
|
const tracked = trackedFunctions.get(functionName);
|
|
132
148
|
if (tracked.isTranslationFunction) {
|
|
133
149
|
// This variable now holds a translation function (from awaited promise)
|
|
134
|
-
|
|
150
|
+
const variableName = (0, utils_1.getNodeName)(node.id);
|
|
151
|
+
if (variableName)
|
|
152
|
+
translationVariables.add(variableName);
|
|
135
153
|
}
|
|
136
154
|
}
|
|
137
155
|
}
|
|
138
|
-
else if (callExpression.callee
|
|
156
|
+
else if ((0, utils_1.isAstNode)(callExpression.callee) &&
|
|
157
|
+
callExpression.callee.type === 'MemberExpression') {
|
|
139
158
|
// Handle namespace calls like: const t = await GT.getGT();
|
|
140
|
-
const objectName = callExpression.callee.object
|
|
141
|
-
const propertyName = callExpression.callee.property
|
|
142
|
-
if (
|
|
159
|
+
const objectName = (0, utils_1.getNodeName)(callExpression.callee.object);
|
|
160
|
+
const propertyName = (0, utils_1.getNodeName)(callExpression.callee.property);
|
|
161
|
+
if (objectName &&
|
|
162
|
+
propertyName &&
|
|
163
|
+
trackedFunctions.has(objectName) &&
|
|
143
164
|
isTranslationFunction(propertyName)) {
|
|
144
165
|
// This variable now holds a translation function (from awaited promise)
|
|
145
|
-
|
|
166
|
+
const variableName = (0, utils_1.getNodeName)(node.id);
|
|
167
|
+
if (variableName)
|
|
168
|
+
translationVariables.add(variableName);
|
|
146
169
|
}
|
|
147
170
|
}
|
|
148
171
|
}
|
|
149
172
|
else if (node.init.type === 'Identifier') {
|
|
150
173
|
// Handle reassignment: const t = getTranslation;
|
|
151
|
-
const assignedFrom = node.init
|
|
152
|
-
if (translationVariables.has(assignedFrom)) {
|
|
153
|
-
|
|
174
|
+
const assignedFrom = (0, utils_1.getNodeName)(node.init);
|
|
175
|
+
if (assignedFrom && translationVariables.has(assignedFrom)) {
|
|
176
|
+
const variableName = (0, utils_1.getNodeName)(node.id);
|
|
177
|
+
if (variableName)
|
|
178
|
+
translationVariables.add(variableName);
|
|
154
179
|
}
|
|
155
180
|
}
|
|
156
181
|
}
|
|
157
182
|
}
|
|
158
183
|
return {
|
|
159
184
|
ImportDeclaration(node) {
|
|
185
|
+
if (!(0, utils_1.isAstNode)(node) || !(0, utils_1.isAstNode)(node.source))
|
|
186
|
+
return;
|
|
160
187
|
const source = node.source.value;
|
|
161
|
-
if (
|
|
188
|
+
if (typeof source !== 'string')
|
|
189
|
+
return;
|
|
190
|
+
if (!(0, utils_1.isGTModule)(source))
|
|
162
191
|
return;
|
|
163
|
-
|
|
192
|
+
const specifiers = Array.isArray(node.specifiers)
|
|
193
|
+
? node.specifiers
|
|
194
|
+
: [];
|
|
195
|
+
for (const specifier of specifiers) {
|
|
196
|
+
if (!(0, utils_1.isAstNode)(specifier))
|
|
197
|
+
continue;
|
|
164
198
|
if (specifier.type === 'ImportSpecifier') {
|
|
165
199
|
// import { useGT, tx as serverTx } from 'gt-next'
|
|
166
|
-
const importedName = specifier.imported
|
|
167
|
-
const localName = specifier.local
|
|
168
|
-
|
|
200
|
+
const importedName = (0, utils_1.getNodeName)(specifier.imported);
|
|
201
|
+
const localName = (0, utils_1.getNodeName)(specifier.local);
|
|
202
|
+
if (importedName && localName) {
|
|
203
|
+
trackImport(localName, importedName, source);
|
|
204
|
+
}
|
|
169
205
|
}
|
|
170
206
|
else if (specifier.type === 'ImportNamespaceSpecifier') {
|
|
171
207
|
// import * as GT from 'gt-next'
|
|
172
|
-
const localName = specifier.local
|
|
173
|
-
|
|
208
|
+
const localName = (0, utils_1.getNodeName)(specifier.local);
|
|
209
|
+
if (localName)
|
|
210
|
+
trackNamespaceImport(localName, source);
|
|
174
211
|
}
|
|
175
212
|
}
|
|
176
213
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-dynamic-string.js","sourceRoot":"","sources":["../../src/rules/no-dynamic-string.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"no-dynamic-string.js","sourceRoot":"","sources":["../../src/rules/no-dynamic-string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type AstNode = {
|
|
2
|
+
type: string;
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
};
|
|
5
|
+
export declare function isAstNode(value: unknown): value is AstNode;
|
|
6
|
+
export declare function getNodeName(value: unknown): string | null;
|
|
7
|
+
export declare function isGTModule(source: string): boolean;
|
|
8
|
+
export declare function isStringLiteral(node: unknown): boolean;
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAQtD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAstNode = isAstNode;
|
|
4
|
+
exports.getNodeName = getNodeName;
|
|
5
|
+
exports.isGTModule = isGTModule;
|
|
6
|
+
exports.isStringLiteral = isStringLiteral;
|
|
7
|
+
const GT_MODULES = ['gt-next', 'gt-next/client', 'gt-next/server'];
|
|
8
|
+
function isAstNode(value) {
|
|
9
|
+
return typeof value === 'object' && value !== null && 'type' in value;
|
|
10
|
+
}
|
|
11
|
+
function getNodeName(value) {
|
|
12
|
+
return isAstNode(value) && typeof value.name === 'string' ? value.name : null;
|
|
13
|
+
}
|
|
14
|
+
function isGTModule(source) {
|
|
15
|
+
return GT_MODULES.includes(source);
|
|
16
|
+
}
|
|
17
|
+
function isStringLiteral(node) {
|
|
18
|
+
if (!isAstNode(node))
|
|
19
|
+
return false;
|
|
20
|
+
return ((node.type === 'Literal' && typeof node.value === 'string') ||
|
|
21
|
+
(node.type === 'TemplateLiteral' &&
|
|
22
|
+
Array.isArray(node.expressions) &&
|
|
23
|
+
node.expressions.length === 0));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/rules/utils.ts"],"names":[],"mappings":";;AAOA,8BAEC;AAED,kCAEC;AAED,gCAEC;AAED,0CAQC;AA3BD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAOnE,SAAgB,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AACxE,CAAC;AAED,SAAgB,WAAW,CAAC,KAAc;IACxC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,eAAe,CAAC,IAAa;IAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;QAC3D,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB;YAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CACjC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@generaltranslation/gt-next-lint",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.27",
|
|
4
4
|
"description": "ESLint plugin for General Translation Next.js integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
"eslint": "^8.0.0 || ^9.0.0",
|
|
38
38
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
39
39
|
"@typescript-eslint/parser": "^8.0.0",
|
|
40
|
-
"gt-next": "6.16.
|
|
40
|
+
"gt-next": "6.16.27"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/eslint": "^8.56.0",
|
|
44
|
-
"@types/node": "^
|
|
44
|
+
"@types/node": "^22.13.5",
|
|
45
45
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
46
46
|
"@typescript-eslint/parser": "^8.0.0",
|
|
47
47
|
"eslint": "^9.0.0",
|
|
48
|
-
"typescript": "^5.
|
|
49
|
-
"vitest": "^2.
|
|
48
|
+
"typescript": "^5.9.2",
|
|
49
|
+
"vitest": "^3.2.4"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"patch": "pnpm version patch",
|