i18ntk
Version:
i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.
45 lines (39 loc) • 1.2 kB
JavaScript
const { getGlobalReadline, closeGlobalReadline, ask } = require('./cli');
const { envManager } = require('./env-manager');
function isInteractive(opts={}) {
const envSilent = envManager.getBoolean('CI') ||
envManager.getBoolean('I18NTK_SILENT') ||
envManager.get('npm_config_loglevel') === 'silent';
if (opts.noPrompt) return false;
if (envSilent) return false;
return process.stdin.isTTY === true && process.stdout.isTTY === true;
}
class NoopPrompt {
question(_q) { return Promise.resolve(''); }
close() {}
async pressEnterToContinue() { return; }
}
class RLPrompt {
constructor() {
this.rl = getGlobalReadline();
this.closed = false;
}
question(q) {
if (this.closed) return Promise.resolve('');
return new Promise(res => this.rl.question(q, ans => res(ans)));
}
close() {
if (!this.closed) {
closeGlobalReadline();
this.closed = true;
}
}
async pressEnterToContinue(msg='\nPress Enter to continue...') {
if (this.closed) return;
await ask(msg);
}
}
function createPrompt(opts={}) {
return isInteractive(opts) ? new RLPrompt() : new NoopPrompt();
}
module.exports = { createPrompt, isInteractive };