|
1 | | -import readline from 'readline'; |
| 1 | +import readline from 'readline' |
2 | 2 |
|
| 3 | +/** |
| 4 | + * Démarre un indicateur de chargement animé dans le terminal |
| 5 | + * |
| 6 | + * @param {string} message - Le message à afficher à côté de l'indicateur de chargement |
| 7 | + * @returns {NodeJS.Timeout} L'identifiant de l'interval pour pouvoir l'arrêter plus tard |
| 8 | + * |
| 9 | + * @example |
| 10 | + * const loader = startLoader('Chargement en cours...'); |
| 11 | + * // ... opération longue ... |
| 12 | + * stopLoader(loader); |
| 13 | + */ |
3 | 14 | export function startLoader(message) { |
4 | | - let currentFrame = 0; |
5 | | - const spinnerFrames = ['-', '\\', '|', '/']; |
| 15 | + let currentFrame = 0 |
| 16 | + const spinnerFrames = ['-', '\\', '|', '/'] |
6 | 17 |
|
7 | 18 | const loaderInterval = setInterval(() => { |
8 | 19 | readline.cursorTo(process.stdout, 0); |
9 | 20 | process.stdout.write(`${spinnerFrames[currentFrame]} ${message} `); |
10 | 21 | currentFrame = (currentFrame + 1) % spinnerFrames.length; |
11 | | - }, 100); |
| 22 | + }, 100) |
12 | 23 |
|
13 | | - return loaderInterval; |
| 24 | + return loaderInterval |
14 | 25 | } |
15 | 26 |
|
| 27 | +/** |
| 28 | + * Arrête un indicateur de chargement précédemment démarré |
| 29 | + * |
| 30 | + * @param {NodeJS.Timeout} loaderInterval - L'identifiant de l'interval retourné par startLoader |
| 31 | + * |
| 32 | + * @example |
| 33 | + * const loader = startLoader('Chargement en cours...'); |
| 34 | + * // ... opération longue ... |
| 35 | + * stopLoader(loader); |
| 36 | + */ |
16 | 37 | export function stopLoader(loaderInterval) { |
17 | | - clearInterval(loaderInterval); |
18 | | - readline.cursorTo(process.stdout, 0); |
| 38 | + clearInterval(loaderInterval) |
| 39 | + readline.cursorTo(process.stdout, 0) |
| 40 | + |
19 | 41 | if (process.stdout.isTTY) { |
20 | | - process.stdout.clearLine(0); |
| 42 | + process.stdout.clearLine(0) |
21 | 43 | } |
22 | 44 | } |
0 commit comments