You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-11-26 22:41:17 +02:00
51 lines
1.5 KiB
TypeScript
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;
|