1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-26 22:41:17 +02:00
Files
joplin/packages/tools/fuzzer/utils/openDebugSession.ts

51 lines
1.5 KiB
TypeScript

import Logger from '@joplin/utils/Logger';
import ClientPool from '../ClientPool';
import { createInterface } from 'readline/promises';
const logger = Logger.create('openDebugSession');
const openDebugSession = async (clients: ClientPool) => {
const allClients = clients.clients;
const clientChoices = allClients.map((client, index) => {
return `${index}: ${client.label}`;
}).join('\n');
const askForClient = async (questionPrefix = '') => {
// Recreate the readline interface each time to avoid conflicting
// with the debug sessions for the individual clients.
const readlineInterface = createInterface({
input: process.stdin,
output: process.stdout,
});
try {
const clientChoice = await readlineInterface.question(
`${questionPrefix}Select a client from:\n${clientChoices}\nclient: `,
);
if (clientChoice.trim() === '' || clientChoice === 'exit') {
return null;
}
const asNumber = Number(clientChoice);
if (!isFinite(asNumber) || Math.floor(asNumber) !== asNumber) {
return askForClient('Please input an integer. ');
}
if (asNumber < 0 || asNumber >= allClients.length) {
return askForClient('Choice out of range. ');
}
return allClients[asNumber];
} finally {
readlineInterface.close();
}
};
for (let client = await askForClient(); client; client = await askForClient()) {
logger.info('Switching to client', client.getHelpText());
await client.startCliDebugSession();
}
};
export default openDebugSession;