@wocker/ws 1.0.32-beta.1 → 1.1.0-beta.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.
Files changed (48) hide show
  1. package/lib/main.js +2 -2
  2. package/lib/makes/index.d.ts +0 -2
  3. package/lib/makes/index.js +0 -2
  4. package/lib/modules/core/controllers/DebugController.d.ts +3 -4
  5. package/lib/modules/core/controllers/DebugController.js +5 -22
  6. package/lib/modules/core/controllers/ExperimentalController.d.ts +3 -3
  7. package/lib/modules/core/controllers/ExperimentalController.js +1 -1
  8. package/lib/modules/dns/index.js +3 -3
  9. package/lib/modules/keystore/controllers/KeystoreController.d.ts +3 -3
  10. package/lib/modules/keystore/controllers/KeystoreController.js +6 -6
  11. package/lib/modules/keystore/services/KeystoreService.d.ts +3 -3
  12. package/lib/modules/keystore/services/KeystoreService.js +4 -4
  13. package/lib/modules/package-manager/service/PackageManager.d.ts +3 -3
  14. package/lib/modules/package-manager/service/PackageManager.js +7 -7
  15. package/lib/modules/plugin/controllers/PluginController.d.ts +3 -3
  16. package/lib/modules/plugin/controllers/PluginController.js +4 -4
  17. package/lib/modules/plugin/index.js +4 -5
  18. package/lib/modules/plugin/services/PluginService.d.ts +3 -3
  19. package/lib/modules/plugin/services/PluginService.js +11 -13
  20. package/lib/modules/preset/controllers/PresetController.d.ts +3 -3
  21. package/lib/modules/preset/controllers/PresetController.js +4 -4
  22. package/lib/modules/preset/controllers/PresetListener.d.ts +3 -3
  23. package/lib/modules/preset/controllers/PresetListener.js +7 -7
  24. package/lib/modules/preset/repositories/PresetRepository.d.ts +3 -3
  25. package/lib/modules/preset/repositories/PresetRepository.js +7 -7
  26. package/lib/modules/preset/services/PresetService.d.ts +4 -3
  27. package/lib/modules/preset/services/PresetService.js +19 -19
  28. package/lib/modules/project/controllers/ProjectController.d.ts +3 -3
  29. package/lib/modules/project/controllers/ProjectController.js +17 -24
  30. package/lib/modules/project/repositories/ProjectRepository.d.ts +1 -8
  31. package/lib/modules/project/repositories/ProjectRepository.js +1 -56
  32. package/lib/modules/project/services/ProjectService.d.ts +3 -3
  33. package/lib/modules/project/services/ProjectService.js +37 -37
  34. package/lib/modules/proxy/controllers/HttpAuthController.d.ts +3 -2
  35. package/lib/modules/proxy/controllers/HttpAuthController.js +29 -8
  36. package/lib/modules/proxy/controllers/ProxyController.d.ts +3 -3
  37. package/lib/modules/proxy/controllers/ProxyController.js +5 -5
  38. package/lib/modules/proxy/services/HttpAuthService.d.ts +3 -0
  39. package/lib/modules/proxy/services/HttpAuthService.js +29 -10
  40. package/lib/modules/proxy/services/ProxyService.d.ts +3 -3
  41. package/lib/modules/proxy/services/ProxyService.js +7 -7
  42. package/package.json +15 -5
  43. package/lib/makes/Version.d.ts +0 -22
  44. package/lib/makes/Version.js +0 -59
  45. package/lib/makes/VersionRange.d.ts +0 -6
  46. package/lib/makes/VersionRange.js +0 -18
  47. package/lib/makes/VersionRule.d.ts +0 -24
  48. package/lib/makes/VersionRule.js +0 -68
