@wocker/ws 1.0.32 → 1.1.0
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/lib/AppModule.js +1 -2
- package/lib/main.js +2 -2
- package/lib/makes/GithubClient.d.ts +3 -2
- package/lib/makes/GithubClient.js +27 -27
- package/lib/makes/index.d.ts +0 -3
- package/lib/makes/index.js +0 -3
- package/lib/modules/core/controllers/DebugController.d.ts +3 -4
- package/lib/modules/core/controllers/DebugController.js +5 -22
- package/lib/modules/core/controllers/ExperimentalController.d.ts +3 -3
- package/lib/modules/core/controllers/ExperimentalController.js +1 -1
- package/lib/modules/dns/index.js +3 -3
- package/lib/modules/keystore/controllers/KeystoreController.d.ts +3 -3
- package/lib/modules/keystore/controllers/KeystoreController.js +8 -8
- package/lib/modules/keystore/providers/FileKeystoreProvider.js +8 -8
- package/lib/modules/keystore/services/KeystoreService.d.ts +3 -3
- package/lib/modules/keystore/services/KeystoreService.js +4 -4
- package/lib/modules/package-manager/service/PackageManager.d.ts +3 -3
- package/lib/modules/package-manager/service/PackageManager.js +8 -8
- package/lib/modules/package-manager/service/RegistryService.js +5 -4
- package/lib/modules/plugin/controllers/PluginController.d.ts +3 -3
- package/lib/modules/plugin/controllers/PluginController.js +4 -4
- package/lib/modules/plugin/index.js +4 -5
- package/lib/modules/plugin/services/PluginService.d.ts +3 -3
- package/lib/modules/plugin/services/PluginService.js +11 -13
- package/lib/modules/preset/controllers/PresetController.d.ts +3 -3
- package/lib/modules/preset/controllers/PresetController.js +6 -6
- package/lib/modules/preset/controllers/PresetListener.d.ts +5 -3
- package/lib/modules/preset/controllers/PresetListener.js +21 -30
- package/lib/modules/preset/repositories/PresetRepository.d.ts +3 -3
- package/lib/modules/preset/repositories/PresetRepository.js +7 -7
- package/lib/modules/preset/services/PresetService.d.ts +4 -3
- package/lib/modules/preset/services/PresetService.js +33 -33
- package/lib/modules/project/controllers/MetadataController.d.ts +8 -0
- package/lib/modules/project/controllers/MetadataController.js +89 -0
- package/lib/modules/project/controllers/ProjectController.d.ts +6 -6
- package/lib/modules/project/controllers/ProjectController.js +62 -49
- package/lib/modules/project/controllers/SecretsController.js +2 -2
- package/lib/modules/project/index.d.ts +1 -2
- package/lib/modules/project/index.js +4 -6
- package/lib/modules/project/services/ProjectService.d.ts +3 -4
- package/lib/modules/project/services/ProjectService.js +38 -39
- package/lib/modules/proxy/controllers/HttpAuthController.d.ts +3 -4
- package/lib/modules/proxy/controllers/HttpAuthController.js +28 -16
- package/lib/modules/proxy/controllers/ProxyController.d.ts +3 -3
- package/lib/modules/proxy/controllers/ProxyController.js +11 -11
- package/lib/modules/proxy/services/HttpAuthService.d.ts +3 -0
- package/lib/modules/proxy/services/HttpAuthService.js +29 -10
- package/lib/modules/proxy/services/ProxyService.d.ts +3 -3
- package/lib/modules/proxy/services/ProxyService.js +9 -9
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -1
- package/package.json +5 -13
- package/lib/makes/Http.d.ts +0 -18
- package/lib/makes/Http.js +0 -82
- package/lib/makes/Version.d.ts +0 -22
- package/lib/makes/Version.js +0 -59
- package/lib/makes/VersionRange.d.ts +0 -6
- package/lib/makes/VersionRange.js +0 -18
- package/lib/makes/VersionRule.d.ts +0 -24
- package/lib/makes/VersionRule.js +0 -68
- package/lib/modules/project/repositories/ProjectRepository.d.ts +0 -13
- package/lib/modules/project/repositories/ProjectRepository.js +0 -71
- package/lib/utils/injectVariables.d.ts +0 -5
- package/lib/utils/injectVariables.js +0 -10
|
@@ -52,8 +52,8 @@ const yoctocolors_cjs_1 = __importDefault(require("yoctocolors-cjs"));
|
|
|
52
52
|
const package_manager_1 = require("../../package-manager");
|
|
53
53
|
const makes_1 = require("../../../makes");
|
|
54
54
|
let PluginService = class PluginService {
|
|
55
|
-
constructor(
|
|
56
|
-
this.
|
|
55
|
+
constructor(appService, pm, registryService, logService, cli) {
|
|
56
|
+
this.appService = appService;
|
|
57
57
|
this.pm = pm;
|
|
58
58
|
this.registryService = registryService;
|
|
59
59
|
this.logService = logService;
|
|
@@ -65,10 +65,10 @@ let PluginService = class PluginService {
|
|
|
65
65
|
head: ["Name", "Env"],
|
|
66
66
|
colWidths: [30]
|
|
67
67
|
});
|
|
68
|
-
if (this.
|
|
68
|
+
if (this.appService.plugins.length === 0) {
|
|
69
69
|
return yoctocolors_cjs_1.default.gray("No plugins installed");
|
|
70
70
|
}
|
|
71
|
-
for (const plugin of this.
|
|
71
|
+
for (const plugin of this.appService.plugins) {
|
|
72
72
|
table.push([plugin.name, plugin.env]);
|
|
73
73
|
}
|
|
74
74
|
return table.toString();
|
|
@@ -88,14 +88,14 @@ let PluginService = class PluginService {
|
|
|
88
88
|
async install(pluginName, version = "latest") {
|
|
89
89
|
const [, prefix = "@wocker/", name, suffix = "-plugin"] = /^(@wocker\/)?(\w+)(-plugin)?$/.exec(pluginName) || [];
|
|
90
90
|
const fullName = `${prefix}${name}${suffix}`;
|
|
91
|
-
const currentVersion = await this.getCurrentVersion(fullName), wRule =
|
|
91
|
+
const currentVersion = await this.getCurrentVersion(fullName), wRule = core_1.VersionRule.parse(this.rule), rule = core_1.VersionRule.parse(version === "latest" ? "x" : version || this.rule);
|
|
92
92
|
const packageInfo = await this.registryService.getPackageInfo(fullName);
|
|
93
93
|
const versions = Object.keys(packageInfo.versions)
|
|
94
94
|
.filter((version) => {
|
|
95
95
|
return wRule.match(version, true) && rule.match(version, true);
|
|
96
96
|
})
|
|
97
97
|
.sort((a, b) => {
|
|
98
|
-
return
|
|
98
|
+
return core_1.Version.parse(b).compare(a);
|
|
99
99
|
});
|
|
100
100
|
const bestSatisfyingVersion = versions.find((version) => rule.match(version)) ??
|
|
101
101
|
versions.find((version) => rule.match(version, true));
|
|
@@ -105,8 +105,7 @@ let PluginService = class PluginService {
|
|
|
105
105
|
if ((!currentVersion || currentVersion !== bestSatisfyingVersion) || !await this.checkPlugin(fullName)) {
|
|
106
106
|
await this.pm.install(fullName, bestSatisfyingVersion);
|
|
107
107
|
}
|
|
108
|
-
this.
|
|
109
|
-
this.appConfigService.save();
|
|
108
|
+
this.appService.addPlugin(fullName, version);
|
|
110
109
|
console.info(`Plugin ${fullName} activated`);
|
|
111
110
|
}
|
|
112
111
|
async uninstall(pluginName) {
|
|
@@ -115,8 +114,7 @@ let PluginService = class PluginService {
|
|
|
115
114
|
if (await this.checkPlugin(fullName)) {
|
|
116
115
|
await this.pm.uninstall(fullName);
|
|
117
116
|
}
|
|
118
|
-
this.
|
|
119
|
-
this.appConfigService.save();
|
|
117
|
+
this.appService.removePlugin(fullName);
|
|
120
118
|
console.info(`Plugin ${fullName} deactivated`);
|
|
121
119
|
}
|
|
122
120
|
async import(name) {
|
|
@@ -124,11 +122,11 @@ let PluginService = class PluginService {
|
|
|
124
122
|
return new makes_1.Plugin(type);
|
|
125
123
|
}
|
|
126
124
|
async update() {
|
|
127
|
-
if (this.
|
|
125
|
+
if (this.appService.plugins.length === 0) {
|
|
128
126
|
console.info("No plugins installed");
|
|
129
127
|
return;
|
|
130
128
|
}
|
|
131
|
-
for (const plugin of this.
|
|
129
|
+
for (const plugin of this.appService.plugins) {
|
|
132
130
|
console.info(`Checking ${plugin.name}...`);
|
|
133
131
|
try {
|
|
134
132
|
await this.install(plugin.name, plugin.env);
|
|
@@ -156,7 +154,7 @@ let PluginService = class PluginService {
|
|
|
156
154
|
exports.PluginService = PluginService;
|
|
157
155
|
exports.PluginService = PluginService = __decorate([
|
|
158
156
|
(0, core_1.Injectable)(),
|
|
159
|
-
__metadata("design:paramtypes", [core_1.
|
|
157
|
+
__metadata("design:paramtypes", [core_1.AppService,
|
|
160
158
|
package_manager_1.PackageManager,
|
|
161
159
|
package_manager_1.RegistryService,
|
|
162
160
|
core_1.LogService,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppService } from "@wocker/core";
|
|
2
2
|
import { DockerService } from "@wocker/docker-module";
|
|
3
3
|
import { PresetRepository } from "../repositories/PresetRepository";
|
|
4
4
|
import { PresetService } from "../services/PresetService";
|
|
5
5
|
export declare class PresetController {
|
|
6
|
-
protected readonly
|
|
6
|
+
protected readonly appService: AppService;
|
|
7
7
|
protected readonly dockerService: DockerService;
|
|
8
8
|
protected readonly presetRepository: PresetRepository;
|
|
9
9
|
protected readonly presetService: PresetService;
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(appService: AppService, dockerService: DockerService, presetRepository: PresetRepository, presetService: PresetService);
|
|
11
11
|
init(): Promise<void>;
|
|
12
12
|
list(): Promise<string>;
|
|
13
13
|
install(repository: string, version?: string): Promise<void>;
|
|
@@ -19,12 +19,12 @@ exports.PresetController = void 0;
|
|
|
19
19
|
const core_1 = require("@wocker/core");
|
|
20
20
|
const docker_module_1 = require("@wocker/docker-module");
|
|
21
21
|
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
22
|
-
const
|
|
22
|
+
const prompts_1 = require("@wocker/prompts");
|
|
23
23
|
const PresetRepository_1 = require("../repositories/PresetRepository");
|
|
24
24
|
const PresetService_1 = require("../services/PresetService");
|
|
25
25
|
let PresetController = class PresetController {
|
|
26
|
-
constructor(
|
|
27
|
-
this.
|
|
26
|
+
constructor(appService, dockerService, presetRepository, presetService) {
|
|
27
|
+
this.appService = appService;
|
|
28
28
|
this.dockerService = dockerService;
|
|
29
29
|
this.presetRepository = presetRepository;
|
|
30
30
|
this.presetService = presetService;
|
|
@@ -59,7 +59,7 @@ let PresetController = class PresetController {
|
|
|
59
59
|
async delete(name, confirm) {
|
|
60
60
|
const preset = this.presetService.get(name);
|
|
61
61
|
if (typeof confirm === "undefined" || confirm === null) {
|
|
62
|
-
confirm = await (0,
|
|
62
|
+
confirm = await (0, prompts_1.promptConfirm)({
|
|
63
63
|
message: `Delete preset ${name}?`,
|
|
64
64
|
default: false
|
|
65
65
|
});
|
|
@@ -81,7 +81,7 @@ let PresetController = class PresetController {
|
|
|
81
81
|
await this.dockerService.imageRm(imageName);
|
|
82
82
|
}
|
|
83
83
|
await this.dockerService.buildImage({
|
|
84
|
-
version: this.
|
|
84
|
+
version: this.appService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
85
85
|
tag: imageName,
|
|
86
86
|
labels: {
|
|
87
87
|
presetName: preset.name
|
|
@@ -157,7 +157,7 @@ __decorate([
|
|
|
157
157
|
exports.PresetController = PresetController = __decorate([
|
|
158
158
|
(0, core_1.Controller)(),
|
|
159
159
|
(0, core_1.Description)("Preset commands"),
|
|
160
|
-
__metadata("design:paramtypes", [core_1.
|
|
160
|
+
__metadata("design:paramtypes", [core_1.AppService,
|
|
161
161
|
docker_module_1.DockerService,
|
|
162
162
|
PresetRepository_1.PresetRepository,
|
|
163
163
|
PresetService_1.PresetService])
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { Project,
|
|
1
|
+
import { Project, AppService } from "@wocker/core";
|
|
2
|
+
import { Interpolator } from "@wocker/utils";
|
|
2
3
|
import { DockerService } from "@wocker/docker-module";
|
|
3
4
|
import { PresetRepository } from "../repositories/PresetRepository";
|
|
4
5
|
import { PresetService } from "../services/PresetService";
|
|
5
6
|
export declare class PresetListener {
|
|
6
|
-
protected readonly
|
|
7
|
+
protected readonly appService: AppService;
|
|
7
8
|
protected readonly dockerService: DockerService;
|
|
8
9
|
protected readonly presetRepository: PresetRepository;
|
|
9
10
|
protected readonly presetService: PresetService;
|
|
10
|
-
constructor(
|
|
11
|
+
constructor(appService: AppService, dockerService: DockerService, presetRepository: PresetRepository, presetService: PresetService);
|
|
12
|
+
protected get interpolator(): Interpolator;
|
|
11
13
|
onInit(project: Project): Promise<void>;
|
|
12
14
|
protected onRebuild(project: Project): Promise<void>;
|
|
13
15
|
protected onBeforeStart(project: Project): Promise<void>;
|
|
@@ -11,27 +11,31 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.PresetListener = void 0;
|
|
13
13
|
const core_1 = require("@wocker/core");
|
|
14
|
-
const docker_module_1 = require("@wocker/docker-module");
|
|
15
14
|
const utils_1 = require("@wocker/utils");
|
|
15
|
+
const docker_module_1 = require("@wocker/docker-module");
|
|
16
|
+
const prompts_1 = require("@wocker/prompts");
|
|
17
|
+
const utils_2 = require("@wocker/utils");
|
|
16
18
|
const PresetRepository_1 = require("../repositories/PresetRepository");
|
|
17
19
|
const PresetService_1 = require("../services/PresetService");
|
|
18
|
-
const utils_2 = require("../../../utils");
|
|
19
20
|
let PresetListener = class PresetListener {
|
|
20
|
-
constructor(
|
|
21
|
-
this.
|
|
21
|
+
constructor(appService, dockerService, presetRepository, presetService) {
|
|
22
|
+
this.appService = appService;
|
|
22
23
|
this.dockerService = dockerService;
|
|
23
24
|
this.presetRepository = presetRepository;
|
|
24
25
|
this.presetService = presetService;
|
|
25
26
|
}
|
|
27
|
+
get interpolator() {
|
|
28
|
+
return new utils_1.Interpolator();
|
|
29
|
+
}
|
|
26
30
|
async onInit(project) {
|
|
27
|
-
if (project.type !== core_1.
|
|
31
|
+
if (project.type !== core_1.ProjectType.PRESET) {
|
|
28
32
|
return;
|
|
29
33
|
}
|
|
30
34
|
const presets = this.presetRepository.search();
|
|
31
35
|
if (presets.length === 0) {
|
|
32
36
|
throw new Error("No presets");
|
|
33
37
|
}
|
|
34
|
-
project.preset = await (0,
|
|
38
|
+
project.preset = await (0, prompts_1.promptSelect)({
|
|
35
39
|
message: "Choose preset",
|
|
36
40
|
options: presets.map((preset) => {
|
|
37
41
|
return {
|
|
@@ -41,18 +45,9 @@ let PresetListener = class PresetListener {
|
|
|
41
45
|
}),
|
|
42
46
|
default: project.preset
|
|
43
47
|
});
|
|
44
|
-
project.presetMode = await (0,
|
|
48
|
+
project.presetMode = await (0, prompts_1.promptSelect)({
|
|
45
49
|
message: "Preset mode",
|
|
46
|
-
options:
|
|
47
|
-
{
|
|
48
|
-
label: "For project only",
|
|
49
|
-
value: "project"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
label: "Global usage",
|
|
53
|
-
value: "global"
|
|
54
|
-
}
|
|
55
|
-
],
|
|
50
|
+
options: core_1.PresetMode.options(),
|
|
56
51
|
default: project.presetMode
|
|
57
52
|
});
|
|
58
53
|
const preset = this.presetService.get(project.preset);
|
|
@@ -67,23 +62,19 @@ let PresetListener = class PresetListener {
|
|
|
67
62
|
}
|
|
68
63
|
if (preset.volumeOptions) {
|
|
69
64
|
for (let volume of preset.volumeOptions) {
|
|
70
|
-
volume =
|
|
65
|
+
volume = this.interpolator.interpolate(volume, {
|
|
71
66
|
...project.buildArgs || {},
|
|
72
67
|
...project.env || {}
|
|
73
68
|
});
|
|
74
|
-
const { source, destination, options } =
|
|
69
|
+
const { source, destination, options } = utils_2.Volume.parse(volume);
|
|
75
70
|
let projectVolume = project.getVolumeByDestination(destination);
|
|
76
|
-
const newSource = await (0,
|
|
71
|
+
const newSource = await (0, prompts_1.promptInput)({
|
|
77
72
|
message: "Volume",
|
|
78
73
|
required: true,
|
|
79
74
|
suffix: `:${destination}`,
|
|
80
|
-
default: projectVolume ?
|
|
81
|
-
});
|
|
82
|
-
projectVolume = (0, utils_1.volumeFormat)({
|
|
83
|
-
source: newSource,
|
|
84
|
-
destination,
|
|
85
|
-
options
|
|
75
|
+
default: projectVolume ? utils_2.Volume.parse(projectVolume).source : source
|
|
86
76
|
});
|
|
77
|
+
projectVolume = new utils_2.Volume(newSource, destination, options).toString();
|
|
87
78
|
project.volumeMount(projectVolume);
|
|
88
79
|
}
|
|
89
80
|
}
|
|
@@ -92,7 +83,7 @@ let PresetListener = class PresetListener {
|
|
|
92
83
|
}
|
|
93
84
|
}
|
|
94
85
|
async onRebuild(project) {
|
|
95
|
-
if (project.type !== core_1.
|
|
86
|
+
if (project.type !== core_1.ProjectType.PRESET) {
|
|
96
87
|
return;
|
|
97
88
|
}
|
|
98
89
|
const preset = this.presetService.get(project.preset);
|
|
@@ -107,7 +98,7 @@ let PresetListener = class PresetListener {
|
|
|
107
98
|
}
|
|
108
99
|
}
|
|
109
100
|
async onBeforeStart(project) {
|
|
110
|
-
if (project.type !== core_1.
|
|
101
|
+
if (project.type !== core_1.ProjectType.PRESET) {
|
|
111
102
|
return;
|
|
112
103
|
}
|
|
113
104
|
const preset = this.presetService.get(project.preset);
|
|
@@ -115,7 +106,7 @@ let PresetListener = class PresetListener {
|
|
|
115
106
|
project.imageName = this.presetService.getImageNameForProject(project, preset);
|
|
116
107
|
if (!await this.dockerService.imageExists(project.imageName)) {
|
|
117
108
|
await this.dockerService.buildImage({
|
|
118
|
-
version: this.
|
|
109
|
+
version: this.appService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
119
110
|
tag: project.imageName,
|
|
120
111
|
labels: {
|
|
121
112
|
presetName: preset.name
|
|
@@ -149,7 +140,7 @@ __decorate([
|
|
|
149
140
|
], PresetListener.prototype, "onBeforeStart", null);
|
|
150
141
|
exports.PresetListener = PresetListener = __decorate([
|
|
151
142
|
(0, core_1.Controller)(),
|
|
152
|
-
__metadata("design:paramtypes", [core_1.
|
|
143
|
+
__metadata("design:paramtypes", [core_1.AppService,
|
|
153
144
|
docker_module_1.DockerService,
|
|
154
145
|
PresetRepository_1.PresetRepository,
|
|
155
146
|
PresetService_1.PresetService])
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { AppConfig, PresetServiceSearchOptions as SearchOptions, Preset, PresetSource,
|
|
1
|
+
import { AppConfig, PresetServiceSearchOptions as SearchOptions, Preset, PresetSource, AppService, LogService, FileSystemDriver } from "@wocker/core";
|
|
2
2
|
type PresetData = {
|
|
3
3
|
name: string;
|
|
4
4
|
source: PresetSource;
|
|
5
5
|
path?: string;
|
|
6
6
|
};
|
|
7
7
|
export declare class PresetRepository {
|
|
8
|
-
protected readonly
|
|
8
|
+
protected readonly appService: AppService;
|
|
9
9
|
protected readonly logService: LogService;
|
|
10
10
|
protected readonly driver: FileSystemDriver;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(appService: AppService, logService: LogService, driver: FileSystemDriver);
|
|
12
12
|
protected load(data: PresetData): Preset;
|
|
13
13
|
protected configs(): AppConfig["presets"];
|
|
14
14
|
search(options?: SearchOptions): Preset[];
|
|
@@ -16,8 +16,8 @@ exports.PresetRepository = void 0;
|
|
|
16
16
|
const core_1 = require("@wocker/core");
|
|
17
17
|
const env_1 = require("../../../env");
|
|
18
18
|
let PresetRepository = class PresetRepository {
|
|
19
|
-
constructor(
|
|
20
|
-
this.
|
|
19
|
+
constructor(appService, logService, driver) {
|
|
20
|
+
this.appService = appService;
|
|
21
21
|
this.logService = logService;
|
|
22
22
|
this.driver = driver;
|
|
23
23
|
}
|
|
@@ -39,7 +39,7 @@ let PresetRepository = class PresetRepository {
|
|
|
39
39
|
fs.writeJSON("config.json", this.toObject());
|
|
40
40
|
break;
|
|
41
41
|
}
|
|
42
|
-
_this.
|
|
42
|
+
_this.appService.registerPreset(this.name, this.source, data.path);
|
|
43
43
|
}
|
|
44
44
|
delete() {
|
|
45
45
|
switch (this.source) {
|
|
@@ -51,13 +51,13 @@ let PresetRepository = class PresetRepository {
|
|
|
51
51
|
}
|
|
52
52
|
break;
|
|
53
53
|
}
|
|
54
|
-
_this.
|
|
54
|
+
_this.appService.unregisterPreset(this.name);
|
|
55
55
|
}
|
|
56
56
|
}(config);
|
|
57
57
|
}
|
|
58
58
|
configs() {
|
|
59
59
|
const fs = new core_1.FileSystem(env_1.PRESETS_DIR, this.driver), dirs = fs.exists("") ? fs.readdir("") : [];
|
|
60
|
-
const { presets = [] } = this.
|
|
60
|
+
const { presets = [] } = this.appService.config;
|
|
61
61
|
return [
|
|
62
62
|
...dirs.map((name) => {
|
|
63
63
|
return {
|
|
@@ -70,7 +70,7 @@ let PresetRepository = class PresetRepository {
|
|
|
70
70
|
if (item.source === core_1.PRESET_SOURCE_GITHUB) {
|
|
71
71
|
return {
|
|
72
72
|
...item,
|
|
73
|
-
path: this.
|
|
73
|
+
path: this.appService.fs.path("presets", item.name)
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
return item;
|
|
@@ -113,6 +113,6 @@ exports.PresetRepository = PresetRepository;
|
|
|
113
113
|
exports.PresetRepository = PresetRepository = __decorate([
|
|
114
114
|
(0, core_1.Injectable)(),
|
|
115
115
|
__param(2, (0, core_1.Inject)(core_1.FILE_SYSTEM_DRIVER_KEY)),
|
|
116
|
-
__metadata("design:paramtypes", [core_1.
|
|
116
|
+
__metadata("design:paramtypes", [core_1.AppService,
|
|
117
117
|
core_1.LogService, Object])
|
|
118
118
|
], PresetRepository);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { Project, Preset, PresetVariableConfig, EnvConfig,
|
|
1
|
+
import { Project, Preset, PresetVariableConfig, EnvConfig, AppService, ProcessService, AppFileSystemService } from "@wocker/core";
|
|
2
2
|
import { PresetRepository } from "../repositories/PresetRepository";
|
|
3
3
|
export declare class PresetService {
|
|
4
|
-
protected readonly
|
|
4
|
+
protected readonly appService: AppService;
|
|
5
|
+
protected readonly processService: ProcessService;
|
|
5
6
|
protected readonly fs: AppFileSystemService;
|
|
6
7
|
protected readonly presetRepository: PresetRepository;
|
|
7
8
|
protected range: string;
|
|
8
|
-
constructor(
|
|
9
|
+
constructor(appService: AppService, processService: ProcessService, fs: AppFileSystemService, presetRepository: PresetRepository);
|
|
9
10
|
prompt(configMap: {
|
|
10
11
|
[name: string]: PresetVariableConfig;
|
|
11
12
|
}, values?: EnvConfig): Promise<EnvConfig>;
|
|
@@ -14,14 +14,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.PresetService = void 0;
|
|
16
16
|
const core_1 = require("@wocker/core");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
17
|
+
const prompts_1 = require("@wocker/prompts");
|
|
18
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
19
19
|
const PresetRepository_1 = require("../repositories/PresetRepository");
|
|
20
|
-
const makes_1 = require("../../../makes");
|
|
21
20
|
const GithubClient_1 = require("../../../makes/GithubClient");
|
|
22
21
|
let PresetService = class PresetService {
|
|
23
|
-
constructor(
|
|
24
|
-
this.
|
|
22
|
+
constructor(appService, processService, fs, presetRepository) {
|
|
23
|
+
this.appService = appService;
|
|
24
|
+
this.processService = processService;
|
|
25
25
|
this.fs = fs;
|
|
26
26
|
this.presetRepository = presetRepository;
|
|
27
27
|
this.range = "1.x.x";
|
|
@@ -31,7 +31,7 @@ let PresetService = class PresetService {
|
|
|
31
31
|
const config = configMap[name];
|
|
32
32
|
switch (config.type) {
|
|
33
33
|
case "boolean": {
|
|
34
|
-
const value = await (0,
|
|
34
|
+
const value = await (0, prompts_1.promptConfirm)({
|
|
35
35
|
message: config.message,
|
|
36
36
|
required: config.required,
|
|
37
37
|
default: typeof values[name] !== "undefined" && values[name] === "true"
|
|
@@ -42,7 +42,7 @@ let PresetService = class PresetService {
|
|
|
42
42
|
break;
|
|
43
43
|
}
|
|
44
44
|
case "select": {
|
|
45
|
-
const options = (0,
|
|
45
|
+
const options = (0, prompts_1.normalizeOptions)(config.options);
|
|
46
46
|
const defaultValue = config.multiple ? options.reduce((defaultValue, option) => {
|
|
47
47
|
if (values[option.value] === "true") {
|
|
48
48
|
return [
|
|
@@ -52,7 +52,7 @@ let PresetService = class PresetService {
|
|
|
52
52
|
}
|
|
53
53
|
return defaultValue;
|
|
54
54
|
}, []) : values[name];
|
|
55
|
-
const result = await (0,
|
|
55
|
+
const result = await (0, prompts_1.promptSelect)({
|
|
56
56
|
required: config.required,
|
|
57
57
|
multiple: config.multiple,
|
|
58
58
|
message: config.message,
|
|
@@ -76,7 +76,7 @@ let PresetService = class PresetService {
|
|
|
76
76
|
}
|
|
77
77
|
case "int":
|
|
78
78
|
case "number": {
|
|
79
|
-
const result = await (0,
|
|
79
|
+
const result = await (0, prompts_1.promptInput)({
|
|
80
80
|
...config,
|
|
81
81
|
type: "number",
|
|
82
82
|
default: values[name] || config.default
|
|
@@ -87,7 +87,7 @@ let PresetService = class PresetService {
|
|
|
87
87
|
case "string":
|
|
88
88
|
case "text":
|
|
89
89
|
case "password": {
|
|
90
|
-
values[name] = await (0,
|
|
90
|
+
values[name] = await (0, prompts_1.promptInput)({
|
|
91
91
|
...config,
|
|
92
92
|
type: config.type === "string" ? "text" : config.type,
|
|
93
93
|
default: values[name] || config.default
|
|
@@ -120,7 +120,7 @@ let PresetService = class PresetService {
|
|
|
120
120
|
});
|
|
121
121
|
const version = [
|
|
122
122
|
...rawValues,
|
|
123
|
-
|
|
123
|
+
crypto_1.default.createHash("md5").update(hashValues.join(","), "utf8").digest("hex").substring(0, 6)
|
|
124
124
|
].filter((value) => {
|
|
125
125
|
return !!value;
|
|
126
126
|
}).join("-");
|
|
@@ -129,27 +129,27 @@ let PresetService = class PresetService {
|
|
|
129
129
|
get(name) {
|
|
130
130
|
const preset = name
|
|
131
131
|
? this.presetRepository.searchOne({ name })
|
|
132
|
-
: this.presetRepository.searchOne({ path: this.
|
|
132
|
+
: this.presetRepository.searchOne({ path: this.processService.pwd() });
|
|
133
133
|
if (!preset) {
|
|
134
134
|
throw new Error(name ? `Preset "${name}" not found` : "Preset not found");
|
|
135
135
|
}
|
|
136
136
|
return preset;
|
|
137
137
|
}
|
|
138
138
|
async init() {
|
|
139
|
-
const fs = this.fs.cd(this.
|
|
139
|
+
const fs = this.fs.cd(this.processService.pwd());
|
|
140
140
|
let preset = this.presetRepository.searchOne({
|
|
141
|
-
path: this.
|
|
141
|
+
path: this.processService.pwd()
|
|
142
142
|
});
|
|
143
143
|
if (preset) {
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
if (fs.exists("config.json")) {
|
|
147
147
|
const config = fs.readJSON("config.json");
|
|
148
|
-
this.
|
|
148
|
+
this.appService.registerPreset(config.name, core_1.PRESET_SOURCE_EXTERNAL, fs.path());
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
let config = {};
|
|
152
|
-
config.name = await (0,
|
|
152
|
+
config.name = await (0, prompts_1.promptInput)({
|
|
153
153
|
message: "Preset name",
|
|
154
154
|
required: true,
|
|
155
155
|
validate: (name) => {
|
|
@@ -162,7 +162,7 @@ let PresetService = class PresetService {
|
|
|
162
162
|
return true;
|
|
163
163
|
}
|
|
164
164
|
});
|
|
165
|
-
config.version = await (0,
|
|
165
|
+
config.version = await (0, prompts_1.promptInput)({
|
|
166
166
|
message: "Preset version",
|
|
167
167
|
validate: (version) => {
|
|
168
168
|
if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.test(version)) {
|
|
@@ -171,7 +171,7 @@ let PresetService = class PresetService {
|
|
|
171
171
|
return true;
|
|
172
172
|
}
|
|
173
173
|
});
|
|
174
|
-
config.type = await (0,
|
|
174
|
+
config.type = await (0, prompts_1.promptSelect)({
|
|
175
175
|
message: "Preset type",
|
|
176
176
|
options: ["dockerfile", "image"]
|
|
177
177
|
});
|
|
@@ -187,13 +187,13 @@ let PresetService = class PresetService {
|
|
|
187
187
|
if (dockerfiles.length === 0) {
|
|
188
188
|
throw new Error("No dockerfiles found");
|
|
189
189
|
}
|
|
190
|
-
config.dockerfile = await (0,
|
|
190
|
+
config.dockerfile = await (0, prompts_1.promptSelect)({
|
|
191
191
|
message: "Preset dockerfile",
|
|
192
192
|
options: dockerfiles
|
|
193
193
|
});
|
|
194
194
|
break;
|
|
195
195
|
case "image":
|
|
196
|
-
config.image = await (0,
|
|
196
|
+
config.image = await (0, prompts_1.promptInput)({
|
|
197
197
|
message: "Preset image",
|
|
198
198
|
required: true,
|
|
199
199
|
validate(value) {
|
|
@@ -206,7 +206,7 @@ let PresetService = class PresetService {
|
|
|
206
206
|
break;
|
|
207
207
|
}
|
|
208
208
|
console.info(JSON.stringify(config, null, 4));
|
|
209
|
-
const confirm = await (0,
|
|
209
|
+
const confirm = await (0, prompts_1.promptConfirm)({
|
|
210
210
|
message: "Correct",
|
|
211
211
|
default: true
|
|
212
212
|
});
|
|
@@ -214,17 +214,16 @@ let PresetService = class PresetService {
|
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
216
|
fs.writeJSON("config.json", config);
|
|
217
|
-
this.
|
|
217
|
+
this.appService.registerPreset(config.name, core_1.PRESET_SOURCE_EXTERNAL, fs.path());
|
|
218
218
|
}
|
|
219
219
|
async deinit() {
|
|
220
220
|
const preset = this.presetRepository.searchOne({
|
|
221
|
-
path: this.
|
|
221
|
+
path: this.processService.pwd()
|
|
222
222
|
});
|
|
223
223
|
if (!preset) {
|
|
224
224
|
return;
|
|
225
225
|
}
|
|
226
|
-
this.
|
|
227
|
-
this.appConfigService.save();
|
|
226
|
+
this.appService.unregisterPreset(preset.name);
|
|
228
227
|
}
|
|
229
228
|
async install(repository, version) {
|
|
230
229
|
if (!/^[\w-]+\/[\w-]+$/.test(repository)) {
|
|
@@ -233,11 +232,11 @@ let PresetService = class PresetService {
|
|
|
233
232
|
const [owner, name] = repository.split("/");
|
|
234
233
|
let satisfyingTag;
|
|
235
234
|
let satisfyingBranch;
|
|
236
|
-
const github = new GithubClient_1.GithubClient(owner, name), wRule =
|
|
235
|
+
const github = new GithubClient_1.GithubClient(owner, name), wRule = core_1.VersionRule.parse(this.range), rule = core_1.VersionRule.parse(["latest", "beta"].includes(version) ? "x" : version ?? this.range);
|
|
237
236
|
if (version !== "beta") {
|
|
238
237
|
satisfyingTag = (await github.getTags())
|
|
239
238
|
.filter((tag) => {
|
|
240
|
-
if (!
|
|
239
|
+
if (!core_1.Version.valid(tag.name)) {
|
|
241
240
|
return false;
|
|
242
241
|
}
|
|
243
242
|
return wRule.match(tag.name) || rule.match(tag.name);
|
|
@@ -246,13 +245,13 @@ let PresetService = class PresetService {
|
|
|
246
245
|
if (!tag) {
|
|
247
246
|
return nextTag;
|
|
248
247
|
}
|
|
249
|
-
return
|
|
248
|
+
return core_1.Version.parse(tag.name).compare(nextTag.name) < 0 ? nextTag : tag;
|
|
250
249
|
}, null);
|
|
251
250
|
}
|
|
252
251
|
if (!satisfyingTag) {
|
|
253
252
|
satisfyingBranch = (await github.getBranches())
|
|
254
253
|
.filter((branch) => {
|
|
255
|
-
if (!
|
|
254
|
+
if (!core_1.Version.valid(branch.name)) {
|
|
256
255
|
return false;
|
|
257
256
|
}
|
|
258
257
|
return wRule.match(branch.name) || rule.match(branch.name);
|
|
@@ -261,7 +260,7 @@ let PresetService = class PresetService {
|
|
|
261
260
|
if (!branch) {
|
|
262
261
|
return nextBranch;
|
|
263
262
|
}
|
|
264
|
-
return
|
|
263
|
+
return core_1.Version.parse(branch.name).compare(nextBranch.name) < 0 ? nextBranch : branch;
|
|
265
264
|
}, null);
|
|
266
265
|
}
|
|
267
266
|
if (!satisfyingTag && !satisfyingBranch) {
|
|
@@ -273,7 +272,7 @@ let PresetService = class PresetService {
|
|
|
273
272
|
let preset = this.presetRepository.searchOne({
|
|
274
273
|
name: config.name
|
|
275
274
|
});
|
|
276
|
-
if (preset && satisfyingTag && preset.source === core_1.PRESET_SOURCE_GITHUB &&
|
|
275
|
+
if (preset && satisfyingTag && preset.source === core_1.PRESET_SOURCE_GITHUB && core_1.Version.parse(ref).compare(preset.version) === 0) {
|
|
277
276
|
console.info("Preset already installed");
|
|
278
277
|
return;
|
|
279
278
|
}
|
|
@@ -289,7 +288,7 @@ let PresetService = class PresetService {
|
|
|
289
288
|
});
|
|
290
289
|
}
|
|
291
290
|
this.fs.mv(`presets/.tmp/${config.name}`, `presets/${config.name}`);
|
|
292
|
-
this.
|
|
291
|
+
this.appService.registerPreset(config.name, core_1.PRESET_SOURCE_GITHUB);
|
|
293
292
|
console.info("Preset installed successfully");
|
|
294
293
|
}
|
|
295
294
|
finally {
|
|
@@ -304,7 +303,8 @@ let PresetService = class PresetService {
|
|
|
304
303
|
exports.PresetService = PresetService;
|
|
305
304
|
exports.PresetService = PresetService = __decorate([
|
|
306
305
|
(0, core_1.Injectable)(),
|
|
307
|
-
__metadata("design:paramtypes", [core_1.
|
|
306
|
+
__metadata("design:paramtypes", [core_1.AppService,
|
|
307
|
+
core_1.ProcessService,
|
|
308
308
|
core_1.AppFileSystemService,
|
|
309
309
|
PresetRepository_1.PresetRepository])
|
|
310
310
|
], PresetService);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProjectService } from "../services/ProjectService";
|
|
2
|
+
export declare class MetadataController {
|
|
3
|
+
protected readonly projectService: ProjectService;
|
|
4
|
+
constructor(projectService: ProjectService);
|
|
5
|
+
list(projectName?: string): string;
|
|
6
|
+
set(meta: string[], projectName?: string): void;
|
|
7
|
+
unset(meta: string[], projectName?: string): void;
|
|
8
|
+
}
|