@wocker/ws 1.0.22 → 1.0.24

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 (139) hide show
  1. package/lib/{AppModule.d.ts → RootModule.d.ts} +1 -1
  2. package/lib/RootModule.js +93 -0
  3. package/lib/controllers/DebugController.d.ts +1 -1
  4. package/lib/controllers/DebugController.js +7 -9
  5. package/lib/controllers/ExperimentalController.d.ts +8 -0
  6. package/lib/controllers/ExperimentalController.js +76 -0
  7. package/lib/controllers/PluginController.d.ts +2 -1
  8. package/lib/controllers/PluginController.js +3 -3
  9. package/lib/controllers/ProjectController.d.ts +8 -7
  10. package/lib/controllers/ProjectController.js +123 -240
  11. package/lib/controllers/index.d.ts +1 -4
  12. package/lib/controllers/index.js +1 -4
  13. package/lib/env.d.ts +2 -3
  14. package/lib/env.js +3 -4
  15. package/lib/main.js +8 -8
  16. package/lib/makes/Plugin.d.ts +0 -1
  17. package/lib/makes/Plugin.js +0 -1
  18. package/lib/makes/index.d.ts +0 -2
  19. package/lib/makes/index.js +0 -2
  20. package/lib/modules/app/index.d.ts +2 -0
  21. package/lib/modules/app/index.js +32 -0
  22. package/lib/modules/docker/index.d.ts +8 -0
  23. package/lib/modules/docker/index.js +41 -0
  24. package/lib/modules/docker/services/ContainerService.d.ts +14 -0
  25. package/lib/modules/docker/services/ContainerService.js +115 -0
  26. package/lib/{services → modules/docker/services}/DockerService.d.ts +12 -5
  27. package/lib/{services → modules/docker/services}/DockerService.js +27 -114
  28. package/lib/modules/docker/services/ImageService.d.ts +18 -0
  29. package/lib/modules/docker/services/ImageService.js +68 -0
  30. package/lib/modules/docker/services/ModemService.d.ts +15 -0
  31. package/lib/modules/docker/services/ModemService.js +138 -0
  32. package/lib/modules/docker/services/ProtoService.d.ts +6 -0
  33. package/lib/modules/docker/services/ProtoService.js +20 -0
  34. package/lib/modules/index.d.ts +6 -0
  35. package/lib/{keystore → modules}/index.js +6 -1
  36. package/lib/{controllers → modules/keystore/controllers}/KeystoreController.d.ts +2 -2
  37. package/lib/{controllers → modules/keystore/controllers}/KeystoreController.js +4 -5
  38. package/lib/modules/keystore/index.d.ts +4 -0
  39. package/lib/modules/keystore/index.js +29 -0
  40. package/lib/{keystore → modules/keystore}/providers/FileKeystoreProvider.d.ts +3 -4
  41. package/lib/{keystore → modules/keystore}/providers/FileKeystoreProvider.js +4 -5
  42. package/lib/{keystore → modules/keystore}/providers/KeytarKeystoreProvider.js +1 -1
  43. package/lib/{keystore → modules/keystore/services}/KeystoreService.d.ts +4 -3
  44. package/lib/{keystore → modules/keystore/services}/KeystoreService.js +9 -6
  45. package/lib/modules/preset/controllers/PresetController.d.ts +18 -0
  46. package/lib/modules/preset/controllers/PresetController.js +157 -0
  47. package/lib/modules/preset/controllers/PresetListener.d.ts +14 -0
  48. package/lib/modules/preset/controllers/PresetListener.js +140 -0
  49. package/lib/modules/preset/index.d.ts +5 -0
  50. package/lib/modules/preset/index.js +39 -0
  51. package/lib/modules/preset/repositories/PresetRepository.d.ts +16 -0
  52. package/lib/{repositories → modules/preset/repositories}/PresetRepository.js +9 -11
  53. package/lib/{services → modules/preset/services}/PresetService.d.ts +4 -12
  54. package/lib/{services → modules/preset/services}/PresetService.js +22 -27
  55. package/lib/modules/project/controllers/ProjectController.d.ts +13 -0
  56. package/lib/modules/project/controllers/ProjectController.js +127 -0
  57. package/lib/modules/project/index.d.ts +5 -0
  58. package/lib/modules/project/index.js +39 -0
  59. package/lib/modules/project/repositories/ProjectRepository.d.ts +13 -0
  60. package/lib/modules/project/repositories/ProjectRepository.js +90 -0
  61. package/lib/modules/project/services/ProjectService.d.ts +21 -0
  62. package/lib/modules/project/services/ProjectService.js +211 -0
  63. package/lib/{controllers → modules/proxy/controllers}/CertController.d.ts +2 -1
  64. package/lib/{controllers → modules/proxy/controllers}/CertController.js +4 -3
  65. package/lib/{controllers → modules/proxy/controllers}/ProxyController.d.ts +5 -4
  66. package/lib/{controllers → modules/proxy/controllers}/ProxyController.js +12 -11
  67. package/lib/modules/proxy/index.d.ts +5 -0
  68. package/lib/modules/proxy/index.js +41 -0
  69. package/lib/{services → modules/proxy/services}/CertService.d.ts +5 -6
  70. package/lib/{services → modules/proxy/services}/CertService.js +13 -14
  71. package/lib/{services → modules/proxy/services}/ProxyService.d.ts +4 -4
  72. package/lib/{services → modules/proxy/services}/ProxyService.js +27 -20
  73. package/lib/services/PluginService.d.ts +1 -3
  74. package/lib/services/PluginService.js +12 -18
  75. package/lib/utils/followProgress2.d.ts +1 -0
  76. package/lib/utils/followProgress2.js +63 -0
  77. package/lib/utils/index.d.ts +1 -2
  78. package/lib/utils/index.js +1 -2
  79. package/package.json +7 -8
  80. package/proto/buildkit.proto +55 -0
  81. package/proto/solver/pb/ops.proto +443 -0
  82. package/lib/AppModule.js +0 -84
  83. package/lib/controllers/PresetController.d.ts +0 -23
  84. package/lib/controllers/PresetController.js +0 -361
  85. package/lib/keystore/index.d.ts +0 -1
  86. package/lib/keystore/types/Encryption.d.ts +0 -9
  87. package/lib/keystore/types/Encryption.js +0 -81
  88. package/lib/keystore/types/Encryptor.d.ts +0 -10
  89. package/lib/keystore/types/Encryptor.js +0 -59
  90. package/lib/makes/FS.d.ts +0 -27
  91. package/lib/makes/FS.js +0 -284
  92. package/lib/makes/LineConvertStream.d.ts +0 -11
  93. package/lib/makes/LineConvertStream.js +0 -42
  94. package/lib/makes/Logger.d.ts +0 -9
  95. package/lib/makes/Logger.js +0 -34
  96. package/lib/plugins/MongodbPlugin.d.ts +0 -20
  97. package/lib/plugins/MongodbPlugin.js +0 -288
  98. package/lib/plugins/index.d.ts +0 -1
  99. package/lib/plugins/index.js +0 -17
  100. package/lib/repositories/PresetRepository.d.ts +0 -23
  101. package/lib/repositories/index.d.ts +0 -1
  102. package/lib/repositories/index.js +0 -17
  103. package/lib/services/AppConfigService.d.ts +0 -35
  104. package/lib/services/AppConfigService.js +0 -163
  105. package/lib/services/AppEventsService.d.ts +0 -9
  106. package/lib/services/AppEventsService.js +0 -43
  107. package/lib/services/LogService.d.ts +0 -15
  108. package/lib/services/LogService.js +0 -67
  109. package/lib/services/ProjectService.d.ts +0 -27
  110. package/lib/services/ProjectService.js +0 -207
  111. package/lib/services/index.d.ts +0 -10
  112. package/lib/services/index.js +0 -26
  113. package/lib/utils/followProgress.d.ts +0 -1
  114. package/lib/utils/followProgress.js +0 -73
  115. package/presets/go/Dockerfile +0 -19
  116. package/presets/go/config.json +0 -14
  117. package/presets/php-fpm/Dockerfile +0 -173
  118. package/presets/php-fpm/bin/compare-version +0 -3
  119. package/presets/php-fpm/config.json +0 -55
  120. package/presets/php-fpm/etc/nginx/sites-available/default.conf +0 -36
  121. /package/lib/{utils/format-size-units.d.ts → modules/docker/utils/formatSizeUnits.d.ts} +0 -0
  122. /package/lib/{utils/format-size-units.js → modules/docker/utils/formatSizeUnits.js} +0 -0
  123. /package/lib/{keystore → modules/keystore}/providers/KeytarKeystoreProvider.d.ts +0 -0
  124. /package/lib/{keystore → modules/keystore}/types/FileKeystore.d.ts +0 -0
  125. /package/lib/{keystore → modules/keystore}/types/FileKeystore.js +0 -0
  126. /package/lib/{keystore → modules/keystore}/types/Keytar.d.ts +0 -0
  127. /package/lib/{keystore → modules/keystore}/types/Keytar.js +0 -0
  128. /package/lib/{keystore → modules/keystore}/utils/createEncryptionKey.d.ts +0 -0
  129. /package/lib/{keystore → modules/keystore}/utils/createEncryptionKey.js +0 -0
  130. /package/lib/{keystore → modules/keystore}/utils/createPasswordHash.d.ts +0 -0
  131. /package/lib/{keystore → modules/keystore}/utils/createPasswordHash.js +0 -0
  132. /package/lib/{keystore → modules/keystore}/utils/decrypt.d.ts +0 -0
  133. /package/lib/{keystore → modules/keystore}/utils/decrypt.js +0 -0
  134. /package/lib/{keystore → modules/keystore}/utils/encrypt.d.ts +0 -0
  135. /package/lib/{keystore → modules/keystore}/utils/encrypt.js +0 -0
  136. /package/lib/{keystore → modules/keystore}/utils/index.d.ts +0 -0
  137. /package/lib/{keystore → modules/keystore}/utils/index.js +0 -0
  138. /package/lib/{keystore → modules/keystore}/utils/verifyPasswordHash.d.ts +0 -0
  139. /package/lib/{keystore → modules/keystore}/utils/verifyPasswordHash.js +0 -0