@@ -27,13 +27,20 @@ let HttpAuthController = class HttpAuthController {
27
27
  async onAddDomain(project, ...domains) {
28
28
  console.log("New domains:", domains);
29
29
  }
30
- async enable(domain) {
30
+ async users() {
31
+ await this.httpAuthService.usersForProject(this.projectService.get());
32
+ }
33
+ async enable(domain, noRestart) {
31
34
  await this.httpAuthService.enableForProject(this.projectService.get(), domain);
32
- await this.proxyService.start(true);
35
+ if (!noRestart) {
36
+ await this.proxyService.start(true);
37
+ }
33
38
  }
34
- async disable(domain) {
39
+ async disable(domain, noRestart) {
35
40
  await this.httpAuthService.disableForProject(this.projectService.get(), domain);
36
- await this.proxyService.start(true);
41
+ if (!noRestart) {
42
+ await this.proxyService.start(true);
43
+ }
37
44
  }
38
45
  async add(user, password, global, algorithm) {
39
46
  if (!user) {
@@ -56,12 +63,12 @@ let HttpAuthController = class HttpAuthController {
56
63
  else {
57
64
  await this.httpAuthService.addForProject(this.projectService.get(), user, password, algorithm);
58
65
  }
59
- await this.proxyService.start(true);
60
66
  }
61
67
  async remove(user) {
62
68
  await this.httpAuthService.removeForProject(this.projectService.get(), user);
63
69
  }
64
70
  async clear() {
71
+ await this.httpAuthService.clearForProject(this.projectService.get());
65
72
  }
66
73
  };
67
74
  exports.HttpAuthController = HttpAuthController;
@@ -71,19 +78,31 @@ __decorate([
71
78
  __metadata("design:paramtypes", [core_1.Project, String]),
72
79
  __metadata("design:returntype", Promise)
73
80
  ], HttpAuthController.prototype, "onAddDomain", null);
81
+ __decorate([
82
+ (0, core_1.Command)("http-auth"),
83
+ (0, core_1.Description)(""),
84
+ __metadata("design:type", Function),
85
+ __metadata("design:paramtypes", []),
86
+ __metadata("design:returntype", Promise)
87
+ ], HttpAuthController.prototype, "users", null);
74
88
  __decorate([
75
89
  (0, core_1.Command)("http-auth:enable"),
76
90
  __param(0, (0, core_1.Option)("domain", "d")),
77
91
  __param(0, (0, core_1.Description)("Domain to apply authentication to.")),
92
+ __param(1, (0, core_1.Option)("no-restart")),
93
+ __param(1, (0, core_1.Description)("")),
78
94
  __metadata("design:type", Function),
79
- __metadata("design:paramtypes", [String]),
95
+ __metadata("design:paramtypes", [String, Boolean]),
80
96
  __metadata("design:returntype", Promise)
81
97
  ], HttpAuthController.prototype, "enable", null);
82
98
  __decorate([
83
99
  (0, core_1.Command)("http-auth:disable"),
84
100
  __param(0, (0, core_1.Option)("domain", "d")),
101
+ __param(0, (0, core_1.Description)("")),
102
+ __param(1, (0, core_1.Option)("no-restart")),
103
+ __param(1, (0, core_1.Description)("")),
85
104
  __metadata("design:type", Function),
86
- __metadata("design:paramtypes", [String]),
105
+ __metadata("design:paramtypes", [String, Boolean]),
87
106
  __metadata("design:returntype", Promise)
88
107
  ], HttpAuthController.prototype, "disable", null);
89
108
  __decorate([
@@ -104,7 +123,8 @@ __decorate([
104
123
  __metadata("design:returntype", Promise)
105
124
  ], HttpAuthController.prototype, "add", null);
106
125
  __decorate([
107
- (0, core_1.Command)("http-auth:remove [user]"),
126
+ (0, core_1.Command)("http-auth:remove-user [user]"),
127
+ (0, core_1.Description)(""),
108
128
  __param(0, (0, core_1.Param)("user")),
109
129
  __metadata("design:type", Function),
110
130
  __metadata("design:paramtypes", [String]),
@@ -112,6 +132,7 @@ __decorate([
112
132
  ], HttpAuthController.prototype, "remove", null);
113
133
  __decorate([
114
134
  (0, core_1.Command)("http-auth:clear"),
135
+ (0, core_1.Description)("Remove all users for the project."),
115
136
  __metadata("design:type", Function),
116
137
  __metadata("design:paramtypes", []),
117
138
  __metadata("design:returntype", Promise)
@@ -1,11 +1,11 @@
1
- import { Project, AppConfigService } from "@wocker/core";
1
+ import { Project, AppService } from "@wocker/core";
2
2
  import { ProjectService } from "../../project";
3
3
  import { ProxyService } from "../services/ProxyService";
4
4
  export declare class ProxyController {
5
- protected readonly appConfigService: AppConfigService;
5
+ protected readonly appService: AppService;
6
6
  protected readonly projectService: ProjectService;
7
7
  protected readonly proxyService: ProxyService;
8
- constructor(appConfigService: AppConfigService, projectService: ProjectService, proxyService: ProxyService);
8
+ constructor(appService: AppService, projectService: ProjectService, proxyService: ProxyService);
9
9
  onProjectInit(project: Project): Promise<void>;
10
10
  onProjectStart(project: Project): Promise<void>;
11
11
  onProjectStop(_project: Project): Promise<void>;
@@ -22,8 +22,8 @@ const yoctocolors_cjs_1 = __importDefault(require("yoctocolors-cjs"));
22
22
  const project_1 = require("../../project");
23
23
  const ProxyService_1 = require("../services/ProxyService");
24
24
  let ProxyController = class ProxyController {
25
- constructor(appConfigService, projectService, proxyService) {
26
- this.appConfigService = appConfigService;
25
+ constructor(appService, projectService, proxyService) {
26
+ this.appService = appService;
27
27
  this.projectService = projectService;
28
28
  this.proxyService = proxyService;
29
29
  }
@@ -47,7 +47,7 @@ let ProxyController = class ProxyController {
47
47
  return projects.map((project) => project.name);
48
48
  }
49
49
  async init(httpPort, httpsPort, sshPort, sshPassword) {
50
- const config = this.appConfigService.config;
50
+ const config = this.appService.config;
51
51
  if (httpPort === null || typeof httpPort === "undefined" || isNaN(httpPort)) {
52
52
  httpPort = await (0, utils_1.promptInput)({
53
53
  required: true,
@@ -95,7 +95,7 @@ let ProxyController = class ProxyController {
95
95
  config.unsetMeta("PROXY_SSH_PASSWORD");
96
96
  config.unsetMeta("PROXY_SSH_PORT");
97
97
  }
98
- this.appConfigService.save();
98
+ this.appService.save();
99
99
  }
100
100
  async start(restart, rebuild) {
101
101
  await this.proxyService.start(restart, rebuild);
@@ -190,7 +190,7 @@ __decorate([
190
190
  exports.ProxyController = ProxyController = __decorate([
191
191
  (0, core_1.Controller)(),
192
192
  (0, core_1.Description)("Proxy commands"),
193
- __metadata("design:paramtypes", [core_1.AppConfigService,
193
+ __metadata("design:paramtypes", [core_1.AppService,
194
194
  project_1.ProjectService,
195
195
  ProxyService_1.ProxyService])
196
196
  ], ProxyController);
@@ -7,11 +7,14 @@ export declare class HttpAuthService {
7
7
  protected readonly dockerService: DockerService;
8
8
  protected readonly proxyService: ProxyService;
9
9
  constructor(processService: ProcessService, fs: AppFileSystemService, dockerService: DockerService, proxyService: ProxyService);
10
+ users(path: string): Promise<void>;
10
11
  add(path: string, user: string, password: string, algorithm?: HttpAuthService.Algorithm): Promise<void>;
11
12
  addForProject(project: Project, user: string, password: string, algorithm?: HttpAuthService.Algorithm): Promise<void>;
12
13
  addForGlobal(user: string, password: string, algorithm?: HttpAuthService.Algorithm): Promise<void>;
13
14
  removeUser(path: string, user: string): Promise<void>;
15
+ usersForProject(project: Project): Promise<void>;
14
16
  removeForProject(project: Project, user: string): Promise<void>;
17
+ clearForProject(project: Project): Promise<void>;
15
18
  enableForProject(project: Project, domain?: string): Promise<void>;
16
19
  disableForProject(project: Project, domain?: string): Promise<void>;
17
20
  }
@@ -12,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.HttpAuthService = void 0;
13
13
  const core_1 = require("@wocker/core");
14
14
  const docker_module_1 = require("@wocker/docker-module");
15
- const utils_1 = require("@wocker/utils");
16
15
  const ProxyService_1 = require("./ProxyService");
17
16
  let HttpAuthService = class HttpAuthService {
18
17
  constructor(processService, fs, dockerService, proxyService) {
@@ -21,6 +20,13 @@ let HttpAuthService = class HttpAuthService {
21
20
  this.dockerService = dockerService;
22
21
  this.proxyService = proxyService;
23
22
  }
23
+ async users(path) {
24
+ await this.dockerService.exec("wocker-proxy", {
25
+ tty: true,
26
+ user: "nginx",
27
+ cmd: ["cut", "-d:", "-f1", `/etc/${path}`]
28
+ });
29
+ }
24
30
  async add(path, user, password, algorithm = "md5") {
25
31
  const alMap = {
26
32
  md5: "-m",
@@ -37,16 +43,10 @@ let HttpAuthService = class HttpAuthService {
37
43
  mode: 0o640
38
44
  });
39
45
  }
40
- const stream = await this.dockerService.exec("wocker-proxy", {
46
+ await this.dockerService.exec("wocker-proxy", {
41
47
  user: "nginx",
42
- cmd: ["htpasswd", "-b", alMap[algorithm], `/etc/${path}`, user, password]
43
- });
44
- await new Promise((resolve, reject) => {
45
- stream.on("data", (chunk) => {
46
- this.processService.stdout.write((0, utils_1.demuxOutput)(chunk));
47
- });
48
- stream.on("end", resolve);
49
- stream.on("error", reject);
48
+ cmd: ["htpasswd", "-b", alMap[algorithm], `/etc/${path}`, user, password],
49
+ tty: true
50
50
  });
51
51
  }
52
52
  async addForProject(project, user, password, algorithm = "md5") {
@@ -61,6 +61,17 @@ let HttpAuthService = class HttpAuthService {
61
61
  return this.add(`nginx/htpasswd/_global`, user, password, algorithm);
62
62
  }
63
63
  async removeUser(path, user) {
64
+ await this.dockerService.exec("wocker-proxy", {
65
+ cmd: ["htpasswd", "-D", `/etc/${path}`, user],
66
+ user: "nginx",
67
+ tty: true
68
+ });
69
+ }
70
+ async usersForProject(project) {
71
+ if (!this.fs.exists("nginx/htpasswd/projects")) {
72
+ return;
73
+ }
74
+ await this.users(`nginx/htpasswd/projects/${project.name}`);
64
75
  }
65
76
  async removeForProject(project, user) {
66
77
  if (!this.fs.exists("nginx/htpasswd/projects")) {
@@ -68,6 +79,14 @@ let HttpAuthService = class HttpAuthService {
68
79
  }
69
80
  await this.removeUser(`nginx/htpasswd/projects/${project.name}`, user);
70
81
  }
82
+ async clearForProject(project) {
83
+ const filePath = `nginx/htpasswd/projects/${project.name}`;
84
+ if (this.fs.exists(filePath)) {
85
+ this.fs.writeFile(filePath, "", {
86
+ mode: 0o640
87
+ });
88
+ }
89
+ }
71
90
  async enableForProject(project, domain) {
72
91
  if (!this.fs.exists(`nginx/htpasswd/projects/${project.name}`)) {
73
92
  throw new Error(`No htpasswd for ${project.name}`);
@@ -1,7 +1,7 @@
1
- import { Project, AppConfigService, AppFileSystemService, ProcessService, ProxyService as CoreProxyService } from "@wocker/core";
1
+ import { Project, AppService, AppFileSystemService, ProcessService, ProxyService as CoreProxyService } from "@wocker/core";
2
2
  import { DockerService } from "@wocker/docker-module";
3
3
  export declare class ProxyService extends CoreProxyService {
4
- protected readonly appConfigService: AppConfigService;
4
+ protected readonly appService: AppService;
5
5
  protected readonly processService: ProcessService;
6
6
  protected readonly fs: AppFileSystemService;
7
7
  protected readonly dockerService: DockerService;
@@ -9,7 +9,7 @@ export declare class ProxyService extends CoreProxyService {
9
9
  protected oldContainerNames: string[];
10
10
  protected imageName: string;
11
11
  protected oldImages: string[];
12
- constructor(appConfigService: AppConfigService, processService: ProcessService, fs: AppFileSystemService, dockerService: DockerService);
12
+ constructor(appService: AppService, processService: ProcessService, fs: AppFileSystemService, dockerService: DockerService);
13
13
  init(project: Project): Promise<void>;
14
14
  start(restart?: boolean, rebuild?: boolean): Promise<void>;
15
15
  stop(): Promise<void>;
@@ -49,9 +49,9 @@ const utils_1 = require("@wocker/utils");
49
49
  const Path = __importStar(require("path"));
50
50
  const env_1 = require("../../../env");
51
51
  let ProxyService = class ProxyService extends core_1.ProxyService {
52
- constructor(appConfigService, processService, fs, dockerService) {
52
+ constructor(appService, processService, fs, dockerService) {
53
53
  super();
54
- this.appConfigService = appConfigService;
54
+ this.appService = appService;
55
55
  this.processService = processService;
56
56
  this.fs = fs;
57
57
  this.dockerService = dockerService;
@@ -110,7 +110,7 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
110
110
  else {
111
111
  this.fs.chmod("nginx/htpasswd", 0o764);
112
112
  }
113
- const httpPort = this.appConfigService.getMeta("PROXY_HTTP_PORT", "80"), httpsPort = this.appConfigService.getMeta("PROXY_HTTPS_PORT", "443"), sshPort = this.appConfigService.getMeta("PROXY_SSH_PORT", "22");
113
+ const httpPort = this.appService.getMeta("PROXY_HTTP_PORT", "80"), httpsPort = this.appService.getMeta("PROXY_HTTPS_PORT", "443"), sshPort = this.appService.getMeta("PROXY_SSH_PORT", "22");
114
114
  container = await this.dockerService.createContainer({
115
115
  name: this.containerName,
116
116
  image: this.imageName,
@@ -124,7 +124,7 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
124
124
  ports: [
125
125
  `${httpPort}:80`,
126
126
  `${httpsPort}:443`,
127
- ...this.appConfigService.getMeta("PROXY_SSH_PASSWORD") ? [
127
+ ...this.appService.getMeta("PROXY_SSH_PASSWORD") ? [
128
128
  `${sshPort}:22`
129
129
  ] : []
130
130
  ],
@@ -161,9 +161,9 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
161
161
  }
162
162
  await this.dockerService.buildImage({
163
163
  tag: this.imageName,
164
- version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
164
+ version: this.appService.isExperimentalEnabled("buildKit") ? "2" : "1",
165
165
  buildArgs: {
166
- SSH_PASSWORD: this.appConfigService.getMeta("PROXY_SSH_PASSWORD")
166
+ SSH_PASSWORD: this.appService.getMeta("PROXY_SSH_PASSWORD")
167
167
  },
168
168
  context: Path.join(env_1.PLUGINS_DIR, "proxy"),
169
169
  dockerfile: "./Dockerfile"
@@ -176,7 +176,7 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
176
176
  exports.ProxyService = ProxyService;
177
177
  exports.ProxyService = ProxyService = __decorate([
178
178
  (0, core_1.Injectable)("PROXY_SERVICE"),
179
- __metadata("design:paramtypes", [core_1.AppConfigService,
179
+ __metadata("design:paramtypes", [core_1.AppService,
180
180
  core_1.ProcessService,
181
181
  core_1.AppFileSystemService,
182
182
  docker_module_1.DockerService])
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wocker/ws",
3
3
  "type": "commonjs",
4
- "version": "1.0.32-beta.1",
4
+ "version": "1.1.0-beta.0",
5
5
  "author": "Kris Papercut <krispcut@gmail.com>",
6
6
  "description": "Docker workspace for web projects",
7
7
  "license": "MIT",
@@ -35,14 +35,13 @@
35
35
  "make-coverage-badge": "make-coverage-badge"
36
36
  },
37
37
  "dependencies": {
38
- "@wocker/core": "1.0.32",
39
- "@wocker/docker-module": "^0.0.6",
38
+ "@wocker/core": "^1.1.0-beta.2",
39
+ "@wocker/docker-module": "^1.0.0",
40
40
  "@wocker/utils": "^2.0.6",
41
41
  "async-mutex": "^0.4.0",
42
42
  "axios": "^1.6.7",
43
43
  "child_process": "^1.0.2",
44
44
  "cli-table3": "^0.6.2",
45
- "docker-compose": "^1.2.0",
46
45
  "dockerode": "^4.0.2",
47
46
  "keytar": "^7.9.0",
48
47
  "md5": "^2.3.0",
@@ -57,7 +56,7 @@
57
56
  "@types/mute-stream": "^0.0.4",
58
57
  "@types/node": "^24.5.2",
59
58
  "@types/unzipper": "^0.10.10",
60
- "@wocker/docker-mock-module": "^0.0.3",
59
+ "@wocker/docker-mock-module": "^1.0.0",
61
60
  "@wocker/testing": "^1.0.4",
62
61
  "jest": "^30.1.3",
63
62
  "make-coverage-badge": "^1.2.0",
@@ -66,5 +65,16 @@
66
65
  "ts-node": "^10.9.2",
67
66
  "typescript": "^5.9.3",
68
67
  "unionfs": "^4.5.4"
68
+ },
69
+ "overrides": {
70
+ "@wocker/testing": {
71
+ "@wocker/core": "^1.1.0-beta.2"
72
+ },
73
+ "@wocker/docker-module": {
74
+ "@wocker/core": "^1.1.0-beta.2"
75
+ },
76
+ "@wocker/docker-mock-module": {
77
+ "@wocker/core": "^1.1.0-beta.2"
78
+ }
69
79
  }
70
80
  }
@@ -1,22 +0,0 @@
1
- type VersionData = {
2
- major: number;
3
- minor: number;
4
- patch: number;
5
- tag?: string;
6
- build?: number;
7
- };
8
- export declare class Version {
9
- static readonly REGEXP: RegExp;
10
- protected static cache: Map<string, Version>;
11
- readonly major: number;
12
- readonly minor: number;
13
- readonly patch: number;
14
- readonly tag?: string;
15
- readonly build?: number;
16
- constructor(data: VersionData);
17
- parts(): number[];
18
- compare(version: string | Version): number;
19
- static valid(version: string): boolean;
20
- static parse(version: string): Version;
21
- }
22
- export {};
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Version = void 0;
4
- class Version {
5
- constructor(data) {
6
- Object.assign(this, data);
7
- }
8
- parts() {
9
- return [
10
- this.major,
11
- this.minor,
12
- this.patch,
13
- this.build ?? 0
14
- ];
15
- }
16
- compare(version) {
17
- if (typeof version === "string") {
18
- version = Version.parse(version);
19
- }
20
- const a = this.parts(), b = version.parts();
21
- for (let i = 0; i < Math.max(a.length, b.length); i++) {
22
- if (i === 3) {
23
- if (this.tag && !version.tag)
24
- return -1;
25
- else if (!this.tag && version.tag)
26
- return 1;
27
- else if (this.tag !== version.tag)
28
- return this.tag < version.tag ? -1 : 1;
29
- }
30
- const diff = (a[i] ?? 0) - (b[i] ?? 0);
31
- if (diff !== 0) {
32
- return diff > 0 ? 1 : -1;
33
- }
34
- }
35
- return 0;
36
- }
37
- static valid(version) {
38
- return Version.REGEXP.test(version);
39
- }
40
- static parse(version) {
41
- if (!Version.cache.has(version)) {
42
- if (!Version.REGEXP.test(version)) {
43
- throw new RangeError("Invalid version format");
44
- }
45
- const [, major, minor, patch, tag, build] = Version.REGEXP.exec(version) || [];
46
- Version.cache.set(version, new Version({
47
- major: parseInt(major),
48
- minor: parseInt(minor),
49
- patch: parseInt(patch),
50
- tag,
51
- build: build ? parseInt(build) : undefined
52
- }));
53
- }
54
- return Version.cache.get(version);
55
- }
56
- }
57
- exports.Version = Version;
58
- Version.REGEXP = /^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)(?:\.(\d+))?)?/;
59
- Version.cache = new Map();
@@ -1,6 +0,0 @@
1
- import { VersionRule } from "./VersionRule";
2
- export declare class VersionRange {
3
- protected rules: VersionRule[][];
4
- constructor(rules: VersionRule[][]);
5
- static parse(range: string): VersionRange;
6
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VersionRange = void 0;
4
- const VersionRule_1 = require("./VersionRule");
5
- class VersionRange {
6
- constructor(rules) {
7
- this.rules = rules;
8
- }
9
- static parse(range) {
10
- const rules = range.split("||").map((range) => {
11
- return range.split(" ").map((rule) => {
12
- return VersionRule_1.VersionRule.parse(rule);
13
- });
14
- });
15
- return new VersionRange(rules);
16
- }
17
- }
18
- exports.VersionRange = VersionRange;
@@ -1,24 +0,0 @@
1
- import { Version } from "./Version";
2
- type VersionRuleData = {
3
- prefix?: string;
4
- major?: number;
5
- minor?: number;
6
- patch?: number;
7
- tag?: string;
8
- build?: number;
9
- };
10
- export declare class VersionRule {
11
- static readonly REGEXP: RegExp;
12
- protected static map: Map<string, VersionRule>;
13
- readonly prefix?: string;
14
- readonly major?: number;
15
- readonly minor?: number;
16
- readonly patch?: number;
17
- readonly tag?: string;
18
- readonly build?: number;
19
- constructor(data: VersionRuleData);
20
- get version(): Version;
21
- match(version: string | Version, withTag?: boolean): boolean;
22
- static parse(rule: string): VersionRule;
23
- }
24
- export {};
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VersionRule = void 0;
4
- const Version_1 = require("./Version");
5
- class VersionRule {
6
- constructor(data) {
7
- Object.assign(this, data);
8
- }
9
- get version() {
10
- return new Version_1.Version({
11
- major: this.major ?? 0,
12
- minor: this.minor ?? 0,
13
- patch: this.patch ?? 0,
14
- tag: this.tag,
15
- build: this.build
16
- });
17
- }
18
- match(version, withTag) {
19
- if (typeof version === "string") {
20
- version = Version_1.Version.parse(version);
21
- }
22
- if ((!withTag || this.tag) && this.tag !== version.tag) {
23
- return false;
24
- }
25
- const cmp = version.compare(this.version);
26
- switch (this.prefix) {
27
- case ">":
28
- return cmp > 0;
29
- case ">=":
30
- return cmp >= 0;
31
- case "<":
32
- return cmp < 0;
33
- case "<=":
34
- return cmp <= 0;
35
- case "^":
36
- return (this.major === version.major &&
37
- cmp >= 0);
38
- case "~":
39
- return (this.major === version.major &&
40
- this.minor === version.minor &&
41
- cmp >= 0);
42
- default:
43
- return ((this.major === undefined || this.major === version.major) &&
44
- (this.minor === undefined || this.minor === version.minor) &&
45
- (this.patch === undefined || this.patch === version.patch));
46
- }
47
- }
48
- static parse(rule) {
49
- if (!VersionRule.map.has(rule)) {
50
- if (!VersionRule.REGEXP.test(rule)) {
51
- throw new Error("Invalid version rule");
52
- }
53
- const [, prefix, major, minor, patch, tag, build, onlyTag] = VersionRule.REGEXP.exec(rule) || [];
54
- VersionRule.map.set(rule, new VersionRule({
55
- prefix,
56
- major: major && major !== "x" && major !== "*" ? parseInt(major) : undefined,
57
- minor: minor && minor !== "x" ? parseInt(minor) : undefined,
58
- patch: patch && patch !== "x" ? parseInt(patch) : undefined,
59
- tag: tag || onlyTag,
60
- build: build && build !== "x" ? parseInt(build) : undefined
61
- }));
62
- }
63
- return VersionRule.map.get(rule);
64
- }
65
- }
66
- exports.VersionRule = VersionRule;
67
- VersionRule.REGEXP = /^(?:(\^|~|<=|>=|<|>)?(x|\d+)(?:\.(\*|x|\d+))?(?:\.(x|\d+))?(?:-([a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)(?:\.(\d+))?)?|([a-zA-Z0-9]+(?:-[a-zAZ0-9]+)*))$/;
68
- VersionRule.map = new Map();