ryuu
Version:
Domo App Dev Studio CLI, The main tool used to create, edit, and publish app designs to Domo
104 lines • 3.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createInput = exports.createSelect = exports.createConfirm = exports.createInstanceAutocompleteWithValidation = exports.createInstanceAutocomplete = void 0;
const enquirer_1 = require("enquirer");
const { AutoComplete } = require('enquirer');
const login_1 = require("./login");
/**
* Modern CLI prompts using Enquirer
*/
// Helper to ensure clean terminal state
const restoreTerminal = () => {
// Reset formatting and clear any stale output
process.stdout.write('\x1b[0m');
};
/**
* Creates a real-time autocomplete prompt for instance selection using Enquirer.
*/
const createInstanceAutocomplete = async (message = 'Select a Domo instance:', allowNew = true) => {
const previousLogins = login_1.Login.getPreviousLogins();
const currentLogin = login_1.Login.getCurrentLogin()?.instance;
// Create the list of instances with current login at the top
const instances = [
...(currentLogin ? [currentLogin] : []),
...previousLogins
.map(login => login.instance)
.filter(instance => instance !== currentLogin),
];
if (allowNew) {
instances.push('+ Add new instance');
}
// Use AutoComplete class directly for better control over rendering
const autocomplete = new AutoComplete({
name: 'instance',
message,
choices: instances,
initial: 0,
limit: 10, // Limit visible choices to prevent rendering issues
});
const result = await autocomplete.run();
restoreTerminal();
return result;
};
exports.createInstanceAutocomplete = createInstanceAutocomplete;
/**
* Creates an autocomplete prompt for instance selection with validation for new instances.
* Note: Validation is lenient - allows any input and validation happens in the calling command.
*/
const createInstanceAutocompleteWithValidation = async (message = 'Select a Domo instance:', allowNew = true) => {
const selectedInstance = await (0, exports.createInstanceAutocomplete)(message, allowNew);
if (selectedInstance === '+ Add new instance') {
const result = await (0, enquirer_1.prompt)({
type: 'input',
name: 'newInstance',
message: 'Enter new Domo instance (e.g., company.domo.com):',
// No validation here - let the calling command handle validation and confirmation
// This allows users to enter any instance and then confirm if it's invalid
});
return result.newInstance;
}
return selectedInstance;
};
exports.createInstanceAutocompleteWithValidation = createInstanceAutocompleteWithValidation;
/**
* Creates a single-key confirm prompt (y/n without Enter) using Enquirer.
*/
const createConfirm = async (message, defaultValue = true) => {
const result = await (0, enquirer_1.prompt)({
type: 'confirm',
name: 'confirm',
message,
initial: defaultValue,
});
return result.confirm;
};
exports.createConfirm = createConfirm;
/**
* Creates a select prompt (multiple choice) using Enquirer.
*/
const createSelect = async (message, choices, initial) => {
const result = await (0, enquirer_1.prompt)({
type: 'select',
name: 'choice',
message,
choices,
initial,
});
return result.choice;
};
exports.createSelect = createSelect;
/**
* Creates an input prompt using Enquirer.
*/
const createInput = async (message, initial, validate) => {
const result = await (0, enquirer_1.prompt)({
type: 'input',
name: 'input',
message,
initial,
validate,
});
return result.input;
};
exports.createInput = createInput;
//# sourceMappingURL=prompts.js.map