@intlpullhq/cli 0.1.9 → 0.1.11
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 +4 -0
- package/dist/{api-77ZWU4IB.js → api-BTTALAAQ.js} +5 -5
- package/dist/{chunk-BULIQM4U.js → chunk-DSTFGTTF.js} +1 -1
- package/dist/{chunk-WSY27J6N.js → chunk-OMGFIATE.js} +1 -1
- package/dist/{chunk-WVCVQFBI.js → chunk-QOUDOZX4.js} +14 -13
- package/dist/{chunk-KCZQUMQP.js → chunk-RQI7KQQ5.js} +1 -1
- package/dist/{chunk-KIDP7N6D.js → chunk-ZYZSONV6.js} +6 -0
- package/dist/index.js +73 -26
- package/dist/{keys-P3F5IKS2.js → keys-WDJKXFH3.js} +2 -2
- package/dist/{projects-AMQMORAR.js → projects-C6BDSZVS.js} +2 -2
- package/dist/{translations-7GWEFVRG.js → translations-45NWLMJR.js} +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -193,6 +193,9 @@ npx @intlpullhq/cli download --format json --output ./messages
|
|
|
193
193
|
# Download specific languages
|
|
194
194
|
npx @intlpullhq/cli download --languages en,es,fr
|
|
195
195
|
|
|
196
|
+
# Download specific namespaces
|
|
197
|
+
npx @intlpullhq/cli download --namespace common,auth
|
|
198
|
+
|
|
196
199
|
# Quiet mode for CI
|
|
197
200
|
npx @intlpullhq/cli download --quiet
|
|
198
201
|
|
|
@@ -207,6 +210,7 @@ npx @intlpullhq/cli pull
|
|
|
207
210
|
| `--format <format>` | Output format: `json`, `yaml`, `ts` (default: `json`) |
|
|
208
211
|
| `--output <dir>` | Output directory (auto-detected from framework) |
|
|
209
212
|
| `--languages <langs>` | Languages to download (comma-separated) |
|
|
213
|
+
| `--namespace <namespaces>` | Namespaces to download (comma-separated, defaults to all) |
|
|
210
214
|
| `--branch <branch>` | Translation branch to download from |
|
|
211
215
|
| `--platform <platform>` | Platform variant: `default`, `ios`, `android`, `web` |
|
|
212
216
|
| `--no-parallel` | Disable parallel fetching |
|
|
@@ -12,19 +12,19 @@ import {
|
|
|
12
12
|
WebhooksApi,
|
|
13
13
|
WorkflowsApi,
|
|
14
14
|
createApiClient
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QOUDOZX4.js";
|
|
16
16
|
import {
|
|
17
17
|
ProjectsApi
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-RQI7KQQ5.js";
|
|
19
19
|
import {
|
|
20
20
|
TranslationsApi
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-OMGFIATE.js";
|
|
22
22
|
import {
|
|
23
23
|
KeysApi
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-DSTFGTTF.js";
|
|
25
25
|
import {
|
|
26
26
|
BaseApiClient
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-ZYZSONV6.js";
|
|
28
28
|
import "./chunk-IWYURZV2.js";
|
|
29
29
|
export {
|
|
30
30
|
ApiClient,
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ProjectsApi
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RQI7KQQ5.js";
|
|
4
4
|
import {
|
|
5
5
|
TranslationsApi
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OMGFIATE.js";
|
|
7
7
|
import {
|
|
8
8
|
KeysApi
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DSTFGTTF.js";
|
|
10
10
|
import {
|
|
11
11
|
BaseApiClient
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZYZSONV6.js";
|
|
13
13
|
import {
|
|
14
14
|
getAuthErrorMessage
|
|
15
15
|
} from "./chunk-IWYURZV2.js";
|
|
@@ -21,7 +21,8 @@ var ImportExportApi = class extends BaseApiClient {
|
|
|
21
21
|
const params = new URLSearchParams();
|
|
22
22
|
params.set("format", options.format);
|
|
23
23
|
if (options.languages?.length) {
|
|
24
|
-
|
|
24
|
+
const normalizedLanguages = options.languages.map((lang) => lang.trim());
|
|
25
|
+
params.set("languages", normalizedLanguages.join(","));
|
|
25
26
|
}
|
|
26
27
|
if (options.namespaces?.length) {
|
|
27
28
|
params.set("namespaces", options.namespaces.join(","));
|
|
@@ -493,7 +494,7 @@ var SnapshotsApi = class extends BaseApiClient {
|
|
|
493
494
|
*/
|
|
494
495
|
async createSnapshot(projectId, data) {
|
|
495
496
|
const response = await this.request(
|
|
496
|
-
`/projects/${projectId}/snapshots`,
|
|
497
|
+
`/api/v1/projects/${projectId}/snapshots`,
|
|
497
498
|
{
|
|
498
499
|
method: "POST",
|
|
499
500
|
body: JSON.stringify(data)
|
|
@@ -506,18 +507,18 @@ var SnapshotsApi = class extends BaseApiClient {
|
|
|
506
507
|
*/
|
|
507
508
|
async listSnapshots(projectId) {
|
|
508
509
|
const response = await this.request(
|
|
509
|
-
`/projects/${projectId}/snapshots`,
|
|
510
|
+
`/api/v1/projects/${projectId}/snapshots`,
|
|
510
511
|
{
|
|
511
512
|
method: "GET"
|
|
512
513
|
}
|
|
513
514
|
);
|
|
514
|
-
return response
|
|
515
|
+
return response?.snapshots ?? [];
|
|
515
516
|
}
|
|
516
517
|
/**
|
|
517
518
|
* Get snapshot details
|
|
518
519
|
*/
|
|
519
520
|
async getSnapshot(projectId, snapshotId) {
|
|
520
|
-
return this.request(`/projects/${projectId}/snapshots/${snapshotId}`, {
|
|
521
|
+
return this.request(`/api/v1/projects/${projectId}/snapshots/${snapshotId}`, {
|
|
521
522
|
method: "GET"
|
|
522
523
|
});
|
|
523
524
|
}
|
|
@@ -526,7 +527,7 @@ var SnapshotsApi = class extends BaseApiClient {
|
|
|
526
527
|
*/
|
|
527
528
|
async restoreSnapshot(projectId, snapshotId) {
|
|
528
529
|
return this.request(
|
|
529
|
-
`/projects/${projectId}/snapshots/${snapshotId}/restore`,
|
|
530
|
+
`/api/v1/projects/${projectId}/snapshots/${snapshotId}/restore`,
|
|
530
531
|
{
|
|
531
532
|
method: "POST"
|
|
532
533
|
}
|
|
@@ -536,7 +537,7 @@ var SnapshotsApi = class extends BaseApiClient {
|
|
|
536
537
|
* Delete a snapshot
|
|
537
538
|
*/
|
|
538
539
|
async deleteSnapshot(projectId, snapshotId) {
|
|
539
|
-
await this.request(`/projects/${projectId}/snapshots/${snapshotId}`, {
|
|
540
|
+
await this.request(`/api/v1/projects/${projectId}/snapshots/${snapshotId}`, {
|
|
540
541
|
method: "DELETE"
|
|
541
542
|
});
|
|
542
543
|
}
|
|
@@ -595,8 +596,8 @@ var TMApi = class extends BaseApiClient {
|
|
|
595
596
|
* This fetches keys without translations and applies TM matches
|
|
596
597
|
*/
|
|
597
598
|
async applyTMMatches(projectId, data) {
|
|
598
|
-
const { KeysApi: KeysApi2 } = await import("./keys-
|
|
599
|
-
const { TranslationsApi: TranslationsApi2 } = await import("./translations-
|
|
599
|
+
const { KeysApi: KeysApi2 } = await import("./keys-WDJKXFH3.js");
|
|
600
|
+
const { TranslationsApi: TranslationsApi2 } = await import("./translations-45NWLMJR.js");
|
|
600
601
|
const keysApi = new KeysApi2();
|
|
601
602
|
const translationsApi = new TranslationsApi2();
|
|
602
603
|
const { keys } = await keysApi.listKeys(projectId, {
|
|
@@ -130,6 +130,9 @@ var BaseApiClient = class {
|
|
|
130
130
|
const contentType = response.headers.get("content-type") || "";
|
|
131
131
|
if (contentType.includes("application/json")) {
|
|
132
132
|
const jsonData = await response.json();
|
|
133
|
+
if (jsonData.error && typeof jsonData.error === "string") {
|
|
134
|
+
throw new Error(jsonData.error);
|
|
135
|
+
}
|
|
133
136
|
if (jsonData.url && typeof jsonData.url === "string") {
|
|
134
137
|
const fileResponse = await fetch(jsonData.url);
|
|
135
138
|
if (!fileResponse.ok) {
|
|
@@ -137,6 +140,9 @@ var BaseApiClient = class {
|
|
|
137
140
|
}
|
|
138
141
|
return fileResponse.blob();
|
|
139
142
|
}
|
|
143
|
+
if (typeof jsonData === "object" && Object.keys(jsonData).length === 0) {
|
|
144
|
+
throw new Error("no translations found for the requested languages");
|
|
145
|
+
}
|
|
140
146
|
const jsonString = JSON.stringify(jsonData, null, 2);
|
|
141
147
|
return new Blob([jsonString], { type: "application/json" });
|
|
142
148
|
}
|
package/dist/index.js
CHANGED
|
@@ -5,15 +5,15 @@ import {
|
|
|
5
5
|
TMApi,
|
|
6
6
|
WebhooksApi,
|
|
7
7
|
createApiClient
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QOUDOZX4.js";
|
|
9
9
|
import {
|
|
10
10
|
ProjectsApi
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-RQI7KQQ5.js";
|
|
12
|
+
import "./chunk-OMGFIATE.js";
|
|
13
13
|
import {
|
|
14
14
|
KeysApi
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
} from "./chunk-DSTFGTTF.js";
|
|
16
|
+
import "./chunk-ZYZSONV6.js";
|
|
17
17
|
import {
|
|
18
18
|
detectFramework,
|
|
19
19
|
getAuthErrorMessage,
|
|
@@ -1296,7 +1296,14 @@ async function fetchTranslationsParallel(projectId, apiUrl, apiKey, options) {
|
|
|
1296
1296
|
const availableLanguages = projectData.languages?.map((l) => l.code) || ["en"];
|
|
1297
1297
|
const targetLanguages = options?.languages?.length ? options.languages : availableLanguages;
|
|
1298
1298
|
const namespacesResult = await fetchNamespaces(projectId, apiUrl, apiKey);
|
|
1299
|
-
|
|
1299
|
+
let namespaces = namespacesResult.namespaces;
|
|
1300
|
+
if (options?.namespaces?.length) {
|
|
1301
|
+
const requestedNamespaces = new Set(options.namespaces);
|
|
1302
|
+
namespaces = namespaces.filter((ns) => requestedNamespaces.has(ns));
|
|
1303
|
+
const missingNamespaces = options.namespaces.filter((ns) => !namespacesResult.namespaces.includes(ns));
|
|
1304
|
+
if (missingNamespaces.length > 0) {
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1300
1307
|
const taskParams = [];
|
|
1301
1308
|
for (const lang of targetLanguages) {
|
|
1302
1309
|
for (const ns of namespaces) {
|
|
@@ -2599,6 +2606,7 @@ Or use a project-scoped API key for automatic selection.`
|
|
|
2599
2606
|
let version;
|
|
2600
2607
|
let namespaceCount = 0;
|
|
2601
2608
|
let namespaces = [];
|
|
2609
|
+
const targetNamespaces = options.namespaces ? options.namespaces.split(",").map((n) => n.trim()).filter(Boolean) : void 0;
|
|
2602
2610
|
if (useParallel) {
|
|
2603
2611
|
const result = await fetchTranslationsParallel(
|
|
2604
2612
|
projectId,
|
|
@@ -2608,6 +2616,7 @@ Or use a project-scoped API key for automatic selection.`
|
|
|
2608
2616
|
languages: targetLanguages,
|
|
2609
2617
|
platform,
|
|
2610
2618
|
branch,
|
|
2619
|
+
namespaces: targetNamespaces,
|
|
2611
2620
|
onProgress: (completed, total) => {
|
|
2612
2621
|
setState((s) => ({
|
|
2613
2622
|
...s,
|
|
@@ -4807,8 +4816,8 @@ function ExportComponent({ options }) {
|
|
|
4807
4816
|
json: "json",
|
|
4808
4817
|
yaml: "yaml",
|
|
4809
4818
|
ts: "ts",
|
|
4810
|
-
android: "
|
|
4811
|
-
ios: "
|
|
4819
|
+
android: "xml",
|
|
4820
|
+
ios: "strings",
|
|
4812
4821
|
xliff: "xliff",
|
|
4813
4822
|
po: "po",
|
|
4814
4823
|
arb: "arb",
|
|
@@ -9259,6 +9268,22 @@ async function fetchProjects7(apiUrl, apiKey) {
|
|
|
9259
9268
|
return data.projects || [];
|
|
9260
9269
|
}
|
|
9261
9270
|
var isInteractiveTerminal7 = process.stdin.isTTY && process.stdout.isTTY;
|
|
9271
|
+
var NON_LANGUAGE_FIELDS = /* @__PURE__ */ new Set(["url", "filename", "expires_at", "size", "download_url", "content_type", "error", "message"]);
|
|
9272
|
+
function isTranslationData(value) {
|
|
9273
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
9274
|
+
return false;
|
|
9275
|
+
}
|
|
9276
|
+
const entries = Object.entries(value);
|
|
9277
|
+
if (entries.length === 0) return false;
|
|
9278
|
+
const validCount = entries.filter(([, v]) => typeof v === "string" || typeof v === "object" && v !== null).length;
|
|
9279
|
+
return validCount >= entries.length * 0.5;
|
|
9280
|
+
}
|
|
9281
|
+
function isValidLanguageCode(key) {
|
|
9282
|
+
if (NON_LANGUAGE_FIELDS.has(key)) {
|
|
9283
|
+
return false;
|
|
9284
|
+
}
|
|
9285
|
+
return /^[a-z]{2,3}(-[A-Z]{2,3}|-[A-Za-z]{4})?$/i.test(key);
|
|
9286
|
+
}
|
|
9262
9287
|
async function fetchTranslationsFromExport(projectId, apiUrl, apiKey, options) {
|
|
9263
9288
|
const params = new URLSearchParams();
|
|
9264
9289
|
params.set("format", "json");
|
|
@@ -9286,9 +9311,16 @@ async function fetchTranslationsFromExport(projectId, apiUrl, apiKey, options) {
|
|
|
9286
9311
|
data = { [lang]: data };
|
|
9287
9312
|
}
|
|
9288
9313
|
}
|
|
9289
|
-
const
|
|
9290
|
-
const
|
|
9291
|
-
|
|
9314
|
+
const filteredData = {};
|
|
9315
|
+
for (const key of Object.keys(data)) {
|
|
9316
|
+
const value = data[key];
|
|
9317
|
+
if (isValidLanguageCode(key) && isTranslationData(value)) {
|
|
9318
|
+
filteredData[key] = value;
|
|
9319
|
+
}
|
|
9320
|
+
}
|
|
9321
|
+
const languages = Object.keys(filteredData);
|
|
9322
|
+
const keyCount = languages.length > 0 && filteredData[languages[0]] ? Object.keys(filteredData[languages[0]]).length : 0;
|
|
9323
|
+
return { bundle: filteredData, languages, keyCount };
|
|
9292
9324
|
}
|
|
9293
9325
|
async function fetchNamespaces2(projectId, apiUrl, apiKey) {
|
|
9294
9326
|
const response = await fetch(`${apiUrl}/api/v1/projects/${projectId}/namespaces`, {
|
|
@@ -11707,7 +11739,7 @@ var KeysCreate = ({ keyName, options }) => {
|
|
|
11707
11739
|
}
|
|
11708
11740
|
const api = new KeysApi();
|
|
11709
11741
|
const tags = options.tags ? options.tags.split(",").map((t) => t.trim()) : void 0;
|
|
11710
|
-
const { ProjectsApi: ProjectsApi2 } = await import("./projects-
|
|
11742
|
+
const { ProjectsApi: ProjectsApi2 } = await import("./projects-C6BDSZVS.js");
|
|
11711
11743
|
const projectsApi = new ProjectsApi2();
|
|
11712
11744
|
const project = await projectsApi.getProject(projectId);
|
|
11713
11745
|
const created = await api.createKey(projectId, {
|
|
@@ -12610,37 +12642,40 @@ var TMStatsComponent = ({ options }) => {
|
|
|
12610
12642
|
if (!stats) {
|
|
12611
12643
|
return /* @__PURE__ */ jsx50(Text47, { children: "No statistics available" });
|
|
12612
12644
|
}
|
|
12645
|
+
const totalEntries = stats.total_entries ?? 0;
|
|
12646
|
+
const avgQuality = stats.avg_quality ?? 0;
|
|
12647
|
+
const languagePairs = stats.language_pairs ?? [];
|
|
12613
12648
|
return /* @__PURE__ */ jsxs47(Box44, { flexDirection: "column", children: [
|
|
12614
12649
|
/* @__PURE__ */ jsx50(Text47, { bold: true, children: "Translation Memory Statistics" }),
|
|
12615
12650
|
/* @__PURE__ */ jsx50(Newline6, {}),
|
|
12616
12651
|
/* @__PURE__ */ jsxs47(Text47, { children: [
|
|
12617
12652
|
/* @__PURE__ */ jsx50(Text47, { bold: true, children: "Total Entries:" }),
|
|
12618
12653
|
" ",
|
|
12619
|
-
|
|
12654
|
+
totalEntries.toLocaleString()
|
|
12620
12655
|
] }),
|
|
12621
12656
|
/* @__PURE__ */ jsxs47(Text47, { children: [
|
|
12622
12657
|
/* @__PURE__ */ jsx50(Text47, { bold: true, children: "Average Quality:" }),
|
|
12623
12658
|
" ",
|
|
12624
|
-
|
|
12659
|
+
avgQuality.toFixed(1),
|
|
12625
12660
|
"%"
|
|
12626
12661
|
] }),
|
|
12627
12662
|
/* @__PURE__ */ jsx50(Newline6, {}),
|
|
12628
|
-
|
|
12663
|
+
languagePairs.length > 0 && /* @__PURE__ */ jsxs47(Fragment8, { children: [
|
|
12629
12664
|
/* @__PURE__ */ jsx50(Text47, { bold: true, children: "Language Pairs:" }),
|
|
12630
12665
|
/* @__PURE__ */ jsx50(Newline6, {}),
|
|
12631
|
-
/* @__PURE__ */ jsx50(Box44, { flexDirection: "column", children:
|
|
12666
|
+
/* @__PURE__ */ jsx50(Box44, { flexDirection: "column", children: languagePairs.map((pair, idx) => /* @__PURE__ */ jsxs47(Text47, { children: [
|
|
12632
12667
|
/* @__PURE__ */ jsxs47(Text47, { color: "cyan", children: [
|
|
12633
12668
|
pair.source,
|
|
12634
12669
|
" \u2192 ",
|
|
12635
12670
|
pair.target
|
|
12636
12671
|
] }),
|
|
12637
12672
|
": ",
|
|
12638
|
-
pair.count.toLocaleString(),
|
|
12673
|
+
(pair.count ?? 0).toLocaleString(),
|
|
12639
12674
|
" ",
|
|
12640
12675
|
pair.count === 1 ? "entry" : "entries"
|
|
12641
12676
|
] }, idx)) })
|
|
12642
12677
|
] }),
|
|
12643
|
-
|
|
12678
|
+
languagePairs.length === 0 && /* @__PURE__ */ jsx50(Text47, { dimColor: true, children: "No language pairs found. Add entries with `intlpull tm add`" })
|
|
12644
12679
|
] });
|
|
12645
12680
|
};
|
|
12646
12681
|
function runTMStats(options) {
|
|
@@ -13047,7 +13082,12 @@ var SnapshotsList = ({ options }) => {
|
|
|
13047
13082
|
const result = await api.listSnapshots(projectId);
|
|
13048
13083
|
setSnapshots(result);
|
|
13049
13084
|
} catch (err) {
|
|
13050
|
-
|
|
13085
|
+
const errorMessage = err instanceof Error ? err.message : "Failed to list snapshots";
|
|
13086
|
+
if (errorMessage.includes("404")) {
|
|
13087
|
+
setError("Snapshots feature is not available for this project. This feature may require a plan upgrade or is not yet enabled.");
|
|
13088
|
+
} else {
|
|
13089
|
+
setError(errorMessage);
|
|
13090
|
+
}
|
|
13051
13091
|
} finally {
|
|
13052
13092
|
setIsLoading(false);
|
|
13053
13093
|
}
|
|
@@ -13412,7 +13452,7 @@ var WebhooksList = ({ options }) => {
|
|
|
13412
13452
|
}
|
|
13413
13453
|
const api = new WebhooksApi();
|
|
13414
13454
|
const result = await api.listWebhooks(projectId);
|
|
13415
|
-
setWebhooks(result
|
|
13455
|
+
setWebhooks(result?.webhooks ?? []);
|
|
13416
13456
|
} catch (err) {
|
|
13417
13457
|
setError(err instanceof Error ? err.message : "Failed to fetch webhooks");
|
|
13418
13458
|
} finally {
|
|
@@ -13870,10 +13910,16 @@ var ContributorsList = ({ options }) => {
|
|
|
13870
13910
|
console.log(JSON.stringify(members, null, 2));
|
|
13871
13911
|
return null;
|
|
13872
13912
|
}
|
|
13913
|
+
const formatJoinedDate = (dateString) => {
|
|
13914
|
+
if (!dateString) return "Unknown";
|
|
13915
|
+
const date = new Date(dateString);
|
|
13916
|
+
if (isNaN(date.getTime())) return "Unknown";
|
|
13917
|
+
return date.toLocaleDateString();
|
|
13918
|
+
};
|
|
13873
13919
|
const data = members.map((member) => {
|
|
13874
13920
|
const emailDisplay = member.email.length > 25 ? member.email.substring(0, 22) + "..." : member.email;
|
|
13875
13921
|
const languagesDisplay = member.languages && member.languages.length > 0 ? member.languages.length > 3 ? member.languages.slice(0, 3).join(",") + ` +${member.languages.length - 3}` : member.languages.join(",") : "All";
|
|
13876
|
-
const joinedDate =
|
|
13922
|
+
const joinedDate = formatJoinedDate(member.joined_at);
|
|
13877
13923
|
return {
|
|
13878
13924
|
Email: emailDisplay,
|
|
13879
13925
|
Name: member.name || "-",
|
|
@@ -14240,7 +14286,7 @@ contributorsCommand.command("remove <userId>").description("Remove a team member
|
|
|
14240
14286
|
|
|
14241
14287
|
// src/index.tsx
|
|
14242
14288
|
var program = new Command7();
|
|
14243
|
-
program.name("intlpull").description("Intelligent i18n CLI for modern apps").version("0.1.
|
|
14289
|
+
program.name("intlpull").description("Intelligent i18n CLI for modern apps").version("0.1.11").option("--env-file <path>", "Path to custom env file (e.g., .env.production)").hook("preAction", (thisCommand) => {
|
|
14244
14290
|
const envFile = thisCommand.opts().envFile;
|
|
14245
14291
|
if (envFile) {
|
|
14246
14292
|
setCustomEnvFile(envFile);
|
|
@@ -14272,7 +14318,7 @@ program.command("logout").description("Clear stored credentials").action(async (
|
|
|
14272
14318
|
});
|
|
14273
14319
|
program.command("whoami").description("Show current authenticated user").action(async () => {
|
|
14274
14320
|
const { getResolvedApiKey: getResolvedApiKey2, getAuthErrorMessage: getAuthErrorMessage2 } = await import("./config-F3O3XWYX.js");
|
|
14275
|
-
const { createApiClient: createApiClient2 } = await import("./api-
|
|
14321
|
+
const { createApiClient: createApiClient2 } = await import("./api-BTTALAAQ.js");
|
|
14276
14322
|
const resolved = getResolvedApiKey2();
|
|
14277
14323
|
if (!resolved) {
|
|
14278
14324
|
console.log(getAuthErrorMessage2());
|
|
@@ -14318,7 +14364,7 @@ program.command("upload").description("Upload translation keys to IntlPull (auto
|
|
|
14318
14364
|
tmDryRun: options.tmDryRun
|
|
14319
14365
|
});
|
|
14320
14366
|
});
|
|
14321
|
-
program.command("download").description("Download translations from IntlPull (auto-detects project, framework, and languages)").option("--project <id>", "Project ID (auto-detected with project-scoped API key)").option("--format <format>", "Output format (json|yaml|ts)", "json").option("--output <dir>", "Output directory (auto-detected from framework)").option("--languages <langs>", "Languages to download (comma-separated, defaults to all)").option("--branch <branch>", "Translation branch to download from").option("--platform <platform>", "Platform variant (default|ios|android|web)").option("--no-parallel", "Disable parallel fetching (use single request)").option("-i, --interactive", "Run in interactive mode with prompts").option("-q, --quiet", "Suppress output except errors").option("--clean-orphans [mode]", 'Remove orphaned files (files not in remote). Use "dry-run" to preview').option("-f, --force", "Skip confirmation prompts for destructive operations").option("--translation-key-prefix <prefix>", 'Strip this prefix from keys (e.g., "checkout" makes "checkout.submit" \u2192 "submit")').option("--filter-by-prefix <prefix>", "Only download keys starting with this prefix").action((options) => {
|
|
14367
|
+
program.command("download").description("Download translations from IntlPull (auto-detects project, framework, and languages)").option("--project <id>", "Project ID (auto-detected with project-scoped API key)").option("--format <format>", "Output format (json|yaml|ts)", "json").option("--output <dir>", "Output directory (auto-detected from framework)").option("--languages <langs>", "Languages to download (comma-separated, defaults to all)").option("--namespace <namespaces>", "Namespaces to download (comma-separated, defaults to all)").option("--branch <branch>", "Translation branch to download from").option("--platform <platform>", "Platform variant (default|ios|android|web)").option("--no-parallel", "Disable parallel fetching (use single request)").option("-i, --interactive", "Run in interactive mode with prompts").option("-q, --quiet", "Suppress output except errors").option("--clean-orphans [mode]", 'Remove orphaned files (files not in remote). Use "dry-run" to preview').option("-f, --force", "Skip confirmation prompts for destructive operations").option("--translation-key-prefix <prefix>", 'Strip this prefix from keys (e.g., "checkout" makes "checkout.submit" \u2192 "submit")').option("--filter-by-prefix <prefix>", "Only download keys starting with this prefix").action((options) => {
|
|
14322
14368
|
let cleanOrphans;
|
|
14323
14369
|
if (options.cleanOrphans === true || options.cleanOrphans === "") {
|
|
14324
14370
|
cleanOrphans = true;
|
|
@@ -14330,6 +14376,7 @@ program.command("download").description("Download translations from IntlPull (au
|
|
|
14330
14376
|
format: options.format,
|
|
14331
14377
|
output: options.output,
|
|
14332
14378
|
languages: options.languages,
|
|
14379
|
+
namespaces: options.namespace,
|
|
14333
14380
|
branch: options.branch,
|
|
14334
14381
|
platform: options.platform,
|
|
14335
14382
|
parallel: options.parallel,
|
|
@@ -14464,7 +14511,7 @@ projects.command("list").description("List all projects").action(async () => {
|
|
|
14464
14511
|
console.log("Not authenticated. Run `npx @intlpullhq/cli login` first.");
|
|
14465
14512
|
return;
|
|
14466
14513
|
}
|
|
14467
|
-
const { createApiClient: createApiClient2 } = await import("./api-
|
|
14514
|
+
const { createApiClient: createApiClient2 } = await import("./api-BTTALAAQ.js");
|
|
14468
14515
|
try {
|
|
14469
14516
|
const api = createApiClient2();
|
|
14470
14517
|
const { projects: projects2 } = await api.listProjects();
|
|
@@ -14490,7 +14537,7 @@ projects.command("create <name>").description("Create a new project").option("--
|
|
|
14490
14537
|
console.log("Not authenticated. Run `npx @intlpullhq/cli login` first.");
|
|
14491
14538
|
return;
|
|
14492
14539
|
}
|
|
14493
|
-
const { createApiClient: createApiClient2 } = await import("./api-
|
|
14540
|
+
const { createApiClient: createApiClient2 } = await import("./api-BTTALAAQ.js");
|
|
14494
14541
|
try {
|
|
14495
14542
|
const api = createApiClient2();
|
|
14496
14543
|
const languages = options.languages.split(",").map((l) => l.trim());
|
package/package.json
CHANGED