UNPKG

@wocker/ws

Version:

Docker workspace for web projects

974 lines (973 loc) 39.7 kB
"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);