@wocker/ws
Version:
Docker workspace for web projects
119 lines (118 loc) • 4.57 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PresetRepository = void 0;
const core_1 = require("@wocker/core");
const env_1 = require("../../../env");
let PresetRepository = class PresetRepository {
constructor(appConfigService, logService, driver) {
this.appConfigService = appConfigService;
this.logService = logService;
this.driver = driver;
}
load(data) {
const _this = this, fs = new core_1.FileSystem(data.path, this.driver);
const config = {
...fs.readJSON("config.json"),
name: data.name,
source: data.source,
path: data.path
};
return new class extends core_1.Preset {
constructor(data) {
super(data);
}
save() {
switch (this.source) {
case core_1.PRESET_SOURCE_EXTERNAL:
fs.writeJSON("config.json", this.toObject());
break;
}
_this.appConfigService.registerPreset(this.name, this.source, data.path);
}
delete() {
switch (this.source) {
case core_1.PRESET_SOURCE_GITHUB:
if (fs.exists()) {
fs.rm("", {
recursive: true
});
}
break;
}
_this.appConfigService.unregisterPreset(this.name);
}
}(config);
}
configs() {
const fs = new core_1.FileSystem(env_1.PRESETS_DIR, this.driver), dirs = fs.exists("") ? fs.readdir("") : [];
const { presets = [] } = this.appConfigService.config;
return [
...dirs.map((name) => {
return {
name,
source: core_1.PRESET_SOURCE_INTERNAL,
path: fs.path(name)
};
}),
...presets.map((item) => {
if (item.source === core_1.PRESET_SOURCE_GITHUB) {
return {
...item,
path: this.appConfigService.fs.path("presets", item.name)
};
}
return item;
})
];
}
search(options = {}) {
const { name, source, path } = options;
const presets = [], configs = this.configs();
for (const config of configs) {
if (name && name !== config.name) {
continue;
}
if (source && source !== config.source) {
continue;
}
if (path && path !== config.path) {
continue;
}
try {
const preset = this.load(config);
presets.push(preset);
}
catch (err) {
this.logService.error(err.message, {
name: config.name,
source: config.source,
path: config.path
});
}
}
return presets;
}
searchOne(options = {}) {
const [preset] = this.search(options);
return preset || null;
}
};
exports.PresetRepository = PresetRepository;
exports.PresetRepository = PresetRepository = __decorate([
(0, core_1.Injectable)(),
__param(2, (0, core_1.Inject)(core_1.FILE_SYSTEM_DRIVER_KEY)),
__metadata("design:paramtypes", [core_1.AppConfigService,
core_1.LogService, Object])
], PresetRepository);