polycast-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -0
- package/dist/api.d.ts +97 -0
- package/dist/api.js +59 -0
- package/dist/api.js.map +1 -0
- package/dist/commands.d.ts +27 -0
- package/dist/commands.js +612 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/keychain.d.ts +3 -0
- package/dist/keychain.js +60 -0
- package/dist/keychain.js.map +1 -0
- package/dist/scan.d.ts +27 -0
- package/dist/scan.js +164 -0
- package/dist/scan.js.map +1 -0
- package/dist/ui.d.ts +71 -0
- package/dist/ui.js +214 -0
- package/dist/ui.js.map +1 -0
- package/dist/util.d.ts +13 -0
- package/dist/util.js +61 -0
- package/dist/util.js.map +1 -0
- package/dist/xcstrings.d.ts +66 -0
- package/dist/xcstrings.js +110 -0
- package/dist/xcstrings.js.map +1 -0
- package/package.json +44 -0
package/dist/ui.js
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* polycast CLI design system — hand-rolled, zero deps.
|
|
3
|
+
* Sibling aesthetic to geminio (blue) and gringott (gold): polycast is
|
|
4
|
+
* violet. 2-space page margin, 4-space data rows, muted labels,
|
|
5
|
+
* near-white values, ◴ carriage-return progress on stderr.
|
|
6
|
+
*/
|
|
7
|
+
import process from "node:process";
|
|
8
|
+
const isTTY = process.stdout.isTTY === true;
|
|
9
|
+
const depth = isTTY && !process.env.NO_COLOR ? (process.stdout.getColorDepth?.() ?? 8) : 1;
|
|
10
|
+
const COLOR = depth >= 4;
|
|
11
|
+
const TRUE = depth >= 24;
|
|
12
|
+
const hex = (h) => {
|
|
13
|
+
const [r, g2, b] = [1, 3, 5].map((i) => parseInt(h.slice(i, i + 2), 16));
|
|
14
|
+
return (s) => !COLOR ? s : TRUE
|
|
15
|
+
? `\x1b[38;2;${r};${g2};${b}m${s}\x1b[39m`
|
|
16
|
+
: `\x1b[3${nearest16(r, g2, b)}m${s}\x1b[39m`;
|
|
17
|
+
};
|
|
18
|
+
const nearest16 = (r, g2, b) => r > 180 && g2 > 180 && b > 180 ? 7 : r > 150 && b > 150 ? 5 : b > 150 ? 4 : r > 150 && g2 > 120 ? 3 : g2 > 120 ? 2 : r > 120 ? 1 : 6;
|
|
19
|
+
const sgr = (open, close) => (s) => COLOR ? `\x1b[${open}m${s}\x1b[${close}m` : s;
|
|
20
|
+
/** Palette — polycast violet. */
|
|
21
|
+
export const c = {
|
|
22
|
+
accent: hex("#8C7CF8"), // polycast violet
|
|
23
|
+
accent2: hex("#B4A9FF"), // lighter violet, secondary emphasis
|
|
24
|
+
positive: hex("#5DD39E"),
|
|
25
|
+
negative: hex("#E6654B"),
|
|
26
|
+
muted: hex("#8A8A8A"),
|
|
27
|
+
text: hex("#EAEAEA"),
|
|
28
|
+
danger: hex("#FF8C42"),
|
|
29
|
+
};
|
|
30
|
+
export const bold = sgr("1", "22");
|
|
31
|
+
export const dim = sgr("2", "22");
|
|
32
|
+
export const green = c.positive;
|
|
33
|
+
export const red = c.negative;
|
|
34
|
+
export const yellow = c.danger;
|
|
35
|
+
export const cyan = c.accent2;
|
|
36
|
+
export const gray = c.muted;
|
|
37
|
+
export const accent = c.accent;
|
|
38
|
+
export const brand = (s) => bold(c.accent(s));
|
|
39
|
+
/** Glyph vocabulary. */
|
|
40
|
+
export const g = {
|
|
41
|
+
filled: "✓", rejected: "✗", warn: "⚠", pending: "◴",
|
|
42
|
+
bullet: "•", sep: "·", arrow: "→", dotActive: "●", tag: "▸", verdict: "▍",
|
|
43
|
+
};
|
|
44
|
+
export const S = {
|
|
45
|
+
ok: c.positive(g.filled),
|
|
46
|
+
fail: c.negative(g.rejected),
|
|
47
|
+
warn: c.danger(g.warn),
|
|
48
|
+
arrow: c.muted(g.arrow),
|
|
49
|
+
bullet: c.accent(g.dotActive),
|
|
50
|
+
diamond: c.accent(g.tag),
|
|
51
|
+
dot: c.muted(g.sep),
|
|
52
|
+
};
|
|
53
|
+
// ---- width-aware padding (ANSI + CJK + flags) ----
|
|
54
|
+
const strip = (s) => s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
55
|
+
const visWidth = (s) => {
|
|
56
|
+
let w = 0;
|
|
57
|
+
for (const ch of strip(s)) {
|
|
58
|
+
const cp = ch.codePointAt(0);
|
|
59
|
+
w += (cp >= 0x1100 && (cp <= 0x115f || (cp >= 0x2e80 && cp <= 0xa4cf)
|
|
60
|
+
|| (cp >= 0xac00 && cp <= 0xd7a3) || (cp >= 0xf900 && cp <= 0xfaff)
|
|
61
|
+
|| (cp >= 0xfe30 && cp <= 0xfe4f) || (cp >= 0xff00 && cp <= 0xff60)
|
|
62
|
+
|| (cp >= 0x1f1e6 && cp <= 0x1f1ff))) ? 2 : 1;
|
|
63
|
+
}
|
|
64
|
+
return w;
|
|
65
|
+
};
|
|
66
|
+
export const pad = (s, width) => s + " ".repeat(Math.max(0, width - visWidth(s)));
|
|
67
|
+
const line = (ch, n) => c.muted(ch.repeat(n));
|
|
68
|
+
// ---- layout primitives ----
|
|
69
|
+
export function header(title, subtitle) {
|
|
70
|
+
console.log();
|
|
71
|
+
if (title)
|
|
72
|
+
console.log(` ${bold(c.accent(title))}`);
|
|
73
|
+
if (subtitle)
|
|
74
|
+
console.log(` ${c.muted(subtitle)}`);
|
|
75
|
+
if (title)
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
export function section(title) {
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(` ${bold(c.accent2(title.toUpperCase()))}`);
|
|
81
|
+
console.log(` ${line("─", 60)}`);
|
|
82
|
+
}
|
|
83
|
+
export function kv(label, value, labelWidth = 12) {
|
|
84
|
+
console.log(` ${c.muted(pad(label, labelWidth))} ${value}`);
|
|
85
|
+
}
|
|
86
|
+
export function keyValue(pairs) {
|
|
87
|
+
const width = Math.max(...pairs.map(([k]) => k.length), 10);
|
|
88
|
+
return pairs.map(([k, v]) => ` ${c.muted(pad(k, width))} ${v}`).join("\n");
|
|
89
|
+
}
|
|
90
|
+
export function success(message) {
|
|
91
|
+
console.log(`\n ${S.ok} ${c.text(message)}\n`);
|
|
92
|
+
}
|
|
93
|
+
export function note(message) {
|
|
94
|
+
console.log(` ${c.muted(`${g.sep} ${message}`)}`);
|
|
95
|
+
}
|
|
96
|
+
/** Rounded box; border color carries meaning (muted default). */
|
|
97
|
+
export function box(lines, title, border = c.muted) {
|
|
98
|
+
const width = Math.max(...lines.map(visWidth), title ? visWidth(title) + 2 : 0) + 2;
|
|
99
|
+
const top = title
|
|
100
|
+
? border("╭─ ") + bold(c.text(title)) + border(" " + "─".repeat(Math.max(0, width - visWidth(title) - 2)) + "╮")
|
|
101
|
+
: border("╭" + "─".repeat(width + 2) + "╮");
|
|
102
|
+
return [
|
|
103
|
+
top,
|
|
104
|
+
...lines.map((l) => `${border("│")} ${pad(l, width)} ${border("│")}`),
|
|
105
|
+
border("╰" + "─".repeat(width + 2) + "╯"),
|
|
106
|
+
].map((l) => " " + l).join("\n");
|
|
107
|
+
}
|
|
108
|
+
// ---- tables: manual pad, muted UPPERCASE header, no chrome ----
|
|
109
|
+
export function table(headers, rows) {
|
|
110
|
+
const widths = headers.map((h, i) => Math.max(visWidth(h), ...rows.map((r) => visWidth(r[i] ?? ""))));
|
|
111
|
+
const render = (cells) => " " + cells.map((cell, i) => pad(cell, widths[i])).join(" ").trimEnd();
|
|
112
|
+
return [
|
|
113
|
+
render(headers.map((h) => c.muted(h.toUpperCase()))),
|
|
114
|
+
...rows.map(render),
|
|
115
|
+
].join("\n");
|
|
116
|
+
}
|
|
117
|
+
// ---- data viz ----
|
|
118
|
+
export function bar(pct, width = 14) {
|
|
119
|
+
const clamped = Math.max(0, Math.min(100, pct));
|
|
120
|
+
const filled = Math.round((clamped / 100) * width);
|
|
121
|
+
const paint = clamped >= 90 ? c.positive : clamped >= 60 ? c.danger : c.negative;
|
|
122
|
+
return paint("█".repeat(filled)) + c.muted("░".repeat(width - filled));
|
|
123
|
+
}
|
|
124
|
+
export function pctLabel(pct) {
|
|
125
|
+
const paint = pct >= 90 ? c.positive : pct >= 60 ? c.danger : c.negative;
|
|
126
|
+
return paint(`${pct}%`.padStart(4));
|
|
127
|
+
}
|
|
128
|
+
// ---- locale flags ----
|
|
129
|
+
const LANG_REGION = {
|
|
130
|
+
ar: "SA", ca: "ES", cs: "CZ", da: "DK", de: "DE", el: "GR", en: "US",
|
|
131
|
+
es: "ES", fi: "FI", fr: "FR", he: "IL", hi: "IN", hr: "HR", hu: "HU",
|
|
132
|
+
id: "ID", it: "IT", ja: "JP", ko: "KR", ms: "MY", nl: "NL", no: "NO",
|
|
133
|
+
pl: "PL", pt: "PT", ro: "RO", ru: "RU", sk: "SK", sv: "SE", th: "TH",
|
|
134
|
+
tr: "TR", uk: "UA", vi: "VN", zh: "CN",
|
|
135
|
+
};
|
|
136
|
+
export function flag(locale) {
|
|
137
|
+
const parts = locale.split("-");
|
|
138
|
+
const region = parts.length > 1 && /^[A-Za-z]{2}$/.test(parts[parts.length - 1])
|
|
139
|
+
? parts[parts.length - 1].toUpperCase()
|
|
140
|
+
: LANG_REGION[parts[0].toLowerCase()];
|
|
141
|
+
if (!region || !isTTY)
|
|
142
|
+
return " ";
|
|
143
|
+
return [...region].map((ch) => String.fromCodePoint(0x1f1e6 + ch.charCodeAt(0) - 65)).join("");
|
|
144
|
+
}
|
|
145
|
+
// ---- progress: erasable ◴ line on stderr (geminio-style; no spinner) ----
|
|
146
|
+
export class Spinner {
|
|
147
|
+
text = "";
|
|
148
|
+
startedAt = 0;
|
|
149
|
+
live = isTTY;
|
|
150
|
+
start(text) {
|
|
151
|
+
this.text = text;
|
|
152
|
+
this.startedAt = Date.now();
|
|
153
|
+
this.paint();
|
|
154
|
+
return this;
|
|
155
|
+
}
|
|
156
|
+
update(text) {
|
|
157
|
+
this.text = text;
|
|
158
|
+
this.paint();
|
|
159
|
+
}
|
|
160
|
+
paint() {
|
|
161
|
+
if (this.live)
|
|
162
|
+
process.stderr.write(`\r${c.muted(` ${g.pending} ${this.text}`).padEnd(72)}`);
|
|
163
|
+
}
|
|
164
|
+
erase() {
|
|
165
|
+
if (this.live)
|
|
166
|
+
process.stderr.write("\r" + " ".repeat(74) + "\r");
|
|
167
|
+
}
|
|
168
|
+
finish(symbol, text) {
|
|
169
|
+
this.erase();
|
|
170
|
+
const elapsed = Date.now() - this.startedAt;
|
|
171
|
+
const timing = elapsed > 1500 ? c.muted(` ${(elapsed / 1000).toFixed(1)}s`) : "";
|
|
172
|
+
console.log(` ${symbol} ${c.text(text)}${timing}`);
|
|
173
|
+
}
|
|
174
|
+
succeed(text = this.text) { this.finish(S.ok, text); }
|
|
175
|
+
fail(text = this.text) { this.finish(S.fail, text); }
|
|
176
|
+
warn(text = this.text) { this.finish(S.warn, text); }
|
|
177
|
+
info(text = this.text) { this.finish(S.bullet, text); }
|
|
178
|
+
}
|
|
179
|
+
export const spin = (text) => new Spinner().start(text);
|
|
180
|
+
// ---- banner (ANSI Shadow, truecolor violet, muted tagline) ----
|
|
181
|
+
const LETTERS = {
|
|
182
|
+
P: ["██████╗ ", "██╔══██╗", "██████╔╝", "██╔═══╝ ", "██║ ", "╚═╝ "],
|
|
183
|
+
O: [" ██████╗ ", "██╔═══██╗", "██║ ██║", "██║ ██║", "╚██████╔╝", " ╚═════╝ "],
|
|
184
|
+
L: ["██╗ ", "██║ ", "██║ ", "██║ ", "███████╗", "╚══════╝"],
|
|
185
|
+
Y: ["██╗ ██╗", "╚██╗ ██╔╝", " ╚████╔╝ ", " ╚██╔╝ ", " ██║ ", " ╚═╝ "],
|
|
186
|
+
C: [" ██████╗", "██╔════╝", "██║ ", "██║ ", "╚██████╗", " ╚═════╝"],
|
|
187
|
+
A: [" █████╗ ", "██╔══██╗", "███████║", "██╔══██║", "██║ ██║", "╚═╝ ╚═╝"],
|
|
188
|
+
S: ["███████╗", "██╔════╝", "███████╗", "╚════██║", "███████║", "╚══════╝"],
|
|
189
|
+
T: ["████████╗", "╚══██╔══╝", " ██║ ", " ██║ ", " ██║ ", " ╚═╝ "],
|
|
190
|
+
};
|
|
191
|
+
export function banner() {
|
|
192
|
+
const rows = ["", "", "", "", "", ""];
|
|
193
|
+
for (const ch of "POLYCAST") {
|
|
194
|
+
for (let i = 0; i < 6; i++)
|
|
195
|
+
rows[i] += LETTERS[ch][i] + " ";
|
|
196
|
+
}
|
|
197
|
+
const violet = (s) => COLOR ? `\x1b[38;2;140;124;248m${s}\x1b[0m` : s;
|
|
198
|
+
let out = "\n";
|
|
199
|
+
for (const row of rows)
|
|
200
|
+
out += " " + violet(row) + "\n";
|
|
201
|
+
out += `\n ${c.muted("OTA localization for iOS — ship every language without shipping a build")}\n`;
|
|
202
|
+
return out;
|
|
203
|
+
}
|
|
204
|
+
export function relativeTime(iso) {
|
|
205
|
+
const mins = Math.round((Date.now() - new Date(iso).getTime()) / 60_000);
|
|
206
|
+
if (mins < 1)
|
|
207
|
+
return "just now";
|
|
208
|
+
if (mins < 60)
|
|
209
|
+
return `${mins}m ago`;
|
|
210
|
+
if (mins < 60 * 24)
|
|
211
|
+
return `${Math.round(mins / 60)}h ago`;
|
|
212
|
+
return `${Math.round(mins / 60 / 24)}d ago`;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const isCI: () => boolean;
|
|
2
|
+
export declare class CliError extends Error {
|
|
3
|
+
readonly exitCode: 1 | 2;
|
|
4
|
+
constructor(message: string, exitCode?: 1 | 2);
|
|
5
|
+
}
|
|
6
|
+
export declare const bold: (s: string) => string;
|
|
7
|
+
export declare const dim: (s: string) => string;
|
|
8
|
+
export declare const green: (s: string) => string;
|
|
9
|
+
export declare const red: (s: string) => string;
|
|
10
|
+
export declare const yellow: (s: string) => string;
|
|
11
|
+
export declare function table(headers: string[], rows: string[][]): string;
|
|
12
|
+
export declare function confirm(question: string, yes: boolean): Promise<boolean>;
|
|
13
|
+
export declare function promptHidden(question: string): Promise<string>;
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
export const isCI = () => process.env.CI === "true" || process.env.CI === "1";
|
|
4
|
+
export class CliError extends Error {
|
|
5
|
+
exitCode;
|
|
6
|
+
constructor(message, exitCode = 1) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.exitCode = exitCode;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const tty = process.stdout.isTTY;
|
|
12
|
+
export const bold = (s) => (tty ? `\x1b[1m${s}\x1b[0m` : s);
|
|
13
|
+
export const dim = (s) => (tty ? `\x1b[2m${s}\x1b[0m` : s);
|
|
14
|
+
export const green = (s) => (tty ? `\x1b[32m${s}\x1b[0m` : s);
|
|
15
|
+
export const red = (s) => (tty ? `\x1b[31m${s}\x1b[0m` : s);
|
|
16
|
+
export const yellow = (s) => (tty ? `\x1b[33m${s}\x1b[0m` : s);
|
|
17
|
+
export function table(headers, rows) {
|
|
18
|
+
const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? "").length)));
|
|
19
|
+
const line = (cells) => cells.map((c, i) => (c ?? "").padEnd(widths[i] + 3)).join("").trimEnd();
|
|
20
|
+
return [bold(line(headers)), ...rows.map(line)].join("\n");
|
|
21
|
+
}
|
|
22
|
+
export async function confirm(question, yes) {
|
|
23
|
+
if (yes || isCI())
|
|
24
|
+
return true;
|
|
25
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
26
|
+
const answer = await new Promise((resolve) => rl.question(`${question} [y/N] `, resolve));
|
|
27
|
+
rl.close();
|
|
28
|
+
return /^y(es)?$/i.test(answer.trim());
|
|
29
|
+
}
|
|
30
|
+
export async function promptHidden(question) {
|
|
31
|
+
process.stdout.write(question);
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
const stdin = process.stdin;
|
|
34
|
+
let value = "";
|
|
35
|
+
const wasRaw = stdin.isRaw;
|
|
36
|
+
stdin.setRawMode?.(true);
|
|
37
|
+
stdin.resume();
|
|
38
|
+
const onData = (chunk) => {
|
|
39
|
+
const ch = chunk.toString("utf8");
|
|
40
|
+
if (ch === "\n" || ch === "\r" || ch === "\u0004") {
|
|
41
|
+
stdin.setRawMode?.(wasRaw ?? false);
|
|
42
|
+
stdin.pause();
|
|
43
|
+
stdin.off("data", onData);
|
|
44
|
+
process.stdout.write("\n");
|
|
45
|
+
resolve(value.trim());
|
|
46
|
+
}
|
|
47
|
+
else if (ch === "\u0003") { // ^C
|
|
48
|
+
process.stdout.write("\n");
|
|
49
|
+
process.exit(130);
|
|
50
|
+
}
|
|
51
|
+
else if (ch === "\u007f" || ch === "\b") {
|
|
52
|
+
value = value.slice(0, -1);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
value += ch;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
stdin.on("data", onData);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .xcstrings parsing, digesting (byte-for-byte parity with the Swift build
|
|
3
|
+
* plugin: sha256 over key + comment + sorted plural categories joined by
|
|
4
|
+
* ","), and merging published translations back in with the JSON style
|
|
5
|
+
* Xcode itself writes (` : ` separators, two-space indent, sorted keys).
|
|
6
|
+
*/
|
|
7
|
+
export interface CatalogString {
|
|
8
|
+
key: string;
|
|
9
|
+
comment?: string;
|
|
10
|
+
pluralShape?: string[];
|
|
11
|
+
digest: string;
|
|
12
|
+
}
|
|
13
|
+
interface XCStrings {
|
|
14
|
+
sourceLanguage: string;
|
|
15
|
+
strings: Record<string, XCEntry>;
|
|
16
|
+
version: string;
|
|
17
|
+
}
|
|
18
|
+
interface XCEntry {
|
|
19
|
+
comment?: string;
|
|
20
|
+
extractionState?: string;
|
|
21
|
+
localizations?: Record<string, XCLocalization>;
|
|
22
|
+
}
|
|
23
|
+
interface XCLocalization {
|
|
24
|
+
stringUnit?: {
|
|
25
|
+
state: string;
|
|
26
|
+
value: string;
|
|
27
|
+
};
|
|
28
|
+
variations?: {
|
|
29
|
+
plural?: Record<string, {
|
|
30
|
+
stringUnit: {
|
|
31
|
+
state: string;
|
|
32
|
+
value: string;
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare function parseCatalog(path: string): {
|
|
38
|
+
sourceLocale: string;
|
|
39
|
+
strings: CatalogString[];
|
|
40
|
+
raw: XCStrings;
|
|
41
|
+
};
|
|
42
|
+
export interface BundleStrings {
|
|
43
|
+
[key: string]: {
|
|
44
|
+
v?: string;
|
|
45
|
+
plural?: Record<string, string>;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Merge published bundles into the catalog object. Never touches the
|
|
50
|
+
* source language. Returns the number of changed leaf values.
|
|
51
|
+
*/
|
|
52
|
+
export declare function mergeTranslations(raw: XCStrings, locale: string, bundle: BundleStrings): number;
|
|
53
|
+
/**
|
|
54
|
+
* Back-fill scanned source keys into the catalog (so Xcode shows them and
|
|
55
|
+
* the binary fallback stays in sync). Plural keys get an en variation
|
|
56
|
+
* skeleton (one/other) using the key itself as the `other` form.
|
|
57
|
+
* Returns the keys that were added.
|
|
58
|
+
*/
|
|
59
|
+
export declare function addMissingKeys(raw: XCStrings, scanned: Array<{
|
|
60
|
+
key: string;
|
|
61
|
+
kind: "simple" | "plural";
|
|
62
|
+
}>): string[];
|
|
63
|
+
/** Serialize with Xcode's formatting so diffs stay clean. */
|
|
64
|
+
export declare function serializeCatalog(raw: XCStrings): string;
|
|
65
|
+
export declare function writeCatalog(path: string, raw: XCStrings): void;
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { CliError } from "./util.js";
|
|
4
|
+
export function parseCatalog(path) {
|
|
5
|
+
let raw;
|
|
6
|
+
try {
|
|
7
|
+
raw = JSON.parse(readFileSync(path, "utf8"));
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
throw new CliError(`cannot parse ${path}: ${err.message}`);
|
|
11
|
+
}
|
|
12
|
+
const sourceLocale = raw.sourceLanguage ?? "en";
|
|
13
|
+
const strings = [];
|
|
14
|
+
for (const [key, entry] of Object.entries(raw.strings ?? {})) {
|
|
15
|
+
const source = entry.localizations?.[sourceLocale];
|
|
16
|
+
const pluralShape = source?.variations?.plural
|
|
17
|
+
? Object.keys(source.variations.plural).sort()
|
|
18
|
+
: undefined;
|
|
19
|
+
const digest = createHash("sha256")
|
|
20
|
+
.update(key)
|
|
21
|
+
.update(entry.comment ?? "")
|
|
22
|
+
.update(pluralShape?.join(",") ?? "")
|
|
23
|
+
.digest("hex");
|
|
24
|
+
strings.push({
|
|
25
|
+
key,
|
|
26
|
+
...(entry.comment !== undefined ? { comment: entry.comment } : {}),
|
|
27
|
+
...(pluralShape ? { pluralShape } : {}),
|
|
28
|
+
digest,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
strings.sort((a, b) => (a.key < b.key ? -1 : 1));
|
|
32
|
+
return { sourceLocale, strings, raw };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Merge published bundles into the catalog object. Never touches the
|
|
36
|
+
* source language. Returns the number of changed leaf values.
|
|
37
|
+
*/
|
|
38
|
+
export function mergeTranslations(raw, locale, bundle) {
|
|
39
|
+
if (locale === raw.sourceLanguage)
|
|
40
|
+
return 0;
|
|
41
|
+
let changed = 0;
|
|
42
|
+
for (const [key, value] of Object.entries(bundle)) {
|
|
43
|
+
const entry = raw.strings[key];
|
|
44
|
+
if (!entry)
|
|
45
|
+
continue; // string no longer in the catalog
|
|
46
|
+
entry.localizations ??= {};
|
|
47
|
+
if (value.plural) {
|
|
48
|
+
const existing = entry.localizations[locale]?.variations?.plural ?? {};
|
|
49
|
+
const next = {};
|
|
50
|
+
for (const [category, variant] of Object.entries(value.plural)) {
|
|
51
|
+
next[category] = { stringUnit: { state: "translated", value: variant } };
|
|
52
|
+
if (existing[category]?.stringUnit.value !== variant)
|
|
53
|
+
changed++;
|
|
54
|
+
}
|
|
55
|
+
entry.localizations[locale] = { variations: { plural: next } };
|
|
56
|
+
}
|
|
57
|
+
else if (value.v !== undefined) {
|
|
58
|
+
if (entry.localizations[locale]?.stringUnit?.value !== value.v)
|
|
59
|
+
changed++;
|
|
60
|
+
entry.localizations[locale] = { stringUnit: { state: "translated", value: value.v } };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return changed;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Back-fill scanned source keys into the catalog (so Xcode shows them and
|
|
67
|
+
* the binary fallback stays in sync). Plural keys get an en variation
|
|
68
|
+
* skeleton (one/other) using the key itself as the `other` form.
|
|
69
|
+
* Returns the keys that were added.
|
|
70
|
+
*/
|
|
71
|
+
export function addMissingKeys(raw, scanned) {
|
|
72
|
+
const added = [];
|
|
73
|
+
for (const s of scanned) {
|
|
74
|
+
if (raw.strings[s.key])
|
|
75
|
+
continue;
|
|
76
|
+
if (s.kind === "plural") {
|
|
77
|
+
raw.strings[s.key] = {
|
|
78
|
+
extractionState: "manual",
|
|
79
|
+
localizations: {
|
|
80
|
+
[raw.sourceLanguage]: {
|
|
81
|
+
variations: {
|
|
82
|
+
plural: {
|
|
83
|
+
one: { stringUnit: { state: "translated", value: s.key.replace(/%l{0,2}[du]/, "1").replace(/^1 (.*)s($| )/, "1 $1$2") } },
|
|
84
|
+
other: { stringUnit: { state: "translated", value: s.key } },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
raw.strings[s.key] = { extractionState: "manual" };
|
|
93
|
+
}
|
|
94
|
+
added.push(s.key);
|
|
95
|
+
}
|
|
96
|
+
return added;
|
|
97
|
+
}
|
|
98
|
+
/** Serialize with Xcode's formatting so diffs stay clean. */
|
|
99
|
+
export function serializeCatalog(raw) {
|
|
100
|
+
const sortedStrings = {};
|
|
101
|
+
for (const key of Object.keys(raw.strings).sort())
|
|
102
|
+
sortedStrings[key] = raw.strings[key];
|
|
103
|
+
const ordered = { sourceLanguage: raw.sourceLanguage, strings: sortedStrings, version: raw.version ?? "1.0" };
|
|
104
|
+
// Xcode writes `"key" : value` (space before colon) and 2-space indent.
|
|
105
|
+
return JSON.stringify(ordered, null, 2).replace(/^(\s*"(?:[^"\\]|\\.)*")\s*:/gm, "$1 :") + "\n";
|
|
106
|
+
}
|
|
107
|
+
export function writeCatalog(path, raw) {
|
|
108
|
+
writeFileSync(path, serializeCatalog(raw));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=xcstrings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xcstrings.js","sourceRoot":"","sources":["../src/xcstrings.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "polycast-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Command-line client for Polycast \u2014 OTA localization for iOS",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"polycast": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.json && node -e \"require('fs').chmodSync('dist/index.js', 0o755)\"",
|
|
18
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"prepublishOnly": "tsc -p tsconfig.json && node -e \"require('fs').chmodSync('dist/index.js', 0o755)\""
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^22.10.0",
|
|
24
|
+
"typescript": "^5.7.2",
|
|
25
|
+
"vitest": "^2.1.8"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"homepage": "https://polycast.dev",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/ajagatobby/polycast-backend.git",
|
|
32
|
+
"directory": "packages/cli"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"ios",
|
|
36
|
+
"localization",
|
|
37
|
+
"translation",
|
|
38
|
+
"ota",
|
|
39
|
+
"swiftui",
|
|
40
|
+
"i18n",
|
|
41
|
+
"l10n",
|
|
42
|
+
"xcstrings"
|
|
43
|
+
]
|
|
44
|
+
}
|