@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.
Files changed (117) hide show
  1. package/README.md +1 -1
  2. package/lib/AppModule.js +42 -0
  3. package/lib/env.d.ts +2 -3
  4. package/lib/env.js +12 -42
  5. package/lib/main.d.ts +2 -3
  6. package/lib/main.js +24 -26
  7. package/lib/makes/GithubClient.d.ts +24 -3
  8. package/lib/makes/GithubClient.js +20 -6
  9. package/lib/makes/Version.d.ts +22 -0
  10. package/lib/makes/Version.js +59 -0
  11. package/lib/makes/VersionRange.d.ts +6 -0
  12. package/lib/makes/VersionRange.js +18 -0
  13. package/lib/makes/VersionRule.d.ts +24 -0
  14. package/lib/makes/VersionRule.js +68 -0
  15. package/lib/makes/index.d.ts +2 -0
  16. package/lib/makes/index.js +2 -0
  17. package/lib/modules/core/index.d.ts +2 -0
  18. package/lib/modules/{app → core}/index.js +13 -19
  19. package/lib/modules/dns/controllers/DnsController.d.ts +7 -0
  20. package/lib/modules/dns/controllers/DnsController.js +47 -0
  21. package/lib/modules/dns/index.d.ts +4 -0
  22. package/lib/modules/dns/index.js +41 -0
  23. package/lib/modules/dns/services/DnsService.d.ts +10 -0
  24. package/lib/modules/dns/services/DnsService.js +77 -0
  25. package/lib/modules/docker/index.d.ts +2 -1
  26. package/lib/modules/docker/index.js +5 -1
  27. package/lib/modules/docker/services/ComposeService.d.ts +32 -0
  28. package/lib/modules/docker/services/ComposeService.js +127 -0
  29. package/lib/modules/docker/services/ContainerService.d.ts +1 -1
  30. package/lib/modules/docker/services/DockerService.js +2 -25
  31. package/lib/modules/docker/services/ImageService.d.ts +2 -8
  32. package/lib/modules/docker/services/ImageService.js +15 -3
  33. package/lib/modules/docker/services/ModemService.d.ts +3 -3
  34. package/lib/modules/docker/services/ModemService.js +24 -6
  35. package/lib/modules/docker/services/ProtoService.js +2 -2
  36. package/lib/modules/docker/type/ComposeConfig.d.ts +12 -0
  37. package/lib/modules/index.d.ts +4 -1
  38. package/lib/modules/index.js +4 -1
  39. package/lib/modules/keystore/controllers/KeystoreController.d.ts +0 -3
  40. package/lib/modules/keystore/controllers/KeystoreController.js +3 -54
  41. package/lib/modules/keystore/services/KeystoreService.d.ts +3 -3
  42. package/lib/modules/keystore/services/KeystoreService.js +6 -4
  43. package/lib/modules/keystore/utils/createEncryptionKey.d.ts +1 -1
  44. package/lib/modules/package-manager/index.d.ts +5 -0
  45. package/lib/modules/package-manager/index.js +33 -0
  46. package/lib/modules/package-manager/providers/NpmProvider.d.ts +7 -0
  47. package/lib/modules/package-manager/providers/NpmProvider.js +39 -0
  48. package/lib/modules/package-manager/providers/PnpmProvider.d.ts +7 -0
  49. package/lib/modules/package-manager/providers/PnpmProvider.js +30 -0
  50. package/lib/modules/package-manager/providers/YarnProvider.d.ts +7 -0
  51. package/lib/modules/package-manager/providers/YarnProvider.js +29 -0
  52. package/lib/modules/package-manager/service/PackageManager.d.ts +10 -0
  53. package/lib/modules/package-manager/service/PackageManager.js +70 -0
  54. package/lib/modules/package-manager/service/RegistryService.d.ts +4 -0
  55. package/lib/{services/NpmService.js → modules/package-manager/service/RegistryService.js} +6 -11
  56. package/lib/modules/package-manager/types/Package.d.ts +4 -0
  57. package/lib/modules/package-manager/types/Package.js +2 -0
  58. package/lib/modules/package-manager/types/PackageInfo.js +2 -0
  59. package/lib/modules/package-manager/types/PackageManagerProvider.d.ts +6 -0
  60. package/lib/modules/package-manager/types/PackageManagerProvider.js +6 -0
  61. package/lib/{controllers → modules/plugin/controllers}/PluginController.d.ts +2 -2
  62. package/lib/{controllers → modules/plugin/controllers}/PluginController.js +21 -20
  63. package/lib/modules/plugin/index.d.ts +4 -0
  64. package/lib/modules/plugin/index.js +67 -0
  65. package/lib/{services → modules/plugin/services}/PluginService.d.ts +7 -5
  66. package/lib/{services → modules/plugin/services}/PluginService.js +38 -40
  67. package/lib/modules/preset/controllers/PresetController.d.ts +1 -1
  68. package/lib/modules/preset/controllers/PresetController.js +14 -7
  69. package/lib/modules/preset/controllers/PresetListener.d.ts +3 -2
  70. package/lib/modules/preset/controllers/PresetListener.js +6 -3
  71. package/lib/modules/preset/services/PresetService.d.ts +2 -1
  72. package/lib/modules/preset/services/PresetService.js +84 -15
  73. package/lib/modules/project/controllers/ProjectController.d.ts +38 -2
  74. package/lib/modules/project/controllers/ProjectController.js +848 -2
  75. package/lib/modules/project/controllers/SecretsController.d.ts +8 -0
  76. package/lib/modules/project/controllers/SecretsController.js +72 -0
  77. package/lib/modules/project/index.js +5 -1
  78. package/lib/modules/project/repositories/ProjectRepository.d.ts +3 -6
  79. package/lib/modules/project/repositories/ProjectRepository.js +9 -28
  80. package/lib/modules/project/services/ProjectService.d.ts +10 -4
  81. package/lib/modules/project/services/ProjectService.js +103 -8
  82. package/lib/modules/proxy/controllers/ProxyController.d.ts +1 -2
  83. package/lib/modules/proxy/controllers/ProxyController.js +1 -2
  84. package/lib/modules/proxy/services/CertService.js +1 -1
  85. package/lib/modules/proxy/services/ProxyService.d.ts +1 -0
  86. package/lib/modules/proxy/services/ProxyService.js +9 -4
  87. package/lib/utils/exec.js +4 -1
  88. package/lib/utils/get-cursor-position.js +1 -1
  89. package/lib/utils/index.d.ts +0 -1
  90. package/lib/utils/index.js +0 -1
  91. package/package.json +15 -15
  92. package/plugins/dns/Dockerfile +35 -0
  93. package/plugins/dns/app/Procfile +2 -0
  94. package/plugins/dns/app/dnsmasq.conf.tmpl +11 -0
  95. package/plugins/dns/app/dnsmasq.sh +28 -0
  96. package/plugins/proxy/Dockerfile +0 -2
  97. package/bin/ws.js +0 -6
  98. package/lib/RootModule.d.ts +0 -6
  99. package/lib/RootModule.js +0 -93
  100. package/lib/controllers/ProjectController.d.ts +0 -45
  101. package/lib/controllers/ProjectController.js +0 -972
  102. package/lib/controllers/index.d.ts +0 -5
  103. package/lib/controllers/index.js +0 -21
  104. package/lib/services/NpmService.d.ts +0 -5
  105. package/lib/types/index.d.ts +0 -1
  106. package/lib/types/index.js +0 -17
  107. package/lib/utils/followProgress2.d.ts +0 -1
  108. package/lib/utils/followProgress2.js +0 -63
  109. /package/lib/{modules/app/index.d.ts → AppModule.d.ts} +0 -0
  110. /package/lib/{controllers → modules/core/controllers}/CompletionController.d.ts +0 -0
  111. /package/lib/{controllers → modules/core/controllers}/CompletionController.js +0 -0
  112. /package/lib/{controllers → modules/core/controllers}/DebugController.d.ts +0 -0
  113. /package/lib/{controllers → modules/core/controllers}/DebugController.js +0 -0
  114. /package/lib/{controllers → modules/core/controllers}/ExperimentalController.d.ts +0 -0
  115. /package/lib/{controllers → modules/core/controllers}/ExperimentalController.js +0 -0
  116. /package/lib/{types/PackageInfo.js → modules/docker/type/ComposeConfig.js} +0 -0
  117. /package/lib/{types → modules/package-manager/types}/PackageInfo.d.ts +0 -0
