@wocker/ws
Version:
Docker workspace for web projects
974 lines (973 loc) • 39.7 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); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectController = void 0;
const core_1 = require("@wocker/core");
const utils_1 = require("@wocker/utils");
const path_1 = __importDefault(require("path"));
const cli_table3_1 = __importDefault(require("cli-table3"));
const yoctocolors_cjs_1 = __importDefault(require("yoctocolors-cjs"));
const async_mutex_1 = require("async-mutex");
const preset_1 = require("../../preset");
const ProjectService_1 = require("../services/ProjectService");
let ProjectController = class ProjectController {
constructor(appConfigService, fs, processService, projectService, presetService, eventService, dockerService, logService) {
this.appConfigService = appConfigService;
this.fs = fs;
this.processService = processService;
this.projectService = projectService;
this.presetService = presetService;
this.eventService = eventService;
this.dockerService = dockerService;
this.logService = logService;
}
async getProjectNames() {
const projects = this.projectService.search();
return projects.map((project) => {
return project.name;
});
}
async getScriptNames() {
try {
const project = this.projectService.get();
return Object.keys(project.scripts);
}
catch (err) {
return [];
}
}
async init(name, type) {
const fs = new core_1.FileSystem(this.processService.pwd());
let project = this.projectService.searchOne({
path: fs.path()
});
if (!project) {
project = new core_1.Project({
type: core_1.PROJECT_TYPE_IMAGE,
name: fs.basename(),
path: fs.path()
});
}
project.path = fs.path();
if (name) {
project.name = name;
}
if (!name || !project.name) {
project.name = await (0, utils_1.promptInput)({
required: "Project name is required",
message: "Project name",
type: "text",
default: project.name || path_1.default.basename(project.path),
validate: (name) => {
if (typeof name !== "string") {
return true;
}
const otherProject = this.projectService.searchOne({
name
});
if (otherProject && otherProject.path !== project.path) {
return `Project "${name}" already exists`;
}
return true;
}
});
project.addDomain(project.containerName);
}
if (type) {
project.type = type;
}
const mapTypes = this.appConfigService.getProjectTypes();
if (!type || !project.type || !mapTypes[project.type]) {
project.type = await (0, utils_1.promptSelect)({
message: "Project type",
required: true,
options: mapTypes,
default: project.type
});
}
switch (project.type) {
case core_1.PROJECT_TYPE_DOCKERFILE: {
const files = fs.readdir();
const dockerfiles = files.filter((fileName) => {
if (new RegExp("^(.*)\\.dockerfile$").test(fileName)) {
return true;
}
return new RegExp("^Dockerfile(\\..*)?").test(fileName);
});
if (dockerfiles.length === 0) {
throw new Error("Dockerfiles not found");
}
project.dockerfile = await (0, utils_1.promptSelect)({
message: "Dockerfile",
required: true,
options: dockerfiles.map((dockerfile) => {
return {
value: dockerfile
};
}),
default: project.dockerfile
});
break;
}
case core_1.PROJECT_TYPE_IMAGE: {
project.imageName = await (0, utils_1.promptInput)({
message: "Image name",
required: true,
default: project.imageName
});
break;
}
case core_1.PROJECT_TYPE_COMPOSE: {
const composeFiles = fs.readdir().filter((file) => {
return /docker-compose\./.test(file);
});
if (composeFiles.length === 0) {
throw new Error("docker-compose files not found");
}
project.composefile = await (0, utils_1.promptSelect)({
message: "Docker compose",
required: true,
options: composeFiles,
default: project.composefile
});
break;
}
case core_1.PROJECT_TYPE_PRESET:
break;
default:
throw new Error("Invalid project type");
}
await this.eventService.emit("project:init", project);
project.save();
}
async destroy(name) {
const project = this.projectService.get(name);
await this.projectService.stop(project);
this.appConfigService.removeProject(project.name);
this.appConfigService.save();
this.fs.rm(`projects/${project.name}`, {
recursive: true
});
}
async start(name, restart, build, attach) {
const project = this.projectService.get(name);
await this.projectService.start(project, restart, build, attach);
}
async stop(name) {
const project = this.projectService.get(name);
await this.projectService.stop(project);
}
async projectList(all) {
const table = new cli_table3_1.default({
head: ["Name", "Type", "Path", "Status"],
colAligns: ["left", "center", "left", "center"]
});
const projects = this.projectService.search();
for (const project of projects) {
const container = await this.dockerService.getContainer(project.containerName);
if (!container) {
if (all) {
table.push([project.name, project.type, project.path, "-"]);
}
continue;
}
const { State: { Status = "stopped" } = {} } = await container.inspect();
table.push([project.name, project.type, project.path, Status]);
}
return table.toString();
}
async buildArgsList(name, service) {
const project = this.projectService.get(name);
const table = new cli_table3_1.default({
head: ["KEY", "VALUE"]
});
for (const key in project.buildArgs) {
table.push([
key,
typeof project.buildArgs[key] === "string"
? project.buildArgs[key]
: JSON.stringify(project.buildArgs[key])
]);
}
for (const serviceName in project.services) {
if (service && service !== serviceName) {
continue;
}
if (!project.services[serviceName].buildArgs) {
continue;
}
for (const key in project.services[serviceName].buildArgs) {
table.options.head = ["KEY", "VALUE", "SERVICE"];
table.push([
key,
project.services[serviceName].buildArgs[key],
serviceName
]);
}
}
if (table.length === 0) {
return yoctocolors_cjs_1.default.gray("No build args found!");
}
return table.toString();
}
async buildArgsGet(args, name) {
const project = this.projectService.get(name);
const table = new cli_table3_1.default({
head: ["KEY", "VALUE"]
});
for (const key of args) {
if (project.buildArgs && typeof project.buildArgs[key] !== "undefined") {
const value = project.buildArgs[key] || "";
table.push([key, value]);
}
}
return table.toString();
}
async buildArgsSet(args, name, service) {
const project = this.projectService.get(name);
const buildArgs = args.reduce((env, config) => {
let [, key = "", value = ""] = config.split(/^([^=]+)=(.*)$/);
key = key.trim();
value = value.trim();
if (key) {
env[key] = value;
}
return env;
}, {});
for (const key in buildArgs) {
project.setBuildArg(key, buildArgs[key], service);
}
project.save();
}
async buildArgsUnset(args, name, service) {
const project = this.projectService.get(name);
const buildArgs = args.reduce((env, config) => {
let [, key = "", value = ""] = config.split(/^([^=]+)(?:=(.*))?$/);
key = key.trim();
value = value.trim();
env[key] = value;
return env;
}, {});
for (const key in buildArgs) {
project.unsetBuildArg(key, service);
}
project.save();
}
async domains(name) {
const project = this.projectService.get(name);
const table = new cli_table3_1.default({
head: [yoctocolors_cjs_1.default.yellow("Domain")]
});
for (const domain of project.domains) {
table.push([domain]);
}
return table.toString();
}
async addDomain(addDomains, name) {
const project = this.projectService.get(name);
for (const domain of addDomains) {
project.addDomain(domain);
}
project.save();
}
async setDomains(domains, name) {
const project = this.projectService.get(name);
project.clearDomains();
for (const domain of domains) {
project.addDomain(domain);
}
project.save();
}
async removeDomain(removeDomains, name) {
const project = this.projectService.get(name);
for (const domain of removeDomains) {
project.removeDomain(domain);
}
project.save();
}
async clearDomain(name) {
const project = this.projectService.get(name);
project.clearDomains();
project.save();
}
async ports(name, service) {
const project = this.projectService.get(name);
const table = new cli_table3_1.default({
head: ["Ports"]
});
for (const port of project.ports || []) {
table.push([port]);
}
return table.toString();
}
async addPort(hostPort, containerPort, name) {
const project = this.projectService.get(name);
project.linkPort(parseInt(hostPort), parseInt(containerPort));
project.save();
}
async removePort(hostPort, containerPort, name) {
const project = this.projectService.get(name);
project.unlinkPort(parseInt(hostPort), parseInt(containerPort));
project.save();
}
async clearPorts(name) {
const project = this.projectService.get(name);
if (project.ports) {
delete project.ports;
project.save();
}
}
async configList(name, global, service) {
const table = new cli_table3_1.default({
head: ["KEY", "VALUE"]
});
if (global) {
for (const i in this.appConfigService.config.env) {
table.push([
i,
this.appConfigService.config.env[i]
]);
}
}
else {
const project = this.projectService.get(name);
for (const key in project.env) {
table.push([
key,
project.env[key]
]);
}
for (const serviceName in project.services) {
if (service && service !== serviceName) {
continue;
}
if (!project.services[serviceName].env) {
continue;
}
for (const key in project.services[serviceName].env) {
table.options.head = ["KEY", "NAME", "SERVICE"];
table.push([
key,
project.services[serviceName].env[key],
serviceName
]);
}
}
}
if (table.length === 0) {
return yoctocolors_cjs_1.default.gray("No environment variables found.");
}
return table.toString();
}
async configGet(keys, name, global) {
let config = global
? this.appConfigService.config
: this.projectService.get(name);
const table = new cli_table3_1.default({
head: ["KEY", "VALUE"]
});
for (const key of keys) {
const value = config.getEnv(key, "");
if (!value) {
continue;
}
table.push([key, value]);
}
return table.toString();
}
async configSet(variables, global, name, service) {
if (global) {
for (const variable of variables) {
const [key, value] = variable.split("=");
if (!value) {
console.info(yoctocolors_cjs_1.default.yellow(`No value for "${key}"`));
continue;
}
this.appConfigService.setEnv(key.trim(), value.trim());
}
this.appConfigService.save();
return;
}
const project = this.projectService.get(name);
for (const variable of variables) {
const [key, value] = variable.split("=");
if (!value) {
console.info(yoctocolors_cjs_1.default.yellow(`No value for "${key}"`));
continue;
}
project.setEnv(key, value, service);
}
project.save();
}
async configUnset(configs, global, name, service) {
const env = configs.reduce((env, config) => {
const [key] = config.split("=");
env[key.trim()] = null;
return env;
}, {});
if (global) {
for (const i in env) {
this.appConfigService.unsetEnv(i);
}
this.appConfigService.save();
return;
}
const project = this.projectService.get(name);
for (const i in env) {
project.unsetEnv(i, service);
}
project.save();
}
async volumeList(name) {
const project = this.projectService.get(name);
const table = new cli_table3_1.default({
head: ["Volume"]
});
const volumes = project.volumes || [];
for (const volume of volumes) {
table.push([volume]);
}
return table.toString();
}
async volumeMount(volumes, name) {
const project = this.projectService.get(name);
if (Array.isArray(volumes) && volumes.length > 0) {
project.volumeMount(...volumes);
project.save();
}
}
async volumeUnmount(volumes, name) {
const project = this.projectService.get(name);
if (Array.isArray(volumes) && volumes.length > 0) {
project.volumeUnmount(...volumes);
project.save();
}
}
async extraHostList(name) {
const project = this.projectService.get(name);
if (!project.extraHosts) {
return "No extra hosts found";
}
const table = new cli_table3_1.default({
head: ["Host", "Domain"]
});
for (const host in project.extraHosts) {
table.push([
host, project.extraHosts[host]
]);
}
return table.toString();
}
async addExtraHost(extraHost, extraDomain, name) {
const project = this.projectService.get(name);
project.addExtraHost(extraHost, extraDomain);
project.save();
}
async removeExtraHost(extraHost, name) {
const project = this.projectService.get(name);
project.removeExtraHost(extraHost);
project.save();
}
async eject(name) {
const project = this.projectService.get(name);
const preset = this.presetService.get(project.preset);
if (!preset) {
throw new Error("Preset not found");
}
const confirm = await (0, utils_1.promptConfirm)({
message: "Confirm eject",
default: false
});
if (!confirm) {
return;
}
const copier = new core_1.FileSystemManager(preset.path, this.processService.pwd());
if (preset.dockerfile) {
if (!copier.destination.exists(preset.dockerfile)) {
copier.copy(preset.dockerfile);
}
project.type = "dockerfile";
project.dockerfile = preset.dockerfile;
}
const files = copier.source.readdir("", {
recursive: true
});
for (const path of files) {
const stat = copier.source.stat(path), dir = path_1.default.dirname(path);
if (stat.isFile() && path === "config.json") {
continue;
}
if (stat.isFile() && path === preset.dockerfile) {
continue;
}
if (copier.destination.exists(path)) {
continue;
}
if (!copier.destination.exists(dir)) {
copier.destination.mkdir(dir, {
recursive: true
});
}
copier.copy(path);
}
delete project.preset;
delete project.imageName;
project.save();
}
async attach(name) {
const project = this.projectService.get(name);
await this.projectService.attach(project);
}
async run(script, args, name, service) {
const project = this.projectService.get(name);
await this.projectService.run(project, script, service, args);
}
async exec(command, name) {
const project = this.projectService.get(name);
await this.projectService.exec(project, command);
}
async logs(name, global, detach, follow, clear) {
if (global) {
if (clear) {
this.logService.clear();
}
const prepareLog = (str) => {
return str.replace(/^\[.*]\s([^:]+):\s.*$/gm, (substring, type) => {
switch (type) {
case "debug":
return yoctocolors_cjs_1.default.gray(substring);
case "log":
return yoctocolors_cjs_1.default.white(substring);
case "info":
return yoctocolors_cjs_1.default.green(substring);
case "warn":
case "warning":
return yoctocolors_cjs_1.default.yellow(substring);
case "error":
return yoctocolors_cjs_1.default.red(substring);
default:
return substring;
}
});
};
const file = this.fs.open("ws.log", "r");
const stream = file.createReadlineStream({
start: -10
});
stream.on("data", (line) => {
process.stdout.write(prepareLog(line));
process.stdout.write("\n");
});
if (follow) {
const stats = file.stat();
const watcher = this.fs.watch("ws.log");
const mutex = new async_mutex_1.Mutex();
let position = stats.size;
watcher.on("change", async () => {
await mutex.acquire();
try {
const stats = file.stat();
if (stats.size < position) {
console.info("file truncated");
position = 0;
}
const buffer = file.readBytes(position);
position += buffer.length;
process.stdout.write(prepareLog(buffer.toString("utf-8")));
}
finally {
mutex.release();
}
});
}
return;
}
const project = this.projectService.get(name);
await this.projectService.logs(project, detach);
}
};
exports.ProjectController = ProjectController;
__decorate([
(0, core_1.Completion)("name"),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "getProjectNames", null);
__decorate([
(0, core_1.Completion)("script"),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "getScriptNames", null);
__decorate([
(0, core_1.Command)("init"),
(0, core_1.Description)("Project initialisation"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("type", "t")),
__param(1, (0, core_1.Description)("The type of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "init", null);
__decorate([
(0, core_1.Command)("destroy [name]"),
(0, core_1.Description)("Permanently destroy a project"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "destroy", null);
__decorate([
(0, core_1.Command)("start"),
(0, core_1.Description)("Starting project"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("restart", "r")),
__param(1, (0, core_1.Description)("Restarting project")),
__param(2, (0, core_1.Option)("build", "b")),
__param(2, (0, core_1.Description)("Build")),
__param(3, (0, core_1.Option)("attach", "a")),
__param(3, (0, core_1.Description)("Attach")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, Boolean, Boolean, Boolean]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "start", null);
__decorate([
(0, core_1.Command)("stop"),
(0, core_1.Description)("Stopping project"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "stop", null);
__decorate([
(0, core_1.Command)("ps"),
(0, core_1.Description)("Projects list"),
__param(0, (0, core_1.Option)("all", "a")),
__param(0, (0, core_1.Description)("All projects")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Boolean]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "projectList", null);
__decorate([
(0, core_1.Command)("build-args"),
(0, core_1.Description)("Show build args of the project"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("service", "s")),
__param(1, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "buildArgsList", null);
__decorate([
(0, core_1.Command)("build-args:get [...buildArgs]"),
__param(0, (0, core_1.Param)("buildArgs")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "buildArgsGet", null);
__decorate([
(0, core_1.Command)("build-args:set [...buildArgs]"),
(0, core_1.Description)("Set build args for the project"),
__param(0, (0, core_1.Param)("buildArgs")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__param(2, (0, core_1.Option)("service", "s")),
__param(2, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "buildArgsSet", null);
__decorate([
(0, core_1.Command)("build-args:unset [...buildArgs]"),
(0, core_1.Description)("Remove build args for the project"),
__param(0, (0, core_1.Param)("buildArgs")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__param(2, (0, core_1.Option)("service", "s")),
__param(2, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "buildArgsUnset", null);
__decorate([
(0, core_1.Command)("domains"),
(0, core_1.Description)("Project domain list"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "domains", null);
__decorate([
(0, core_1.Command)("domain:add [...domains]"),
(0, core_1.Description)("Adding project domain"),
__param(0, (0, core_1.Param)("domains")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "addDomain", null);
__decorate([
(0, core_1.Command)("domain:set [...domains]"),
(0, core_1.Description)("Setting project domains"),
__param(0, (0, core_1.Param)("domains")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "setDomains", null);
__decorate([
(0, core_1.Command)("domain:remove [...domains]"),
(0, core_1.Description)("Removing project domain"),
__param(0, (0, core_1.Param)("domains")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "removeDomain", null);
__decorate([
(0, core_1.Command)("domain:clear"),
(0, core_1.Description)("Clearing project domain"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "clearDomain", null);
__decorate([
(0, core_1.Command)("ports"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("service", "s")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "ports", null);
__decorate([
(0, core_1.Command)("port:add <host-port>:<container-port>"),
__param(0, (0, core_1.Param)("host-port")),
__param(1, (0, core_1.Param)("container-port")),
__param(2, (0, core_1.Option)("name", {
type: "string",
alias: "n",
description: "The name of the project"
})),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "addPort", null);
__decorate([
(0, core_1.Command)("port:remove <host-port>:<container-port>"),
__param(0, (0, core_1.Param)("host-port")),
__param(1, (0, core_1.Param)("container-port")),
__param(2, (0, core_1.Option)("name", {
type: "string",
alias: "n",
description: "The name of the project"
})),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "removePort", null);
__decorate([
(0, core_1.Command)("port:clear"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "clearPorts", null);
__decorate([
(0, core_1.Command)("config"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("global", "g")),
__param(2, (0, core_1.Option)("service", "s")),
__param(2, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, Boolean, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "configList", null);
__decorate([
(0, core_1.Command)("config:get [...key]"),
__param(0, (0, core_1.Param)("key")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__param(2, (0, core_1.Option)("global", "g")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String, Boolean]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "configGet", null);
__decorate([
(0, core_1.Command)("config:set [...configs]"),
(0, core_1.Description)("Setting env variables"),
__param(0, (0, core_1.Param)("configs")),
__param(1, (0, core_1.Option)("global", "g")),
__param(2, (0, core_1.Option)("name", "n")),
__param(2, (0, core_1.Description)("The name of the project")),
__param(3, (0, core_1.Option)("service", "s")),
__param(3, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, Boolean, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "configSet", null);
__decorate([
(0, core_1.Command)("config:unset [...configs]"),
__param(0, (0, core_1.Param)("configs")),
__param(1, (0, core_1.Option)("global", "g")),
__param(2, (0, core_1.Option)("name", "n")),
__param(2, (0, core_1.Description)("The name of the project")),
__param(3, (0, core_1.Option)("service", "s")),
__param(3, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, Boolean, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "configUnset", null);
__decorate([
(0, core_1.Command)("volumes"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "volumeList", null);
__decorate([
(0, core_1.Command)("volume:mount [...volumes]"),
__param(0, (0, core_1.Param)("volumes")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "volumeMount", null);
__decorate([
(0, core_1.Command)("volume:unmount [...volumes]"),
__param(0, (0, core_1.Param)("volumes")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "volumeUnmount", null);
__decorate([
(0, core_1.Command)("extra-hosts"),
(0, core_1.Description)("List of extra hosts"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "extraHostList", null);
__decorate([
(0, core_1.Command)("extra-host:add <extraHost>:<extraDomain>"),
(0, core_1.Description)("Adding extra host"),
__param(0, (0, core_1.Param)("extraHost")),
__param(1, (0, core_1.Param)("extraDomain")),
__param(2, (0, core_1.Option)("name", "n")),
__param(2, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "addExtraHost", null);
__decorate([
(0, core_1.Command)("extra-host:remove <extraHost>"),
(0, core_1.Description)("Removing extra host"),
__param(0, (0, core_1.Param)("extraHost")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "removeExtraHost", null);
__decorate([
(0, core_1.Command)("preset:eject"),
(0, core_1.Description)("Eject preset files into the project"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "eject", null);
__decorate([
(0, core_1.Command)("attach"),
(0, core_1.Description)("Attach local standard input, output, and error streams to a running container"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "attach", null);
__decorate([
(0, core_1.Command)("run <script> [...args]"),
__param(0, (0, core_1.Param)("script")),
__param(1, (0, core_1.Param)("args")),
__param(2, (0, core_1.Option)("name", "n")),
__param(2, (0, core_1.Description)("The name of the project")),
__param(3, (0, core_1.Option)("service", "s")),
__param(3, (0, core_1.Description)("The name of the service")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, Array, String, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "run", null);
__decorate([
(0, core_1.Command)("exec [...command]"),
__param(0, (0, core_1.Param)("command")),
__param(1, (0, core_1.Option)("name", "n")),
__param(1, (0, core_1.Description)("The name of the project")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "exec", null);
__decorate([
(0, core_1.Command)("logs"),
(0, core_1.Description)("Logs"),
__param(0, (0, core_1.Option)("name", "n")),
__param(0, (0, core_1.Description)("The name of the project")),
__param(1, (0, core_1.Option)("global", "g")),
__param(1, (0, core_1.Description)("Global")),
__param(2, (0, core_1.Option)("detach", "d")),
__param(2, (0, core_1.Description)("Detach")),
__param(3, (0, core_1.Option)("follow", "f")),
__param(3, (0, core_1.Description)("Follow")),
__param(4, (0, core_1.Option)("clear", "c")),
__param(4, (0, core_1.Description)("Clear log file (works only with --global)")),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, Boolean, Boolean, Boolean, Boolean]),
__metadata("design:returntype", Promise)
], ProjectController.prototype, "logs", null);
exports.ProjectController = ProjectController = __decorate([
(0, core_1.Controller)(),
(0, core_1.Description)("Project commands"),
__metadata("design:paramtypes", [core_1.AppConfigService,
core_1.AppFileSystemService,
core_1.ProcessService,
ProjectService_1.ProjectService,
preset_1.PresetService,
core_1.EventService,
core_1.DockerService,
core_1.LogService])
], ProjectController);