@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
@@ -0,0 +1,5 @@
1
+ import { PackageManager } from "./service/PackageManager";
2
+ import { RegistryService } from "./service/RegistryService";
3
+ export declare class PackageManagerModule {
4
+ }
5
+ export { PackageManager, RegistryService };
@@ -0,0 +1,33 @@
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.RegistryService = exports.PackageManager = exports.PackageManagerModule = void 0;
10
+ const core_1 = require("@wocker/core");
11
+ const core_2 = require("../core");
12
+ const PackageManager_1 = require("./service/PackageManager");
13
+ Object.defineProperty(exports, "PackageManager", { enumerable: true, get: function () { return PackageManager_1.PackageManager; } });
14
+ const RegistryService_1 = require("./service/RegistryService");
15
+ Object.defineProperty(exports, "RegistryService", { enumerable: true, get: function () { return RegistryService_1.RegistryService; } });
16
+ let PackageManagerModule = class PackageManagerModule {
17
+ };
18
+ exports.PackageManagerModule = PackageManagerModule;
19
+ exports.PackageManagerModule = PackageManagerModule = __decorate([
20
+ (0, core_1.Module)({
21
+ imports: [
22
+ core_2.CoreModule
23
+ ],
24
+ providers: [
25
+ PackageManager_1.PackageManager,
26
+ RegistryService_1.RegistryService
27
+ ],
28
+ exports: [
29
+ PackageManager_1.PackageManager,
30
+ RegistryService_1.RegistryService
31
+ ]
32
+ })
33
+ ], PackageManagerModule);
@@ -0,0 +1,7 @@
1
+ import { PackageManagerProvider } from "../types/PackageManagerProvider";
2
+ import { Package } from "../types/Package";
3
+ export declare class NpmProvider extends PackageManagerProvider {
4
+ getPackages(): Promise<Package[]>;
5
+ install(name: string, version?: string): Promise<void>;
6
+ uninstall(name: string): Promise<void>;
7
+ }
@@ -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.NpmProvider = void 0;
10
+ const core_1 = require("@wocker/core");
11
+ const PackageManagerProvider_1 = require("../types/PackageManagerProvider");
12
+ const utils_1 = require("../../../utils");
13
+ let NpmProvider = class NpmProvider extends PackageManagerProvider_1.PackageManagerProvider {
14
+ async getPackages() {
15
+ const res = await (0, utils_1.exec)("npm ls -g --json");
16
+ const packages = [], { dependencies } = JSON.parse(res);
17
+ for (const name in dependencies) {
18
+ packages.push({
19
+ name: name,
20
+ version: dependencies[name].version
21
+ });
22
+ }
23
+ return packages;
24
+ }
25
+ async install(name, version) {
26
+ const command = `npm install -g ${version ? `${name}@${version}` : name}`;
27
+ console.info(`> ${command}`);
28
+ await (0, utils_1.exec)(command);
29
+ }
30
+ async uninstall(name) {
31
+ const command = `npm uninstall -g ${name}`;
32
+ console.info(`> ${command}`);
33
+ await (0, utils_1.exec)(command);
34
+ }
35
+ };
36
+ exports.NpmProvider = NpmProvider;
37
+ exports.NpmProvider = NpmProvider = __decorate([
38
+ (0, core_1.Injectable)()
39
+ ], NpmProvider);
@@ -0,0 +1,7 @@
1
+ import { PackageManagerProvider } from "../types/PackageManagerProvider";
2
+ import { Package } from "../types/Package";
3
+ export declare class PnpmProvider extends PackageManagerProvider {
4
+ getPackages(): Promise<Package[]>;
5
+ install(name: string, version?: string): Promise<void>;
6
+ uninstall(name: string): Promise<void>;
7
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PnpmProvider = void 0;
4
+ const PackageManagerProvider_1 = require("../types/PackageManagerProvider");
5
+ const utils_1 = require("../../../utils");
6
+ class PnpmProvider extends PackageManagerProvider_1.PackageManagerProvider {
7
+ async getPackages() {
8
+ const res = await (0, utils_1.exec)("pnpm ls -g --json"), data = JSON.parse(res), dependencies = Array.isArray(data) ? data[0]?.dependencies : data.dependencies, packages = [];
9
+ if (dependencies) {
10
+ for (const name in dependencies) {
11
+ packages.push({
12
+ name,
13
+ version: dependencies[name].version
14
+ });
15
+ }
16
+ }
17
+ return packages;
18
+ }
19
+ async install(name, version) {
20
+ const command = `pnpm add -g ${version ? `${name}@${version}` : name}`;
21
+ console.info(`> ${command}`);
22
+ await (0, utils_1.exec)(command);
23
+ }
24
+ async uninstall(name) {
25
+ const command = `pnpm remove -g ${name}`;
26
+ console.info(`> ${command}`);
27
+ await (0, utils_1.exec)(command);
28
+ }
29
+ }
30
+ exports.PnpmProvider = PnpmProvider;
@@ -0,0 +1,7 @@
1
+ import { PackageManagerProvider } from "../types/PackageManagerProvider";
2
+ import { Package } from "../types/Package";
3
+ export declare class YarnProvider extends PackageManagerProvider {
4
+ getPackages(): Promise<Package[]>;
5
+ install(name: string, version?: string): Promise<void>;
6
+ uninstall(name: string): Promise<void>;
7
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YarnProvider = void 0;
4
+ const PackageManagerProvider_1 = require("../types/PackageManagerProvider");
5
+ const utils_1 = require("../../../utils");
6
+ class YarnProvider extends PackageManagerProvider_1.PackageManagerProvider {
7
+ async getPackages() {
8
+ const res = await (0, utils_1.exec)("yarn --cwd `yarn global dir` list --json --depth=0"), three = JSON.parse(res), packages = [];
9
+ for (const item of three.data.trees) {
10
+ const [, name, version] = /^(.*)@(.*)$/.exec(item.name);
11
+ packages.push({
12
+ name,
13
+ version
14
+ });
15
+ }
16
+ return packages;
17
+ }
18
+ async install(name, version) {
19
+ const command = `yarn global add ${version ? `${name}@${version}` : name}`;
20
+ console.info(`> ${command}`);
21
+ await (0, utils_1.exec)(command);
22
+ }
23
+ async uninstall(name) {
24
+ const command = `yarn global remove ${name}`;
25
+ console.info(`> ${command}`);
26
+ await (0, utils_1.exec)(command);
27
+ }
28
+ }
29
+ exports.YarnProvider = YarnProvider;
@@ -0,0 +1,10 @@
1
+ import { AppConfigService } from "@wocker/core";
2
+ import { PackageManagerProvider } from "../types/PackageManagerProvider";
3
+ export declare class PackageManager {
4
+ protected readonly appConfigService: AppConfigService;
5
+ constructor(appConfigService: AppConfigService);
6
+ getManager(): Promise<PackageManagerProvider>;
7
+ getPackages(global?: boolean): Promise<import("../types/Package").Package[]>;
8
+ install(name: string, version?: string): Promise<void>;
9
+ uninstall(name: string): Promise<void>;
10
+ }
@@ -0,0 +1,70 @@
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.PackageManager = void 0;
13
+ const core_1 = require("@wocker/core");
14
+ const utils_1 = require("@wocker/utils");
15
+ const NpmProvider_1 = require("../providers/NpmProvider");
16
+ const PnpmProvider_1 = require("../providers/PnpmProvider");
17
+ const YarnProvider_1 = require("../providers/YarnProvider");
18
+ let PackageManager = class PackageManager {
19
+ constructor(appConfigService) {
20
+ this.appConfigService = appConfigService;
21
+ }
22
+ async getManager() {
23
+ if (!this.appConfigService.config.pm) {
24
+ this.appConfigService.config.pm = await (0, utils_1.promptSelect)({
25
+ label: "Package manager:",
26
+ options: [
27
+ {
28
+ label: "NPM",
29
+ value: "npm"
30
+ },
31
+ {
32
+ label: "PNPM",
33
+ value: "pnpm"
34
+ },
35
+ {
36
+ label: "YARN",
37
+ value: "yarn"
38
+ }
39
+ ],
40
+ required: true
41
+ });
42
+ this.appConfigService.save();
43
+ }
44
+ switch (this.appConfigService.config.pm) {
45
+ case "npm":
46
+ return new NpmProvider_1.NpmProvider();
47
+ case "pnpm":
48
+ return new PnpmProvider_1.PnpmProvider();
49
+ case "yarn":
50
+ return new YarnProvider_1.YarnProvider();
51
+ }
52
+ }
53
+ async getPackages(global) {
54
+ const pm = await this.getManager();
55
+ return pm.getPackages(global);
56
+ }
57
+ async install(name, version) {
58
+ const pm = await this.getManager();
59
+ await pm.install(name, version);
60
+ }
61
+ async uninstall(name) {
62
+ const pm = await this.getManager();
63
+ await pm.uninstall(name);
64
+ }
65
+ };
66
+ exports.PackageManager = PackageManager;
67
+ exports.PackageManager = PackageManager = __decorate([
68
+ (0, core_1.Injectable)("PACKAGE_MANAGER_SERVICE"),
69
+ __metadata("design:paramtypes", [core_1.AppConfigService])
70
+ ], PackageManager);
@@ -0,0 +1,4 @@
1
+ import { PackageInfo } from "../types/PackageInfo";
2
+ export declare class RegistryService {
3
+ getPackageInfo(name: string): Promise<PackageInfo>;
4
+ }
@@ -6,11 +6,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.NpmService = void 0;
9
+ exports.RegistryService = void 0;
10
10
  const core_1 = require("@wocker/core");
11
- const makes_1 = require("../makes");
12
- const utils_1 = require("../utils");
13
- let NpmService = class NpmService {
11
+ const makes_1 = require("../../../makes");
12
+ let RegistryService = class RegistryService {
14
13
  async getPackageInfo(name) {
15
14
  const res = await makes_1.Http.get("https://registry.npmjs.org")
16
15
  .send(name);
@@ -22,12 +21,8 @@ let NpmService = class NpmService {
22
21
  }
23
22
  return res.data;
24
23
  }
25
- async install(name, version) {
26
- console.info(`npm install -g ${version ? `${name}@${version}` : name}`);
27
- await (0, utils_1.exec)(`npm install -g ${version ? `${name}@${version}` : name}`);
28
- }
29
24
  };
30
- exports.NpmService = NpmService;
31
- exports.NpmService = NpmService = __decorate([
25
+ exports.RegistryService = RegistryService;
26
+ exports.RegistryService = RegistryService = __decorate([
32
27
  (0, core_1.Injectable)()
33
- ], NpmService);
28
+ ], RegistryService);
@@ -0,0 +1,4 @@
1
+ export type Package = {
2
+ name: string;
3
+ version: string;
4
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Package } from "./Package";
2
+ export declare abstract class PackageManagerProvider {
3
+ abstract getPackages(global?: boolean): Promise<Package[]>;
4
+ abstract install(name: string, version?: string): Promise<void>;
5
+ abstract uninstall(name: string): Promise<void>;
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackageManagerProvider = void 0;
4
+ class PackageManagerProvider {
5
+ }
6
+ exports.PackageManagerProvider = PackageManagerProvider;
@@ -5,8 +5,8 @@ export declare class PluginController {
5
5
  protected readonly pluginService: PluginService;
6
6
  constructor(appConfigService: AppConfigService, pluginService: PluginService);
7
7
  list(): Promise<string>;
8
- add(addName: string, beta?: boolean): Promise<void>;
9
- remove(removeName: string): Promise<void>;
8
+ add(names: string[]): Promise<void>;
9
+ remove(names: string[]): Promise<void>;
10
10
  update(): Promise<void>;
11
11
  getInstalledPlugins(): string[];
12
12
  }
@@ -23,17 +23,22 @@ let PluginController = class PluginController {
23
23
  async list() {
24
24
  return this.pluginService.getPluginsTable();
25
25
  }
26
- async add(addName, beta) {
27
- await this.pluginService.install(addName, beta);
26
+ async add(names) {
27
+ for (const fullName of names) {
28
+ const [, name, version] = /^(@?[^@/\s]+(?:\/[^@/\s]+)?)(?:@([^@\s]+))?$/.exec(fullName) || [];
29
+ await this.pluginService.install(name, version);
30
+ }
28
31
  }
29
- async remove(removeName) {
30
- await this.pluginService.uninstall(removeName);
32
+ async remove(names) {
33
+ for (const name of names) {
34
+ await this.pluginService.uninstall(name);
35
+ }
31
36
  }
32
37
  async update() {
33
38
  await this.pluginService.update();
34
39
  }
35
40
  getInstalledPlugins() {
36
- return this.appConfigService.config.plugins.map(p => p.name);
41
+ return this.appConfigService.plugins.map(pluginRef => pluginRef.name);
37
42
  }
38
43
  };
39
44
  exports.PluginController = PluginController;
@@ -45,35 +50,31 @@ __decorate([
45
50
  __metadata("design:returntype", Promise)
46
51
  ], PluginController.prototype, "list", null);
47
52
  __decorate([
48
- (0, core_1.Command)("plugin:add <name>"),
49
- (0, core_1.Command)("plugin:install <name>"),
53
+ (0, core_1.Command)("plugin:install <...names>"),
50
54
  (0, core_1.Description)("Install a plugin by specifying its name"),
51
- __param(0, (0, core_1.Param)("name")),
52
- __param(1, (0, core_1.Option)("beta", {
53
- type: "boolean",
54
- alias: "d",
55
- description: "Use the beta version of the plugin (if a beta version exists). Defaults to the latest stable version."
56
- })),
55
+ __param(0, (0, core_1.Param)("names")),
56
+ __param(0, (0, core_1.Description)("Names of plugins to install")),
57
57
  __metadata("design:type", Function),
58
- __metadata("design:paramtypes", [String, Boolean]),
58
+ __metadata("design:paramtypes", [Array]),
59
59
  __metadata("design:returntype", Promise)
60
60
  ], PluginController.prototype, "add", null);
61
61
  __decorate([
62
- (0, core_1.Command)("plugin:remove <name>"),
63
- __param(0, (0, core_1.Param)("name")),
62
+ (0, core_1.Command)("plugin:remove <...names>"),
63
+ (0, core_1.Description)("Remove a plugin"),
64
+ __param(0, (0, core_1.Param)("names")),
65
+ __param(0, (0, core_1.Description)("Names of plugins to remove")),
64
66
  __metadata("design:type", Function),
65
- __metadata("design:paramtypes", [String]),
67
+ __metadata("design:paramtypes", [Array]),
66
68
  __metadata("design:returntype", Promise)
67
69
  ], PluginController.prototype, "remove", null);
68
70
  __decorate([
69
- (0, core_1.Command)("plugin:update [name]"),
71
+ (0, core_1.Command)("plugin:update"),
70
72
  __metadata("design:type", Function),
71
73
  __metadata("design:paramtypes", []),
72
74
  __metadata("design:returntype", Promise)
73
75
  ], PluginController.prototype, "update", null);
74
76
  __decorate([
75
- (0, core_1.Completion)("name", "plugin:update [name]"),
76
- (0, core_1.Completion)("name", "plugin:remove <name>"),
77
+ (0, core_1.Completion)("names", "plugin:remove <...names>"),
77
78
  __metadata("design:type", Function),
78
79
  __metadata("design:paramtypes", []),
79
80
  __metadata("design:returntype", Array)
@@ -0,0 +1,4 @@
1
+ import { DynamicModule } from "@wocker/core";
2
+ export declare class PluginModule {
3
+ static register(): DynamicModule;
4
+ }
@@ -0,0 +1,67 @@
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 PluginModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.PluginModule = void 0;
11
+ const core_1 = require("@wocker/core");
12
+ const core_2 = require("../core");
13
+ const package_manager_1 = require("../package-manager");
14
+ const PluginController_1 = require("./controllers/PluginController");
15
+ const PluginService_1 = require("./services/PluginService");
16
+ let PluginModule = PluginModule_1 = class PluginModule {
17
+ static register() {
18
+ return {
19
+ module: PluginModule_1,
20
+ inject: [
21
+ core_1.AppConfigService,
22
+ core_1.AppFileSystemService,
23
+ core_1.LogService,
24
+ PluginService_1.PluginService
25
+ ],
26
+ useFactory: async (appConfigService, fs, logService, pluginService) => {
27
+ const imports = [];
28
+ for (const pluginData of appConfigService.plugins) {
29
+ try {
30
+ const plugin = await pluginService.import(pluginData.name);
31
+ imports.push({
32
+ module: plugin.type,
33
+ providers: [
34
+ {
35
+ provide: core_1.PLUGIN_DIR_KEY,
36
+ useValue: fs.path("plugins", plugin.name)
37
+ }
38
+ ]
39
+ });
40
+ }
41
+ catch (err) {
42
+ logService.error(err.message, {
43
+ pluginName: pluginData.name,
44
+ pluginEnv: pluginData.env
45
+ });
46
+ appConfigService.removePlugin(pluginData.name);
47
+ appConfigService.save();
48
+ }
49
+ }
50
+ return {
51
+ imports
52
+ };
53
+ }
54
+ };
55
+ }
56
+ };
57
+ exports.PluginModule = PluginModule;
58
+ exports.PluginModule = PluginModule = PluginModule_1 = __decorate([
59
+ (0, core_1.Module)({
60
+ imports: [
61
+ core_2.CoreModule,
62
+ package_manager_1.PackageManagerModule
63
+ ],
64
+ controllers: [PluginController_1.PluginController],
65
+ providers: [PluginService_1.PluginService]
66
+ })
67
+ ], PluginModule);
@@ -1,15 +1,17 @@
1
1
  import { Cli, AppConfigService, LogService } from "@wocker/core";
2
- import { NpmService } from "./NpmService";
3
- import { Plugin } from "../makes";
2
+ import { PackageManager, RegistryService } from "../../package-manager";
3
+ import { Plugin } from "../../../makes";
4
4
  export declare class PluginService {
5
5
  protected readonly appConfigService: AppConfigService;
6
- protected readonly npmService: NpmService;
6
+ protected readonly pm: PackageManager;
7
+ protected readonly registryService: RegistryService;
7
8
  protected readonly logService: LogService;
8
9
  protected readonly cli: Cli;
9
- constructor(appConfigService: AppConfigService, npmService: NpmService, logService: LogService, cli: Cli);
10
+ protected rule: string;
11
+ constructor(appConfigService: AppConfigService, pm: PackageManager, registryService: RegistryService, logService: LogService, cli: Cli);
10
12
  getPluginsTable(): string;
11
13
  checkPlugin(pluginName: string): Promise<boolean>;
12
- install(pluginName: string, beta?: boolean): Promise<void>;
14
+ install(pluginName: string, version?: string): Promise<void>;
13
15
  uninstall(pluginName: string): Promise<void>;
14
16
  import(name: string): Promise<Plugin>;
15
17
  update(): Promise<void>;
@@ -49,15 +49,16 @@ exports.PluginService = void 0;
49
49
  const core_1 = require("@wocker/core");
50
50
  const cli_table3_1 = __importDefault(require("cli-table3"));
51
51
  const yoctocolors_cjs_1 = __importDefault(require("yoctocolors-cjs"));
52
- const NpmService_1 = require("./NpmService");
53
- const makes_1 = require("../makes");
54
- const utils_1 = require("../utils");
52
+ const package_manager_1 = require("../../package-manager");
53
+ const makes_1 = require("../../../makes");
55
54
  let PluginService = class PluginService {
56
- constructor(appConfigService, npmService, logService, cli) {
55
+ constructor(appConfigService, pm, registryService, logService, cli) {
57
56
  this.appConfigService = appConfigService;
58
- this.npmService = npmService;
57
+ this.pm = pm;
58
+ this.registryService = registryService;
59
59
  this.logService = logService;
60
60
  this.cli = cli;
61
+ this.rule = "1.x.x";
61
62
  }
62
63
  getPluginsTable() {
63
64
  const table = new cli_table3_1.default({
@@ -84,33 +85,36 @@ let PluginService = class PluginService {
84
85
  }
85
86
  return false;
86
87
  }
87
- async install(pluginName, beta) {
88
+ async install(pluginName, version = "latest") {
88
89
  const [, prefix = "@wocker/", name, suffix = "-plugin"] = /^(@wocker\/)?(\w+)(-plugin)?$/.exec(pluginName) || [];
89
90
  const fullName = `${prefix}${name}${suffix}`;
90
- try {
91
- if (await this.checkPlugin(fullName)) {
92
- this.appConfigService.addPlugin(fullName);
93
- this.appConfigService.save();
94
- console.info(`Plugin ${fullName} activated`);
95
- return;
96
- }
97
- const packageInfo = await this.npmService.getPackageInfo(fullName);
98
- const env = packageInfo["dist-tags"].beta && beta ? "beta" : "latest";
99
- await this.npmService.install(fullName, env);
100
- if (await this.checkPlugin(fullName)) {
101
- this.appConfigService.addPlugin(fullName, env);
102
- this.appConfigService.save();
103
- console.info(`Plugin ${fullName}@${env} activated`);
104
- return;
105
- }
91
+ const currentVersion = await this.getCurrentVersion(fullName), wRule = makes_1.VersionRule.parse(this.rule), rule = makes_1.VersionRule.parse(version === "latest" ? "x" : version || this.rule);
92
+ const packageInfo = await this.registryService.getPackageInfo(fullName);
93
+ const versions = Object.keys(packageInfo.versions)
94
+ .filter((version) => {
95
+ return wRule.match(version, true) && rule.match(version, true);
96
+ })
97
+ .sort((a, b) => {
98
+ return makes_1.Version.parse(b).compare(a);
99
+ });
100
+ const bestSatisfyingVersion = versions.find((version) => rule.match(version)) ??
101
+ versions.find((version) => rule.match(version, true));
102
+ if (!bestSatisfyingVersion) {
103
+ throw new Error(`No matching version found for ${fullName}@${version}.`);
106
104
  }
107
- catch (err) {
108
- this.logService.error(err.message);
105
+ if ((!currentVersion || currentVersion !== bestSatisfyingVersion) || !await this.checkPlugin(fullName)) {
106
+ await this.pm.install(fullName, bestSatisfyingVersion);
109
107
  }
108
+ this.appConfigService.addPlugin(fullName, version);
109
+ this.appConfigService.save();
110
+ console.info(`Plugin ${fullName} activated`);
110
111
  }
111
112
  async uninstall(pluginName) {
112
113
  const [, prefix = "@wocker/", name, suffix = "-plugin"] = /^(@wocker\/)?(\w+)(-plugin)?$/.exec(pluginName) || [];
113
114
  const fullName = `${prefix}${name}${suffix}`;
115
+ if (await this.checkPlugin(fullName)) {
116
+ await this.pm.uninstall(fullName);
117
+ }
114
118
  this.appConfigService.removePlugin(fullName);
115
119
  this.appConfigService.save();
116
120
  console.info(`Plugin ${fullName} deactivated`);
@@ -121,25 +125,16 @@ let PluginService = class PluginService {
121
125
  }
122
126
  async update() {
123
127
  if (this.appConfigService.plugins.length === 0) {
128
+ console.info("No plugins installed");
124
129
  return;
125
130
  }
126
131
  for (const plugin of this.appConfigService.plugins) {
127
132
  console.info(`Checking ${plugin.name}...`);
128
133
  try {
129
- const current = await this.getCurrentVersion(plugin.name);
130
- const res = await makes_1.Http.get("https://registry.npmjs.org")
131
- .send(plugin.name);
132
- if (res.status !== 200) {
133
- continue;
134
- }
135
- const { "dist-tags": { latest } } = res.data;
136
- this.logService.info(plugin.name, current, latest);
137
- if (!current || current < latest) {
138
- console.log(`Updating ${plugin.name}...`);
139
- await (0, utils_1.spawn)("npm", ["i", "-g", plugin.name]);
140
- }
134
+ await this.install(plugin.name, plugin.env);
141
135
  }
142
136
  catch (err) {
137
+ console.info(err.message);
143
138
  this.logService.error(err.message);
144
139
  }
145
140
  }
@@ -147,11 +142,13 @@ let PluginService = class PluginService {
147
142
  }
148
143
  async getCurrentVersion(name) {
149
144
  try {
150
- const { dependencies: { [name]: { version } } } = JSON.parse(await (0, utils_1.exec)(`npm ls --json -g ${name}`));
151
- return version;
145
+ const packages = await this.pm.getPackages(), package1 = packages.find((p) => p.name === name);
146
+ if (package1) {
147
+ return package1.version;
148
+ }
152
149
  }
153
150
  catch (err) {
154
- this.logService.error(`Failed to get current version of ${name}`);
151
+ this.logService.error(`Failed to get current version of "${name}"`);
155
152
  }
156
153
  return null;
157
154
  }
@@ -160,7 +157,8 @@ exports.PluginService = PluginService;
160
157
  exports.PluginService = PluginService = __decorate([
161
158
  (0, core_1.Injectable)(),
162
159
  __metadata("design:paramtypes", [core_1.AppConfigService,
163
- NpmService_1.NpmService,
160
+ package_manager_1.PackageManager,
161
+ package_manager_1.RegistryService,
164
162
  core_1.LogService,
165
163
  core_1.Cli])
166
164
  ], PluginService);
@@ -10,7 +10,7 @@ export declare class PresetController {
10
10
  constructor(appConfigService: AppConfigService, dockerService: DockerService, presetRepository: PresetRepository, presetService: PresetService);
11
11
  init(): Promise<void>;
12
12
  list(): Promise<string>;
13
- add(name: string, version?: string): Promise<void>;
13
+ install(repository: string, version?: string): Promise<void>;
14
14
  destroy(): Promise<void>;
15
15
  delete(name: string, confirm?: boolean): Promise<void>;
16
16
  build(presetName: string, rebuild?: boolean): Promise<void>;