@babelize/cli 1.0.13 → 1.1.3
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/LICENSE +200 -4
- package/README.md +53 -20
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +73 -31
- package/dist/client.js.map +1 -1
- package/dist/commands/account.js +1 -1
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/admin.js +5 -5
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/analytics.js +1 -1
- package/dist/commands/analytics.js.map +1 -1
- package/dist/commands/api-keys.d.ts +6 -0
- package/dist/commands/api-keys.d.ts.map +1 -1
- package/dist/commands/api-keys.js +42 -12
- package/dist/commands/api-keys.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +23 -12
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/babels.d.ts.map +1 -1
- package/dist/commands/babels.js +16 -20
- package/dist/commands/babels.js.map +1 -1
- package/dist/commands/billing.js +1 -1
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/check.d.ts +22 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +134 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/checkout.js +2 -2
- package/dist/commands/checkout.js.map +1 -1
- package/dist/commands/comments.js +5 -5
- package/dist/commands/comments.js.map +1 -1
- package/dist/commands/glossary.d.ts +15 -0
- package/dist/commands/glossary.d.ts.map +1 -1
- package/dist/commands/glossary.js +106 -25
- package/dist/commands/glossary.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +82 -69
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/invitations.d.ts.map +1 -1
- package/dist/commands/invitations.js +3 -1
- package/dist/commands/invitations.js.map +1 -1
- package/dist/commands/languages.d.ts.map +1 -1
- package/dist/commands/languages.js +38 -17
- package/dist/commands/languages.js.map +1 -1
- package/dist/commands/members.js +7 -7
- package/dist/commands/members.js.map +1 -1
- package/dist/commands/notifications.js +1 -1
- package/dist/commands/notifications.js.map +1 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +6 -4
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/privacy.d.ts.map +1 -1
- package/dist/commands/privacy.js +7 -5
- package/dist/commands/privacy.js.map +1 -1
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +60 -35
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/roles.js +1 -1
- package/dist/commands/roles.js.map +1 -1
- package/dist/commands/run.d.ts +48 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +264 -132
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/scan.js +1 -1
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subscriptions.js +1 -1
- package/dist/commands/subscriptions.js.map +1 -1
- package/dist/commands/tm.d.ts.map +1 -1
- package/dist/commands/tm.js +31 -13
- package/dist/commands/tm.js.map +1 -1
- package/dist/commands/translate.d.ts +24 -0
- package/dist/commands/translate.d.ts.map +1 -0
- package/dist/commands/translate.js +422 -0
- package/dist/commands/translate.js.map +1 -0
- package/dist/commands/users.js +1 -1
- package/dist/commands/users.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -4
- package/dist/config.js.map +1 -1
- package/dist/global-options.d.ts +6 -2
- package/dist/global-options.d.ts.map +1 -1
- package/dist/global-options.js +9 -3
- package/dist/global-options.js.map +1 -1
- package/dist/local/formatter.d.ts +27 -0
- package/dist/local/formatter.d.ts.map +1 -0
- package/dist/local/formatter.js +69 -0
- package/dist/local/formatter.js.map +1 -0
- package/dist/local/git.d.ts +16 -0
- package/dist/local/git.d.ts.map +1 -0
- package/dist/local/git.js +52 -0
- package/dist/local/git.js.map +1 -0
- package/dist/local/provider.d.ts +41 -0
- package/dist/local/provider.d.ts.map +1 -0
- package/dist/local/provider.js +87 -0
- package/dist/local/provider.js.map +1 -0
- package/dist/local/translate-core.d.ts +188 -0
- package/dist/local/translate-core.d.ts.map +1 -0
- package/dist/local/translate-core.js +401 -0
- package/dist/local/translate-core.js.map +1 -0
- package/dist/local/workspace-copy.d.ts +75 -0
- package/dist/local/workspace-copy.d.ts.map +1 -0
- package/dist/local/workspace-copy.js +263 -0
- package/dist/local/workspace-copy.js.map +1 -0
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +11 -3
- package/dist/oauth.js.map +1 -1
- package/dist/program.d.ts +22 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +32 -10
- package/dist/program.js.map +1 -1
- package/dist/tui/clack.d.ts +60 -0
- package/dist/tui/clack.d.ts.map +1 -0
- package/dist/tui/clack.js +138 -0
- package/dist/tui/clack.js.map +1 -0
- package/dist/tui/help.d.ts.map +1 -1
- package/dist/tui/help.js +14 -5
- package/dist/tui/help.js.map +1 -1
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +4 -2
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui/repl.d.ts.map +1 -1
- package/dist/tui/repl.js +2 -0
- package/dist/tui/repl.js.map +1 -1
- package/dist/tui/table.d.ts.map +1 -1
- package/dist/tui/table.js +6 -2
- package/dist/tui/table.js.map +1 -1
- package/dist/utils/validate.d.ts +7 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +16 -0
- package/dist/utils/validate.js.map +1 -0
- package/dist/utils/zip-upload.d.ts +83 -0
- package/dist/utils/zip-upload.d.ts.map +1 -0
- package/dist/utils/zip-upload.js +285 -0
- package/dist/utils/zip-upload.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { isJsonMode, printJson } from '../formatters.js';
|
|
3
|
+
import { globalOptions, isNonInteractive } from '../global-options.js';
|
|
4
|
+
import { ExitCode } from '../exit-codes.js';
|
|
5
|
+
import { renderSimpleHelp } from '../tui/help.js';
|
|
6
|
+
import { brand, muted, success, warning, error as errorColor, sym } from '../tui/theme.js';
|
|
7
|
+
import { config } from '../config.js';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { buildTranslateReport, DEFAULT_REPORT_FILE, HostedTranslationProvider, isGitIgnored, isHostedResolution, LOCAL_LOCKFILE, LocalTranslateError, parseLocales, PseudoTranslationProvider, resolveProvider, runLocalTranslate, writeTranslateReport, } from '@babelize/engine';
|
|
10
|
+
/**
|
|
11
|
+
* `--provider pseudo`: offline pseudo-localization ("Save" → "⟦Sávé⟧"), for
|
|
12
|
+
* checking i18n wiring and for CI without an API key. Explicit only (never
|
|
13
|
+
* auto-detected) and not listed in --help.
|
|
14
|
+
*/
|
|
15
|
+
export const PSEUDO_PROVIDER = 'pseudo';
|
|
16
|
+
export const PSEUDO_WARNING = 'Pseudo-localization — not real translations (fake text like ⟦Sávé⟧ for testing i18n wiring). A real run will replace them; never ship them.';
|
|
17
|
+
const FRAMEWORK_NAMES = {
|
|
18
|
+
react: 'React',
|
|
19
|
+
nextjs: 'Next.js',
|
|
20
|
+
vue: 'Vue',
|
|
21
|
+
static: 'Static HTML',
|
|
22
|
+
django: 'Django',
|
|
23
|
+
};
|
|
24
|
+
const EXIT_BY_CODE = {
|
|
25
|
+
not_a_repo: ExitCode.USAGE,
|
|
26
|
+
git_missing: ExitCode.CONFIG,
|
|
27
|
+
dirty: ExitCode.USAGE,
|
|
28
|
+
invalid_locale: ExitCode.USAGE,
|
|
29
|
+
no_translator: ExitCode.CONFIG,
|
|
30
|
+
unsupported_framework: ExitCode.CONFIG,
|
|
31
|
+
translator_unreachable: ExitCode.AUTH,
|
|
32
|
+
hosted_auth: ExitCode.AUTH,
|
|
33
|
+
hosted_credits: ExitCode.API_ERROR,
|
|
34
|
+
engine_failed: ExitCode.API_ERROR,
|
|
35
|
+
incomplete_translation: ExitCode.API_ERROR,
|
|
36
|
+
apply_failed: ExitCode.INTERNAL,
|
|
37
|
+
project_changed: ExitCode.USAGE,
|
|
38
|
+
};
|
|
39
|
+
/** How many keys to name inline before summarising. */
|
|
40
|
+
const KEY_PREVIEW = 5;
|
|
41
|
+
function fail(json, code, message, exitCode, changedFiles) {
|
|
42
|
+
if (json)
|
|
43
|
+
printJson({ ok: false, error: { code, message, ...(changedFiles?.length ? { changedFiles } : {}) } });
|
|
44
|
+
else
|
|
45
|
+
console.error(`\n ${errorColor(sym.cross)} ${message.split('\n').join('\n ')}\n`);
|
|
46
|
+
process.exit(exitCode);
|
|
47
|
+
}
|
|
48
|
+
/** True when animated terminal output is appropriate (a real TTY, not CI). */
|
|
49
|
+
export function isAnimatedOutput() {
|
|
50
|
+
return process.stdout.isTTY === true && !(process.env.CI && process.env.CI !== 'false');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The clack spinner on a TTY; otherwise (piped output, CI logs) one plain
|
|
54
|
+
* line per pipeline phase instead of hundreds of spinner redraws.
|
|
55
|
+
*/
|
|
56
|
+
export function createProgress(animated = isAnimatedOutput()) {
|
|
57
|
+
if (animated) {
|
|
58
|
+
const s = clack.spinner();
|
|
59
|
+
return { start: (m) => s.start(m), message: (m) => s.message(m), stop: (m) => s.stop(m) };
|
|
60
|
+
}
|
|
61
|
+
let lastPhase;
|
|
62
|
+
let lastMessage;
|
|
63
|
+
const print = (m) => {
|
|
64
|
+
if (m !== lastMessage)
|
|
65
|
+
console.log(` ${m}`);
|
|
66
|
+
lastMessage = m;
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
start: (m) => print(m),
|
|
70
|
+
message: (m, phase) => {
|
|
71
|
+
// Phases report many sub-steps (per batch, per locale); one line per phase is enough.
|
|
72
|
+
if (phase !== undefined && phase === lastPhase)
|
|
73
|
+
return;
|
|
74
|
+
lastPhase = phase;
|
|
75
|
+
print(m);
|
|
76
|
+
},
|
|
77
|
+
stop: (m) => print(m),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function frameworkLine(framework, status) {
|
|
81
|
+
const name = FRAMEWORK_NAMES[framework] ?? framework;
|
|
82
|
+
return status === 'beta' ? `${name} ${warning('(beta)')}` : name;
|
|
83
|
+
}
|
|
84
|
+
function previewKeys(keys) {
|
|
85
|
+
const shown = keys.slice(0, KEY_PREVIEW).join(', ');
|
|
86
|
+
return keys.length > KEY_PREVIEW ? `${shown}, … +${keys.length - KEY_PREVIEW} more` : shown;
|
|
87
|
+
}
|
|
88
|
+
export function renderReport(report, verbose = false) {
|
|
89
|
+
const out = [];
|
|
90
|
+
const row = (k, v) => out.push(` ${brand(k.padEnd(12))} ${v}`);
|
|
91
|
+
const { changes, stats } = report;
|
|
92
|
+
out.push('');
|
|
93
|
+
row('Framework', frameworkLine(report.framework, report.frameworkStatus));
|
|
94
|
+
if (report.keptLocales.length > 0) {
|
|
95
|
+
row('Locales', `${report.targetLocales.join(', ')} ${muted(`(kept from earlier runs: ${report.keptLocales.join(', ')}; use --replace to drop them)`)}`);
|
|
96
|
+
}
|
|
97
|
+
if (report.provider) {
|
|
98
|
+
row('Provider', report.provider.model ? `${report.provider.name} ${muted(`· ${report.provider.model}`)}` : report.provider.name);
|
|
99
|
+
}
|
|
100
|
+
const sourceKeys = report.locales[0]?.total ?? Object.keys(report.results.source).length;
|
|
101
|
+
const produced = report.locales.reduce((n, l) => n + l.translated, 0);
|
|
102
|
+
const fresh = Math.min(stats.translatedThisRun ?? stats.keysSentToTranslator, produced);
|
|
103
|
+
if (report.framework === 'django') {
|
|
104
|
+
// gettext: the code is the catalogue; every run re-reads all its messages.
|
|
105
|
+
row('Messages', `${sourceKeys} ${muted('(gettext msgids in your code; translations go to the django.po catalogues)')}`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
row('Keys', `${sourceKeys} in ${report.sourceLocale}.json ${muted(`(${stats.keysExtracted} new this run)`)}`);
|
|
109
|
+
}
|
|
110
|
+
row('Translations', `${fresh} new ${muted(`· ${Math.max(0, produced - fresh)} reused (lockfile, memory or cache)`)}`);
|
|
111
|
+
row('Files', `${changes.modified.length} modified, ${changes.added.length} added, ${changes.deleted.length} deleted` +
|
|
112
|
+
(report.dryRun ? muted(' (dry run — nothing written)') : ''));
|
|
113
|
+
for (const f of changes.modified)
|
|
114
|
+
out.push(` ${warning('M')} ${f}`);
|
|
115
|
+
for (const f of changes.added)
|
|
116
|
+
out.push(` ${success('A')} ${f}`);
|
|
117
|
+
for (const f of changes.deleted)
|
|
118
|
+
out.push(` ${errorColor('D')} ${f}`);
|
|
119
|
+
out.push('');
|
|
120
|
+
for (const l of report.locales) {
|
|
121
|
+
const failedKeySet = new Set(l.failed.map((f) => f.key));
|
|
122
|
+
const needsReview = l.qa.length > 0 || l.missing.some((k) => !failedKeySet.has(k));
|
|
123
|
+
const mark = l.failed.length > 0 ? errorColor(sym.cross) : needsReview ? warning(sym.warn) : success(sym.check);
|
|
124
|
+
out.push(` ${mark} ${brand(l.locale.padEnd(8))} ${l.translated}/${l.total} translated`);
|
|
125
|
+
if (l.failed.length > 0) {
|
|
126
|
+
out.push(` ${errorColor(`${l.failed.length} failed`)} ${muted('(not written; the next run retries them)')}`);
|
|
127
|
+
const shown = verbose ? l.failed : l.failed.slice(0, KEY_PREVIEW);
|
|
128
|
+
for (const f of shown) {
|
|
129
|
+
out.push(` ${f.key} ${muted(`— ${f.reason}${f.message ? `: ${f.message}` : ''}`)}`);
|
|
130
|
+
}
|
|
131
|
+
if (shown.length < l.failed.length)
|
|
132
|
+
out.push(muted(` … ${l.failed.length - shown.length} more (use --verbose or --json)`));
|
|
133
|
+
}
|
|
134
|
+
const failedKeys = new Set(l.failed.map((f) => f.key));
|
|
135
|
+
const otherMissing = l.missing.filter((k) => !failedKeys.has(k));
|
|
136
|
+
if (otherMissing.length > 0) {
|
|
137
|
+
out.push(` ${warning(`${otherMissing.length} missing`)} ${muted(previewKeys(otherMissing))}`);
|
|
138
|
+
}
|
|
139
|
+
if (l.qa.length > 0) {
|
|
140
|
+
out.push(` ${warning(`${l.qa.length} with QA warnings`)}`);
|
|
141
|
+
const shown = verbose ? l.qa : l.qa.slice(0, KEY_PREVIEW);
|
|
142
|
+
for (const q of shown)
|
|
143
|
+
out.push(` ${q.key} ${muted(`— ${q.warnings.join('; ')}`)}`);
|
|
144
|
+
if (shown.length < l.qa.length)
|
|
145
|
+
out.push(muted(` … ${l.qa.length - shown.length} more (use --verbose or --json)`));
|
|
146
|
+
}
|
|
147
|
+
if (l.sameAsSource.length > 0) {
|
|
148
|
+
out.push(` ${muted(`unchanged: ${previewKeys(l.sameAsSource)} — fine for names and codes`)}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Keyed: translated but the code still shows the literal. Keyless: never
|
|
152
|
+
// given a key (e.g. a module-level constant that is also used as data), so
|
|
153
|
+
// not translated at all — saying "translated" there would be wrong.
|
|
154
|
+
const unwired = report.notInjected.filter((s) => s.key);
|
|
155
|
+
const untouched = report.notInjected.filter((s) => !s.key);
|
|
156
|
+
if (unwired.length > 0) {
|
|
157
|
+
const n = unwired.length;
|
|
158
|
+
out.push('', ` ${warning(`${sym.warn} ${n} string${n === 1 ? '' : 's'} extracted but not wired into code`)} ${muted('(translated, but the app still shows the literal):')}`);
|
|
159
|
+
const shown = verbose ? unwired : unwired.slice(0, 10);
|
|
160
|
+
for (const s of shown)
|
|
161
|
+
out.push(` ${s.file} — ${s.key} ${muted(`(${s.reason})`)}`);
|
|
162
|
+
if (shown.length < n)
|
|
163
|
+
out.push(muted(` … ${n - shown.length} more (use --verbose or --json)`));
|
|
164
|
+
}
|
|
165
|
+
if (untouched.length > 0) {
|
|
166
|
+
const n = untouched.length;
|
|
167
|
+
out.push('', ` ${muted(`${n} string${n === 1 ? '' : 's'} left as-is, not translated (possibly data; move UI text inside the component to translate it):`)}`);
|
|
168
|
+
const shown = verbose ? untouched : untouched.slice(0, 5);
|
|
169
|
+
for (const s of shown)
|
|
170
|
+
out.push(muted(` ${s.file} — ${JSON.stringify(s.text)} (${s.reason})`));
|
|
171
|
+
if (shown.length < n)
|
|
172
|
+
out.push(muted(` … ${n - shown.length} more (use --verbose or --json)`));
|
|
173
|
+
}
|
|
174
|
+
if (report.unusedKeys.length > 0) {
|
|
175
|
+
const n = report.unusedKeys.length;
|
|
176
|
+
out.push(muted(` ${n} key${n === 1 ? '' : 's'} in ${report.sourceLocale}.json look${n === 1 ? 's' : ''} unused (no t() reference found) — still translated; remove ${n === 1 ? 'it' : 'them'} from ${report.sourceLocale}.json if dead: ${previewKeys(report.unusedKeys)}`));
|
|
177
|
+
}
|
|
178
|
+
if (report.droppedLocales.length > 0) {
|
|
179
|
+
out.push(` ${brand(sym.pointer)} Removed ${report.droppedLocales.join(', ')} (--replace).`);
|
|
180
|
+
}
|
|
181
|
+
if (report.warnings.length > 0) {
|
|
182
|
+
out.push('', ` ${warning(`${sym.warn} ${report.warnings.length} warning${report.warnings.length === 1 ? '' : 's'}`)}`);
|
|
183
|
+
const shown = verbose ? report.warnings : report.warnings.slice(0, 10);
|
|
184
|
+
for (const w of shown) {
|
|
185
|
+
const where = w.file ? `${w.file}${w.line ? `:${w.line}` : ''} ` : '';
|
|
186
|
+
out.push(` ${muted(where)}${w.message || w.type}`);
|
|
187
|
+
}
|
|
188
|
+
if (shown.length < report.warnings.length) {
|
|
189
|
+
out.push(muted(` … ${report.warnings.length - shown.length} more (use --verbose or --json)`));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (report.formatter) {
|
|
193
|
+
const f = report.formatter;
|
|
194
|
+
out.push('', f.ok
|
|
195
|
+
? ` ${brand(sym.pointer)} Formatted ${f.files.length} changed file${f.files.length === 1 ? '' : 's'} with ${f.tool}.`
|
|
196
|
+
: ` ${warning(sym.warn)} ${f.message}`);
|
|
197
|
+
}
|
|
198
|
+
if (report.notes.length > 0) {
|
|
199
|
+
out.push('');
|
|
200
|
+
for (const n of report.notes)
|
|
201
|
+
out.push(` ${brand(sym.pointer)} ${n}`);
|
|
202
|
+
}
|
|
203
|
+
const logged = report.engineLog;
|
|
204
|
+
if (logged.length > 0) {
|
|
205
|
+
if (verbose) {
|
|
206
|
+
out.push('', ` ${muted('Engine log:')}`);
|
|
207
|
+
for (const e of logged)
|
|
208
|
+
out.push(` ${e.level === 'error' ? errorColor(e.level) : warning(e.level)} ${e.message}`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
out.push('');
|
|
212
|
+
for (const e of logged.slice(0, 3))
|
|
213
|
+
out.push(` ${e.level === 'error' ? errorColor(sym.cross) : warning(sym.warn)} ${e.message}`);
|
|
214
|
+
if (logged.length > 3)
|
|
215
|
+
out.push(muted(` … ${logged.length - 3} more engine messages (see --verbose)`));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
out.push('');
|
|
219
|
+
if (report.provider?.provider === PSEUDO_PROVIDER) {
|
|
220
|
+
out.push(` ${warning(`${sym.warn} ${PSEUDO_WARNING}`)}`, ` ${muted('babelize check reports every pseudo value as an error until then.')}`);
|
|
221
|
+
}
|
|
222
|
+
if (report.translationFailures.length > 0) {
|
|
223
|
+
out.push(` ${errorColor(`${sym.cross} ${report.translationFailures.length} key(s) could not be translated.`)} ` +
|
|
224
|
+
(report.dryRun ? 'They would be left out.' : 'Everything else was written; re-run to retry them.'));
|
|
225
|
+
}
|
|
226
|
+
if (report.dryRun) {
|
|
227
|
+
out.push(muted(' Dry run: re-run without --dry-run to write these changes.'));
|
|
228
|
+
}
|
|
229
|
+
else if (report.applied) {
|
|
230
|
+
out.push(` ${brand('Next:')} review with ${brand('git diff')}, then commit — including ${brand(LOCAL_LOCKFILE)},`);
|
|
231
|
+
out.push(` so re-runs only translate new or changed strings.`);
|
|
232
|
+
if (report.lockfileIgnored) {
|
|
233
|
+
out.push(` ${warning(`${sym.warn} .babelize/ is gitignored`)} (babelize init adds it). Reruns here still reuse it, but to share it run`, ` ${brand(`git add -f ${LOCAL_LOCKFILE}`)} or add ${brand('!.babelize/local/')} to .gitignore.`);
|
|
234
|
+
}
|
|
235
|
+
if (changes.modified.includes('package.json')) {
|
|
236
|
+
out.push(` i18n dependencies were added to package.json — run your package manager's install.`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
out.push(muted(' Nothing to change: everything is already translated.'));
|
|
241
|
+
}
|
|
242
|
+
out.push('');
|
|
243
|
+
return out.join('\n');
|
|
244
|
+
}
|
|
245
|
+
export function registerTranslateCommand(program) {
|
|
246
|
+
const cmd = program
|
|
247
|
+
.command('translate')
|
|
248
|
+
.description('Translate this repo locally with your own LLM key or a Babelize API key')
|
|
249
|
+
.option('-t, --to <locales>', 'Target locales, comma-separated (e.g. fr,de,ja)')
|
|
250
|
+
.option('-f, --from <locale>', 'Source locale', 'en')
|
|
251
|
+
.option('--dry-run', 'Print the diff of what would change; write nothing')
|
|
252
|
+
.option('--force', 'Run even if the git working tree has uncommitted changes')
|
|
253
|
+
.option('--replace', 'Treat --to as the complete list: remove locales from earlier runs that are not listed')
|
|
254
|
+
.option('--provider <provider>', 'anthropic, openai, gemini, groq, openrouter, or babelize (hosted; needs BABELIZE_API_KEY). Default: first BYOK key in env, then BABELIZE_API_KEY')
|
|
255
|
+
.option('--model <id>', 'Model ID (default: the provider\'s recommended model)')
|
|
256
|
+
.option('-y, --yes', 'Skip the confirmation prompt')
|
|
257
|
+
.option('--report <path>', `Where to write the QA report (default: ${DEFAULT_REPORT_FILE}; not written on --dry-run unless given)`)
|
|
258
|
+
.option('--allow-partial', 'Exit 0 even when some keys failed (they are still listed in the report)')
|
|
259
|
+
.option('--json', 'Print the QA report as JSON (same schema as the report file)');
|
|
260
|
+
cmd.action(async (opts) => {
|
|
261
|
+
const json = isJsonMode() || opts.json === true;
|
|
262
|
+
const interactive = !json && !isNonInteractive() && !opts.yes;
|
|
263
|
+
const sourceLocale = (opts.from ?? 'en').trim();
|
|
264
|
+
let targets = parseLocales(opts.to, sourceLocale);
|
|
265
|
+
if (targets.length === 0) {
|
|
266
|
+
if (!interactive) {
|
|
267
|
+
fail(json, 'usage', 'Missing --to <locales>, e.g. `babelize translate --to fr,de`.', ExitCode.USAGE);
|
|
268
|
+
}
|
|
269
|
+
const answer = await clack.text({
|
|
270
|
+
message: 'Translate into which locales? (comma-separated)',
|
|
271
|
+
placeholder: 'fr,de,ja',
|
|
272
|
+
validate: (v) => (parseLocales(v, sourceLocale).length > 0 ? undefined : 'Enter at least one locale'),
|
|
273
|
+
});
|
|
274
|
+
if (clack.isCancel(answer))
|
|
275
|
+
process.exit(ExitCode.CANCEL);
|
|
276
|
+
targets = parseLocales(String(answer), sourceLocale);
|
|
277
|
+
}
|
|
278
|
+
const pseudo = opts.provider?.trim().toLowerCase() === PSEUDO_PROVIDER;
|
|
279
|
+
if (pseudo && opts.model)
|
|
280
|
+
fail(json, 'model_not_supported', '--model does not apply to --provider pseudo.', ExitCode.USAGE);
|
|
281
|
+
const resolution = pseudo ? null : resolveProvider({ provider: opts.provider, model: opts.model });
|
|
282
|
+
if (resolution && !resolution.ok) {
|
|
283
|
+
const usage = resolution.code === 'unknown_provider' || resolution.code === 'model_not_supported';
|
|
284
|
+
fail(json, resolution.code, resolution.message, usage ? ExitCode.USAGE : ExitCode.CONFIG);
|
|
285
|
+
}
|
|
286
|
+
const provider = resolution?.value ?? null;
|
|
287
|
+
const hosted = provider && isHostedResolution(provider)
|
|
288
|
+
? new HostedTranslationProvider({
|
|
289
|
+
apiKey: provider.apiKey,
|
|
290
|
+
apiUrl: globalOptions.apiUrl ?? config.getApiUrl(),
|
|
291
|
+
})
|
|
292
|
+
: undefined;
|
|
293
|
+
if (!json) {
|
|
294
|
+
console.log(`\n ${brand('Babelize translate')} ${muted(`${sourceLocale} ${sym.arrow} ${targets.join(', ')}`)}`);
|
|
295
|
+
if (!provider) {
|
|
296
|
+
console.log(` ${warning(`${sym.warn} ${PSEUDO_WARNING}`)}`);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
const keyFrom = `key from ${provider.envVar}${provider.autoDetected ? ', auto-detected' : ''}`;
|
|
300
|
+
console.log(` ${muted(isHostedResolution(provider) ? `Using Babelize hosted (${keyFrom})` : `Using ${provider.provider} · ${provider.model} (${keyFrom})`)}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (interactive && !opts.dryRun) {
|
|
304
|
+
const billed = !provider
|
|
305
|
+
? 'pseudo-localized test text, no API calls'
|
|
306
|
+
: isHostedResolution(provider) ? 'uses your Babelize AI credits' : `your ${provider.provider} key is billed`;
|
|
307
|
+
const ok = await clack.confirm({
|
|
308
|
+
message: `Translate into ${targets.join(', ')} and write the result to this working tree? (${billed})`,
|
|
309
|
+
});
|
|
310
|
+
if (clack.isCancel(ok) || !ok)
|
|
311
|
+
process.exit(ExitCode.CANCEL);
|
|
312
|
+
}
|
|
313
|
+
const spinner = json ? null : createProgress();
|
|
314
|
+
spinner?.start('Preparing a temporary copy of the project…');
|
|
315
|
+
let report;
|
|
316
|
+
try {
|
|
317
|
+
report = await runLocalTranslate({
|
|
318
|
+
projectDir: process.cwd(),
|
|
319
|
+
sourceLocale,
|
|
320
|
+
targetLocales: targets,
|
|
321
|
+
dryRun: opts.dryRun === true,
|
|
322
|
+
force: opts.force === true,
|
|
323
|
+
replace: opts.replace === true,
|
|
324
|
+
byok: !provider || isHostedResolution(provider) ? undefined : { provider: provider.provider, apiKey: provider.apiKey, model: provider.model },
|
|
325
|
+
}, {
|
|
326
|
+
hosted,
|
|
327
|
+
...(provider ? {} : { translator: new PseudoTranslationProvider(), translatorInfo: { provider: 'pseudo', name: 'Pseudo-localization' } }),
|
|
328
|
+
onFramework: (framework, status) => {
|
|
329
|
+
if (!spinner)
|
|
330
|
+
return;
|
|
331
|
+
spinner.message(`Detected ${FRAMEWORK_NAMES[framework] ?? framework}`);
|
|
332
|
+
if (status === 'beta') {
|
|
333
|
+
spinner.stop(warning(`${sym.warn} ${FRAMEWORK_NAMES[framework] ?? framework} support is in beta — review the diff carefully.`));
|
|
334
|
+
spinner.start('Running the pipeline…');
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
// Only show steps in progress; failures are reported once, below, in plain words.
|
|
338
|
+
onProgress: (message, _phase, status) => {
|
|
339
|
+
if (!status || status === 'running')
|
|
340
|
+
spinner?.message(message, _phase);
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
catch (err) {
|
|
345
|
+
spinner?.stop(errorColor('Translation did not complete.'));
|
|
346
|
+
if (err instanceof LocalTranslateError) {
|
|
347
|
+
fail(json, err.code, err.message, EXIT_BY_CODE[err.code], err.changedFiles);
|
|
348
|
+
}
|
|
349
|
+
// Errors before the apply step never touch the project, and the apply
|
|
350
|
+
// step reports its own failures, but don't promise what we can't know.
|
|
351
|
+
fail(json, 'internal', `Unexpected error: ${err.message}. Check \`git status\` for any changes.`, ExitCode.INTERNAL);
|
|
352
|
+
}
|
|
353
|
+
const elapsed = (report.durationMs / 1000).toFixed(1);
|
|
354
|
+
const partial = report.translationFailures.length > 0;
|
|
355
|
+
spinner?.stop(report.dryRun
|
|
356
|
+
? `Dry run finished in ${elapsed}s.`
|
|
357
|
+
: partial
|
|
358
|
+
? warning(`${sym.warn} Finished with failures in ${elapsed}s.`)
|
|
359
|
+
: success(`${sym.check} Done in ${elapsed}s.`));
|
|
360
|
+
// One schema for --json and the report file (TranslateReport).
|
|
361
|
+
const qa = buildTranslateReport(report);
|
|
362
|
+
// A dry run writes nothing unless a report path was asked for.
|
|
363
|
+
let reportFile;
|
|
364
|
+
let reportError;
|
|
365
|
+
if (!report.dryRun || opts.report) {
|
|
366
|
+
try {
|
|
367
|
+
reportFile = await writeTranslateReport(process.cwd(), qa, opts.report ?? DEFAULT_REPORT_FILE);
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
reportError = err.message;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// A --report path inside the repo that git doesn't ignore shows up as an
|
|
374
|
+
// untracked file (the next run skips it, but `git status` won't).
|
|
375
|
+
let reportHint;
|
|
376
|
+
if (reportFile && opts.report) {
|
|
377
|
+
const rel = path.relative(process.cwd(), reportFile).split(path.sep).join('/');
|
|
378
|
+
const inside = !rel.startsWith('..') && !path.isAbsolute(rel);
|
|
379
|
+
if (inside && !rel.startsWith('.babelize/local/') && !(await isGitIgnored(process.cwd(), rel))) {
|
|
380
|
+
reportHint = `${rel} is inside the repo and not git-ignored, so it shows up in git status (babelize translate ignores it). Prefer a path under .babelize/local/ or outside the repo.`;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (json) {
|
|
384
|
+
printJson(qa);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
if (report.dryRun && report.diff) {
|
|
388
|
+
console.log('');
|
|
389
|
+
console.log(report.diff);
|
|
390
|
+
}
|
|
391
|
+
console.log(renderReport(report, globalOptions.verbose === true));
|
|
392
|
+
if (reportFile) {
|
|
393
|
+
const rel = path.relative(process.cwd(), reportFile).split(path.sep).join('/') || reportFile;
|
|
394
|
+
console.log(` ${brand('Report')} ${rel} ${muted(rel === DEFAULT_REPORT_FILE
|
|
395
|
+
? '(every key with its status; git-ignored via .babelize/.gitignore — safe to commit or ignore)'
|
|
396
|
+
: '(every key with its status)')}\n`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
if (reportError)
|
|
400
|
+
console.error(` ${warning(sym.warn)} Could not write the report: ${reportError}`);
|
|
401
|
+
if (reportHint)
|
|
402
|
+
console.error(` ${warning(sym.warn)} ${reportHint}`);
|
|
403
|
+
// Successful translations are applied, but a partial run must not look
|
|
404
|
+
// like a clean one to scripts and CI, unless --allow-partial.
|
|
405
|
+
if (partial && !opts.allowPartial)
|
|
406
|
+
process.exit(ExitCode.API_ERROR);
|
|
407
|
+
});
|
|
408
|
+
cmd.helpInformation = () => renderSimpleHelp('translate', 'Translate this repo locally with your own LLM key (no account needed) or Babelize-hosted translation (BABELIZE_API_KEY). Writes locale files and i18n code into your working tree for review with `git diff`.', [
|
|
409
|
+
{ name: '-t, --to <locales>', desc: 'Target locales, comma-separated (e.g. fr,de,ja)' },
|
|
410
|
+
{ name: '-f, --from <locale>', desc: 'Source locale (default: en)' },
|
|
411
|
+
{ name: '--dry-run', desc: 'Print the diff of what would change; write nothing' },
|
|
412
|
+
{ name: '--force', desc: 'Run even with uncommitted changes' },
|
|
413
|
+
{ name: '--replace', desc: 'Remove earlier locales not listed in --to' },
|
|
414
|
+
{ name: '--provider <name>', desc: 'anthropic | openai | gemini | groq | openrouter | babelize' },
|
|
415
|
+
{ name: '--model <id>', desc: "Override the provider's default model" },
|
|
416
|
+
{ name: '-y, --yes', desc: 'Skip the confirmation prompt' },
|
|
417
|
+
{ name: '--report <path>', desc: `QA report location (default: ${DEFAULT_REPORT_FILE})` },
|
|
418
|
+
{ name: '--allow-partial', desc: 'Exit 0 even when some keys failed' },
|
|
419
|
+
{ name: '--json', desc: 'Print the QA report as JSON' },
|
|
420
|
+
]);
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/users.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD,eAAO,MAAM,MAAM;sBACC,WAAW,GAAG,IAAI;0BAId,WAAW,GAAG,IAAI;wBAQpB,IAAI;iBAIX,MAAM;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,gCAAgC,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD,eAAO,MAAM,MAAM;sBACC,WAAW,GAAG,IAAI;0BAId,WAAW,GAAG,IAAI;wBAQpB,IAAI;iBAIX,MAAM;mBAgBJ,MAAM,GAAG,IAAI;uBAKT,OAAO;6BAIK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAUhI,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,7 @@ import Conf from 'conf';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { chmodSync } from 'node:fs';
|
|
4
4
|
import { access, readFile } from 'node:fs/promises';
|
|
5
|
+
export const DEFAULT_API_URL = 'https://api.babelize.co/api';
|
|
5
6
|
const store = new Conf({
|
|
6
7
|
projectName: '@babelize/cli',
|
|
7
8
|
});
|
|
@@ -37,14 +38,21 @@ export const config = {
|
|
|
37
38
|
store.delete('credentials');
|
|
38
39
|
},
|
|
39
40
|
getApiUrl() {
|
|
40
|
-
// Priority: env var > stored config > production default
|
|
41
|
+
// Priority: env var > stored config > production default. The --api-url
|
|
42
|
+
// flag sits above all three; the HTTP client checks it first.
|
|
43
|
+
//
|
|
44
|
+
// Stored URLs are honoured as-is, localhost included: self-hosted and
|
|
45
|
+
// local-backend users save one on purpose. (Localhost URLs used to be
|
|
46
|
+
// ignored because old versions defaulted to localhost outside production
|
|
47
|
+
// and could leave a stale dev URL behind.) A URL is only ever stored when
|
|
48
|
+
// the user asks for it — `auth login --api-url` or the "Self-hosted" login
|
|
49
|
+
// choice — never as a default, so nothing can pin a stale one silently.
|
|
41
50
|
if (process.env.BABELIZE_API_URL)
|
|
42
51
|
return process.env.BABELIZE_API_URL;
|
|
43
52
|
const stored = store.get('config')?.apiUrl;
|
|
44
|
-
if (stored
|
|
53
|
+
if (stored)
|
|
45
54
|
return stored;
|
|
46
|
-
|
|
47
|
-
return 'https://api.babelize.co/api';
|
|
55
|
+
return DEFAULT_API_URL;
|
|
48
56
|
},
|
|
49
57
|
setApiUrl(url) {
|
|
50
58
|
const current = store.get('config') ?? {};
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAWpD,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAM7D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAoD;IACxE,WAAW,EAAE,eAAe;CAC7B,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAS,mBAAmB;IAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IACzC,IAAI,CAAC;QACH,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,cAAc;QACZ,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,KAAkB;QAC/B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAChC,mBAAmB,EAAE,CAAC;IACxB,CAAC;IAED,gBAAgB;QACd,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,wEAAwE;QACxE,8DAA8D;QAC9D,EAAE;QACF,sEAAsE;QACtE,sEAAsE;QACtE,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,wEAAwE;QACxE,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACtE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,eAAe;QACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/dist/global-options.d.ts
CHANGED
|
@@ -4,13 +4,17 @@ export declare const globalOptions: {
|
|
|
4
4
|
verbose?: boolean;
|
|
5
5
|
json?: boolean;
|
|
6
6
|
nonInteractive?: boolean;
|
|
7
|
+
/** `--yes`: never prompt, and answer "yes" to confirmations. */
|
|
8
|
+
assumeYes?: boolean;
|
|
7
9
|
};
|
|
8
10
|
export declare function setGlobalOptions(opts: Partial<typeof globalOptions>): void;
|
|
9
11
|
export declare function isJsonMode(): boolean;
|
|
12
|
+
/** True when `--yes` was passed: confirmations are answered "yes" without asking. */
|
|
13
|
+
export declare function isAssumeYes(): boolean;
|
|
10
14
|
/**
|
|
11
15
|
* True when the CLI must not block on interactive prompts — either because
|
|
12
|
-
* `--yes`/`--non-interactive` was passed,
|
|
13
|
-
*
|
|
16
|
+
* `--yes`/`--non-interactive` was passed, BABELIZE_NON_INTERACTIVE is set, the
|
|
17
|
+
* process is running in CI (CI env var), or stdin is closed (no TTY).
|
|
14
18
|
*/
|
|
15
19
|
export declare function isNonInteractive(): boolean;
|
|
16
20
|
//# sourceMappingURL=global-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-options.d.ts","sourceRoot":"","sources":["../src/global-options.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,EAAE;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"global-options.d.ts","sourceRoot":"","sources":["../src/global-options.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,EAAE;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEP,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,aAAa,CAAC,GAAG,IAAI,CAO1E;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,qFAAqF;AACrF,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C"}
|
package/dist/global-options.js
CHANGED
|
@@ -10,17 +10,23 @@ export function setGlobalOptions(opts) {
|
|
|
10
10
|
globalOptions.json = opts.json;
|
|
11
11
|
if (opts.nonInteractive !== undefined)
|
|
12
12
|
globalOptions.nonInteractive = opts.nonInteractive;
|
|
13
|
+
if (opts.assumeYes !== undefined)
|
|
14
|
+
globalOptions.assumeYes = opts.assumeYes;
|
|
13
15
|
}
|
|
14
16
|
export function isJsonMode() {
|
|
15
17
|
return globalOptions.json === true;
|
|
16
18
|
}
|
|
19
|
+
/** True when `--yes` was passed: confirmations are answered "yes" without asking. */
|
|
20
|
+
export function isAssumeYes() {
|
|
21
|
+
return globalOptions.assumeYes === true;
|
|
22
|
+
}
|
|
17
23
|
/**
|
|
18
24
|
* True when the CLI must not block on interactive prompts — either because
|
|
19
|
-
* `--yes`/`--non-interactive` was passed,
|
|
20
|
-
*
|
|
25
|
+
* `--yes`/`--non-interactive` was passed, BABELIZE_NON_INTERACTIVE is set, the
|
|
26
|
+
* process is running in CI (CI env var), or stdin is closed (no TTY).
|
|
21
27
|
*/
|
|
22
28
|
export function isNonInteractive() {
|
|
23
|
-
if (globalOptions.nonInteractive === true)
|
|
29
|
+
if (globalOptions.nonInteractive === true || globalOptions.assumeYes === true)
|
|
24
30
|
return true;
|
|
25
31
|
if (process.env.BABELIZE_NON_INTERACTIVE === '1' || process.env.BABELIZE_NON_INTERACTIVE === 'true')
|
|
26
32
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-options.js","sourceRoot":"","sources":["../src/global-options.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"global-options.js","sourceRoot":"","sources":["../src/global-options.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAQtB,EAAE,CAAC;AAEP,MAAM,UAAU,gBAAgB,CAAC,IAAmC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC/D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACrE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QAAE,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC1F,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,WAAW;IACzB,OAAO,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,aAAa,CAAC,cAAc,KAAK,IAAI,IAAI,aAAa,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3F,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjH,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9D,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC;AACf,CAAC"}
|