@@ -0,0 +1,140 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PresetListener = void 0;
13
+ const core_1 = require("@wocker/core");
14
+ const utils_1 = require("@wocker/utils");
15
+ const docker_1 = require("../../docker");
16
+ const PresetRepository_1 = require("../repositories/PresetRepository");
17
+ const PresetService_1 = require("../services/PresetService");
18
+ const utils_2 = require("../../../utils");
19
+ let PresetListener = class PresetListener {
20
+ constructor(eventService, dockerService, presetRepository, presetService) {
21
+ this.eventService = eventService;
22
+ this.dockerService = dockerService;
23
+ this.presetRepository = presetRepository;
24
+ this.presetService = presetService;
25
+ this.eventService.on("project:init", (project) => this.onInit(project));
26
+ this.eventService.on("project:beforeStart", (project) => this.onBeforeStart(project));
27
+ this.eventService.on("project:rebuild", (project) => this.onRebuild(project));
28
+ }
29
+ async onInit(project) {
30
+ if (project.type !== core_1.PROJECT_TYPE_PRESET) {
31
+ return;
32
+ }
33
+ const presets = this.presetRepository.search();
34
+ if (presets.length === 0) {
35
+ throw new Error("No presets");
36
+ }
37
+ project.preset = await (0, utils_1.promptSelect)({
38
+ message: "Choose preset",
39
+ options: presets.map((preset) => {
40
+ return {
41
+ label: preset.name,
42
+ value: preset.name
43
+ };
44
+ }),
45
+ default: project.preset
46
+ });
47
+ project.presetMode = await (0, utils_1.promptSelect)({
48
+ message: "Preset mode",
49
+ options: [
50
+ {
51
+ label: "For project only",
52
+ value: "project"
53
+ },
54
+ {
55
+ label: "Global usage",
56
+ value: "global"
57
+ }
58
+ ],
59
+ default: project.presetMode
60
+ });
61
+ const preset = this.presetService.get(project.preset);
62
+ if (!preset) {
63
+ throw new Error("Preset not found");
64
+ }
65
+ if (preset.buildArgsOptions) {
66
+ project.buildArgs = await this.presetService.prompt(preset.buildArgsOptions, project.buildArgs);
67
+ }
68
+ if (preset.envOptions) {
69
+ project.env = await this.presetService.prompt(preset.envOptions, project.env);
70
+ }
71
+ if (preset.volumeOptions) {
72
+ for (let volume of preset.volumeOptions) {
73
+ volume = (0, utils_2.injectVariables)(volume, {
74
+ ...project.buildArgs || {},
75
+ ...project.env || {}
76
+ });
77
+ const { source, destination, options } = (0, utils_1.volumeParse)(volume);
78
+ let projectVolume = project.getVolumeByDestination(destination);
79
+ const newSource = await (0, utils_1.promptInput)({
80
+ message: "Volume",
81
+ required: true,
82
+ suffix: `:${destination}`,
83
+ default: projectVolume ? (0, utils_1.volumeParse)(projectVolume).source : source
84
+ });
85
+ projectVolume = (0, utils_1.volumeFormat)({
86
+ source: newSource,
87
+ destination,
88
+ options
89
+ });
90
+ project.volumeMount(projectVolume);
91
+ }
92
+ }
93
+ if (preset.dockerfile) {
94
+ project.imageName = this.presetService.getImageNameForProject(project, preset);
95
+ }
96
+ }
97
+ async onRebuild(project) {
98
+ if (project.type !== core_1.PROJECT_TYPE_PRESET) {
99
+ return;
100
+ }
101
+ const preset = this.presetService.get(project.preset);
102
+ if (!preset) {
103
+ throw new Error(`Preset ${project.preset} not found`);
104
+ }
105
+ const imageName = this.presetService.getImageNameForProject(project, preset);
106
+ const exists = await this.dockerService.imageExists(imageName);
107
+ if (exists) {
108
+ console.info(`Removing image: ${imageName}`);
109
+ await this.dockerService.imageRm(imageName);
110
+ }
111
+ }
112
+ async onBeforeStart(project) {
113
+ if (project.type !== core_1.PROJECT_TYPE_PRESET) {
114
+ return;
115
+ }
116
+ const preset = this.presetService.get(project.preset);
117
+ if (preset.dockerfile) {
118
+ project.imageName = this.presetService.getImageNameForProject(project, preset);
119
+ if (!await this.dockerService.imageExists(project.imageName)) {
120
+ await this.dockerService.buildImage({
121
+ tag: project.imageName,
122
+ labels: {
123
+ presetName: preset.name
124
+ },
125
+ buildArgs: project.buildArgs,
126
+ context: preset.path,
127
+ src: preset.dockerfile
128
+ });
129
+ }
130
+ }
131
+ }
132
+ };
133
+ exports.PresetListener = PresetListener;
134
+ exports.PresetListener = PresetListener = __decorate([
135
+ (0, core_1.Controller)(),
136
+ __metadata("design:paramtypes", [core_1.EventService,
137
+ docker_1.DockerService,
138
+ PresetRepository_1.PresetRepository,
139
+ PresetService_1.PresetService])
140
+ ], PresetListener);
@@ -0,0 +1,5 @@
1
+ import { PresetRepository } from "./repositories/PresetRepository";
2
+ import { PresetService } from "./services/PresetService";
3
+ export declare class PresetModule {
4
+ }
5
+ export { PresetRepository, PresetService };
@@ -0,0 +1,39 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PresetService = exports.PresetRepository = exports.PresetModule = void 0;
10
+ const core_1 = require("@wocker/core");
11
+ const docker_1 = require("../docker");
12
+ const PresetController_1 = require("./controllers/PresetController");
13
+ const PresetListener_1 = require("./controllers/PresetListener");
14
+ const PresetRepository_1 = require("./repositories/PresetRepository");
15
+ Object.defineProperty(exports, "PresetRepository", { enumerable: true, get: function () { return PresetRepository_1.PresetRepository; } });
16
+ const PresetService_1 = require("./services/PresetService");
17
+ Object.defineProperty(exports, "PresetService", { enumerable: true, get: function () { return PresetService_1.PresetService; } });
18
+ let PresetModule = class PresetModule {
19
+ };
20
+ exports.PresetModule = PresetModule;
21
+ exports.PresetModule = PresetModule = __decorate([
22
+ (0, core_1.Module)({
23
+ imports: [
24
+ docker_1.DockerModule
25
+ ],
26
+ controllers: [
27
+ PresetController_1.PresetController,
28
+ PresetListener_1.PresetListener
29
+ ],
30
+ providers: [
31
+ PresetRepository_1.PresetRepository,
32
+ PresetService_1.PresetService
33
+ ],
34
+ exports: [
35
+ PresetRepository_1.PresetRepository,
36
+ PresetService_1.PresetService
37
+ ]
38
+ })
39
+ ], PresetModule);
@@ -0,0 +1,16 @@
1
+ import { AppConfig, PresetServiceSearchOptions as SearchOptions, Preset, PresetSource, AppConfigService, LogService } from "@wocker/core";
2
+ type PresetData = {
3
+ name: string;
4
+ source: PresetSource;
5
+ path?: string;
6
+ };
7
+ export declare class PresetRepository {
8
+ protected readonly appConfigService: AppConfigService;
9
+ protected readonly logService: LogService;
10
+ constructor(appConfigService: AppConfigService, logService: LogService);
11
+ protected load(data: PresetData): Preset;
12
+ protected configs(): AppConfig["presets"];
13
+ search(options?: SearchOptions): Preset[];
14
+ searchOne(options?: SearchOptions): Preset | null;
15
+ }
16
+ export {};
@@ -11,12 +11,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.PresetRepository = void 0;
13
13
  const core_1 = require("@wocker/core");
