@saidksi/localizer-core 0.1.0

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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -0
  3. package/dist/ai/anthropic.d.ts +17 -0
  4. package/dist/ai/anthropic.d.ts.map +1 -0
  5. package/dist/ai/anthropic.js +58 -0
  6. package/dist/ai/anthropic.js.map +1 -0
  7. package/dist/ai/dedup.d.ts +19 -0
  8. package/dist/ai/dedup.d.ts.map +1 -0
  9. package/dist/ai/dedup.js +119 -0
  10. package/dist/ai/dedup.js.map +1 -0
  11. package/dist/ai/index.d.ts +65 -0
  12. package/dist/ai/index.d.ts.map +1 -0
  13. package/dist/ai/index.js +464 -0
  14. package/dist/ai/index.js.map +1 -0
  15. package/dist/ai/openai.d.ts +11 -0
  16. package/dist/ai/openai.d.ts.map +1 -0
  17. package/dist/ai/openai.js +62 -0
  18. package/dist/ai/openai.js.map +1 -0
  19. package/dist/ai/prompts.d.ts +20 -0
  20. package/dist/ai/prompts.d.ts.map +1 -0
  21. package/dist/ai/prompts.js +151 -0
  22. package/dist/ai/prompts.js.map +1 -0
  23. package/dist/cache/index.d.ts +69 -0
  24. package/dist/cache/index.d.ts.map +1 -0
  25. package/dist/cache/index.js +129 -0
  26. package/dist/cache/index.js.map +1 -0
  27. package/dist/index.d.ts +8 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +14 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/rewriter/index.d.ts +31 -0
  32. package/dist/rewriter/index.d.ts.map +1 -0
  33. package/dist/rewriter/index.js +128 -0
  34. package/dist/rewriter/index.js.map +1 -0
  35. package/dist/rewriter/transforms.d.ts +38 -0
  36. package/dist/rewriter/transforms.d.ts.map +1 -0
  37. package/dist/rewriter/transforms.js +189 -0
  38. package/dist/rewriter/transforms.js.map +1 -0
  39. package/dist/rewriter/ts-morph.d.ts +19 -0
  40. package/dist/rewriter/ts-morph.d.ts.map +1 -0
  41. package/dist/rewriter/ts-morph.js +121 -0
  42. package/dist/rewriter/ts-morph.js.map +1 -0
  43. package/dist/scanner/babel.d.ts +3 -0
  44. package/dist/scanner/babel.d.ts.map +1 -0
  45. package/dist/scanner/babel.js +504 -0
  46. package/dist/scanner/babel.js.map +1 -0
  47. package/dist/scanner/filters.d.ts +38 -0
  48. package/dist/scanner/filters.d.ts.map +1 -0
  49. package/dist/scanner/filters.js +133 -0
  50. package/dist/scanner/filters.js.map +1 -0
  51. package/dist/scanner/index.d.ts +22 -0
  52. package/dist/scanner/index.d.ts.map +1 -0
  53. package/dist/scanner/index.js +82 -0
  54. package/dist/scanner/index.js.map +1 -0
  55. package/dist/scanner/typescript.d.ts +3 -0
  56. package/dist/scanner/typescript.d.ts.map +1 -0
  57. package/dist/scanner/typescript.js +542 -0
  58. package/dist/scanner/typescript.js.map +1 -0
  59. package/dist/types.d.ts +205 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/validator/index.d.ts +65 -0
  64. package/dist/validator/index.d.ts.map +1 -0
  65. package/dist/validator/index.js +237 -0
  66. package/dist/validator/index.js.map +1 -0
  67. package/package.json +65 -0
