34 lines
878 B
Plaintext
34 lines
878 B
Plaintext
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 };
|