aki-plugin-manager
Version:
Lightweight at-runtime plugin manager and loader
57 lines (56 loc) • 1.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.install = void 0;
const path_1 = require("path");
const tar_1 = __importDefault(require("tar"));
const fs_1 = __importDefault(require("fs"));
const https_1 = __importDefault(require("https"));
const npm_1 = require("./npm");
const _download = (url, dir) => {
fs_1.default.mkdirSync(dir, { recursive: true });
return new Promise((resolve) => {
https_1.default.get(url, (stream) => {
stream.on('end', () => {
resolve();
});
stream.pipe(tar_1.default.x({ strip: 1, C: dir }));
});
});
};
const _install = (name, version, installDir, callback) => {
let dependencies;
return npm_1.getManifest(name, version)
.then((pkg) => {
dependencies = pkg.dependencies;
return _download(pkg.dist.tarball, installDir);
})
.then(() => {
let funcs = [];
if (dependencies) {
funcs = Object.entries(dependencies).map((dependency) => {
return new Promise(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(resolve) => {
_install(dependency[0], dependency[1], path_1.join(installDir, 'node_modules', dependency[0]), resolve);
});
});
}
return Promise.all(funcs);
})
.then(() => {
if (callback)
callback();
})
.catch((err) => {
if (callback)
callback(err);
});
};
const install = (name, version, baseDir, callback) => {
const installDir = path_1.join(baseDir, name);
return _install(name, version, installDir, callback);
};
exports.install = install;