| 123456789101112131415161718192021222324252627282930313233 |
- import { installPackage } from '@antfu/install-pkg';
- import { sleep } from '@antfu/utils';
- import { cyan } from 'kolorist';
- import { warnOnce } from './warn.mjs';
- let pending;
- const tasks = {};
- async function tryInstallPkg(name, autoInstall) {
- if (pending) {
- await pending;
- }
- if (!tasks[name]) {
- console.log(cyan(`Installing ${name}...`));
- if (typeof autoInstall === "function") {
- tasks[name] = pending = autoInstall(name).then(() => sleep(300)).finally(() => {
- pending = void 0;
- });
- } else {
- tasks[name] = pending = installPackage(name, {
- dev: true,
- preferOffline: true
- }).then(() => sleep(300)).catch((e) => {
- warnOnce(`Failed to install ${name}`);
- console.error(e);
- }).finally(() => {
- pending = void 0;
- });
- }
- }
- return tasks[name];
- }
- export { tryInstallPkg };
|