Skip to content

Instantly share code, notes, and snippets.

@igolden
Last active December 27, 2021 19:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save igolden/49741f7a8c030aa30c487396abb38c1a to your computer and use it in GitHub Desktop.
Save igolden/49741f7a8c030aa30c487396abb38c1a to your computer and use it in GitHub Desktop.
Basic cli loaders via process.stdout -- nodejs

Basic Nodejs Loaders

Use process.stdout to "rewrite" stdout and simulate a loader.

  • Dots - basic ... loader
  • Stars - animate an 8 frame circle loader
  • Progress Bar - simulate % completion
const main = async () => {
cf = 0;
setInterval(() => {
let loader = (num) => {
arr = [];
for (let i = 0; i < num; i++) {
arr.push(".");
}
return arr.join("");
};
process.stdout.cursorTo(0);
process.stdout.clearScreenDown();
process.stdout.write(loader(cf));
if (cf >= 3) {
cf = 0;
} else {
cf += 1;
}
}, 250);
};
main();
const main = async () => {
total = 30
cf = 0;
setInterval(() => {
let loader = (num) => {
arr = [,">"];
for (let i = 0; i < num; i++) {
arr.unshift("=");
}
let prog = (num/total).toFixed(2).replace(/^0\.+/, '')
if ((num/total) < 1) {
arr.unshift(`[${prog}%]`);
} else {
arr.unshift(`[100%]`);
}
return arr.join("");
};
process.stdout.cursorTo(0);
process.stdout.clearScreenDown();
process.stdout.write(loader(cf));
if (cf >= total) {
cf = 0;
} else {
cf += 1;
}
}, 250);
};
main();
const frames = [
`
***
*
`,
`
***
*
`,
`
**
*
*
`,
`
*
***
`,
`
*
***
`,
`
*
*
**
`,
`
**
*
*
`,
];
const main = async () => {
cf = 0;
setInterval(() => {
process.stdout.moveCursor(0, -4)
process.stdout.cursorTo(0)
process.stdout.clearScreenDown()
process.stdout.write(`${frames[cf]}\r`)
if (cf >= frames.length - 1) {
cf = 0;
} else {
cf += 1;
}
}, 100);
};
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment