UNPKG

aki-plugin-manager

Version:

Lightweight at-runtime plugin manager and loader

57 lines (56 loc) 1.9 kB
"use strict"; 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;