@wocker/ws 1.0.24 → 1.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/AppModule.js +42 -0
- package/lib/env.d.ts +2 -3
- package/lib/env.js +12 -42
- package/lib/main.d.ts +2 -3
- package/lib/main.js +24 -26
- package/lib/makes/GithubClient.d.ts +24 -3
- package/lib/makes/GithubClient.js +20 -6
- package/lib/makes/Version.d.ts +22 -0
- package/lib/makes/Version.js +59 -0
- package/lib/makes/VersionRange.d.ts +6 -0
- package/lib/makes/VersionRange.js +18 -0
- package/lib/makes/VersionRule.d.ts +24 -0
- package/lib/makes/VersionRule.js +68 -0
- package/lib/makes/index.d.ts +2 -0
- package/lib/makes/index.js +2 -0
- package/lib/modules/core/index.d.ts +2 -0
- package/lib/modules/{app → core}/index.js +13 -19
- package/lib/modules/dns/controllers/DnsController.d.ts +7 -0
- package/lib/modules/dns/controllers/DnsController.js +47 -0
- package/lib/modules/dns/index.d.ts +4 -0
- package/lib/modules/dns/index.js +41 -0
- package/lib/modules/dns/services/DnsService.d.ts +10 -0
- package/lib/modules/dns/services/DnsService.js +77 -0
- package/lib/modules/docker/index.d.ts +2 -1
- package/lib/modules/docker/index.js +5 -1
- package/lib/modules/docker/services/ComposeService.d.ts +32 -0
- package/lib/modules/docker/services/ComposeService.js +127 -0
- package/lib/modules/docker/services/ContainerService.d.ts +1 -1
- package/lib/modules/docker/services/DockerService.js +2 -25
- package/lib/modules/docker/services/ImageService.d.ts +2 -8
- package/lib/modules/docker/services/ImageService.js +15 -3
- package/lib/modules/docker/services/ModemService.d.ts +3 -3
- package/lib/modules/docker/services/ModemService.js +24 -6
- package/lib/modules/docker/services/ProtoService.js +2 -2
- package/lib/modules/docker/type/ComposeConfig.d.ts +12 -0
- package/lib/modules/index.d.ts +4 -1
- package/lib/modules/index.js +4 -1
- package/lib/modules/keystore/controllers/KeystoreController.d.ts +0 -3
- package/lib/modules/keystore/controllers/KeystoreController.js +3 -54
- package/lib/modules/keystore/services/KeystoreService.d.ts +3 -3
- package/lib/modules/keystore/services/KeystoreService.js +6 -4
- package/lib/modules/keystore/utils/createEncryptionKey.d.ts +1 -1
- package/lib/modules/package-manager/index.d.ts +5 -0
- package/lib/modules/package-manager/index.js +33 -0
- package/lib/modules/package-manager/providers/NpmProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/NpmProvider.js +39 -0
- package/lib/modules/package-manager/providers/PnpmProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/PnpmProvider.js +30 -0
- package/lib/modules/package-manager/providers/YarnProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/YarnProvider.js +29 -0
- package/lib/modules/package-manager/service/PackageManager.d.ts +10 -0
- package/lib/modules/package-manager/service/PackageManager.js +70 -0
- package/lib/modules/package-manager/service/RegistryService.d.ts +4 -0
- package/lib/{services/NpmService.js → modules/package-manager/service/RegistryService.js} +6 -11
- package/lib/modules/package-manager/types/Package.d.ts +4 -0
- package/lib/modules/package-manager/types/Package.js +2 -0
- package/lib/modules/package-manager/types/PackageInfo.js +2 -0
- package/lib/modules/package-manager/types/PackageManagerProvider.d.ts +6 -0
- package/lib/modules/package-manager/types/PackageManagerProvider.js +6 -0
- package/lib/{controllers → modules/plugin/controllers}/PluginController.d.ts +2 -2
- package/lib/{controllers → modules/plugin/controllers}/PluginController.js +21 -20
- package/lib/modules/plugin/index.d.ts +4 -0
- package/lib/modules/plugin/index.js +67 -0
- package/lib/{services → modules/plugin/services}/PluginService.d.ts +7 -5
- package/lib/{services → modules/plugin/services}/PluginService.js +38 -40
- package/lib/modules/preset/controllers/PresetController.d.ts +1 -1
- package/lib/modules/preset/controllers/PresetController.js +14 -7
- package/lib/modules/preset/controllers/PresetListener.d.ts +3 -2
- package/lib/modules/preset/controllers/PresetListener.js +6 -3
- package/lib/modules/preset/services/PresetService.d.ts +2 -1
- package/lib/modules/preset/services/PresetService.js +84 -15
- package/lib/modules/project/controllers/ProjectController.d.ts +38 -2
- package/lib/modules/project/controllers/ProjectController.js +848 -2
- package/lib/modules/project/controllers/SecretsController.d.ts +8 -0
- package/lib/modules/project/controllers/SecretsController.js +72 -0
- package/lib/modules/project/index.js +5 -1
- package/lib/modules/project/repositories/ProjectRepository.d.ts +3 -6
- package/lib/modules/project/repositories/ProjectRepository.js +9 -28
- package/lib/modules/project/services/ProjectService.d.ts +10 -4
- package/lib/modules/project/services/ProjectService.js +103 -8
- package/lib/modules/proxy/controllers/ProxyController.d.ts +1 -2
- package/lib/modules/proxy/controllers/ProxyController.js +1 -2
- package/lib/modules/proxy/services/CertService.js +1 -1
- package/lib/modules/proxy/services/ProxyService.d.ts +1 -0
- package/lib/modules/proxy/services/ProxyService.js +9 -4
- package/lib/utils/exec.js +4 -1
- package/lib/utils/get-cursor-position.js +1 -1
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -1
- package/package.json +15 -15
- package/plugins/dns/Dockerfile +35 -0
- package/plugins/dns/app/Procfile +2 -0
- package/plugins/dns/app/dnsmasq.conf.tmpl +11 -0
- package/plugins/dns/app/dnsmasq.sh +28 -0
- package/plugins/proxy/Dockerfile +0 -2
- package/bin/ws.js +0 -6
- package/lib/RootModule.d.ts +0 -6
- package/lib/RootModule.js +0 -93
- package/lib/controllers/ProjectController.d.ts +0 -45
- package/lib/controllers/ProjectController.js +0 -972
- package/lib/controllers/index.d.ts +0 -5
- package/lib/controllers/index.js +0 -21
- package/lib/services/NpmService.d.ts +0 -5
- package/lib/types/index.d.ts +0 -1
- package/lib/types/index.js +0 -17
- package/lib/utils/followProgress2.d.ts +0 -1
- package/lib/utils/followProgress2.js +0 -63
- /package/lib/{modules/app/index.d.ts → AppModule.d.ts} +0 -0
- /package/lib/{controllers → modules/core/controllers}/CompletionController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/CompletionController.js +0 -0
- /package/lib/{controllers → modules/core/controllers}/DebugController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/DebugController.js +0 -0
- /package/lib/{controllers → modules/core/controllers}/ExperimentalController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/ExperimentalController.js +0 -0
- /package/lib/{types/PackageInfo.js → modules/docker/type/ComposeConfig.js} +0 -0
- /package/lib/{types → modules/package-manager/types}/PackageInfo.d.ts +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProjectService } from "../services/ProjectService";
|
|
2
|
+
export declare class SecretsController {
|
|
3
|
+
protected readonly projectService: ProjectService;
|
|
4
|
+
constructor(projectService: ProjectService);
|
|
5
|
+
create(secret?: string, name?: string): Promise<void>;
|
|
6
|
+
inspect(secret?: string, name?: string): Promise<string | undefined>;
|
|
7
|
+
rm(secret?: string, name?: string): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SecretsController = void 0;
|
|
16
|
+
const core_1 = require("@wocker/core");
|
|
17
|
+
const utils_1 = require("@wocker/utils");
|
|
18
|
+
const ProjectService_1 = require("../services/ProjectService");
|
|
19
|
+
let SecretsController = class SecretsController {
|
|
20
|
+
constructor(projectService) {
|
|
21
|
+
this.projectService = projectService;
|
|
22
|
+
}
|
|
23
|
+
async create(secret, name) {
|
|
24
|
+
const project = this.projectService.get(name);
|
|
25
|
+
const value = await (0, utils_1.promptInput)({
|
|
26
|
+
message: "Secret value",
|
|
27
|
+
type: "password"
|
|
28
|
+
});
|
|
29
|
+
await project.setSecret(secret, value);
|
|
30
|
+
}
|
|
31
|
+
async inspect(secret, name) {
|
|
32
|
+
const project = this.projectService.get(name);
|
|
33
|
+
return project.getSecret(secret);
|
|
34
|
+
}
|
|
35
|
+
async rm(secret, name) {
|
|
36
|
+
const project = this.projectService.get(name);
|
|
37
|
+
await project.unsetSecret(secret);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.SecretsController = SecretsController;
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, core_1.Command)("secret:create [secret]"),
|
|
43
|
+
(0, core_1.Description)("Adds project secret value to keystore"),
|
|
44
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
45
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
46
|
+
__metadata("design:type", Function),
|
|
47
|
+
__metadata("design:paramtypes", [String, String]),
|
|
48
|
+
__metadata("design:returntype", Promise)
|
|
49
|
+
], SecretsController.prototype, "create", null);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, core_1.Command)("secret:inspect [secret]"),
|
|
52
|
+
(0, core_1.Description)("Inspect secret value"),
|
|
53
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
54
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
55
|
+
__metadata("design:type", Function),
|
|
56
|
+
__metadata("design:paramtypes", [String, String]),
|
|
57
|
+
__metadata("design:returntype", Promise)
|
|
58
|
+
], SecretsController.prototype, "inspect", null);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, core_1.Command)("secret:rm [secret]"),
|
|
61
|
+
(0, core_1.Description)("Delete secret value"),
|
|
62
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
63
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
64
|
+
__metadata("design:type", Function),
|
|
65
|
+
__metadata("design:paramtypes", [String, String]),
|
|
66
|
+
__metadata("design:returntype", Promise)
|
|
67
|
+
], SecretsController.prototype, "rm", null);
|
|
68
|
+
exports.SecretsController = SecretsController = __decorate([
|
|
69
|
+
(0, core_1.Controller)(),
|
|
70
|
+
(0, core_1.Description)("Project secret commands"),
|
|
71
|
+
__metadata("design:paramtypes", [ProjectService_1.ProjectService])
|
|
72
|
+
], SecretsController);
|
|
@@ -12,6 +12,7 @@ const keystore_1 = require("../keystore");
|
|
|
12
12
|
const docker_1 = require("../docker");
|
|
13
13
|
const preset_1 = require("../preset");
|
|
14
14
|
const ProjectController_1 = require("./controllers/ProjectController");
|
|
15
|
+
const SecretsController_1 = require("./controllers/SecretsController");
|
|
15
16
|
const ProjectRepository_1 = require("./repositories/ProjectRepository");
|
|
16
17
|
Object.defineProperty(exports, "ProjectRepository", { enumerable: true, get: function () { return ProjectRepository_1.ProjectRepository; } });
|
|
17
18
|
const ProjectService_1 = require("./services/ProjectService");
|
|
@@ -26,7 +27,10 @@ exports.ProjectModule = ProjectModule = __decorate([
|
|
|
26
27
|
keystore_1.KeystoreModule,
|
|
27
28
|
docker_1.DockerModule
|
|
28
29
|
],
|
|
29
|
-
controllers: [
|
|
30
|
+
controllers: [
|
|
31
|
+
ProjectController_1.ProjectController,
|
|
32
|
+
SecretsController_1.SecretsController
|
|
33
|
+
],
|
|
30
34
|
providers: [
|
|
31
35
|
ProjectRepository_1.ProjectRepository,
|
|
32
36
|
ProjectService_1.ProjectService
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { AppConfigService, AppFileSystemService, Project,
|
|
2
|
-
|
|
3
|
-
export declare class ProjectRepository {
|
|
1
|
+
import { AppConfigService, AppFileSystemService, Project, ProjectRepository as CoreProjectRepository, ProjectRepositorySearchParams as SearchParams } from "@wocker/core";
|
|
2
|
+
export declare class ProjectRepository extends CoreProjectRepository {
|
|
4
3
|
protected readonly appConfigService: AppConfigService;
|
|
5
4
|
protected readonly fs: AppFileSystemService;
|
|
6
|
-
|
|
7
|
-
constructor(appConfigService: AppConfigService, fs: AppFileSystemService, keystoreService: KeystoreService);
|
|
5
|
+
constructor(appConfigService: AppConfigService, fs: AppFileSystemService);
|
|
8
6
|
getByName(name: string): Project;
|
|
9
|
-
fromObject(data: Partial<ProjectProperties>): Project;
|
|
10
7
|
save(project: Project): void;
|
|
11
8
|
search(params?: SearchParams): Project[];
|
|
12
9
|
searchOne(params?: SearchParams): Project | null;
|
|
@@ -11,37 +11,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ProjectRepository = void 0;
|
|
13
13
|
const core_1 = require("@wocker/core");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
let ProjectRepository = class ProjectRepository extends core_1.ProjectRepository {
|
|
15
|
+
constructor(appConfigService, fs) {
|
|
16
|
+
super();
|
|
17
17
|
this.appConfigService = appConfigService;
|
|
18
18
|
this.fs = fs;
|
|
19
|
-
this.keystoreService = keystoreService;
|
|
20
19
|
}
|
|
21
20
|
getByName(name) {
|
|
22
21
|
const ref = this.appConfigService.config.getProject(name), config = this.fs.readJSON(`projects/${name}/config.json`);
|
|
23
|
-
return
|
|
22
|
+
return new core_1.Project({
|
|
24
23
|
...config,
|
|
25
24
|
path: ref.path
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
|
-
fromObject(data) {
|
|
29
|
-
const _this = this;
|
|
30
|
-
return new class extends core_1.Project {
|
|
31
|
-
constructor(data) {
|
|
32
|
-
super(data);
|
|
33
|
-
}
|
|
34
|
-
async getSecret(key, defaultValue) {
|
|
35
|
-
return _this.keystoreService.get(`p:${this.name}:${key}`, defaultValue);
|
|
36
|
-
}
|
|
37
|
-
async setSecret(key, value) {
|
|
38
|
-
return _this.keystoreService.set(`p:${this.name}:${key}`, value);
|
|
39
|
-
}
|
|
40
|
-
save() {
|
|
41
|
-
_this.save(this);
|
|
42
|
-
}
|
|
43
|
-
}(data);
|
|
44
|
-
}
|
|
45
27
|
save(project) {
|
|
46
28
|
if (!project.name) {
|
|
47
29
|
throw new Error("Project should has a name");
|
|
@@ -52,14 +34,14 @@ let ProjectRepository = class ProjectRepository {
|
|
|
52
34
|
if (!project.id) {
|
|
53
35
|
project.id = project.name;
|
|
54
36
|
}
|
|
55
|
-
if (!this.fs.exists(`projects/${project.
|
|
56
|
-
this.fs.mkdir(`projects/${project.
|
|
37
|
+
if (!this.fs.exists(`projects/${project.name}`)) {
|
|
38
|
+
this.fs.mkdir(`projects/${project.name}`, {
|
|
57
39
|
recursive: true
|
|
58
40
|
});
|
|
59
41
|
}
|
|
60
42
|
const { path, ...rest } = project.toObject();
|
|
61
|
-
this.appConfigService.addProject(project.
|
|
62
|
-
this.fs.writeJSON(`projects/${project.
|
|
43
|
+
this.appConfigService.addProject(project.name, path);
|
|
44
|
+
this.fs.writeJSON(`projects/${project.name}/config.json`, rest);
|
|
63
45
|
this.appConfigService.save();
|
|
64
46
|
}
|
|
65
47
|
search(params = {}) {
|
|
@@ -85,6 +67,5 @@ exports.ProjectRepository = ProjectRepository;
|
|
|
85
67
|
exports.ProjectRepository = ProjectRepository = __decorate([
|
|
86
68
|
(0, core_1.Injectable)(),
|
|
87
69
|
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
88
|
-
core_1.AppFileSystemService
|
|
89
|
-
keystore_1.KeystoreService])
|
|
70
|
+
core_1.AppFileSystemService])
|
|
90
71
|
], ProjectRepository);
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppConfigService, EventService, LogService, ProcessService, Project, ProjectService as CoreProjectService, ProjectRepositorySearchParams as SearchParams } from "@wocker/core";
|
|
2
|
+
import { ComposeService, DockerService } from "../../docker";
|
|
3
|
+
import { PresetRepository, PresetService } from "../../preset";
|
|
2
4
|
import { ProjectRepository } from "../repositories/ProjectRepository";
|
|
3
|
-
import { DockerService } from "../../docker";
|
|
4
|
-
import { PresetService, PresetRepository } from "../../preset";
|
|
5
5
|
export declare class ProjectService extends CoreProjectService {
|
|
6
6
|
protected readonly appConfigService: AppConfigService;
|
|
7
|
+
protected readonly processService: ProcessService;
|
|
7
8
|
protected readonly eventService: EventService;
|
|
8
9
|
protected readonly dockerService: DockerService;
|
|
10
|
+
protected readonly composeService: ComposeService;
|
|
9
11
|
protected readonly projectRepository: ProjectRepository;
|
|
10
12
|
protected readonly presetService: PresetService;
|
|
11
13
|
protected readonly presetRepository: PresetRepository;
|
|
12
|
-
|
|
14
|
+
protected readonly logService: LogService;
|
|
15
|
+
constructor(appConfigService: AppConfigService, processService: ProcessService, eventService: EventService, dockerService: DockerService, composeService: ComposeService, projectRepository: ProjectRepository, presetService: PresetService, presetRepository: PresetRepository, logService: LogService);
|
|
13
16
|
get(name?: string): Project;
|
|
14
17
|
search(params?: SearchParams): Project[];
|
|
15
18
|
searchOne(params?: SearchParams): Project | null;
|
|
@@ -17,5 +20,8 @@ export declare class ProjectService extends CoreProjectService {
|
|
|
17
20
|
start(project: Project, restart?: boolean, rebuild?: boolean, attach?: boolean): Promise<void>;
|
|
18
21
|
stop(project: Project): Promise<void>;
|
|
19
22
|
build(project: Project, rebuild?: boolean): Promise<void>;
|
|
23
|
+
attach(project: Project): Promise<void>;
|
|
24
|
+
run(project: Project, script: string, service?: string, args?: string[]): Promise<void>;
|
|
25
|
+
exec(project: Project, command: string[]): Promise<void>;
|
|
20
26
|
logs(project: Project, detach?: boolean): Promise<void>;
|
|
21
27
|
}
|
|
@@ -11,30 +11,39 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ProjectService = void 0;
|
|
13
13
|
const core_1 = require("@wocker/core");
|
|
14
|
-
const
|
|
14
|
+
const cli_1 = require("@kearisp/cli");
|
|
15
15
|
const docker_1 = require("../../docker");
|
|
16
16
|
const preset_1 = require("../../preset");
|
|
17
|
+
const ProjectRepository_1 = require("../repositories/ProjectRepository");
|
|
18
|
+
class PublicCli extends cli_1.Cli {
|
|
19
|
+
parseCommand(command, index) {
|
|
20
|
+
return super.parseCommand(command, index);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
17
23
|
let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
18
|
-
constructor(appConfigService, eventService, dockerService, projectRepository, presetService, presetRepository) {
|
|
24
|
+
constructor(appConfigService, processService, eventService, dockerService, composeService, projectRepository, presetService, presetRepository, logService) {
|
|
19
25
|
super();
|
|
20
26
|
this.appConfigService = appConfigService;
|
|
27
|
+
this.processService = processService;
|
|
21
28
|
this.eventService = eventService;
|
|
22
29
|
this.dockerService = dockerService;
|
|
30
|
+
this.composeService = composeService;
|
|
23
31
|
this.projectRepository = projectRepository;
|
|
24
32
|
this.presetService = presetService;
|
|
25
33
|
this.presetRepository = presetRepository;
|
|
34
|
+
this.logService = logService;
|
|
26
35
|
}
|
|
27
36
|
get(name) {
|
|
28
37
|
const project = name
|
|
29
38
|
? this.projectRepository.searchOne({ name })
|
|
30
39
|
: this.projectRepository.searchOne({
|
|
31
|
-
path: this.
|
|
40
|
+
path: this.processService.pwd()
|
|
32
41
|
});
|
|
33
42
|
if (!project) {
|
|
34
43
|
throw new Error("Project not found");
|
|
35
44
|
}
|
|
36
45
|
if (name) {
|
|
37
|
-
this.
|
|
46
|
+
this.processService.chdir(project.path);
|
|
38
47
|
}
|
|
39
48
|
return project;
|
|
40
49
|
}
|
|
@@ -63,6 +72,7 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
63
72
|
container = await this.dockerService.createContainer({
|
|
64
73
|
name: project.containerName,
|
|
65
74
|
image: project.imageName,
|
|
75
|
+
cmd: project.cmd,
|
|
66
76
|
env: {
|
|
67
77
|
...this.appConfigService.config.env || {},
|
|
68
78
|
...project.env || {}
|
|
@@ -88,6 +98,10 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
88
98
|
break;
|
|
89
99
|
}
|
|
90
100
|
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
101
|
+
await this.composeService.up({
|
|
102
|
+
context: project.path,
|
|
103
|
+
composefile: project.composefile
|
|
104
|
+
});
|
|
91
105
|
break;
|
|
92
106
|
}
|
|
93
107
|
}
|
|
@@ -100,6 +114,8 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
100
114
|
case core_1.PROJECT_TYPE_PRESET:
|
|
101
115
|
await this.dockerService.attach(project.containerName);
|
|
102
116
|
break;
|
|
117
|
+
case core_1.PROJECT_TYPE_COMPOSE:
|
|
118
|
+
break;
|
|
103
119
|
}
|
|
104
120
|
}
|
|
105
121
|
}
|
|
@@ -111,8 +127,13 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
111
127
|
case core_1.PROJECT_TYPE_PRESET:
|
|
112
128
|
await this.dockerService.removeContainer(project.containerName);
|
|
113
129
|
break;
|
|
114
|
-
case core_1.PROJECT_TYPE_COMPOSE:
|
|
130
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
131
|
+
await this.composeService.down({
|
|
132
|
+
context: project.path,
|
|
133
|
+
composefile: project.composefile
|
|
134
|
+
});
|
|
115
135
|
break;
|
|
136
|
+
}
|
|
116
137
|
}
|
|
117
138
|
await this.eventService.emit("project:stop", project);
|
|
118
139
|
}
|
|
@@ -129,10 +150,11 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
129
150
|
}
|
|
130
151
|
if (!await this.dockerService.imageExists(project.imageName)) {
|
|
131
152
|
await this.dockerService.buildImage({
|
|
153
|
+
version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
132
154
|
tag: project.imageName,
|
|
133
155
|
buildArgs: project.buildArgs,
|
|
134
156
|
context: project.path,
|
|
135
|
-
|
|
157
|
+
dockerfile: project.dockerfile
|
|
136
158
|
});
|
|
137
159
|
}
|
|
138
160
|
break;
|
|
@@ -154,24 +176,94 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
154
176
|
}
|
|
155
177
|
if (!await this.dockerService.imageExists(project.imageName)) {
|
|
156
178
|
await this.dockerService.buildImage({
|
|
179
|
+
version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
157
180
|
tag: project.imageName,
|
|
158
181
|
labels: {
|
|
159
182
|
"org.wocker.preset": preset.name
|
|
160
183
|
},
|
|
161
184
|
buildArgs: project.buildArgs,
|
|
162
185
|
context: preset.path,
|
|
163
|
-
|
|
186
|
+
dockerfile: preset.dockerfile
|
|
164
187
|
});
|
|
165
188
|
}
|
|
166
189
|
}
|
|
167
190
|
break;
|
|
168
191
|
}
|
|
169
192
|
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
193
|
+
await this.composeService.build({
|
|
194
|
+
context: project.path,
|
|
195
|
+
composefile: project.composefile
|
|
196
|
+
});
|
|
170
197
|
break;
|
|
171
198
|
}
|
|
172
199
|
}
|
|
173
200
|
await this.eventService.emit("project:build", project, rebuild);
|
|
174
201
|
}
|
|
202
|
+
async attach(project) {
|
|
203
|
+
switch (project.type) {
|
|
204
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
205
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
206
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
207
|
+
await this.dockerService.attach(project.containerName);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async run(project, script, service, args = []) {
|
|
213
|
+
if (!project.scripts || !project.scripts[script]) {
|
|
214
|
+
throw new Error(`Script ${script} not found`);
|
|
215
|
+
}
|
|
216
|
+
switch (project.type) {
|
|
217
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
218
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
219
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
220
|
+
const container = await this.dockerService.getContainer(project.containerName);
|
|
221
|
+
if (!container) {
|
|
222
|
+
throw new Error("The project is not started");
|
|
223
|
+
}
|
|
224
|
+
const cli = new PublicCli();
|
|
225
|
+
const cmd = cli.parseCommand(`command ${project.scripts[script]}`, 0);
|
|
226
|
+
this.logService.debug(cmd);
|
|
227
|
+
const exec = await container.exec({
|
|
228
|
+
AttachStdin: true,
|
|
229
|
+
AttachStdout: true,
|
|
230
|
+
AttachStderr: true,
|
|
231
|
+
Tty: process.stdin.isTTY,
|
|
232
|
+
Cmd: [...cmd, ...args || []]
|
|
233
|
+
});
|
|
234
|
+
const stream = await exec.start({
|
|
235
|
+
hijack: true,
|
|
236
|
+
stdin: true,
|
|
237
|
+
Tty: process.stdin.isTTY
|
|
238
|
+
});
|
|
239
|
+
await this.dockerService.attachStream(stream);
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
243
|
+
console.log(service, script, args);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async exec(project, command) {
|
|
249
|
+
switch (project.type) {
|
|
250
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
251
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
252
|
+
case core_1.PROJECT_TYPE_PRESET:
|
|
253
|
+
await this.dockerService.exec(project.containerName, command, true);
|
|
254
|
+
break;
|
|
255
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
256
|
+
const [service, ...args] = command;
|
|
257
|
+
await this.composeService.exec({
|
|
258
|
+
service,
|
|
259
|
+
args,
|
|
260
|
+
context: project.path,
|
|
261
|
+
composefile: project.composefile
|
|
262
|
+
});
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
175
267
|
async logs(project, detach) {
|
|
176
268
|
switch (project.type) {
|
|
177
269
|
case core_1.PROJECT_TYPE_IMAGE:
|
|
@@ -203,9 +295,12 @@ exports.ProjectService = ProjectService;
|
|
|
203
295
|
exports.ProjectService = ProjectService = __decorate([
|
|
204
296
|
(0, core_1.Injectable)("PROJECT_SERVICE"),
|
|
205
297
|
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
298
|
+
core_1.ProcessService,
|
|
206
299
|
core_1.EventService,
|
|
207
300
|
docker_1.DockerService,
|
|
301
|
+
docker_1.ComposeService,
|
|
208
302
|
ProjectRepository_1.ProjectRepository,
|
|
209
303
|
preset_1.PresetService,
|
|
210
|
-
preset_1.PresetRepository
|
|
304
|
+
preset_1.PresetRepository,
|
|
305
|
+
core_1.LogService])
|
|
211
306
|
], ProjectService);
|
|
@@ -6,10 +6,9 @@ export declare class ProxyController {
|
|
|
6
6
|
protected readonly eventService: EventService;
|
|
7
7
|
protected readonly projectService: ProjectService;
|
|
8
8
|
protected readonly proxyService: ProxyService;
|
|
9
|
-
protected containerName: string;
|
|
10
9
|
constructor(appConfigService: AppConfigService, eventService: EventService, projectService: ProjectService, proxyService: ProxyService);
|
|
11
10
|
onProjectStart(project: Project): Promise<void>;
|
|
12
|
-
onProjectStop(
|
|
11
|
+
onProjectStop(_project: Project): Promise<void>;
|
|
13
12
|
getProjectNames(): string[];
|
|
14
13
|
init(httpPort?: number, httpsPort?: number, sshPort?: number, sshPassword?: string): Promise<void>;
|
|
15
14
|
start(restart?: boolean, rebuild?: boolean): Promise<void>;
|
|
@@ -27,7 +27,6 @@ let ProxyController = class ProxyController {
|
|
|
27
27
|
this.eventService = eventService;
|
|
28
28
|
this.projectService = projectService;
|
|
29
29
|
this.proxyService = proxyService;
|
|
30
|
-
this.containerName = "proxy.workspace";
|
|
31
30
|
this.eventService.on("project:init", (project) => this.proxyService.init(project));
|
|
32
31
|
this.eventService.on("project:start", (project) => this.onProjectStart(project));
|
|
33
32
|
this.eventService.on("project:stop", (project) => this.onProjectStop(project));
|
|
@@ -42,7 +41,7 @@ let ProxyController = class ProxyController {
|
|
|
42
41
|
}
|
|
43
42
|
await this.start();
|
|
44
43
|
}
|
|
45
|
-
async onProjectStop(
|
|
44
|
+
async onProjectStop(_project) {
|
|
46
45
|
}
|
|
47
46
|
getProjectNames() {
|
|
48
47
|
const projects = this.projectService.search();
|
|
@@ -72,7 +72,7 @@ let CertService = class CertService {
|
|
|
72
72
|
throw new Error("Cert name missing");
|
|
73
73
|
}
|
|
74
74
|
await this.proxyService.start();
|
|
75
|
-
const container = await this.dockerService.getContainer("proxy
|
|
75
|
+
const container = await this.dockerService.getContainer("wocker-proxy");
|
|
76
76
|
if (!container) {
|
|
77
77
|
throw new Error("Proxy not started");
|
|
78
78
|
}
|
|
@@ -5,6 +5,7 @@ export declare class ProxyService extends CoreProxyService {
|
|
|
5
5
|
protected readonly fs: AppFileSystemService;
|
|
6
6
|
protected readonly dockerService: DockerService;
|
|
7
7
|
protected containerName: string;
|
|
8
|
+
protected oldContainerNames: string[];
|
|
8
9
|
protected imageName: string;
|
|
9
10
|
protected oldImages: string[];
|
|
10
11
|
constructor(appConfigService: AppConfigService, fs: AppFileSystemService, dockerService: DockerService);
|
|
@@ -54,7 +54,8 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
|
|
|
54
54
|
this.appConfigService = appConfigService;
|
|
55
55
|
this.fs = fs;
|
|
56
56
|
this.dockerService = dockerService;
|
|
57
|
-
this.containerName = "proxy
|
|
57
|
+
this.containerName = "wocker-proxy";
|
|
58
|
+
this.oldContainerNames = ["proxy.workspace"];
|
|
58
59
|
this.imageName = "wocker-proxy:1.0.1";
|
|
59
60
|
this.oldImages = [
|
|
60
61
|
"wocker-proxy:1.0.0"
|
|
@@ -75,6 +76,9 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
|
|
|
75
76
|
}
|
|
76
77
|
let container = await this.dockerService.getContainer(this.containerName);
|
|
77
78
|
if (!container) {
|
|
79
|
+
for (const containerName of this.oldContainerNames) {
|
|
80
|
+
await this.dockerService.removeContainer(containerName);
|
|
81
|
+
}
|
|
78
82
|
console.info("Proxy starting...");
|
|
79
83
|
await this.build(rebuild);
|
|
80
84
|
const fs = this.fs;
|
|
@@ -145,12 +149,13 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
|
|
|
145
149
|
await this.dockerService.imageRm(oldImage);
|
|
146
150
|
}
|
|
147
151
|
await this.dockerService.buildImage({
|
|
152
|
+
version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
148
153
|
tag: this.imageName,
|
|
149
|
-
context: Path.join(env_1.PLUGINS_DIR, "proxy"),
|
|
150
|
-
src: "./Dockerfile",
|
|
151
154
|
buildArgs: {
|
|
152
155
|
SSH_PASSWORD: this.appConfigService.getMeta("PROXY_SSH_PASSWORD")
|
|
153
|
-
}
|
|
156
|
+
},
|
|
157
|
+
context: Path.join(env_1.PLUGINS_DIR, "proxy"),
|
|
158
|
+
dockerfile: "./Dockerfile"
|
|
154
159
|
});
|
|
155
160
|
}
|
|
156
161
|
async logs() {
|
package/lib/utils/exec.js
CHANGED
|
@@ -8,10 +8,13 @@ const exec = async (command, options) => {
|
|
|
8
8
|
maxBuffer: Infinity
|
|
9
9
|
});
|
|
10
10
|
return new Promise((resolve, reject) => {
|
|
11
|
-
let data = "";
|
|
11
|
+
let data = "", errData = "";
|
|
12
12
|
worker.stdout.on("data", (chunk) => {
|
|
13
13
|
data += chunk.toString();
|
|
14
14
|
});
|
|
15
|
+
worker.stderr.on("data", (chunk) => {
|
|
16
|
+
errData += chunk.toString();
|
|
17
|
+
});
|
|
15
18
|
worker.on("exit", (code) => {
|
|
16
19
|
if (code !== 0) {
|
|
17
20
|
reject(new Error(`Process exited with code ${code}`));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getCursorPosition = void 0;
|
|
4
|
-
const code =
|
|
4
|
+
const code = "\x1b[6n";
|
|
5
5
|
const getCursorPosition = async () => {
|
|
6
6
|
process.stdin.resume();
|
|
7
7
|
process.stdin.setRawMode(true);
|
package/lib/utils/index.d.ts
CHANGED
package/lib/utils/index.js
CHANGED
|
@@ -16,7 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./escapeRegExp"), exports);
|
|
18
18
|
__exportStar(require("./exec"), exports);
|
|
19
|
-
__exportStar(require("./followProgress2"), exports);
|
|
20
19
|
__exportStar(require("./get-cursor-position"), exports);
|
|
21
20
|
__exportStar(require("./injectVariables"), exports);
|
|
22
21
|
__exportStar(require("./parse-table"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wocker/ws",
|
|
3
|
-
"
|
|
3
|
+
"type": "commonjs",
|
|
4
|
+
"version": "1.0.26",
|
|
4
5
|
"author": "Kris Papercut <krispcut@gmail.com>",
|
|
5
6
|
"description": "Docker workspace for web projects",
|
|
6
7
|
"license": "MIT",
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
"devops"
|
|
14
15
|
],
|
|
15
16
|
"bin": {
|
|
16
|
-
"ws": "./
|
|
17
|
+
"ws": "./lib/main.js"
|
|
17
18
|
},
|
|
18
19
|
"homepage": "https://kearisp.github.io/wocker",
|
|
19
20
|
"repository": {
|
|
@@ -27,42 +28,41 @@
|
|
|
27
28
|
"prepublishOnly": "npm run build",
|
|
28
29
|
"start": "npm run watch",
|
|
29
30
|
"build": "tsc --project tsconfig.build.json",
|
|
30
|
-
"
|
|
31
|
+
"postbuild": "chmod +x ./lib/main.js",
|
|
32
|
+
"watch": "npm run build && tsc -w --project tsconfig.build.json",
|
|
31
33
|
"test": "jest --colors",
|
|
32
34
|
"test-watch": "jest --colors --watchAll",
|
|
33
35
|
"make-coverage-badge": "make-coverage-badge"
|
|
34
36
|
},
|
|
35
37
|
"dependencies": {
|
|
36
|
-
"@wocker/core": "1.0.
|
|
37
|
-
"@wocker/utils": "^2.0.
|
|
38
|
+
"@wocker/core": "1.0.26",
|
|
39
|
+
"@wocker/utils": "^2.0.6",
|
|
38
40
|
"async-mutex": "^0.4.0",
|
|
39
41
|
"axios": "^1.6.7",
|
|
40
42
|
"child_process": "^1.0.2",
|
|
41
43
|
"cli-table3": "^0.6.2",
|
|
44
|
+
"docker-compose": "^1.2.0",
|
|
42
45
|
"dockerode": "^4.0.2",
|
|
43
|
-
"fs": "^0.0.1-security",
|
|
44
46
|
"keytar": "^7.9.0",
|
|
45
47
|
"md5": "^2.3.0",
|
|
46
|
-
"os": "^0.1.2",
|
|
47
|
-
"path": "^0.12.7",
|
|
48
48
|
"protobufjs": "^7.5.1",
|
|
49
49
|
"unzipper": "^0.12.3",
|
|
50
50
|
"yoctocolors-cjs": "^2.1.2"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/dockerode": "^3.3.23",
|
|
54
|
-
"@types/jest": "^
|
|
54
|
+
"@types/jest": "^30.0.0",
|
|
55
55
|
"@types/md5": "^2.3.2",
|
|
56
56
|
"@types/mute-stream": "^0.0.4",
|
|
57
|
-
"@types/node": "^
|
|
57
|
+
"@types/node": "^24.5.2",
|
|
58
58
|
"@types/unzipper": "^0.10.10",
|
|
59
|
-
"@wocker/testing": "1.0.
|
|
60
|
-
"jest": "^
|
|
59
|
+
"@wocker/testing": "1.0.3",
|
|
60
|
+
"jest": "^30.1.3",
|
|
61
61
|
"make-coverage-badge": "^1.2.0",
|
|
62
|
-
"memfs": "^4.
|
|
63
|
-
"ts-jest": "^29.
|
|
62
|
+
"memfs": "^4.49.0",
|
|
63
|
+
"ts-jest": "^29.4.4",
|
|
64
64
|
"ts-node": "^10.9.2",
|
|
65
|
-
"typescript": "^5.
|
|
65
|
+
"typescript": "^5.9.3",
|
|
66
66
|
"unionfs": "^4.5.4"
|
|
67
67
|
}
|
|
68
68
|
}
|