@babelize/mcp 1.0.4 → 1.0.6

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 (135) hide show
  1. package/dist/server.d.ts.map +1 -1
  2. package/dist/server.js +187 -59
  3. package/dist/server.js.map +1 -1
  4. package/dist/tools/babel-get.d.ts +2 -8
  5. package/dist/tools/babel-get.d.ts.map +1 -1
  6. package/dist/tools/babel-get.js +18 -26
  7. package/dist/tools/babel-get.js.map +1 -1
  8. package/dist/tools/babel-list.d.ts +2 -8
  9. package/dist/tools/babel-list.d.ts.map +1 -1
  10. package/dist/tools/babel-list.js +17 -28
  11. package/dist/tools/babel-list.js.map +1 -1
  12. package/dist/tools/engine-analyze.d.ts +2 -8
  13. package/dist/tools/engine-analyze.d.ts.map +1 -1
  14. package/dist/tools/engine-analyze.js +7 -16
  15. package/dist/tools/engine-analyze.js.map +1 -1
  16. package/dist/tools/glossary-delete.d.ts +2 -8
  17. package/dist/tools/glossary-delete.d.ts.map +1 -1
  18. package/dist/tools/glossary-delete.js +5 -14
  19. package/dist/tools/glossary-delete.js.map +1 -1
  20. package/dist/tools/glossary-export.d.ts +2 -8
  21. package/dist/tools/glossary-export.d.ts.map +1 -1
  22. package/dist/tools/glossary-export.js +6 -22
  23. package/dist/tools/glossary-export.js.map +1 -1
  24. package/dist/tools/glossary-get.d.ts +2 -8
  25. package/dist/tools/glossary-get.d.ts.map +1 -1
  26. package/dist/tools/glossary-get.js +13 -24
  27. package/dist/tools/glossary-get.js.map +1 -1
  28. package/dist/tools/glossary-import.d.ts +2 -8
  29. package/dist/tools/glossary-import.d.ts.map +1 -1
  30. package/dist/tools/glossary-import.js +11 -28
  31. package/dist/tools/glossary-import.js.map +1 -1
  32. package/dist/tools/glossary-set.d.ts +2 -8
  33. package/dist/tools/glossary-set.d.ts.map +1 -1
  34. package/dist/tools/glossary-set.js +12 -24
  35. package/dist/tools/glossary-set.js.map +1 -1
  36. package/dist/tools/invitation-send.d.ts +2 -8
  37. package/dist/tools/invitation-send.d.ts.map +1 -1
  38. package/dist/tools/invitation-send.js +10 -25
  39. package/dist/tools/invitation-send.js.map +1 -1
  40. package/dist/tools/language-codes.d.ts +2 -8
  41. package/dist/tools/language-codes.d.ts.map +1 -1
  42. package/dist/tools/language-codes.js +19 -37
  43. package/dist/tools/language-codes.js.map +1 -1
  44. package/dist/tools/language-list.d.ts +2 -8
  45. package/dist/tools/language-list.d.ts.map +1 -1
  46. package/dist/tools/language-list.js +9 -19
  47. package/dist/tools/language-list.js.map +1 -1
  48. package/dist/tools/me.d.ts +2 -8
  49. package/dist/tools/me.d.ts.map +1 -1
  50. package/dist/tools/me.js +13 -20
  51. package/dist/tools/me.js.map +1 -1
  52. package/dist/tools/member-list.d.ts +2 -8
  53. package/dist/tools/member-list.d.ts.map +1 -1
  54. package/dist/tools/member-list.js +21 -21
  55. package/dist/tools/member-list.js.map +1 -1
  56. package/dist/tools/pr-raise.d.ts +2 -8
  57. package/dist/tools/pr-raise.d.ts.map +1 -1
  58. package/dist/tools/pr-raise.js +12 -25
  59. package/dist/tools/pr-raise.js.map +1 -1
  60. package/dist/tools/project-create.d.ts +2 -8
  61. package/dist/tools/project-create.d.ts.map +1 -1
  62. package/dist/tools/project-create.js +26 -34
  63. package/dist/tools/project-create.js.map +1 -1
  64. package/dist/tools/project-download.d.ts +3 -8
  65. package/dist/tools/project-download.d.ts.map +1 -1
  66. package/dist/tools/project-download.js +15 -21
  67. package/dist/tools/project-download.js.map +1 -1
  68. package/dist/tools/project-get.d.ts +2 -8
  69. package/dist/tools/project-get.d.ts.map +1 -1
  70. package/dist/tools/project-get.js +15 -23
  71. package/dist/tools/project-get.js.map +1 -1
  72. package/dist/tools/project-language-add.d.ts +2 -8
  73. package/dist/tools/project-language-add.d.ts.map +1 -1
  74. package/dist/tools/project-language-add.js +9 -20
  75. package/dist/tools/project-language-add.js.map +1 -1
  76. package/dist/tools/project-language-remove.d.ts +2 -8
  77. package/dist/tools/project-language-remove.d.ts.map +1 -1
  78. package/dist/tools/project-language-remove.js +9 -14
  79. package/dist/tools/project-language-remove.js.map +1 -1
  80. package/dist/tools/project-list.d.ts +2 -8
  81. package/dist/tools/project-list.d.ts.map +1 -1
  82. package/dist/tools/project-list.js +21 -28
  83. package/dist/tools/project-list.js.map +1 -1
  84. package/dist/tools/project-sync.d.ts +2 -8
  85. package/dist/tools/project-sync.d.ts.map +1 -1
  86. package/dist/tools/project-sync.js +12 -21
  87. package/dist/tools/project-sync.js.map +1 -1
  88. package/dist/tools/provider-tokens-list.d.ts +2 -8
  89. package/dist/tools/provider-tokens-list.d.ts.map +1 -1
  90. package/dist/tools/provider-tokens-list.js +10 -20
  91. package/dist/tools/provider-tokens-list.js.map +1 -1
  92. package/dist/tools/run-and-wait.d.ts +19 -0
  93. package/dist/tools/run-and-wait.d.ts.map +1 -0
  94. package/dist/tools/run-and-wait.js +99 -0
  95. package/dist/tools/run-and-wait.js.map +1 -0
  96. package/dist/tools/run.d.ts +2 -8
  97. package/dist/tools/run.d.ts.map +1 -1
  98. package/dist/tools/run.js +17 -31
  99. package/dist/tools/run.js.map +1 -1
  100. package/dist/tools/scan.d.ts.map +1 -1
  101. package/dist/tools/scan.js +4 -7
  102. package/dist/tools/scan.js.map +1 -1
  103. package/dist/tools/status.d.ts +2 -8
  104. package/dist/tools/status.d.ts.map +1 -1
  105. package/dist/tools/status.js +33 -19
  106. package/dist/tools/status.js.map +1 -1
  107. package/dist/tools/tm-export.d.ts +2 -8
  108. package/dist/tools/tm-export.d.ts.map +1 -1
  109. package/dist/tools/tm-export.js +6 -22
  110. package/dist/tools/tm-export.js.map +1 -1
  111. package/dist/tools/tm-get.d.ts +2 -8
  112. package/dist/tools/tm-get.d.ts.map +1 -1
  113. package/dist/tools/tm-get.js +21 -31
  114. package/dist/tools/tm-get.js.map +1 -1
  115. package/dist/tools/tm-set.d.ts +2 -8
  116. package/dist/tools/tm-set.d.ts.map +1 -1
  117. package/dist/tools/tm-set.js +14 -35
  118. package/dist/tools/tm-set.js.map +1 -1
  119. package/dist/utils/api.d.ts +6 -0
  120. package/dist/utils/api.d.ts.map +1 -0
  121. package/dist/utils/api.js +45 -0
  122. package/dist/utils/api.js.map +1 -0
  123. package/dist/utils/errors.d.ts +9 -0
  124. package/dist/utils/errors.d.ts.map +1 -0
  125. package/dist/utils/errors.js +84 -0
  126. package/dist/utils/errors.js.map +1 -0
  127. package/dist/utils/response.d.ts +8 -0
  128. package/dist/utils/response.d.ts.map +1 -0
  129. package/dist/utils/response.js +17 -0
  130. package/dist/utils/response.js.map +1 -0
  131. package/dist/utils/scan-strings.d.ts +1 -1
  132. package/dist/utils/scan-strings.d.ts.map +1 -1
  133. package/dist/utils/scan-strings.js +129 -51
  134. package/dist/utils/scan-strings.js.map +1 -1
  135. package/package.json +2 -2
