@wocker/mariadb-plugin
Version:
Mariadb plugin for wocker
110 lines (109 loc) • 3.36 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Config = void 0;
const Service_1 = require("./Service");
class Config {
constructor(data) {
var _a, _b;
const { default: defaultService, enableAdmin, adminHostname, admin = {
enabled: enableAdmin,
hostname: adminHostname || "dbadmin-mariadb.workspace"
}, services = [] } = data;
this.default = defaultService;
this.admin = {
enabled: (_a = admin.enabled) !== null && _a !== void 0 ? _a : false,
hostname: (_b = admin.hostname) !== null && _b !== void 0 ? _b : "dbadmin-mariadb.workspace"
};
this.services = services.map((s) => {
return new Service_1.Service(s);
});
}
hasService(name) {
const service = this.services.find((service) => {
return service.name === name;
});
return !!service;
}
getService(name) {
const service = this.services.find((service) => {
return service.name === name;
});
if (!service) {
throw new Error(`Mariadb "${name}" service not found`);
}
return service;
}
hasDefaultService() {
if (!this.default) {
return false;
}
return this.hasService(this.default);
}
getDefaultService() {
if (!this.default) {
throw new Error("No services are installed by default");
}
return this.getService(this.default);
}
getServiceOrDefault(name) {
if (!name) {
return this.getDefaultService();
}
return this.getService(name);
}
setService(service) {
let exists = false;
for (let i = 0; i < this.services.length; i++) {
if (this.services[i].name === service.name) {
exists = true;
this.services[i] = service;
}
}
if (!exists) {
this.services.push(service);
}
if (!this.default) {
this.default = service.name;
}
}
updateService(name, service) {
for (let i = 0; i < this.services.length; i++) {
if (this.services[i].name === name) {
this.services[i] = new Service_1.Service(Object.assign(Object.assign({}, this.services[i].toObject()), service));
break;
}
}
}
unsetService(name) {
this.services = this.services.filter((service) => {
return service.name !== name;
});
if (this.default === name) {
delete this.default;
}
}
toObject() {
return {
default: this.default,
admin: this.admin,
services: this.services.length > 0 ? this.services.map((service) => {
return service.toObject();
}) : undefined
};
}
static make(fs, configPath) {
const data = fs.exists(configPath)
? fs.readJSON(configPath)
: {
admin: {
enabled: true
}
};
return new class extends Config {
save() {
fs.writeJSON(configPath, this.toObject());
}
}(data);
}
}
exports.Config = Config;