mirror of
https://github.com/Eugeny/tabby
synced 2024-12-15 07:42:55 +00:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { promisify } from 'util'
|
|
|
|
|
|
export class PluginManager {
|
|
npm: any
|
|
npmReady?: Promise<void>
|
|
|
|
async ensureLoaded (): Promise<void> {
|
|
if (!this.npmReady) {
|
|
this.npmReady = new Promise(resolve => {
|
|
const npm = require('npm')
|
|
npm.load(err => {
|
|
if (err) {
|
|
console.error(err)
|
|
return
|
|
}
|
|
npm.config.set('global', false)
|
|
this.npm = npm
|
|
resolve()
|
|
})
|
|
})
|
|
}
|
|
return this.npmReady
|
|
}
|
|
|
|
async install (path: string, name: string, version: string): Promise<void> {
|
|
await this.ensureLoaded()
|
|
this.npm.prefix = path
|
|
return promisify(this.npm.commands.install)([`${name}@${version}`])
|
|
}
|
|
|
|
async uninstall (path: string, name: string): Promise<void> {
|
|
await this.ensureLoaded()
|
|
this.npm.prefix = path
|
|
return promisify(this.npm.commands.remove)([name])
|
|
}
|
|
}
|
|
|
|
|
|
export const pluginManager = new PluginManager()
|