@shopify/cli
Version:
A CLI tool to build for the Shopify platform
65 lines • 2.54 kB
JavaScript
import { renderConcurrent, renderSingleTask, renderTasks } from '@shopify/cli-kit/node/ui';
import { outputContent, outputToken, TokenizedString } from '@shopify/cli-kit/node/output';
export async function asyncTasks() {
// renderConcurrent
let backendPromiseResolve;
const backendPromise = new Promise(function (resolve, _reject) {
backendPromiseResolve = resolve;
});
const backendProcess = {
prefix: 'backend',
action: async (stdout, _stderr, _signal) => {
stdout.write('first backend message');
await new Promise((resolve) => setTimeout(resolve, 1000));
stdout.write('second backend message');
await new Promise((resolve) => setTimeout(resolve, 1000));
stdout.write('third backend message');
await new Promise((resolve) => setTimeout(resolve, 1000));
backendPromiseResolve();
},
};
const frontendProcess = {
prefix: 'frontend',
action: async (stdout, _stderr, _signal) => {
await backendPromise;
stdout.write('first frontend message');
await new Promise((resolve) => setTimeout(resolve, 1000));
stdout.write('second frontend message');
await new Promise((resolve) => setTimeout(resolve, 1000));
stdout.write('third frontend message');
},
};
await renderConcurrent({
processes: [backendProcess, frontendProcess],
});
// renderTasks
const tasks = [
{
title: 'Installing dependencies',
task: async () => {
await new Promise((resolve) => setTimeout(resolve, 2000));
},
},
{
title: 'Downloading assets',
task: async () => {
await new Promise((resolve) => setTimeout(resolve, 2000));
},
},
];
await renderTasks(tasks);
// renderSingleTask
await renderSingleTask({
title: new TokenizedString('Importing data'),
task: async (updateStatus) => {
for (let i = 1; i <= 10; i++) {
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => setTimeout(resolve, 500));
const status = outputContent `Importing data ${outputToken.italic(outputContent `(${outputToken.green(i.toString())} complete)`)}`;
updateStatus(status);
}
return 'completed';
},
});
}
//# sourceMappingURL=async.js.map