@@ -0,0 +1,504 @@
1
+ import { parse } from "@babel/parser";
2
+ import _traverse from "@babel/traverse";
3
+ import * as t from "@babel/types";
4
+ import { shouldFilter, NON_TRANSLATABLE_ATTRS, TRANSLATION_FNS, STATE_INITIALIZATION_FNS } from "./filters.js";
5
+ // @babel/traverse ships CJS; handle both interop shapes
6
+ const traverse = typeof _traverse.default === "function"
7
+ ? _traverse.default
8
+ : _traverse;
9
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
10
+ function getSurroundingLines(lines, zeroBasedLine) {
11
+ const start = Math.max(0, zeroBasedLine - 2);
12
+ const end = Math.min(lines.length - 1, zeroBasedLine + 2);
13
+ return lines.slice(start, end + 1).join("\n");
14
+ }
15
+ function getJSXElementName(node) {
16
+ if (t.isJSXIdentifier(node.name))
17
+ return node.name.name;
18
+ if (t.isJSXMemberExpression(node.name)) {
19
+ const obj = t.isJSXIdentifier(node.name.object)
20
+ ? node.name.object.name
21
+ : "?";
22
+ return `${obj}.${node.name.property.name}`;
23
+ }
24
+ return "?";
25
+ }
26
+ /** Walk up the path to check if this node is inside a translation call. */
27
+ function isInsideTranslationCall(path) {
28
+ return (path.findParent((p) => {
29
+ if (!p.isCallExpression())
30
+ return false;
31
+ const callee = p.node.callee;
32
+ // t("key"), $t("key"), formatMessage(...)
33
+ if (t.isIdentifier(callee) && TRANSLATION_FNS.has(callee.name))
34
+ return true;
35
+ // i18n.t("key"), obj.t("key")
36
+ if (t.isMemberExpression(callee) &&
37
+ t.isIdentifier(callee.property) &&
38
+ TRANSLATION_FNS.has(callee.property.name))
39
+ return true;
40
+ return false;
41
+ }) !== null);
42
+ }
43
+ /** Walk up the path to check if this node is inside a console.* call. */
44
+ function isInsideConsoleCall(path) {
45
+ return (path.findParent((p) => {
46
+ if (!p.isCallExpression())
47
+ return false;
48
+ const callee = p.node.callee;
49
+ return (t.isMemberExpression(callee) &&
50
+ t.isIdentifier(callee.object) &&
51
+ callee.object.name === "console");
52
+ }) !== null);
53
+ }
54
+ /** Walk up to check if this node is inside an import declaration. */
55
+ function isInsideImport(path) {
56
+ return path.findParent((p) => p.isImportDeclaration()) !== null;
57
+ }
58
+ /** True if node is at module/file scope (not inside any function body). */
59
+ function isAtModuleLevel(path) {
60
+ return path.findParent((p) => p.isFunctionDeclaration() ||
61
+ p.isFunctionExpression() ||
62
+ p.isArrowFunctionExpression() ||
63
+ p.isObjectMethod() ||
64
+ p.isClassMethod()) === null;
65
+ }
66
+ /** True if node is inside a JSX element or expression container. */
67
+ function isInsideJSXElement(path) {
68
+ return path.findParent((p) => p.isJSXElement() ||
69
+ p.isJSXFragment() ||
70
+ p.isJSXAttribute() ||
71
+ p.isJSXExpressionContainer() ||
72
+ p.isJSXOpeningElement() ||
73
+ p.isJSXSelfClosingElement()) !== null;
74
+ }
75
+ /**
76
+ * Check if a path is inside a state initialization call like useState("default").
77
+ * These strings are default/placeholder values, not user-facing text.
78
+ */
79
+ function isInsideStateInitialization(path) {
80
+ return (path.findParent((p) => p.isCallExpression() &&
81
+ t.isIdentifier(p.node.callee) &&
82
+ STATE_INITIALIZATION_FNS.has(p.node.callee.name)) !== null);
83
+ }
84
+ /**
85
+ * Detect if a path is part of a BinaryExpression string concatenation chain.
86
+ * Returns the root chain if yes, null otherwise.
87
+ *
88
+ * For a chain like A + B + C (parsed as (A + B) + C), walks up to find the outermost
89
+ * BinaryExpression with a + operator.
90
+ */
91
+ function getRootBinaryConcatenationChain(path) {
92
+ let current = path;
93
+ let lastBinExpr = null;
94
+ // Walk up the tree to find if this node is part of a + chain
95
+ while (current.parentPath) {
96
+ const parent = current.parentPath;
97
+ if (parent.isBinaryExpression() && parent.node.operator === "+") {
98
+ lastBinExpr = parent;
99
+ current = parent;
100
+ }
101
+ else {
102
+ // Non-+ operator or non-BinaryExpression parent — stop walking up
103
+ break;
104
+ }
105
+ }
106
+ return lastBinExpr;
107
+ }
108
+ /**
109
+ * Collect all StringLiterals from a BinaryExpression chain, filtering out separators.
110
+ * Separators are strings that contain only whitespace, dashes, punctuation, etc.
111
+ * Returns array of meaningful strings only: ["Overview", "Real-time data"]
112
+ * Returns null if not a pure string chain or no meaningful strings remain.
113
+ *
114
+ * Separator pattern: only whitespace, dashes, em-dashes, commas, periods, etc.
115
+ */
116
+ function collectBinaryStringChainBabel(binExprPath) {
117
+ const allOperands = [];
118
+ const SEPARATOR_RE = /^[\s\-—,\.;:/|+*]+$/; // Only punctuation/whitespace
119
+ function collect(node) {
120
+ if (t.isStringLiteral(node)) {
121
+ allOperands.push(node.value);
122
+ return true;
123
+ }
124
+ else if (t.isBinaryExpression(node) && node.operator === "+") {
125
+ return collect(node.left) && collect(node.right);
126
+ }
127
+ return false;
128
+ }
129
+ if (!collect(binExprPath.node))
130
+ return null;
131
+ if (allOperands.length < 2)
132
+ return null;
133
+ // Filter out separator-only strings
134
+ const meaningfulStrings = allOperands.filter((str) => str.trim() && !SEPARATOR_RE.test(str));
135
+ return meaningfulStrings.length > 0 ? meaningfulStrings : null;
136
+ }
137
+ /**
138
+ * For an ObjectProperty path, walk up to find the parent object's variable name.
139
+ * e.g. const statusConfig = { online: "..." } → "statusConfig"
140
+ * Returns null if the object is not assigned to a variable.
141
+ */
142
+ function getBabelObjectVariableName(propPath) {
143
+ let current = propPath;
144
+ while (current) {
145
+ const parent = current.parentPath;
146
+ if (!parent)
147
+ break;
148
+ // Found the object that contains this property
149
+ if (parent.isObjectExpression()) {
150
+ const objParent = parent.parentPath;
151
+ // Check if it's a variable declaration: const name = {...}
152
+ if (objParent && objParent.isVariableDeclarator()) {
153
+ const varDecl = objParent.node;
154
+ if (t.isIdentifier(varDecl.id)) {
155
+ return varDecl.id.name;
156
+ }
157
+ }
158
+ // Check if it's a property assignment: { name: {...} }
159
+ if (objParent && objParent.isObjectProperty()) {
160
+ // Continue walking to find the parent object
161
+ current = objParent;
162
+ continue;
163
+ }
164
+ // Stop if object is in some other context
165
+ break;
166
+ }
167
+ current = parent;
168
+ }
169
+ return null;
170
+ }
171
+ /** Determine context description for non-JSX string literals. Returns null to skip. */
172
+ function getBabelNonJSXContext(path) {
173
+ const parent = path.parentPath;
174
+ if (!parent)
175
+ return null;
176
+ // Function call argument: setError("..."), new Error("...")
177
+ if (parent.isCallExpression() || parent.isNewExpression()) {
178
+ const callee = parent.node.callee;
179
+ const fnName = t.isIdentifier(callee)
180
+ ? callee.name
181
+ : t.isMemberExpression(callee) && t.isIdentifier(callee.property)
182
+ ? callee.property.name
183
+ : "?";
184
+ return `argument in ${fnName}()`;
185
+ }
186
+ // Object property value: { title: "..." }
187
+ if (parent.isObjectProperty()) {
188
+ const key = t.isIdentifier(parent.node.key)
189
+ ? parent.node.key.name
190
+ : t.isStringLiteral(parent.node.key)
191
+ ? parent.node.key.value
192
+ : "?";
193
+ return `object property "${key}"`;
194
+ }
195
+ // Variable declaration: const msg = "..."
196
+ if (parent.isVariableDeclarator()) {
197
+ const name = t.isIdentifier(parent.node.id) ? parent.node.id.name : "?";
198
+ return `variable "${name}"`;
199
+ }
200
+ // Return statement: return "..."
201
+ if (parent.isReturnStatement())
202
+ return "return value";
203
+ // Binary expression (string concatenation)
204
+ if (parent.isBinaryExpression())
205
+ return "string concatenation";
206
+ // Conditional expression: condition ? "Yes" : "No"
207
+ if (parent.isConditionalExpression())
208
+ return "conditional expression";
209
+ return null;
210
+ }
211
+ function makeResult(filePath, lines, line, column, value, nodeType, context, isModuleLevel, objectKey) {
212
+ const result = {
213
+ file: filePath,
214
+ line,
215
+ column,
216
+ value,
217
+ nodeType,
218
+ context,
219
+ surroundingCode: getSurroundingLines(lines, line - 1),
220
+ alreadyTranslated: false,
221
+ isModuleLevel,
222
+ resolvedKey: null,
223
+ };
224
+ if (objectKey) {
225
+ result.objectKey = objectKey;
226
+ }
227
+ return result;
228
+ }
229
+ // ─── Main ────────────────────────────────────────────────────────────────────
230
+ export function scanWithBabel(filePath, source, config) {
231
+ const results = [];
232
+ const lines = source.split("\n");
233
+ let ast;
234
+ try {
235
+ ast = parse(source, {
236
+ sourceType: "module",
237
+ plugins: ["jsx"],
238
+ errorRecovery: true,
239
+ });
240
+ }
241
+ catch {
242
+ // Unparseable file — return empty
243
+ return [];
244
+ }
245
+ // Track BinaryExpression chains we've already processed
246
+ const processedBinaryChains = new WeakSet();
247
+ traverse(ast, {
248
+ // ── JSXElement: detect interpolated children first
249
+ // e.g. <p>You have {count} tasks</p> → one key "You have {{count}} tasks"
250
+ JSXElement(path) {
251
+ if (isInsideTranslationCall(path))
252
+ return;
253
+ const children = path.node.children;
254
+ if (children.length < 2)
255
+ return;
256
+ const interpolations = [];
257
+ const templateParts = [];
258
+ const usedNames = new Set();
259
+ let hasText = false;
260
+ let hasExpr = false;
261
+ for (const child of children) {
262
+ if (t.isJSXText(child)) {
263
+ templateParts.push(child.value);
264
+ if (child.value.trim())
265
+ hasText = true;
266
+ }
267
+ else if (t.isJSXExpressionContainer(child) &&
268
+ !t.isJSXEmptyExpression(child.expression)) {
269
+ // Extract expression source text directly via character offsets
270
+ const exprSource = typeof child.expression.start === "number" &&
271
+ typeof child.expression.end === "number"
272
+ ? source.slice(child.expression.start, child.expression.end)
273
+ : "";
274
+ if (!exprSource) {
275
+ return;
276
+ } // can't identify variable — bail
277
+ // Derive a clean placeholder name
278
+ let placeholder = exprSource
279
+ .replace(/\(.*\)/g, "") // strip call parens
280
+ .split(".").pop() // last property segment
281
+ .replace(/\[.*\]/g, "") // strip array access
282
+ .replace(/[^a-zA-Z0-9_]/g, "") // strip specials
283
+ || "value";
284
+ // Deduplicate
285
+ if (usedNames.has(placeholder)) {
286
+ let i = 2;
287
+ while (usedNames.has(`${placeholder}${i}`))
288
+ i++;
289
+ placeholder = `${placeholder}${i}`;
290
+ }
291
+ usedNames.add(placeholder);
292
+ interpolations.push({ placeholder, expression: exprSource });
293
+ templateParts.push(`{{${placeholder}}}`);
294
+ hasExpr = true;
295
+ }
296
+ else {
297
+ // Nested JSX element — cannot merge into one interpolated string
298
+ return;
299
+ }
300
+ }
301
+ if (!hasText || !hasExpr)
302
+ return;
303
+ const rawTemplate = templateParts.join("");
304
+ const trimmedTemplate = rawTemplate.trim();
305
+ if (!trimmedTemplate)
306
+ return;
307
+ if (shouldFilter(trimmedTemplate, config, true))
308
+ return;
309
+ // rawSpan: source text covering all children
310
+ const firstChild = children[0];
311
+ const lastChild = children[children.length - 1];
312
+ const rawSpan = typeof firstChild.start === "number" && typeof lastChild.end === "number"
313
+ ? source.slice(firstChild.start, lastChild.end)
314
+ : "";
315
+ const loc = firstChild.loc?.start;
316
+ if (!loc)
317
+ return;
318
+ const tagName = t.isJSXIdentifier(path.node.openingElement.name)
319
+ ? path.node.openingElement.name.name
320
+ : "?";
321
+ results.push({
322
+ file: filePath,
323
+ line: loc.line,
324
+ column: loc.column,
325
+ value: trimmedTemplate,
326
+ nodeType: "JSXInterpolation",
327
+ context: `interpolated JSX in <${tagName}>`,
328
+ surroundingCode: getSurroundingLines(lines, loc.line - 1),
329
+ alreadyTranslated: false,
330
+ isModuleLevel: isAtModuleLevel(path),
331
+ resolvedKey: null,
332
+ interpolations,
333
+ rawSpan,
334
+ });
335
+ // Prevent JSXText visitor from also processing these children
336
+ path.skip();
337
+ },
338
+ // ── JSX text node: <h1>Welcome back</h1>
339
+ JSXText(path) {
340
+ const raw = path.node.value;
341
+ const value = raw.trim();
342
+ if (!value)
343
+ return;
344
+ if (isInsideTranslationCall(path))
345
+ return;
346
+ if (shouldFilter(value, config, true))
347
+ return;
348
+ const loc = path.node.loc?.start;
349
+ if (!loc)
350
+ return;
351
+ const parentOpen = path.parentPath?.node
352
+ ?.openingElement;
353
+ const elementName = parentOpen ? getJSXElementName(parentOpen) : "?";
354
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "JSXText", `JSXText inside <${elementName}>`, isAtModuleLevel(path)));
355
+ },
356
+ // ── String literal: JSX attribute value OR non-JSX (function args, variables, etc.)
357
+ StringLiteral(path) {
358
+ const value = path.node.value.trim();
359
+ if (!value)
360
+ return;
361
+ if (isInsideTranslationCall(path))
362
+ return;
363
+ if (isInsideConsoleCall(path))
364
+ return;
365
+ if (isInsideImport(path))
366
+ return;
367
+ // Skip state initialization defaults: useState("John Doe"), useRef("initial")
368
+ if (isInsideStateInitialization(path))
369
+ return;
370
+ // ── Check for string concatenation chains: "a" + "b" + "c"
371
+ // Split chains into individual meaningful strings (skip separators like " — ")
372
+ // Emit each string separately so they can be translated individually
373
+ if (path.parentPath?.isBinaryExpression() && path.parentPath.node.operator === "+") {
374
+ const rootChain = getRootBinaryConcatenationChain(path);
375
+ if (rootChain) {
376
+ // Process only on first visit (when not yet in processedBinaryChains)
377
+ if (!processedBinaryChains.has(rootChain.node)) {
378
+ const meaningfulStrings = collectBinaryStringChainBabel(rootChain);
379
+ if (meaningfulStrings &&
380
+ meaningfulStrings.length > 0 &&
381
+ !isInsideTranslationCall(rootChain) &&
382
+ !isInsideConsoleCall(rootChain)) {
383
+ processedBinaryChains.add(rootChain.node);
384
+ const isInJSX = isInsideJSXElement(rootChain);
385
+ const loc = rootChain.node.loc?.start;
386
+ if (loc) {
387
+ // Emit each meaningful string as a separate translatable result
388
+ for (const str of meaningfulStrings) {
389
+ if (!shouldFilter(str, config, isInJSX)) {
390
+ results.push(makeResult(filePath, lines, loc.line, loc.column, str, "StringLiteral", "string concatenation", isAtModuleLevel(rootChain)));
391
+ }
392
+ }
393
+ }
394
+ }
395
+ else {
396
+ // Mark as processed even if we don't emit (e.g., filtered)
397
+ processedBinaryChains.add(rootChain.node);
398
+ }
399
+ }
400
+ // Skip individual operand processing — chain already handled
401
+ return;
402
+ }
403
+ }
404
+ const loc = path.node.loc?.start;
405
+ if (!loc)
406
+ return;
407
+ const parent = path.parentPath;
408
+ const isInJSX = isInsideJSXElement(path);
409
+ if (parent?.isJSXAttribute()) {
410
+ // JSX attribute value: <input placeholder="..." />
411
+ if (shouldFilter(value, config, true))
412
+ return;
413
+ const attrName = t.isJSXIdentifier(parent.node.name)
414
+ ? parent.node.name.name
415
+ : "";
416
+ if (NON_TRANSLATABLE_ATTRS.has(attrName))
417
+ return;
418
+ if (attrName.startsWith("data-") || attrName === "aria-labelledby" || attrName === "aria-describedby")
419
+ return;
420
+ const openingEl = parent.parentPath?.node;
421
+ const elementName = openingEl ? getJSXElementName(openingEl) : "?";
422
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "JSXAttribute", `"${attrName}" attribute on <${elementName}>`, isAtModuleLevel(path)));
423
+ }
424
+ else {
425
+ // Non-JSX string literal — check filter based on whether it's inside JSX or pure logic
426
+ if (shouldFilter(value, config, isInJSX))
427
+ return;
428
+ const context = getBabelNonJSXContext(path);
429
+ if (context) {
430
+ // For object properties, also track the parent object name
431
+ let objectKey;
432
+ if (context.startsWith("object property") && path.parentPath?.isObjectProperty()) {
433
+ objectKey = getBabelObjectVariableName(path.parentPath) ?? undefined;
434
+ }
435
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "StringLiteral", context, isAtModuleLevel(path), objectKey));
436
+ }
437
+ }
438
+ },
439
+ // ── Template literal (static-only or with interpolation)
440
+ // Static: `Hello world` → captured as-is
441
+ // Dynamic: `Hello ${name}` → each static span captured separately
442
+ TemplateLiteral(path) {
443
+ if (isInsideTranslationCall(path))
444
+ return;
445
+ if (isInsideConsoleCall(path))
446
+ return;
447
+ const isInJSX = isInsideJSXElement(path);
448
+ const isModLevel = isAtModuleLevel(path);
449
+ if (path.node.expressions.length === 0) {
450
+ // Static-only template literal
451
+ const cooked = path.node.quasis[0]?.value.cooked ?? "";
452
+ const value = cooked.trim();
453
+ if (!value)
454
+ return;
455
+ if (shouldFilter(value, config, isInJSX))
456
+ return;
457
+ const loc = path.node.loc?.start;
458
+ if (!loc)
459
+ return;
460
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "TemplateLiteral", "Template literal", isModLevel));
461
+ }
462
+ else {
463
+ // Dynamic template literal — extract each static quasi separately
464
+ for (const quasi of path.node.quasis) {
465
+ const cooked = quasi.value.cooked ?? "";
466
+ const value = cooked.trim();
467
+ if (!value)
468
+ continue;
469
+ if (shouldFilter(value, config, isInJSX))
470
+ continue;
471
+ const loc = quasi.loc?.start;
472
+ if (!loc)
473
+ continue;
474
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "TemplateLiteral", "Template literal (static part)", isModLevel));
475
+ }
476
+ }
477
+ },
478
+ // ── Array literal elements: ["Export Report", "Send Notification"]
479
+ // Capture UI text arrays but skip code/identifier arrays like ["admin", "user"]
480
+ ArrayExpression(path) {
481
+ const isInJSX = isInsideJSXElement(path);
482
+ const isModLevel = isAtModuleLevel(path);
483
+ for (const element of path.node.elements) {
484
+ if (!element || !t.isStringLiteral(element))
485
+ continue;
486
+ const value = element.value.trim();
487
+ if (!value)
488
+ continue;
489
+ if (isInsideTranslationCall(path))
490
+ continue;
491
+ if (isInsideStateInitialization(path))
492
+ continue;
493
+ if (shouldFilter(value, config, isInJSX))
494
+ continue;
495
+ const loc = element.loc?.start;
496
+ if (!loc)
497
+ continue;
498
+ results.push(makeResult(filePath, lines, loc.line, loc.column, value, "StringLiteral", "string in array", isModLevel));
499
+ }
500
+ },
501
+ });
502
+ return results;
503
+ }
504
+ //# sourceMappingURL=babel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"babel.js","sourceRoot":"","sources":["../../src/scanner/babel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { LocalizeConfig } from "../types.js";
2
+ /**
3
+ * JSX attribute names whose string values are never user-facing text.
4
+ * Strings in these attributes are silently skipped by the scanner.
5
+ */
6
+ export declare const NON_TRANSLATABLE_ATTRS: Set<string>;
7
+ /** Translation function names — strings inside these calls are already translated. */
8
+ export declare const TRANSLATION_FNS: Set<string>;
9
+ /**
10
+ * Functions that take default/placeholder values as arguments (not UI text to translate).
11
+ * E.g., useState("John Doe") — "John Doe" is a default, should not be translated.
12
+ */
13
+ export declare const STATE_INITIALIZATION_FNS: Set<string>;
14
+ export declare function isTooShort(value: string): boolean;
15
+ export declare function isPurelyNumeric(value: string): boolean;
16
+ export declare function isUrl(value: string): boolean;
17
+ export declare function isRelativePath(value: string): boolean;
18
+ export declare function isModuleSpecifier(value: string): boolean;
19
+ /**
20
+ * Returns true if the string looks like a multi-token CSS class string,
21
+ * e.g. "flex items-center bg-gray-100 p-4".
22
+ * Single tokens are NOT flagged — "Settings" and "flex" both match the token
23
+ * pattern but only a space-separated list of tokens is conclusively CSS.
24
+ * Additionally, at least one token must contain a CSS indicator (hyphen, colon,
25
+ * or bracket) to avoid filtering plain English phrases like "pending tasks".
26
+ */
27
+ export declare function isCssClassString(value: string): boolean;
28
+ export declare function matchesIgnorePattern(value: string, patterns: string[]): boolean;
29
+ /**
30
+ * Returns true if this string value should be discarded (not a translatable string).
31
+ * Applied after AST-level checks (translation call, console call, attr name).
32
+ *
33
+ * @param value The string to check
34
+ * @param config The localization config
35
+ * @param isJSX If true, skip MODULE_SPECIFIER_RE filter (for strings already inside JSX)
36
+ */
37
+ export declare function shouldFilter(value: string, config: Pick<LocalizeConfig, "ignorePatterns">, isJSX?: boolean): boolean;
38
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/scanner/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAelD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aAsCjC,CAAC;AAEH,sFAAsF;AACtF,eAAO,MAAM,eAAe,aAK1B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,aAInC,CAAC;AAIH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAQT;AAID;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAC9C,KAAK,GAAE,OAAe,GACrB,OAAO,CAWT"}