From 59a19eef88cab601a176cafb165ff3505c7f39dd Mon Sep 17 00:00:00 2001 From: Anders Evenrud Date: Sat, 11 Apr 2020 00:21:39 +0200 Subject: [PATCH] Added Packages#uninstall (#106) --- src/packages.js | 67 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/src/packages.js b/src/packages.js index fb1fbe2b..d9be22da 100644 --- a/src/packages.js +++ b/src/packages.js @@ -55,6 +55,21 @@ import logger from './logger'; * @typedef PackageMetadata */ +/** + * @property {string} root Installation root (except on system) + * @property {boolean} [system] Install on system + * @property {object} [headers] Forward HTTP headers + * @typedef PackageInstallationOption + */ + +/** + * @return {PackageInstallationOption} + */ +const createPackageInstallationOptions = options => Object.assign({}, { + root: 'home:/.packages', + system: false +}, options); + /** * Package Manager * @@ -337,36 +352,56 @@ export default class Packages { [...meta, ...configured].forEach(({name, args}) => this.launch(name, args || {})); } + /** + * Uninstalls a package + * @param {string} name Package name + * @param {PackageInstallationOption} [options] + */ + uninstall(name, options = {}) { + return this._apiRequest('uninstall', { + name, + options: createPackageInstallationOptions(options) + }) + .then((body) => { + if (body.reload) { + this.init(); + } + }); + } + /** * Installs a package * @param {string} url URL to package - * @param {options} [options] - * @param {boolean} [options.system] Install as system package - * @param {string} [options.root] Root installation path + * @param {PackageInstallationOption} [options] */ install(url, options = {}) { - const body = { + return this._apiRequest('install', { url, - options: Object.assign({}, { - root: 'home:/.packages', - system: false - }, options) - }; + options: createPackageInstallationOptions(options) + }) + .then((body) => { + if (body.reload) { + this.init(); + } + }); + } + /** + * Creates a new API request + * @param {string} endpoint + * @param {object} body + * @return {object} JSON + */ + _apiRequest(endpoint, body) { return this.core - .request('/api/packages/install', { + .request(`/api/packages/${endpoint}`, { method: 'post', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) }) - .then(response => response.json()) - .then((body) => { - if (body.reload) { - this.init(); - } - }); + .then(response => response.json()); } /**