@langapi/mcp-server 1.1.1 → 1.2.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.
- package/README.md +6 -42
- package/dist/api/client.d.ts +9 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +14 -1
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +1 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/handlers/xcstrings-sync-handler.d.ts +2 -4
- package/dist/handlers/xcstrings-sync-handler.d.ts.map +1 -1
- package/dist/handlers/xcstrings-sync-handler.js +6 -12
- package/dist/handlers/xcstrings-sync-handler.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +0 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/sync-translations.d.ts +30 -1
- package/dist/tools/sync-translations.d.ts.map +1 -1
- package/dist/tools/sync-translations.js +105 -47
- package/dist/tools/sync-translations.js.map +1 -1
- package/dist/utils/format-preserve.d.ts +5 -1
- package/dist/utils/format-preserve.d.ts.map +1 -1
- package/dist/utils/format-preserve.js +109 -4
- package/dist/utils/format-preserve.js.map +1 -1
- package/package.json +1 -1
- package/dist/tools/get-diff.d.ts +0 -23
- package/dist/tools/get-diff.js +0 -88
- package/dist/tools/get-diff.js.map +0 -1
- package/dist/utils/sync-cache.d.ts +0 -40
- package/dist/utils/sync-cache.js +0 -140
- package/dist/utils/sync-cache.js.map +0 -1
- package/dist/utils/sync-cache.test.js +0 -205
- package/dist/utils/sync-cache.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,12 +20,13 @@ This package enables AI assistants like Claude, Cursor, and VS Code extensions t
|
|
|
20
20
|
|
|
21
21
|
## Features
|
|
22
22
|
|
|
23
|
-
- **Locale Detection**: Automatically detect i18n framework (next-intl, i18next, react-intl) and locale files
|
|
23
|
+
- **Locale Detection**: Automatically detect i18n framework (next-intl, i18next, react-intl, iOS/macOS) and locale files
|
|
24
24
|
- **Translation Status**: Compare source and target locales to find missing translations
|
|
25
25
|
- **Sync Translations**: Translate missing keys via LangAPI with credit-based billing
|
|
26
26
|
- **Dry Run Mode**: Preview changes and costs before syncing (enabled by default)
|
|
27
27
|
- **Format Preservation**: Maintains JSON formatting when writing translated files
|
|
28
28
|
- **Delta Detection**: Only translate new/changed keys, saving up to 90% on costs
|
|
29
|
+
- **Apple Localization**: Support for iOS/macOS `.strings`, `.xcstrings`, and `.stringsdict` files
|
|
29
30
|
|
|
30
31
|
## Installation
|
|
31
32
|
|
|
@@ -76,14 +77,10 @@ After editing, **restart Claude Desktop** for changes to take effect.
|
|
|
76
77
|
|
|
77
78
|
```bash
|
|
78
79
|
# Add to current project (stored in .mcp.json)
|
|
79
|
-
claude mcp add
|
|
80
|
+
claude mcp add langapi \
|
|
80
81
|
--env LANGAPI_API_KEY=your-api-key-here \
|
|
81
|
-
-- npx @langapi/mcp-server
|
|
82
|
+
-- npx -y @langapi/mcp-server
|
|
82
83
|
|
|
83
|
-
# Or add globally for all projects (stored in ~/.claude.json)
|
|
84
|
-
claude mcp add --transport stdio langapi --scope user \
|
|
85
|
-
--env LANGAPI_API_KEY=your-api-key-here \
|
|
86
|
-
-- npx @langapi/mcp-server
|
|
87
84
|
```
|
|
88
85
|
|
|
89
86
|
**Option 2: Project-level config** (recommended for teams)
|
|
@@ -301,8 +298,7 @@ Compare source locale against targets to identify missing keys and estimate cost
|
|
|
301
298
|
{
|
|
302
299
|
"source_lang": "en",
|
|
303
300
|
"target_langs": ["de", "fr"], // optional, all non-source by default
|
|
304
|
-
"project_path": "/path/to/project"
|
|
305
|
-
"app_id": "your-app-id" // optional, for accurate cost estimate
|
|
301
|
+
"project_path": "/path/to/project" // optional
|
|
306
302
|
}
|
|
307
303
|
```
|
|
308
304
|
|
|
@@ -380,37 +376,6 @@ Sync translations via the LangAPI API. **Default is dry_run=true for safety.**
|
|
|
380
376
|
}
|
|
381
377
|
```
|
|
382
378
|
|
|
383
|
-
### `get_diff`
|
|
384
|
-
|
|
385
|
-
Compare current source locale against the last synced version.
|
|
386
|
-
|
|
387
|
-
**Input:**
|
|
388
|
-
```json
|
|
389
|
-
{
|
|
390
|
-
"source_lang": "en",
|
|
391
|
-
"project_path": "/path/to/project" // optional
|
|
392
|
-
}
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
**Output:**
|
|
396
|
-
```json
|
|
397
|
-
{
|
|
398
|
-
"has_changes": true,
|
|
399
|
-
"summary": {
|
|
400
|
-
"new_keys": 3,
|
|
401
|
-
"changed_keys": 1,
|
|
402
|
-
"removed_keys": 0,
|
|
403
|
-
"unchanged_keys": 146
|
|
404
|
-
},
|
|
405
|
-
"diff": {
|
|
406
|
-
"new": ["feature.title", "feature.description", "feature.cta"],
|
|
407
|
-
"changed": ["home.welcome"],
|
|
408
|
-
"removed": [],
|
|
409
|
-
"unchanged": ["..."]
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
```
|
|
413
|
-
|
|
414
379
|
---
|
|
415
380
|
|
|
416
381
|
## Prompt Examples
|
|
@@ -459,8 +424,6 @@ Compare current source locale against the last synced version.
|
|
|
459
424
|
### Advanced Operations
|
|
460
425
|
|
|
461
426
|
```
|
|
462
|
-
"What changed since my last sync?"
|
|
463
|
-
"Show diff between current and last synced version"
|
|
464
427
|
"Are there any extra keys in German that aren't in English?"
|
|
465
428
|
"Skip the settings.* keys when syncing"
|
|
466
429
|
"Only sync the home.* and nav.* keys"
|
|
@@ -502,6 +465,7 @@ The server automatically detects these i18n frameworks:
|
|
|
502
465
|
| **next-intl** | `messages/*.json`, `locales/*.json` | `i18n.ts`, `next.config.js` |
|
|
503
466
|
| **i18next** | `public/locales/*/*.json`, `locales/*/*.json` | `i18next.config.js`, `i18n.js` |
|
|
504
467
|
| **react-intl** | `src/lang/*.json`, `lang/*.json` | `src/i18n.ts` |
|
|
468
|
+
| **iOS/macOS** | `.strings`, `.xcstrings`, `.stringsdict` | `Info.plist` |
|
|
505
469
|
| **generic** | Various common patterns | - |
|
|
506
470
|
|
|
507
471
|
---
|
package/dist/api/client.d.ts
CHANGED
|
@@ -20,5 +20,14 @@ export declare class LangAPIClient {
|
|
|
20
20
|
* Sync translations with the LangAPI service
|
|
21
21
|
*/
|
|
22
22
|
sync(request: SyncRequest): Promise<SyncResponse>;
|
|
23
|
+
/**
|
|
24
|
+
* Sync translations with extra precision using the LangAPI service
|
|
25
|
+
* Uses the /api/v1/extra-sync endpoint for higher quality translations (2 credits/word)
|
|
26
|
+
*/
|
|
27
|
+
extraSync(request: SyncRequest): Promise<SyncResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Internal method to call sync endpoints
|
|
30
|
+
*/
|
|
31
|
+
private callSyncEndpoint;
|
|
23
32
|
}
|
|
24
33
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAGb,MAAM,YAAY,CAAC;AAoCpB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAqB,EAC9B,SAAS,GAAE,MAA2B;IAOxC;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,aAAa;IAU9B;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAGb,MAAM,YAAY,CAAC;AAoCpB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAqB,EAC9B,SAAS,GAAE,MAA2B;IAOxC;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,aAAa;IAU9B;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAI5D;;OAEG;YACW,gBAAgB;CA8F/B"}
|
package/dist/api/client.js
CHANGED
|
@@ -61,11 +61,24 @@ export class LangAPIClient {
|
|
|
61
61
|
* Sync translations with the LangAPI service
|
|
62
62
|
*/
|
|
63
63
|
async sync(request) {
|
|
64
|
+
return this.callSyncEndpoint(`${this.baseUrl}/api/v1/sync`, request);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sync translations with extra precision using the LangAPI service
|
|
68
|
+
* Uses the /api/v1/extra-sync endpoint for higher quality translations (2 credits/word)
|
|
69
|
+
*/
|
|
70
|
+
async extraSync(request) {
|
|
71
|
+
return this.callSyncEndpoint(`${this.baseUrl}/api/v1/extra-sync`, request);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Internal method to call sync endpoints
|
|
75
|
+
*/
|
|
76
|
+
async callSyncEndpoint(url, request) {
|
|
64
77
|
// Create abort controller for timeout
|
|
65
78
|
const controller = new AbortController();
|
|
66
79
|
const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
67
80
|
try {
|
|
68
|
-
const response = await fetch(
|
|
81
|
+
const response = await fetch(url, {
|
|
69
82
|
method: "POST",
|
|
70
83
|
headers: {
|
|
71
84
|
"Content-Type": "application/json",
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQ3D,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,GAAG,CAAC,KAAK,KAAK,IAAI;QAClB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,IAAI;QACjB,kBAAkB,IAAK,GAAG,CAAC,IAAgC,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,IAAI;QACjB,aAAa,IAAK,GAAG,CAAC,IAAgC,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,SAAS,CAAS;IAE1B,YACE,MAAc,EACd,UAAkB,YAAY,EAC9B,YAAoB,kBAAkB;QAEtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACX,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQ3D,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,GAAG,CAAC,KAAK,KAAK,IAAI;QAClB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,IAAI;QACjB,kBAAkB,IAAK,GAAG,CAAC,IAAgC,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,CACL,GAAG,CAAC,OAAO,KAAK,IAAI;QACpB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,KAAK,IAAI;QACjB,aAAa,IAAK,GAAG,CAAC,IAAgC,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,SAAS,CAAS;IAE1B,YACE,MAAc,EACd,UAAkB,YAAY,EAC9B,YAAoB,kBAAkB;QAEtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM;QACX,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,OAAoB;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,OAAO,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,GAAW,EACX,OAAoB;QAEpB,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,8BAA8B;gBAC9B,MAAM,QAAQ,GACZ,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;oBACvC,CAAC,CAAE,IAAgC;oBACnC,CAAC,CAAC,EAAE,CAAC;gBACT,MAAM,SAAS,GACb,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI;oBAC3D,CAAC,CAAE,QAAQ,CAAC,KAAiC;oBAC7C,CAAC,CAAC,EAAE,CAAC;gBAET,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;wBACvE,OAAO,EACL,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;4BACnC,CAAC,CAAC,SAAS,CAAC,OAAO;4BACnB,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE;wBAC/B,cAAc,EACZ,OAAO,SAAS,CAAC,cAAc,KAAK,QAAQ;4BAC1C,CAAC,CAAC,SAAS,CAAC,cAAc;4BAC1B,CAAC,CAAC,SAAS;wBACf,eAAe,EACb,OAAO,SAAS,CAAC,eAAe,KAAK,QAAQ;4BAC3C,CAAC,CAAC,SAAS,CAAC,eAAe;4BAC3B,CAAC,CAAC,SAAS;wBACf,QAAQ,EACN,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ;4BACpC,CAAC,CAAC,SAAS,CAAC,QAAQ;4BACpB,CAAC,CAAC,SAAS;qBAChB;iBACF,CAAC;YACJ,CAAC;YAED,iDAAiD;YACjD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,0BAA0B;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,4CAA4C;iBACtD;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;YACpC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,2BAA2B,IAAI,CAAC,SAAS,IAAI;qBACvD;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;iBAC1E;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
|
package/dist/api/types.d.ts
CHANGED
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAGD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAGD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAGD,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAGD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,QAAQ,EAAE,CAAC;CAC1B;AAGD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAGD,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,CAAC"}
|
|
@@ -45,14 +45,12 @@ export declare function xcstringsHasMissingKeys(xcstringsData: XCStringsFile, ta
|
|
|
45
45
|
*
|
|
46
46
|
* @param sourceData Parsed xcstrings source data
|
|
47
47
|
* @param targetLang Target language code
|
|
48
|
-
* @param cachedContent Cached content from previous sync (null if no cache)
|
|
49
|
-
* @param deltaContent Content that changed since last sync
|
|
50
48
|
* @param isMissingLang Whether the target language is completely missing
|
|
51
|
-
* @param hasMissingKeys Whether target has any missing keys
|
|
52
49
|
* @param skipKeys Set of keys to skip for this language
|
|
50
|
+
* @param hardSync If true, re-translate all keys even if target already has translations
|
|
53
51
|
* @returns Content to sync (after filtering skip keys)
|
|
54
52
|
*/
|
|
55
|
-
export declare function getXCStringsContentToSync(sourceData: XCStringsSourceData, targetLang: string,
|
|
53
|
+
export declare function getXCStringsContentToSync(sourceData: XCStringsSourceData, targetLang: string, isMissingLang: boolean, skipKeys: Set<string>, hardSync?: boolean): {
|
|
56
54
|
contentToSync: KeyValue[];
|
|
57
55
|
skippedKeys: string[];
|
|
58
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcstrings-sync-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI,CAW5B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,CAAC,CAWb;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,QAAQ,EAAE,GACxB,OAAO,CAIT;AAED
|
|
1
|
+
{"version":3,"file":"xcstrings-sync-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI,CAW5B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,CAAC,CAWb;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,QAAQ,EAAE,GACxB,OAAO,CAIT;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,QAAQ,GAAE,OAAe,GACxB;IAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CA4BtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,QAAQ,EAAE,GACvB,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
|
@@ -58,28 +58,22 @@ export function xcstringsHasMissingKeys(xcstringsData, targetLang, sourceContent
|
|
|
58
58
|
*
|
|
59
59
|
* @param sourceData Parsed xcstrings source data
|
|
60
60
|
* @param targetLang Target language code
|
|
61
|
-
* @param cachedContent Cached content from previous sync (null if no cache)
|
|
62
|
-
* @param deltaContent Content that changed since last sync
|
|
63
61
|
* @param isMissingLang Whether the target language is completely missing
|
|
64
|
-
* @param hasMissingKeys Whether target has any missing keys
|
|
65
62
|
* @param skipKeys Set of keys to skip for this language
|
|
63
|
+
* @param hardSync If true, re-translate all keys even if target already has translations
|
|
66
64
|
* @returns Content to sync (after filtering skip keys)
|
|
67
65
|
*/
|
|
68
|
-
export function getXCStringsContentToSync(sourceData, targetLang,
|
|
66
|
+
export function getXCStringsContentToSync(sourceData, targetLang, isMissingLang, skipKeys, hardSync = false) {
|
|
69
67
|
let contentToSync;
|
|
70
|
-
if (isMissingLang) {
|
|
71
|
-
//
|
|
68
|
+
if (hardSync || isMissingLang) {
|
|
69
|
+
// Hard sync or new language: sync all source content
|
|
72
70
|
contentToSync = sourceData.flatContent;
|
|
73
71
|
}
|
|
74
|
-
else
|
|
75
|
-
//
|
|
72
|
+
else {
|
|
73
|
+
// Existing language: sync only keys missing from target
|
|
76
74
|
const existingTargetKeys = getXCStringsExistingKeys(sourceData.xcstringsData, targetLang);
|
|
77
75
|
contentToSync = sourceData.flatContent.filter((item) => !existingTargetKeys.has(item.key));
|
|
78
76
|
}
|
|
79
|
-
else {
|
|
80
|
-
// Has cache: use delta
|
|
81
|
-
contentToSync = deltaContent;
|
|
82
|
-
}
|
|
83
77
|
// Apply skip_keys filter
|
|
84
78
|
const skippedKeys = [];
|
|
85
79
|
const filteredContent = contentToSync.filter((item) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcstrings-sync-handler.js","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AAWtC;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAgB,EAChB,OAAe;IAEf,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,OAAO;QAC3B,aAAa,EAAE,MAAM,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA4B,EAC5B,UAAkB;IAElB,MAAM,aAAa,GAAG,0BAA0B,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7C,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAA4B,EAC5B,UAAkB,EAClB,aAAyB;IAEzB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"xcstrings-sync-handler.js","sourceRoot":"","sources":["../../src/handlers/xcstrings-sync-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* - list_local_locales: Scan project for locale files
|
|
10
10
|
* - get_translation_status: Compare source vs target locales
|
|
11
11
|
* - sync_translations: Sync translations via LangAPI API
|
|
12
|
-
* - get_diff: Compare source against sync cache for delta detection
|
|
13
12
|
*/
|
|
14
13
|
export {};
|
|
15
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* - list_local_locales: Scan project for locale files
|
|
10
10
|
* - get_translation_status: Compare source vs target locales
|
|
11
11
|
* - sync_translations: Sync translations via LangAPI API
|
|
12
|
-
* - get_diff: Compare source against sync cache for delta detection
|
|
13
12
|
*/
|
|
14
13
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
15
14
|
import { createServer } from "./server.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAYxC"}
|
package/dist/server.js
CHANGED
|
@@ -5,7 +5,6 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
5
5
|
import { registerListLocalLocales } from "./tools/list-local-locales.js";
|
|
6
6
|
import { registerGetTranslationStatus } from "./tools/get-translation-status.js";
|
|
7
7
|
import { registerSyncTranslations } from "./tools/sync-translations.js";
|
|
8
|
-
import { registerGetDiff } from "./tools/get-diff.js";
|
|
9
8
|
/**
|
|
10
9
|
* Create and configure the MCP server
|
|
11
10
|
*/
|
|
@@ -18,7 +17,6 @@ export function createServer() {
|
|
|
18
17
|
registerListLocalLocales(server);
|
|
19
18
|
registerGetTranslationStatus(server);
|
|
20
19
|
registerSyncTranslations(server);
|
|
21
|
-
registerGetDiff(server);
|
|
22
20
|
return server;
|
|
23
21
|
}
|
|
24
22
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,qBAAqB;IACrB,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -11,11 +11,15 @@ declare const SyncTranslationsSchema: z.ZodObject<{
|
|
|
11
11
|
project_path: z.ZodOptional<z.ZodString>;
|
|
12
12
|
write_to_files: z.ZodDefault<z.ZodBoolean>;
|
|
13
13
|
skip_keys: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
|
|
14
|
+
hard_sync: z.ZodDefault<z.ZodBoolean>;
|
|
15
|
+
precision: z.ZodDefault<z.ZodEnum<["standard", "extra"]>>;
|
|
14
16
|
}, "strip", z.ZodTypeAny, {
|
|
15
17
|
source_lang: string;
|
|
16
18
|
target_langs: string[];
|
|
17
19
|
dry_run: boolean;
|
|
18
20
|
write_to_files: boolean;
|
|
21
|
+
hard_sync: boolean;
|
|
22
|
+
precision: "standard" | "extra";
|
|
19
23
|
project_path?: string | undefined;
|
|
20
24
|
skip_keys?: Record<string, string[]> | undefined;
|
|
21
25
|
}, {
|
|
@@ -25,11 +29,36 @@ declare const SyncTranslationsSchema: z.ZodObject<{
|
|
|
25
29
|
dry_run?: boolean | undefined;
|
|
26
30
|
write_to_files?: boolean | undefined;
|
|
27
31
|
skip_keys?: Record<string, string[]> | undefined;
|
|
32
|
+
hard_sync?: boolean | undefined;
|
|
33
|
+
precision?: "standard" | "extra" | undefined;
|
|
28
34
|
}>;
|
|
29
35
|
export type SyncTranslationsInput = z.infer<typeof SyncTranslationsSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* Get keys to skip for a specific language
|
|
38
|
+
*/
|
|
39
|
+
declare function getSkipKeysForLang(skipKeys: Record<string, string[]> | undefined, lang: string): Set<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Deep merge two objects, with source values overriding target values
|
|
42
|
+
*/
|
|
43
|
+
declare function deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove keys from a nested object using flattened key notation (e.g., "greeting.hello")
|
|
46
|
+
*/
|
|
47
|
+
declare function removeKeysFromObject(obj: Record<string, unknown>, keysToRemove: string[]): Record<string, unknown>;
|
|
48
|
+
/**
|
|
49
|
+
* Remove any keys from target that don't exist in source (to keep target in sync with source structure)
|
|
50
|
+
*/
|
|
51
|
+
declare function removeExtraKeys(targetObj: Record<string, unknown>, sourceKeys: Set<string>): Record<string, unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* Compute target file path by replacing source language with target language.
|
|
54
|
+
* Handles both directory-based (locales/en/file.json) and flat (locales/en.json) structures.
|
|
55
|
+
* Also supports Flutter ARB files with underscore naming (app_en.arb → app_ko.arb).
|
|
56
|
+
* Also supports iOS/macOS .lproj directories (en.lproj/Localizable.strings → de.lproj/Localizable.strings).
|
|
57
|
+
*/
|
|
58
|
+
declare function computeTargetFilePath(sourcePath: string, sourceLang: string, targetLang: string): string | null;
|
|
30
59
|
/**
|
|
31
60
|
* Register the sync_translations tool with the MCP server
|
|
32
61
|
*/
|
|
33
62
|
export declare function registerSyncTranslations(server: McpServer): void;
|
|
34
|
-
export {};
|
|
63
|
+
export { computeTargetFilePath, deepMerge, removeExtraKeys, removeKeysFromObject, getSkipKeysForLang, };
|
|
35
64
|
//# sourceMappingURL=sync-translations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-translations.d.ts","sourceRoot":"","sources":["../../src/tools/sync-translations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-translations.d.ts","sourceRoot":"","sources":["../../src/tools/sync-translations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmDzE,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC1B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAmE3E;;GAEG;AACH,iBAAS,kBAAkB,CACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,EAC9C,IAAI,EAAE,MAAM,GACX,GAAG,CAAC,MAAM,CAAC,CAIb;AAED;;GAEG;AACH,iBAAS,SAAS,CAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BzB;AAED;;GAEG;AACH,iBAAS,oBAAoB,CAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBzB;AAED;;GAEG;AACH,iBAAS,eAAe,CACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED;;;;;GAKG;AACH,iBAAS,qBAAqB,CAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAyCf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAi4BhE;AAGD,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,CAAC"}
|