14
- const AppConfigService_1 = require("../services/AppConfigService");
15
- const LogService_1 = require("../services/LogService");
16
- const env_1 = require("../env");
14
+ const env_1 = require("../../../env");
17
15
  let PresetRepository = class PresetRepository {
18
- constructor(appConfig, logService) {
19
- this.appConfig = appConfig;
16
+ constructor(appConfigService, logService) {
17
+ this.appConfigService = appConfigService;
20
18
  this.logService = logService;
21
19
  }
22
20
  load(data) {
@@ -37,7 +35,7 @@ let PresetRepository = class PresetRepository {
37
35
  fs.writeJSON("config.json", this.toObject());
38
36
  break;
39
37
  }
40
- _this.appConfig.registerPreset(this.name, this.source, data.path);
38
+ _this.appConfigService.registerPreset(this.name, this.source, data.path);
41
39
  }
42
40
  delete() {
43
41
  switch (this.source) {
@@ -49,13 +47,13 @@ let PresetRepository = class PresetRepository {
49
47
  }
50
48
  break;
51
49
  }
52
- _this.appConfig.unregisterPreset(this.name);
50
+ _this.appConfigService.unregisterPreset(this.name);
53
51
  }
54
52
  }(config);
55
53
  }
56
54
  configs() {
57
55
  const fs = new core_1.FileSystem(env_1.PRESETS_DIR), dirs = fs.exists("") ? fs.readdir("") : [];
58
- const { presets = [] } = this.appConfig.config;
56
+ const { presets = [] } = this.appConfigService.config;
59
57
  return [
60
58
  ...dirs.map((name) => {
61
59
  return {
@@ -68,7 +66,7 @@ let PresetRepository = class PresetRepository {
68
66
  if (item.source === core_1.PRESET_SOURCE_GITHUB) {
69
67
  return {
70
68
  ...item,
71
- path: this.appConfig.fs.path("presets", item.name)
69
+ path: this.appConfigService.fs.path("presets", item.name)
72
70
  };
73
71
  }
74
72
  return item;
@@ -110,6 +108,6 @@ let PresetRepository = class PresetRepository {
110
108
  exports.PresetRepository = PresetRepository;
111
109
  exports.PresetRepository = PresetRepository = __decorate([
112
110
  (0, core_1.Injectable)(),
113
- __metadata("design:paramtypes", [AppConfigService_1.AppConfigService,
114
- LogService_1.LogService])
111
+ __metadata("design:paramtypes", [core_1.AppConfigService,
112
+ core_1.LogService])
115
113
  ], PresetRepository);
@@ -1,25 +1,17 @@
1
- import { EnvConfig, Project, Preset, PresetVariableConfig } from "@wocker/core";
2
- import { AppConfigService } from "./AppConfigService";
3
- import { LogService } from "./LogService";
1
+ import { Project, Preset, PresetVariableConfig, EnvConfig, AppConfigService, AppFileSystemService } from "@wocker/core";
4
2
  import { PresetRepository } from "../repositories/PresetRepository";
5
- type SearchOptions = Partial<{
6
- name: string;
7
- source: string;
8
- path: string;
9
- }>;
10
3
  export declare class PresetService {
11
4
  protected readonly appConfigService: AppConfigService;
5
+ protected readonly fs: AppFileSystemService;
12
6
  protected readonly presetRepository: PresetRepository;
13
- protected readonly logService: LogService;
14
- constructor(appConfigService: AppConfigService, presetRepository: PresetRepository, logService: LogService);
7
+ constructor(appConfigService: AppConfigService, fs: AppFileSystemService, presetRepository: PresetRepository);
15
8
  prompt(configMap: {
16
9
  [name: string]: PresetVariableConfig;
17
10
  }, values?: EnvConfig): Promise<EnvConfig>;
18
11
  getImageNameForProject(project: Project, preset: Preset): string;
19
12
  getImageName(preset: Preset, buildArgs: EnvConfig): string;
13
+ get(name?: string): Preset;
20
14
  init(): Promise<void>;
21
15
  deinit(): Promise<void>;
22
- get(name?: string): Preset;
23
16
  addPreset(name: string, repository?: string, version?: string): Promise<void>;
24
17
  }
25
- export { SearchOptions as PresetServiceSearchOptions };
@@ -16,15 +16,13 @@ exports.PresetService = void 0;
16
16
  const core_1 = require("@wocker/core");
17
17
  const utils_1 = require("@wocker/utils");
18
18
  const md5_1 = __importDefault(require("md5"));
19
- const AppConfigService_1 = require("./AppConfigService");
20
- const LogService_1 = require("./LogService");
21
19
  const PresetRepository_1 = require("../repositories/PresetRepository");
22
- const GithubClient_1 = require("../makes/GithubClient");
20
+ const GithubClient_1 = require("../../../makes/GithubClient");
23
21
  let PresetService = class PresetService {
24
- constructor(appConfigService, presetRepository, logService) {
22
+ constructor(appConfigService, fs, presetRepository) {
25
23
  this.appConfigService = appConfigService;
24
+ this.fs = fs;
26
25
  this.presetRepository = presetRepository;
27
- this.logService = logService;
28
26
  }
29
27
  async prompt(configMap, values = {}) {
30
28
  for (const name in configMap) {
@@ -36,7 +34,7 @@ let PresetService = class PresetService {
36
34
  required: config.required,
37
35
  default: typeof values[name] !== "undefined" && values[name] === "true"
38
36
  ? true
39
- : undefined,
37
+ : config.default
40
38
  });
41
39
  values[name] = value.toString();
42
40
  break;
@@ -117,6 +115,15 @@ let PresetService = class PresetService {
117
115
  }).join("-");
118
116
  return `ws-preset-${preset.name}:${version}`;
119
117
  }
118
+ get(name) {
119
+ const preset = name
120
+ ? this.presetRepository.searchOne({ name })
121
+ : this.presetRepository.searchOne({ path: this.appConfigService.pwd() });
122
+ if (!preset) {
123
+ throw new Error(name ? `Preset "${name}" not found` : "Preset not found");
124
+ }
125
+ return preset;
126
+ }
120
127
  async init() {
121
128
  const fs = new core_1.FileSystem(this.appConfigService.pwd());
122
129
  let preset = this.presetRepository.searchOne({
@@ -205,34 +212,22 @@ let PresetService = class PresetService {
205
212
  if (!preset) {
206
213
  return;
207
214
  }
208
- const config = this.appConfigService.getConfig();
209
- config.unregisterPreset(preset.name);
210
- config.save();
211
- }
212
- get(name) {
213
- const preset = name
214
- ? this.presetRepository.searchOne({ name })
215
- : this.presetRepository.searchOne({ path: this.appConfigService.pwd() });
216
- if (!preset) {
217
- throw new Error(name ? `Preset "${name}" not found` : "Preset not found");
218
- }
219
- return preset;
215
+ this.appConfigService.config.unregisterPreset(preset.name);
216
+ this.appConfigService.save();
220
217
  }
221
218
  async addPreset(name, repository, version) {
219
+ if (!repository) {
220
+ repository = `kearisp/wocker-${name}-preset`;
221
+ }
222
222
  let preset = this.presetRepository.searchOne({
223
223
  name
224
224
  });
225
225
  if (!preset) {
226
226
  console.info("Loading...");
227
- if (!repository) {
228
- repository = `kearisp/wocker-${name}-preset`;
229
- }
230
227
  const [owner, repo] = repository.split("/");
231
228
  const github = new GithubClient_1.GithubClient(owner, repo);
232
229
  const info = await github.getInfo();
233
- const config = await github.getFile(info.default_branch, "config.json");
234
- console.log(config);
235
- await github.download(info.default_branch, this.appConfigService.fs.path(`presets/${name}`));
230
+ await github.download(info.default_branch, this.fs.path(`presets/${name}`));
236
231
  this.appConfigService.registerPreset(name, core_1.PRESET_SOURCE_GITHUB);
237
232
  }
238
233
  }
@@ -240,7 +235,7 @@ let PresetService = class PresetService {
240
235
  exports.PresetService = PresetService;
241
236
  exports.PresetService = PresetService = __decorate([
242
237
  (0, core_1.Injectable)(),
243
- __metadata("design:paramtypes", [AppConfigService_1.AppConfigService,
244
- PresetRepository_1.PresetRepository,
245
- LogService_1.LogService])
238
+ __metadata("design:paramtypes", [core_1.AppConfigService,
239
+ core_1.AppFileSystemService,
240
+ PresetRepository_1.PresetRepository])
246
241
  ], PresetService);
@@ -0,0 +1,13 @@
1
+ import { AppConfigService, ProcessService } from "@wocker/core";
2
+ import { PresetService } from "../../preset";
3
+ import { ProjectService } from "../services/ProjectService";
4
+ export declare class ProjectController {
5
+ protected readonly appConfigService: AppConfigService;
6
+ protected readonly processService: ProcessService;
7
+ protected readonly projectService: ProjectService;
8
+ protected readonly presetService: PresetService;
9
+ constructor(appConfigService: AppConfigService, processService: ProcessService, projectService: ProjectService, presetService: PresetService);
10
+ start(name?: string, restart?: boolean, build?: boolean, attach?: boolean): Promise<void>;
11
+ stop(name?: string): Promise<void>;
12
+ eject(name?: string): Promise<void>;
13
+ }
@@ -0,0 +1,127 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ProjectController = void 0;
19
+ const core_1 = require("@wocker/core");
20
+ const utils_1 = require("@wocker/utils");
21
+ const path_1 = __importDefault(require("path"));
22
+ const preset_1 = require("../../preset");
23
+ const ProjectService_1 = require("../services/ProjectService");
24
+ let ProjectController = class ProjectController {
25
+ constructor(appConfigService, processService, projectService, presetService) {
26
+ this.appConfigService = appConfigService;
27
+ this.processService = processService;
28
+ this.projectService = projectService;
29
+ this.presetService = presetService;
30
+ }
31
+ async start(name, restart, build, attach) {
32
+ const project = this.projectService.get(name);
33
+ await this.projectService.start(project, restart, build, attach);
34
+ }
35
+ async stop(name) {
36
+ const project = this.projectService.get(name);
37
+ await this.projectService.stop(project);
38
+ }
39
+ async eject(name) {
40
+ const project = this.projectService.get(name);
41
+ const preset = this.presetService.get(project.preset);
42
+ if (!preset) {
43
+ throw new Error("Preset not found");
44
+ }
45
+ const confirm = await (0, utils_1.promptConfirm)({
46
+ message: "Confirm eject",
47
+ default: false
48
+ });
49
+ if (!confirm) {
50
+ return;
51
+ }
52
+ const copier = new core_1.FileSystemManager(preset.path, this.processService.pwd());
53
+ if (preset.dockerfile) {
54
+ if (!copier.destination.exists(preset.dockerfile)) {
55
+ copier.copy(preset.dockerfile);
56
+ }
57
+ project.type = "dockerfile";
58
+ project.dockerfile = preset.dockerfile;
59
+ }
60
+ const files = copier.source.readdir("", {
61
+ recursive: true
62
+ });
63
+ for (const path of files) {
64
+ const stat = copier.source.stat(path), dir = path_1.default.dirname(path);
65
+ if (stat.isFile() && path === "config.json") {
66
+ continue;
67
+ }
68
+ if (stat.isFile() && path === preset.dockerfile) {
69
+ continue;
70
+ }
71
+ if (copier.destination.exists(path)) {
72
+ continue;
73
+ }
74
+ if (!copier.destination.exists(dir)) {
75
+ copier.destination.mkdir(dir, {
76
+ recursive: true
77
+ });
78
+ }
79
+ copier.copy(path);
80
+ }
81
+ delete project.preset;
82
+ delete project.imageName;
83
+ project.save();
84
+ }
85
+ };
86
+ exports.ProjectController = ProjectController;
87
+ __decorate([
88
+ (0, core_1.Command)("start"),
89
+ (0, core_1.Description)("Starting project"),
90
+ __param(0, (0, core_1.Option)("name", "n")),
91
+ __param(0, (0, core_1.Description)("The name of the project")),
92
+ __param(1, (0, core_1.Option)("restart", "r")),
93
+ __param(1, (0, core_1.Description)("Restarting project")),
94
+ __param(2, (0, core_1.Option)("build", "b")),
95
+ __param(2, (0, core_1.Description)("Build")),
96
+ __param(3, (0, core_1.Option)("attach", "a")),
97
+ __param(3, (0, core_1.Description)("Attach")),
98
+ __metadata("design:type", Function),
99
+ __metadata("design:paramtypes", [String, Boolean, Boolean, Boolean]),
100
+ __metadata("design:returntype", Promise)
101
+ ], ProjectController.prototype, "start", null);
102
+ __decorate([
103
+ (0, core_1.Command)("stop"),
104
+ (0, core_1.Description)("Stopping project"),
105
+ __param(0, (0, core_1.Option)("name", "n")),
106
+ __param(0, (0, core_1.Description)("The name of the project")),
107
+ __metadata("design:type", Function),
108
+ __metadata("design:paramtypes", [String]),
109
+ __metadata("design:returntype", Promise)
110
+ ], ProjectController.prototype, "stop", null);
111
+ __decorate([
112
+ (0, core_1.Command)("preset:eject"),
113
+ (0, core_1.Description)("Eject preset files into the project"),
114
+ __param(0, (0, core_1.Option)("name", "n")),
115
+ __param(0, (0, core_1.Description)("The name of the project")),
116
+ __metadata("design:type", Function),
117
+ __metadata("design:paramtypes", [String]),
118
+ __metadata("design:returntype", Promise)
119
+ ], ProjectController.prototype, "eject", null);
120
+ exports.ProjectController = ProjectController = __decorate([
121
+ (0, core_1.Controller)(),
122
+ (0, core_1.Description)("Project commands"),
123
+ __metadata("design:paramtypes", [core_1.AppConfigService,
124
+ core_1.ProcessService,
125
+ ProjectService_1.ProjectService,
126
+ preset_1.PresetService])
127
+ ], ProjectController);
@@ -0,0 +1,5 @@
1
+ import { ProjectRepository } from "./repositories/ProjectRepository";
2
+ import { ProjectService } from "./services/ProjectService";
3
+ export declare class ProjectModule {
4
+ }
5
+ export { ProjectRepository, ProjectService };
@@ -0,0 +1,39 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ProjectService = exports.ProjectRepository = exports.ProjectModule = void 0;
10
+ const core_1 = require("@wocker/core");
11
+ const keystore_1 = require("../keystore");
12
+ const docker_1 = require("../docker");
13
+ const preset_1 = require("../preset");
14
+ const ProjectController_1 = require("./controllers/ProjectController");
15
+ const ProjectRepository_1 = require("./repositories/ProjectRepository");
16
+ Object.defineProperty(exports, "ProjectRepository", { enumerable: true, get: function () { return ProjectRepository_1.ProjectRepository; } });
17
+ const ProjectService_1 = require("./services/ProjectService");
18
+ Object.defineProperty(exports, "ProjectService", { enumerable: true, get: function () { return ProjectService_1.ProjectService; } });
19
+ let ProjectModule = class ProjectModule {
20
+ };
21
+ exports.ProjectModule = ProjectModule;
22
+ exports.ProjectModule = ProjectModule = __decorate([
23
+ (0, core_1.Module)({
24
+ imports: [
25
+ preset_1.PresetModule,
26
+ keystore_1.KeystoreModule,
27
+ docker_1.DockerModule
28
+ ],
29
+ controllers: [ProjectController_1.ProjectController],
30
+ providers: [
31
+ ProjectRepository_1.ProjectRepository,
32
+ ProjectService_1.ProjectService
33
+ ],
34
+ exports: [
35
+ ProjectRepository_1.ProjectRepository,
36
+ ProjectService_1.ProjectService
37
+ ]
38
+ })
39
+ ], ProjectModule);
@@ -0,0 +1,13 @@
1
+ import { AppConfigService, AppFileSystemService, Project, ProjectProperties, ProjectServiceSearchParams as SearchParams } from "@wocker/core";
2
+ import { KeystoreService } from "../../keystore";
3
+ export declare class ProjectRepository {
4
+ protected readonly appConfigService: AppConfigService;
5
+ protected readonly fs: AppFileSystemService;
6
+ protected readonly keystoreService: KeystoreService;
7
+ constructor(appConfigService: AppConfigService, fs: AppFileSystemService, keystoreService: KeystoreService);
8
+ getByName(name: string): Project;
9
+ fromObject(data: Partial<ProjectProperties>): Project;
10
+ save(project: Project): void;
11
+ search(params?: SearchParams): Project[];
12
+ searchOne(params?: SearchParams): Project | null;
13
+ }