sindresorhus/ora

Is it possible to run ora on Worker?

jon9090 opened this issue · 1 comments

Is it possible to run ora on Worker?

Currently, it freezed:

Open this stackblitz example code
Then in the stackblitz terminal run node index.js.

Now you can see that working is work as expected (because it's on the main thread), but loading is not because it on the worker thread.

index.js:

// run `node index.js` in the terminal
const { Worker } = require('node:worker_threads');
const path = require('path');
const ora = require('ora');

console.log(`Hello Node.js v${process.versions.node}!`);

new Worker(path.resolve(__dirname, './worker.js'));

ora('working...').start();

setTimeout(() => {}, 10 * 1000); //<-- prevent node to exit.

worker.js:

const ora = require('ora');

ora('loading...').start();

If the environment is not interactive, it will output the - ${this.text}\n in the terminal and not work normally. There is a section of code in the source that expresses this meaning.

if (!this.#isEnabled) {
	if (this.text) {
		this.#stream.write(`- ${this.text}\n`);
	}
	return this;
}

and #isEnabled property is equal to

this.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : **isInteractive**({stream: this.#stream})

The Worker environment is not interactive. The isInteractive() will return false.