@@ -11,13 +11,7 @@ export declare function handleTmSet(client: AxiosInstance, params: TmSetParams):
11
11
  type: "text";
12
12
  text: string;
13
13
  }[];
14
- isError: boolean;
15
- } | {
16
- content: {
17
- type: "text";
18
- text: string;
19
- }[];
20
- isError?: undefined;
21
- }>;
14
+ isError: true;
15
+ } | import("../utils/response.js").ToolResponse>;
22
16
  export {};
23
17
  //# sourceMappingURL=tm-set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tm-set.d.ts","sourceRoot":"","sources":["../../src/tools/tm-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW;;;;;;;;;;;;GA4C3E"}
1
+ {"version":3,"file":"tm-set.d.ts","sourceRoot":"","sources":["../../src/tools/tm-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW;;;;;;iDAmB3E"}
@@ -1,44 +1,23 @@
1
+ import { toErrorResponse } from '../utils/errors.js';
2
+ import { success } from '../utils/response.js';
1
3
  export async function handleTmSet(client, params) {
2
- const { project_id, source_text, source_lang, target_lang, translated_text } = params;
3
- if (!source_text.trim() || !translated_text.trim()) {
4
- return {
5
- content: [{ type: 'text', text: '❌ Both source_text and translated_text are required.' }],
6
- isError: true,
7
- };
8
- }
9
4
  try {
10
5
  const body = {
11
- source_text: source_text.trim(),
12
- target_lang,
13
- translated_text: translated_text.trim(),
14
- };
15
- if (source_lang)
16
- body.source_lang = source_lang;
17
- const response = await client.post(`/projects/${project_id}/tm`, body);
18
- const result = response.data;
19
- return {
20
- content: [
21
- {
22
- type: 'text',
23
- text: [
24
- `✅ Translation memory entry added.`,
25
- ` Source (${source_lang || 'en'}): "${source_text}"`,
26
- ` Target (${target_lang}): "${translated_text}"`,
27
- ].join('\n'),
28
- },
29
- ],
6
+ source_text: params.source_text,
7
+ target_lang: params.target_lang,
8
+ translated_text: params.translated_text,
30
9
  };
10
+ if (params.source_lang)
11
+ body.source_lang = params.source_lang;
12
+ await client.post(`/projects/${params.project_id}/tm`, body);
13
+ return success([
14
+ '✅ Translation memory entry added.',
15
+ ` Source: "${params.source_text}"`,
16
+ ` Target: "${params.translated_text}" [${params.target_lang}]`,
17
+ ].join('\n'));
31
18
  }
32
19
  catch (err) {
33
- const message = err instanceof Object && err !== null && 'response' in err
34
- ? (err.response?.data?.error || 'Unknown error')
35
- : err instanceof Error
36
- ? err.message
37
- : 'Unknown error';
38
- return {
39
- content: [{ type: 'text', text: `❌ Failed to set TM entry: ${message}` }],
40
- isError: true,
41
- };
20
+ return toErrorResponse(err, 'Failed to set TM entry');
42
21
  }
43
22
  }
44
23
  //# sourceMappingURL=tm-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tm-set.js","sourceRoot":"","sources":["../../src/tools/tm-set.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB,EAAE,MAAmB;IAC1E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAEtF,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sDAAsD,EAAE,CAAC;YAClG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B;YACpC,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE;YAC/B,WAAW;YACX,eAAe,EAAE,eAAe,CAAC,IAAI,EAAE;SACxC,CAAC;QACF,IAAI,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAA+B,CAAC;QAExD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,mCAAmC;wBACnC,aAAa,WAAW,IAAI,IAAI,OAAO,WAAW,GAAG;wBACrD,aAAa,WAAW,OAAO,eAAe,GAAG;qBAClD,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,UAAU,IAAI,GAAG;YACxE,CAAC,CAAC,CAAE,GAAiD,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,eAAe,CAAC;YAC/F,CAAC,CAAC,GAAG,YAAY,KAAK;gBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,eAAe,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,6BAA6B,OAAO,EAAE,EAAE,CAAC;YAClF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tm-set.js","sourceRoot":"","sources":["../../src/tools/tm-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAU/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB,EAAE,MAAmB;IAC1E,IAAI,CAAC;QACH,MAAM,IAAI,GAA4B;YACpC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC,CAAC;QACF,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAE9D,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC;QAE7D,OAAO,OAAO,CAAC;YACb,mCAAmC;YACnC,cAAc,MAAM,CAAC,WAAW,GAAG;YACnC,cAAc,MAAM,CAAC,eAAe,MAAM,MAAM,CAAC,WAAW,GAAG;SAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,eAAe,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function extractList(data: unknown, ...keys: string[]): unknown[];
2
+ export declare function extractField(data: unknown, ...keys: string[]): unknown;
3
+ export declare function asString(val: unknown, fallback?: string): string;
4
+ export declare function joinArray(val: unknown, fallback?: string): string;
5
+ export declare function asNumber(val: unknown, fallback?: number): number | undefined;
6
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CASvE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAQtE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,SAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,SAAM,GAAG,MAAM,CAI9D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5E"}
@@ -0,0 +1,45 @@
1
+ export function extractList(data, ...keys) {
2
+ if (Array.isArray(data))
3
+ return data;
4
+ if (data && typeof data === 'object') {
5
+ for (const key of keys) {
6
+ const value = data[key];
7
+ if (Array.isArray(value))
8
+ return value;
9
+ }
10
+ }
11
+ return [];
12
+ }
13
+ export function extractField(data, ...keys) {
14
+ if (data && typeof data === 'object') {
15
+ for (const key of keys) {
16
+ const value = data[key];
17
+ if (value !== undefined && value !== null)
18
+ return value;
19
+ }
20
+ }
21
+ return undefined;
22
+ }
23
+ export function asString(val, fallback = '?') {
24
+ if (val === null || val === undefined)
25
+ return fallback;
26
+ return String(val);
27
+ }
28
+ export function joinArray(val, fallback = '?') {
29
+ if (Array.isArray(val))
30
+ return val.join(', ');
31
+ if (val === null || val === undefined)
32
+ return fallback;
33
+ return String(val);
34
+ }
35
+ export function asNumber(val, fallback) {
36
+ if (typeof val === 'number')
37
+ return val;
38
+ if (typeof val === 'string') {
39
+ const n = Number(val);
40
+ if (!isNaN(n))
41
+ return n;
42
+ }
43
+ return fallback;
44
+ }
45
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,GAAG,IAAc;IAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,GAAG,IAAc;IAC3D,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,QAAQ,GAAG,GAAG;IACnD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAY,EAAE,QAAQ,GAAG,GAAG;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY,EAAE,QAAiB;IACtD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function extractErrorMessage(err: unknown): string;
2
+ export declare function toErrorResponse(err: unknown, prefix?: string): {
3
+ content: {
4
+ type: 'text';
5
+ text: string;
6
+ }[];
7
+ isError: true;
8
+ };
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAwEA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMxD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAU3H"}
@@ -0,0 +1,84 @@
1
+ function isErrorWithResponse(err) {
2
+ return (err instanceof Object &&
3
+ err !== null &&
4
+ 'response' in err &&
5
+ err.response !== null &&
6
+ typeof err.response === 'object');
7
+ }
8
+ function extractApiErrorData(err) {
9
+ if (isErrorWithResponse(err)) {
10
+ const data = err.response.data;
11
+ return {
12
+ data: {
13
+ error: typeof data.error === 'string' ? data.error : undefined,
14
+ details: typeof data.details === 'string' ? data.details : undefined,
15
+ code: typeof data.code === 'string' ? data.code : undefined,
16
+ },
17
+ status: err.response.status,
18
+ };
19
+ }
20
+ return { data: {} };
21
+ }
22
+ const RECOVERY_HINTS = {
23
+ auth: (msg) => {
24
+ if (msg.toLowerCase().includes('api key') || msg.toLowerCase().includes('unauthorized') || msg.toLowerCase().includes('401'))
25
+ return 'Set BABELIZE_API_KEY or pass --api-key. Get a key at https://babelize.co';
26
+ return undefined;
27
+ },
28
+ notFound: (msg) => {
29
+ if (msg.toLowerCase().includes('not found') || msg.toLowerCase().includes('404'))
30
+ return 'List your projects with babelize_project_list to find valid IDs.';
31
+ return undefined;
32
+ },
33
+ rateLimit: (msg) => {
34
+ if (msg.toLowerCase().includes('rate limit') || msg.toLowerCase().includes('429') || msg.toLowerCase().includes('too many requests'))
35
+ return 'You hit the rate limit. Wait a moment and retry.';
36
+ return undefined;
37
+ },
38
+ validation: (msg) => {
39
+ if (msg.toLowerCase().includes('validation'))
40
+ return 'Check that all required fields are provided and values are valid.';
41
+ return undefined;
42
+ },
43
+ github: (msg) => {
44
+ if (msg.toLowerCase().includes('github source'))
45
+ return 'babelize_engine_analyze only works with GitHub-linked projects. Use babelize_scan for local files.';
46
+ return undefined;
47
+ },
48
+ subscription: (msg) => {
49
+ if (msg.toLowerCase().includes('subscription') || msg.toLowerCase().includes('upgrade'))
50
+ return 'Upgrade your plan at https://babelize.co/account/billing.';
51
+ return undefined;
52
+ },
53
+ };
54
+ function getRecoveryHint(message) {
55
+ for (const hintFn of Object.values(RECOVERY_HINTS)) {
56
+ const hint = hintFn(message);
57
+ if (hint)
58
+ return hint;
59
+ }
60
+ return undefined;
61
+ }
62
+ export function extractErrorMessage(err) {
63
+ const { data } = extractApiErrorData(err);
64
+ if (data.error && data.details)
65
+ return `${data.error}: ${data.details}`;
66
+ if (data.error)
67
+ return data.error;
68
+ if (err instanceof Error)
69
+ return err.message;
70
+ return 'Unknown error';
71
+ }
72
+ export function toErrorResponse(err, prefix) {
73
+ const message = extractErrorMessage(err);
74
+ const hint = getRecoveryHint(message);
75
+ const text = prefix ? `${prefix}: ${message}` : message;
76
+ const lines = [`❌ ${text}`];
77
+ if (hint)
78
+ lines.push(`\n💡 ${hint}`);
79
+ return {
80
+ content: [{ type: 'text', text: lines.join('\n') }],
81
+ isError: true,
82
+ };
83
+ }
84
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAMA,SAAS,mBAAmB,CAAC,GAAY;IACvC,OAAO,CACL,GAAG,YAAY,MAAM;QACrB,GAAG,KAAK,IAAI;QACZ,UAAU,IAAI,GAAG;QAChB,GAA6B,CAAC,QAAQ,KAAK,IAAI;QAChD,OAAQ,GAA6B,CAAC,QAAQ,KAAK,QAAQ,CAC5D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAA+B,CAAC;QAC1D,OAAO;YACL,IAAI,EAAE;gBACJ,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC9D,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBACpE,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC5D;YACD,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,cAAc,GAAwD;IAC1E,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACZ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1H,OAAO,0EAA0E,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9E,OAAO,kEAAkE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QACjB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAClI,OAAO,kDAAkD,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC1C,OAAO,mEAAmE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACd,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC7C,OAAO,oGAAoG,CAAC;QAC9G,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;QACpB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACrF,OAAO,2DAA2D,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,OAAe;IACtC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IACxE,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,MAAe;IAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5B,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACrC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ToolResponse = {
2
+ content: Array<Record<string, unknown>>;
3
+ isError?: boolean;
4
+ [key: string]: unknown;
5
+ };
6
+ export declare function success(text: string): ToolResponse;
7
+ export declare function successWithData(text: string, uri: string, data: unknown): ToolResponse;
8
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAIlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,CAUtF"}
@@ -0,0 +1,17 @@
1
+ export function success(text) {
2
+ return {
3
+ content: [{ type: 'text', text }],
4
+ };
5
+ }
6
+ export function successWithData(text, uri, data) {
7
+ return {
8
+ content: [
9
+ { type: 'text', text },
10
+ {
11
+ type: 'resource',
12
+ resource: { uri, mimeType: 'application/json', text: JSON.stringify(data) },
13
+ },
14
+ ],
15
+ };
16
+ }
17
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,GAAW,EAAE,IAAa;IACtE,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YACtB;gBACE,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aAC5E;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -8,7 +8,7 @@ interface ScanResult {
8
8
  }
9
9
  export declare function isTranslatable(text: string): boolean;
10
10
  export declare function extractHtmlStrings(content: string): HardcodedString[];
11
- export declare function extractStrings(content: string): HardcodedString[];
11
+ export declare function extractStrings(content: string, extension?: string): HardcodedString[];
12
12
  export declare function scanDirectory(dirPath: string, extensions?: string[]): Promise<ScanResult[]>;
13
13
  export {};
14
14
  //# sourceMappingURL=scan-strings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan-strings.d.ts","sourceRoot":"","sources":["../../src/utils/scan-strings.ts"],"names":[],"mappings":"AAeA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC;AA4BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBpD;AAWD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAgDrE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAmCjE;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAM,EAAuB,GACxC,OAAO,CAAC,UAAU,EAAE,CAAC,CAoDvB"}
1
+ {"version":3,"file":"scan-strings.d.ts","sourceRoot":"","sources":["../../src/utils/scan-strings.ts"],"names":[],"mappings":"AAmBA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,eAAe,EAAE,CAAC;CACtC;AAuBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWpD;AASD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAiErE;AA2FD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CA6BrF;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAM,EAAuB,GACxC,OAAO,CAAC,UAAU,EAAE,CAAC,CAoDvB"}
@@ -1,5 +1,9 @@
1
1
  import { readdir, readFile, stat } from 'node:fs/promises';
2
2
  import * as path from 'node:path';
3
+ import { parse } from '@babel/parser';
4
+ import { createRequire } from 'node:module';
5
+ const _traverse = createRequire(import.meta.url)('@babel/traverse');
6
+ const traverse = _traverse;
3
7
  const DEFAULT_EXTENSIONS = ['.tsx', '.jsx', '.ts', '.js', '.vue', '.html'];
4
8
  const ALWAYS_IGNORE = new Set([
5
9
  'node_modules',
@@ -10,17 +14,14 @@ const ALWAYS_IGNORE = new Set([
10
14
  'coverage',
11
15
  '.cache',
12
16
  ]);
13
- // Matches string literals: '...', "...", or `...` (template literals)
14
17
  const STRING_RE = /(['"`])((?:(?!\1|\\).|\\.)*?)\1/g;
15
- // JSX text content: bare text between `>` or `}` and the next `{`, `<`, or end of line
16
18
  const JSX_TEXT_RE = /(?:>|})([^{}<>]+?)(?=\{|<|$)/g;
17
- // Context lines to skip: imports, requires, exports, CSS classNames, etc.
18
19
  const SKIP_PATTERNS = [
19
20
  /^\s*import\s/,
20
21
  /^\s*export\s/,
21
22
  /^\s*const\s+\w+\s*=\s*require\(/,
22
23
  /^\s*\/\//,
23
- /^\s*\*/, // JSDoc
24
+ /^\s*\*/,
24
25
  /^\s*\/\*\*/,
25
26
  /className:/,
26
27
  /className=/,
@@ -32,30 +33,22 @@ const SKIP_PATTERNS = [
32
33
  /^\s*\/\/\s*@ts-/,
33
34
  /^\s*\/\/\s*istanbul/,
34
35
  ];
35
- // Only match strings that look like user-facing text
36
36
  export function isTranslatable(text) {
37
37
  const trimmed = text.trim();
38
38
  if (trimmed.length < 2)
39
39
  return false;
40
- // Skip single characters, numbers, short fragments
41
40
  if (trimmed.length <= 2 && /^[\d\s\W]+$/.test(trimmed))
42
41
  return false;
43
- // Skip template literals with interpolation
44
42
  if (/\$\{/.test(trimmed))
45
43
  return false;
46
- // Skip URLs
47
44
  if (/^https?:\/\//.test(trimmed))
48
45
  return false;
49
- // Skip file paths
50
46
  if (/^\.?\//.test(trimmed))
51
47
  return false;
52
- // Skip common non-translatable patterns
53
48
  if (/^[a-z_]+$/.test(trimmed) && trimmed.length < 20)
54
49
  return false;
55
- // Must contain at least one letter
56
50
  if (!/[a-zA-Z]/.test(trimmed))
57
51
  return false;
58
- // Skip empty JSX expressions like {true}, {false}, {0}
59
52
  if (/^(true|false|null|undefined|\d+)$/.test(trimmed))
60
53
  return false;
61
54
  return true;
@@ -63,15 +56,12 @@ export function isTranslatable(text) {
63
56
  function shouldSkipLine(line) {
64
57
  return SKIP_PATTERNS.some((p) => p.test(line));
65
58
  }
66
- // HTML text content: extract text between HTML tags
67
- const HTML_TEXT_RE = /<([a-zA-Z][a-zA-Z0-9]*)(?:\s[^>]*)?>([^<>\n]+)<\/\1>/g;
68
- // HTML translatable attributes
59
+ const HTML_TEXT_RE = /<([a-zA-Z][a-zA-Z0-9]*)(?:\s[^>]*)?>([^<]+?)<\/\1>/gs;
69
60
  const HTML_ATTR_RE = /\b(alt|title|placeholder|aria-label|aria-description)\s*=\s*"([^"]*?)"/g;
70
61
  export function extractHtmlStrings(content) {
71
62
  const results = [];
72
63
  const lines = content.split('\n');
73
64
  const inScriptTag = new Set();
74
- // Track script/style blocks to skip their content
75
65
  let inScript = false;
76
66
  let inStyle = false;
77
67
  for (let i = 0; i < lines.length; i++) {
@@ -87,67 +77,155 @@ export function extractHtmlStrings(content) {
87
77
  if (inScript || inStyle)
88
78
  inScriptTag.add(i);
89
79
  }
80
+ const joinedChunks = [];
81
+ let currentChunk = [];
82
+ let currentLineNums = [];
90
83
  for (let i = 0; i < lines.length; i++) {
91
- if (inScriptTag.has(i))
92
- continue;
93
- const line = lines[i].trim();
94
- if (!line)
84
+ if (inScriptTag.has(i)) {
85
+ if (currentChunk.length > 0) {
86
+ joinedChunks.push({ text: currentChunk.join(' '), firstLine: currentLineNums[0] });
87
+ currentChunk = [];
88
+ currentLineNums = [];
89
+ }
95
90
  continue;
91
+ }
92
+ currentChunk.push(lines[i]);
93
+ currentLineNums.push(i + 1);
94
+ }
95
+ if (currentChunk.length > 0) {
96
+ joinedChunks.push({ text: currentChunk.join(' '), firstLine: currentLineNums[0] });
97
+ }
98
+ for (const chunk of joinedChunks) {
96
99
  let match;
97
100
  HTML_TEXT_RE.lastIndex = 0;
98
- while ((match = HTML_TEXT_RE.exec(line)) !== null) {
101
+ while ((match = HTML_TEXT_RE.exec(chunk.text)) !== null) {
99
102
  const tagName = match[1].toLowerCase();
100
103
  const text = match[2].trim();
101
104
  if (!['script', 'style', 'noscript', 'code', 'pre', 'svg'].includes(tagName)
102
105
  && text && text.length > 1 && isTranslatable(text)) {
103
- if (!results.some(r => r.text === text && r.line === i + 1)) {
104
- results.push({ text, line: i + 1 });
106
+ const line = chunk.firstLine + chunk.text.substring(0, match.index).split('\n').length - 1;
107
+ if (!results.some(r => r.text === text && r.line === line)) {
108
+ results.push({ text, line });
105
109
  }
106
110
  }
107
111
  }
108
112
  HTML_ATTR_RE.lastIndex = 0;
109
- while ((match = HTML_ATTR_RE.exec(line)) !== null) {
113
+ while ((match = HTML_ATTR_RE.exec(chunk.text)) !== null) {
110
114
  const text = match[2].trim();
111
115
  if (text && text.length > 1 && isTranslatable(text)) {
112
- if (!results.some(r => r.text === text && r.line === i + 1)) {
113
- results.push({ text, line: i + 1 });
116
+ const line = chunk.firstLine + chunk.text.substring(0, match.index).split('\n').length - 1;
117
+ if (!results.some(r => r.text === text && r.line === line)) {
118
+ results.push({ text, line });
114
119
  }
115
120
  }
116
121
  }
117
122
  }
118
123
  return results;
119
124
  }
120
- export function extractStrings(content) {
121
- const isHtml = /<!DOCTYPE html|<html[\s>]/i.test(content.trim().slice(0, 200));
122
- if (isHtml) {
123
- return extractHtmlStrings(content);
125
+ const JSX_TRANSLATABLE_ATTRS = new Set([
126
+ 'alt', 'title', 'placeholder', 'aria-label', 'aria-description', 'label',
127
+ ]);
128
+ function extractStringsFromAst(content) {
129
+ const results = [];
130
+ const seen = new Set();
131
+ const addResult = (text, line) => {
132
+ const trimmed = text.trim();
133
+ if (!trimmed || seen.has(trimmed) || !isTranslatable(trimmed))
134
+ return;
135
+ seen.add(trimmed);
136
+ results.push({ text: trimmed, line });
137
+ };
138
+ try {
139
+ const ast = parse(content, {
140
+ sourceType: 'unambiguous',
141
+ plugins: ['jsx', 'typescript', 'decorators-legacy'],
142
+ errorRecovery: true,
143
+ });
144
+ traverse(ast, {
145
+ JSXText(path) {
146
+ const text = path.node.value;
147
+ if (text)
148
+ addResult(text, path.node.loc?.start.line ?? 0);
149
+ },
150
+ JSXAttribute(path) {
151
+ const attrName = path.node.name.name;
152
+ if (typeof attrName !== 'string')
153
+ return;
154
+ if (!JSX_TRANSLATABLE_ATTRS.has(attrName))
155
+ return;
156
+ const value = path.node.value;
157
+ if (value?.type === 'StringLiteral') {
158
+ addResult(value.value, value.loc?.start.line ?? 0);
159
+ }
160
+ },
161
+ TemplateLiteral(path) {
162
+ if (path.node.expressions.length > 0)
163
+ return;
164
+ const text = path.node.quasis.map((q) => q.value.raw).join('');
165
+ if (text)
166
+ addResult(text, path.node.loc?.start.line ?? 0);
167
+ },
168
+ StringLiteral(path) {
169
+ const parent = path.parent;
170
+ if (parent.type === 'ImportDeclaration' ||
171
+ parent.type === 'ExportNamedDeclaration')
172
+ return;
173
+ addResult(path.node.value, path.node.loc?.start.line ?? 0);
174
+ },
175
+ });
124
176
  }
125
- const lines = content.split('\n');
177
+ catch {
178
+ // AST parse failed
179
+ }
180
+ return results;
181
+ }
182
+ function extractStringsRegex(content) {
126
183
  const results = [];
127
- for (let i = 0; i < lines.length; i++) {
128
- const line = lines[i];
129
- if (shouldSkipLine(line))
130
- continue;
131
- let match;
132
- STRING_RE.lastIndex = 0;
133
- while ((match = STRING_RE.exec(line)) !== null) {
134
- const text = match[2];
135
- if (isTranslatable(text)) {
136
- results.push({ text, line: i + 1 });
137
- }
184
+ let match;
185
+ STRING_RE.lastIndex = 0;
186
+ while ((match = STRING_RE.exec(content)) !== null) {
187
+ const text = match[2];
188
+ if (isTranslatable(text)) {
189
+ const line = content.substring(0, match.index).split('\n').length;
190
+ results.push({ text, line });
138
191
  }
139
- JSX_TEXT_RE.lastIndex = 0;
140
- while ((match = JSX_TEXT_RE.exec(line)) !== null) {
141
- const text = match[1].trim();
142
- if (text && isTranslatable(text)) {
143
- if (!results.some(r => r.text === text && r.line === i + 1)) {
144
- results.push({ text, line: i + 1 });
145
- }
192
+ }
193
+ JSX_TEXT_RE.lastIndex = 0;
194
+ while ((match = JSX_TEXT_RE.exec(content)) !== null) {
195
+ const text = match[1].trim();
196
+ if (text && isTranslatable(text)) {
197
+ const line = content.substring(0, match.index).split('\n').length;
198
+ if (!results.some(r => r.text === text && r.line === line)) {
199
+ results.push({ text, line });
146
200
  }
147
201
  }
148
202
  }
149
203
  return results;
150
204
  }
205
+ export function extractStrings(content, extension) {
206
+ if (extension === '.html' || extension === '.htm') {
207
+ return extractHtmlStrings(content);
208
+ }
209
+ const looksLikeHtml = /<!DOCTYPE html|<html[\s>]/i.test(content.trim().slice(0, 200));
210
+ if (looksLikeHtml) {
211
+ return extractHtmlStrings(content);
212
+ }
213
+ const looksLikeJsx = /<[A-Za-z]/.test(content);
214
+ if (extension === '.tsx' || extension === '.jsx' || (!extension && looksLikeJsx)) {
215
+ const astResults = extractStringsFromAst(content);
216
+ if (astResults.length > 0)
217
+ return astResults;
218
+ }
219
+ const regexResults = extractStringsRegex(content);
220
+ if (extension === '.tsx' || extension === '.jsx' || looksLikeJsx) {
221
+ return regexResults;
222
+ }
223
+ const filtered = regexResults.filter(r => {
224
+ const line = content.split('\n')[r.line - 1] ?? '';
225
+ return !shouldSkipLine(line);
226
+ });
227
+ return filtered;
228
+ }
151
229
  export async function scanDirectory(dirPath, extensions = DEFAULT_EXTENSIONS) {
152
230
  const extSet = new Set(extensions);
153
231
  const results = [];
@@ -180,7 +258,8 @@ export async function scanDirectory(dirPath, extensions = DEFAULT_EXTENSIONS) {
180
258
  else if (entry.isFile && extSet.has(path.extname(entry.name))) {
181
259
  try {
182
260
  const content = await readFile(entry.fullPath, 'utf-8');
183
- const strings = extractStrings(content);
261
+ const ext = path.extname(entry.name);
262
+ const strings = extractStrings(content, ext);
184
263
  if (strings.length > 0) {
185
264
  results.push({
186
265
  path: entry.fullPath,
@@ -195,7 +274,6 @@ export async function scanDirectory(dirPath, extensions = DEFAULT_EXTENSIONS) {
195
274
  }
196
275
  }
197
276
  await walk(dirPath);
198
- // Sort by most strings found (descending), limit to top 50 files
199
277
  results.sort((a, b) => b.hardcoded_strings.length - a.hardcoded_strings.length);
200
278
  return results.slice(0, 50);
201
279
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scan-strings.js","sourceRoot":"","sources":["../../src/utils/scan-strings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan-strings.js","sourceRoot":"","sources":["../../src/utils/scan-strings.ts"],"names":[],"mappings":"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"}