@@ -50,8 +50,8 @@ let PresetController = class PresetController {
50
50
  }
51
51
  return table.toString();
52
52
  }
53
- async add(name, version) {
54
- await this.presetService.addPreset(name, version);
53
+ async install(repository, version) {
54
+ await this.presetService.install(repository, version);
55
55
  }
56
56
  async destroy() {
57
57
  await this.presetService.deinit();
@@ -81,13 +81,14 @@ let PresetController = class PresetController {
81
81
  await this.dockerService.imageRm(imageName);
82
82
  }
83
83
  await this.dockerService.buildImage({
84
+ version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
84
85
  tag: imageName,
85
86
  labels: {
86
87
  presetName: preset.name
87
88
  },
88
89
  buildArgs: buildArgs,
89
90
  context: preset.path,
90
- src: preset.dockerfile
91
+ dockerfile: preset.dockerfile
91
92
  });
92
93
  }
93
94
  async presets() {
@@ -113,15 +114,15 @@ __decorate([
113
114
  __metadata("design:returntype", Promise)
114
115
  ], PresetController.prototype, "list", null);
115
116
  __decorate([
116
- (0, core_1.Command)("preset:install <preset>"),
117
- (0, core_1.Command)("preset:install <preset>@<version>"),
117
+ (0, core_1.Command)("preset:install <repository>"),
118
+ (0, core_1.Command)("preset:install <repository>@<version>"),
118
119
  (0, core_1.Description)("Adding preset from github repository"),
119
- __param(0, (0, core_1.Param)("preset")),
120
+ __param(0, (0, core_1.Param)("repository")),
120
121
  __param(1, (0, core_1.Param)("version")),
121
122
  __metadata("design:type", Function),
122
123
  __metadata("design:paramtypes", [String, String]),
123
124
  __metadata("design:returntype", Promise)
124
- ], PresetController.prototype, "add", null);
125
+ ], PresetController.prototype, "install", null);
125
126
  __decorate([
126
127
  (0, core_1.Command)("preset:destroy"),
127
128
  __metadata("design:type", Function),
@@ -147,6 +148,12 @@ __decorate([
147
148
  __metadata("design:paramtypes", [String, Boolean]),
148
149
  __metadata("design:returntype", Promise)
149
150
  ], PresetController.prototype, "build", null);
151
+ __decorate([
152
+ (0, core_1.Completion)("preset"),
153
+ __metadata("design:type", Function),
154
+ __metadata("design:paramtypes", []),
155
+ __metadata("design:returntype", Promise)
156
+ ], PresetController.prototype, "presets", null);
150
157
  exports.PresetController = PresetController = __decorate([
151
158
  (0, core_1.Controller)(),
152
159
  (0, core_1.Description)("Preset commands"),
@@ -1,13 +1,14 @@
1
- import { EventService, Project } from "@wocker/core";
1
+ import { EventService, Project, AppConfigService } from "@wocker/core";
2
2
  import { DockerService } from "../../docker";
3
3
  import { PresetRepository } from "../repositories/PresetRepository";
4
4
  import { PresetService } from "../services/PresetService";
5
5
  export declare class PresetListener {
6
+ protected readonly appConfigService: AppConfigService;
6
7
  protected readonly eventService: EventService;
7
8
  protected readonly dockerService: DockerService;
8
9
  protected readonly presetRepository: PresetRepository;
9
10
  protected readonly presetService: PresetService;
10
- constructor(eventService: EventService, dockerService: DockerService, presetRepository: PresetRepository, presetService: PresetService);
11
+ constructor(appConfigService: AppConfigService, eventService: EventService, dockerService: DockerService, presetRepository: PresetRepository, presetService: PresetService);
11
12
  onInit(project: Project): Promise<void>;
12
13
  protected onRebuild(project: Project): Promise<void>;
13
14
  protected onBeforeStart(project: Project): Promise<void>;
@@ -17,7 +17,8 @@ const PresetRepository_1 = require("../repositories/PresetRepository");
17
17
  const PresetService_1 = require("../services/PresetService");
18
18
  const utils_2 = require("../../../utils");
19
19
  let PresetListener = class PresetListener {
20
- constructor(eventService, dockerService, presetRepository, presetService) {
20
+ constructor(appConfigService, eventService, dockerService, presetRepository, presetService) {
21
+ this.appConfigService = appConfigService;
21
22
  this.eventService = eventService;
22
23
  this.dockerService = dockerService;
23
24
  this.presetRepository = presetRepository;
@@ -118,13 +119,14 @@ let PresetListener = class PresetListener {
118
119
  project.imageName = this.presetService.getImageNameForProject(project, preset);
119
120
  if (!await this.dockerService.imageExists(project.imageName)) {
120
121
  await this.dockerService.buildImage({
122
+ version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
121
123
  tag: project.imageName,
122
124
  labels: {
123
125
  presetName: preset.name
124
126
  },
125
127
  buildArgs: project.buildArgs,
126
128
  context: preset.path,
127
- src: preset.dockerfile
129
+ dockerfile: preset.dockerfile
128
130
  });
129
131
  }
130
132
  }
@@ -133,7 +135,8 @@ let PresetListener = class PresetListener {
133
135
  exports.PresetListener = PresetListener;
134
136
  exports.PresetListener = PresetListener = __decorate([
135
137
  (0, core_1.Controller)(),
136
- __metadata("design:paramtypes", [core_1.EventService,
138
+ __metadata("design:paramtypes", [core_1.AppConfigService,
139
+ core_1.EventService,
137
140
  docker_1.DockerService,
138
141
  PresetRepository_1.PresetRepository,
139
142
  PresetService_1.PresetService])
@@ -4,6 +4,7 @@ export declare class PresetService {
4
4
  protected readonly appConfigService: AppConfigService;
5
5
  protected readonly fs: AppFileSystemService;
6
6
  protected readonly presetRepository: PresetRepository;
7
+ protected range: string;
7
8
  constructor(appConfigService: AppConfigService, fs: AppFileSystemService, presetRepository: PresetRepository);
8
9
  prompt(configMap: {
9
10
  [name: string]: PresetVariableConfig;
@@ -13,5 +14,5 @@ export declare class PresetService {
13
14
  get(name?: string): Preset;
14
15
  init(): Promise<void>;
15
16
  deinit(): Promise<void>;
16
- addPreset(name: string, repository?: string, version?: string): Promise<void>;
17
+ install(repository: string, version?: string): Promise<void>;
17
18
  }
@@ -17,12 +17,14 @@ const core_1 = require("@wocker/core");
17
17
  const utils_1 = require("@wocker/utils");
18
18
  const md5_1 = __importDefault(require("md5"));
19
19
  const PresetRepository_1 = require("../repositories/PresetRepository");
20
+ const makes_1 = require("../../../makes");
20
21
  const GithubClient_1 = require("../../../makes/GithubClient");
21
22
  let PresetService = class PresetService {
22
23
  constructor(appConfigService, fs, presetRepository) {
23
24
  this.appConfigService = appConfigService;
24
25
  this.fs = fs;
25
26
  this.presetRepository = presetRepository;
27
+ this.range = "1.x.x";
26
28
  }
27
29
  async prompt(configMap, values = {}) {
28
30
  for (const name in configMap) {
@@ -40,18 +42,27 @@ let PresetService = class PresetService {
40
42
  break;
41
43
  }
42
44
  case "select": {
45
+ const options = (0, utils_1.normalizeOptions)(config.options);
46
+ const defaultValue = config.multiple ? options.reduce((defaultValue, option) => {
47
+ if (values[option.value] === "true") {
48
+ return [
49
+ ...defaultValue,
50
+ option.value
51
+ ];
52
+ }
53
+ return defaultValue;
54
+ }, []) : values[name];
43
55
  const result = await (0, utils_1.promptSelect)({
44
56
  required: config.required,
45
57
  multiple: config.multiple,
46
58
  message: config.message,
47
59
  options: config.options,
48
- default: values[name]
60
+ default: defaultValue
49
61
  });
50
62
  if (!config.multiple) {
51
63
  values[name] = result;
52
64
  }
53
65
  else {
54
- const options = (0, utils_1.normalizeOptions)(config.options);
55
66
  for (const option of options) {
56
67
  if (result.includes(option.value)) {
57
68
  values[option.value] = "true";
@@ -215,20 +226,78 @@ let PresetService = class PresetService {
215
226
  this.appConfigService.config.unregisterPreset(preset.name);
216
227
  this.appConfigService.save();
217
228
  }
218
- async addPreset(name, repository, version) {
219
- if (!repository) {
220
- repository = `kearisp/wocker-${name}-preset`;
229
+ async install(repository, version) {
230
+ if (!/^[\w-]+\/[\w-]+$/.test(repository)) {
231
+ repository = `kearisp/wocker-${repository}-preset`;
221
232
  }
222
- let preset = this.presetRepository.searchOne({
223
- name
224
- });
225
- if (!preset) {
226
- console.info("Loading...");
227
- const [owner, repo] = repository.split("/");
228
- const github = new GithubClient_1.GithubClient(owner, repo);
229
- const info = await github.getInfo();
230
- await github.download(info.default_branch, this.fs.path(`presets/${name}`));
231
- this.appConfigService.registerPreset(name, core_1.PRESET_SOURCE_GITHUB);
233
+ const [owner, name] = repository.split("/");
234
+ let satisfyingTag;
235
+ let satisfyingBranch;
236
+ const github = new GithubClient_1.GithubClient(owner, name), wRule = makes_1.VersionRule.parse(this.range), rule = makes_1.VersionRule.parse(["latest", "beta"].includes(version) ? "x" : version ?? this.range);
237
+ if (version !== "beta") {
238
+ satisfyingTag = (await github.getTags())
239
+ .filter((tag) => {
240
+ if (!makes_1.Version.valid(tag.name)) {
241
+ return false;
242
+ }
243
+ return wRule.match(tag.name) || rule.match(tag.name);
244
+ })
245
+ .reduce((tag, nextTag) => {
246
+ if (!tag) {
247
+ return nextTag;
248
+ }
249
+ return makes_1.Version.parse(tag.name).compare(nextTag.name) < 0 ? nextTag : tag;
250
+ }, null);
251
+ }
252
+ if (!satisfyingTag) {
253
+ satisfyingBranch = (await github.getBranches())
254
+ .filter((branch) => {
255
+ if (!makes_1.Version.valid(branch.name)) {
256
+ return false;
257
+ }
258
+ return wRule.match(branch.name) || rule.match(branch.name);
259
+ })
260
+ .reduce((branch, nextBranch) => {
261
+ if (!branch) {
262
+ return nextBranch;
263
+ }
264
+ return makes_1.Version.parse(branch.name).compare(nextBranch.name) < 0 ? nextBranch : branch;
265
+ }, null);
266
+ }
267
+ if (!satisfyingTag && !satisfyingBranch) {
268
+ throw new Error(`Version "${version}" not found`);
269
+ }
270
+ try {
271
+ const ref = satisfyingTag ? satisfyingTag.name : satisfyingBranch.name, config = await github.getFile(ref, "config.json");
272
+ console.info(`Loading "${ref}"...`);
273
+ let preset = this.presetRepository.searchOne({
274
+ name: config.name
275
+ });
276
+ if (preset && satisfyingTag && preset.source === core_1.PRESET_SOURCE_GITHUB && makes_1.Version.parse(ref).compare(preset.version) === 0) {
277
+ console.info("Preset already installed");
278
+ return;
279
+ }
280
+ if (this.fs.exists(`presets/.tmp/${config.name}`)) {
281
+ this.fs.rm(`presets/.tmp/${config.name}`, {
282
+ recursive: true
283
+ });
284
+ }
285
+ await github.download(ref, this.fs.path(`presets/.tmp/${config.name}`));
286
+ if (this.fs.exists(`presets/${config.name}`)) {
287
+ this.fs.rm(`presets/${config.name}`, {
288
+ recursive: true
289
+ });
290
+ }
291
+ this.fs.mv(`presets/.tmp/${config.name}`, `presets/${config.name}`);
292
+ this.appConfigService.registerPreset(config.name, core_1.PRESET_SOURCE_GITHUB);
293
+ console.info("Preset installed successfully");
294
+ }
295
+ finally {
296
+ if (this.fs.exists("presets/.tmp")) {
297
+ this.fs.rm("presets/.tmp", {
298
+ recursive: true
299
+ });
300
+ }
232
301
  }
233
302
  }
234
303
  };
@@ -1,13 +1,49 @@
1
- import { AppConfigService, ProcessService } from "@wocker/core";
1
+ import { AppConfigService, AppFileSystemService, ProcessService, ProjectType, EventService, DockerService, LogService } from "@wocker/core";
2
2
  import { PresetService } from "../../preset";
3
3
  import { ProjectService } from "../services/ProjectService";
4
4
  export declare class ProjectController {
5
5
  protected readonly appConfigService: AppConfigService;
6
+ protected readonly fs: AppFileSystemService;
6
7
  protected readonly processService: ProcessService;
7
8
  protected readonly projectService: ProjectService;
8
9
  protected readonly presetService: PresetService;
9
- constructor(appConfigService: AppConfigService, processService: ProcessService, projectService: ProjectService, presetService: PresetService);
10
+ protected readonly eventService: EventService;
11
+ protected readonly dockerService: DockerService;
12
+ protected readonly logService: LogService;
13
+ constructor(appConfigService: AppConfigService, fs: AppFileSystemService, processService: ProcessService, projectService: ProjectService, presetService: PresetService, eventService: EventService, dockerService: DockerService, logService: LogService);
14
+ protected getProjectNames(): Promise<string[]>;
15
+ getScriptNames(): Promise<string[]>;
16
+ init(name: string, type: ProjectType): Promise<void>;
17
+ destroy(name?: string): Promise<void>;
10
18
  start(name?: string, restart?: boolean, build?: boolean, attach?: boolean): Promise<void>;
11
19
  stop(name?: string): Promise<void>;
20
+ projectList(all: boolean): Promise<string>;
21
+ buildArgsList(name?: string, service?: string): Promise<string>;
22
+ buildArgsGet(args: string[], name?: string): Promise<string>;
23
+ buildArgsSet(args: string[], name?: string, service?: string): Promise<void>;
24
+ buildArgsUnset(args: string[], name?: string, service?: string): Promise<void>;
25
+ domains(name?: string): Promise<string>;
26
+ addDomain(addDomains: string[], name?: string): Promise<void>;
27
+ setDomains(domains: string[], name?: string): Promise<void>;
28
+ removeDomain(removeDomains: string[], name?: string): Promise<void>;
29
+ clearDomain(name?: string): Promise<void>;
30
+ ports(name?: string, service?: string): Promise<string>;
31
+ addPort(hostPort: string, containerPort: string, name?: string): Promise<void>;
32
+ removePort(hostPort: string, containerPort: string, name?: string): Promise<void>;
33
+ clearPorts(name?: string): Promise<void>;
34
+ configList(name?: string, global?: boolean, service?: string): Promise<string>;
35
+ configGet(keys: string[], name: string, global: boolean): Promise<string>;
36
+ configSet(variables: string[], global: boolean, name: string, service?: string): Promise<void>;
37
+ configUnset(configs: string[], global?: boolean, name?: string, service?: string): Promise<void>;
38
+ volumeList(name?: string): Promise<string>;
39
+ volumeMount(volumes: string[], name: string): Promise<void>;
40
+ volumeUnmount(volumes: string[], name: string): Promise<void>;
41
+ extraHostList(name?: string): Promise<string>;
42
+ addExtraHost(extraHost: string, extraDomain: string, name?: string): Promise<void>;
43
+ removeExtraHost(extraHost: string, name?: string): Promise<void>;
12
44
  eject(name?: string): Promise<void>;
45
+ attach(name?: string): Promise<void>;
46
+ run(script: string, args: string[], name?: string, service?: string): Promise<void>;
47
+ exec(command?: string[], name?: string): Promise<void>;
48
+ logs(name?: string, global?: boolean, detach?: boolean, follow?: boolean, clear?: boolean): Promise<void>;
13
49
  }