clack icon indicating copy to clipboard operation
clack copied to clipboard

Spinner not showing on using silent exec

Open tiloio opened this issue 1 year ago • 2 comments

Environment

  • OS: Windows
  • Node Version: v18.18.0
  • Package: @clack/prompts
  • Package Version: v0.7.0

Describe the bug No spinner is shown.

To Reproduce Run code on a real environment, shell is not working in stackblitz.

import { intro, outro, spinner } from '@clack/prompts';
import shell from "shelljs";

intro(`No spinner on shell.exec`);

const s = spinner();
s.start('Running install');
const command = await shell.exec('npm install', { silent: true });
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);

outro(`done`);

Steps to reproduce the behavior:

  • Install shelljs `npm install shelljs
  • run the script above
  • no spinner is shown, the shell has just a empty line....

Expected behavior A spinner is shown.

tiloio avatar Sep 30 '23 17:09 tiloio

Nodes normal exec is also not workin...

import { intro, outro, spinner } from '@clack/prompts';
import { execSync } from "node:child_process";

intro(`No spinner on execSync`);

const s = spinner();
s.start('Running install');
const command = execSync('npm install', { stdio: null });
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);


outro(`done`);

tiloio avatar Sep 30 '23 18:09 tiloio

In both cases, you are using sync functions, which wouldn’t work. It will work if you turn them into async using util.promisify

import { intro, outro, spinner } from '@clack/prompts';

import { promisify } from "node:util";
import shell from "shelljs";

const exec = promisify(shell.exec);
intro(`No spinner on shell.exec`);

const s = spinner();
s.start('Running install');
const command = await exec('pnpm install', { silent: true }).catch(() => ({code: 1}));
const message = command.code === 0 ? "Installtion successful" : "Installation failed";
s.stop(message, command.code);

outro(`done`);

Slowlife01 avatar Oct 02 '23 05:10 Slowlife01