@jupyterlab/services
Version:
Client APIs for the Jupyter services REST APIs
110 lines • 3.95 kB
JavaScript
;
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.SettingManager = void 0;
const coreutils_1 = require("@jupyterlab/coreutils");
const statedb_1 = require("@jupyterlab/statedb");
const serverconnection_1 = require("../serverconnection");
/**
* The url for the lab settings service.
*/
const SERVICE_SETTINGS_URL = 'api/settings';
/**
* The settings API service manager.
*/
class SettingManager extends statedb_1.DataConnector {
/**
* Create a new setting manager.
*/
constructor(options = {}) {
var _a;
super();
this.serverSettings = (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();
}
/**
* Fetch a plugin's settings.
*
* @param id - The plugin's ID.
*
* @returns A promise that resolves if successful.
*/
async fetch(id) {
if (!id) {
throw new Error('Plugin `id` parameter is required for settings fetch.');
}
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, id);
const response = await makeRequest(url, {}, serverSettings);
if (response.status !== 200) {
const err = await ResponseError.create(response);
throw err;
}
// Assert what type the server response is returning.
return response.json();
}
/**
* Fetch the list of all plugin setting bundles.
*
* @returns A promise that resolves if successful.
*/
async list() {
var _a, _b;
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, '');
const response = await makeRequest(url, {}, serverSettings);
if (response.status !== 200) {
throw new ResponseError(response);
}
const json = await response.json();
const values = (_b = (_a = json === null || json === void 0 ? void 0 : json['settings']) === null || _a === void 0 ? void 0 : _a.map((plugin) => {
plugin.data = { composite: {}, user: {} };
return plugin;
})) !== null && _b !== void 0 ? _b : [];
const ids = values.map(plugin => plugin.id);
return { ids, values };
}
/**
* Save a plugin's settings.
*
* @param id - The plugin's ID.
*
* @param raw - The user setting values as a raw string of JSON with comments.
*
* @returns A promise that resolves if successful.
*/
async save(id, raw) {
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, id);
// NOTE: 'raw' is JSON5 (not valid JSON), so we encode it as a string in a valid JSON body
const init = { body: JSON.stringify({ raw }), method: 'PUT' };
const response = await makeRequest(url, init, serverSettings);
if (response.status !== 204) {
throw new ResponseError(response);
}
}
}
exports.SettingManager = SettingManager;
/**
* A namespace for private data.
*/
var Private;
(function (Private) {
/**
* Get the url for a plugin's settings.
*/
function url(base, id) {
return coreutils_1.URLExt.join(base, SERVICE_SETTINGS_URL, id);
}
Private.url = url;
})(Private || (Private = {}));
//# sourceMappingURL=index.js.map