react-native-integrate
Version:
Automate integration of additional code into React Native projects
208 lines (207 loc) • 6.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.log = log;
exports.logSuccess = logSuccess;
exports.logMessage = logMessage;
exports.logMessageGray = logMessageGray;
exports.logWarning = logWarning;
exports.logInfo = logInfo;
exports.logError = logError;
exports.logNote = logNote;
exports.logIntro = logIntro;
exports.logOutro = logOutro;
exports.startSpinner = startSpinner;
exports.updateSpinner = updateSpinner;
exports.stopSpinner = stopSpinner;
exports.multiselect = multiselect;
exports.select = select;
exports.confirm = confirm;
exports.text = text;
exports.summarize = summarize;
exports.getLastLine = getLastLine;
const prompts_1 = require("@clack/prompts");
const picocolors_1 = __importDefault(require("picocolors"));
const progress_1 = require("./progress");
const waitInputToContinue_1 = require("./utils/waitInputToContinue");
function log(msg) {
if (progress_1.progress.isActive)
return;
prompts_1.log.step(msg);
}
function logSuccess(msg) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
prompts_1.log.success(msg);
if (isProgressActive)
progress_1.progress.display();
}
function logMessage(msg) {
if (progress_1.progress.isActive)
return;
prompts_1.log.message('⦿ ' + msg);
}
function logMessageGray(msg) {
if (progress_1.progress.isActive)
return;
prompts_1.log.message(picocolors_1.default.gray('⦿ ' + msg));
}
function logWarning(msg, noColor) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
prompts_1.log.warning(noColor ? msg : picocolors_1.default.yellow(msg));
if (isProgressActive)
progress_1.progress.display();
}
function logInfo(msg) {
if (progress_1.progress.isActive)
return;
prompts_1.log.info(msg);
}
function logError(msg, noColor) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
prompts_1.log.error(noColor ? msg : picocolors_1.default.red(msg));
if (isProgressActive)
progress_1.progress.display();
}
function logNote(msg, title) {
(0, prompts_1.note)(msg, title);
}
function logIntro(msg) {
(0, prompts_1.intro)(picocolors_1.default.inverse(` ${msg || 'react-native-integrate'} `));
}
function logOutro(msg, error) {
(0, prompts_1.outro)(picocolors_1.default[error ? 'red' : 'cyan'](msg || 'completed integration'));
}
const s = (0, prompts_1.spinner)();
let releaseListener;
function startSpinner(msg, onCancel) {
if (progress_1.progress.isActive)
return;
s.start(msg);
if (onCancel)
releaseListener = (0, waitInputToContinue_1.listenForKeys)('s', onCancel);
}
function updateSpinner(msg) {
if (progress_1.progress.isActive)
return;
s.message(msg);
}
function stopSpinner(msg) {
if (progress_1.progress.isActive)
return;
s.stop(msg);
if (releaseListener) {
releaseListener();
releaseListener = undefined;
}
}
async function multiselect(msg, args) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
const response = await (0, prompts_1.multiselect)({
message: msg,
required: args.required,
options: args.options.map(x => ({
value: x.value,
label: x.label || x.value.toString(),
hint: x.hint,
})),
initialValues: args.initialValues,
});
if ((0, prompts_1.isCancel)(response)) {
(0, prompts_1.cancel)('operation cancelled');
process.exit(0);
}
if (isProgressActive)
progress_1.progress.display();
// @ts-ignore
return response;
}
async function select(msg, args) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
const response = await (0, prompts_1.select)({
message: msg,
options: args.options.map(x => ({
value: x.value,
label: x.label || x.value.toString(),
hint: x.hint,
})),
initialValue: args.initialValue,
maxItems: args.maxItems,
});
if ((0, prompts_1.isCancel)(response)) {
(0, prompts_1.cancel)('operation cancelled');
process.exit(0);
}
if (isProgressActive)
progress_1.progress.display();
// @ts-ignore
return response;
}
async function confirm(msg, args = {}) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
const response = await (0, prompts_1.confirm)({
message: msg,
active: args.positive || 'yes',
inactive: args.negative || 'no',
initialValue: args.initialValue,
});
if ((0, prompts_1.isCancel)(response)) {
(0, prompts_1.cancel)('operation cancelled');
process.exit(0);
}
if (isProgressActive)
progress_1.progress.display();
return response;
}
async function text(msg, args = {}) {
const isProgressActive = progress_1.progress.isActive;
if (isProgressActive)
progress_1.progress.hide();
const response = await (0, prompts_1.text)({
message: msg,
defaultValue: args.defaultValue,
initialValue: args.initialValue,
placeholder: args.placeholder,
validate: args.validate,
});
if ((0, prompts_1.isCancel)(response)) {
(0, prompts_1.cancel)('operation cancelled');
process.exit(0);
}
if (isProgressActive)
progress_1.progress.display();
return response;
}
function summarize(code, maxLength = 80) {
if (code == null)
return 'null';
const flatText = code.replace(/\n/g, '⏎');
return picocolors_1.default.yellow(flatText.substring(0, maxLength) +
(flatText.length > maxLength ? '...' : ''));
}
function getLastLine(code, maxLength = 80) {
if (code == null)
return 'null';
const lines = code
.replace(/\r/g, '')
.split('\n')
.filter(x => x.trim().length);
if (!lines.length)
return '';
const flatText = lines[lines.length - 1];
return (flatText.substring(0, maxLength) +
(flatText.length > maxLength ? '...' : ''));
}