@wocker/ws 1.0.1 → 1.0.2

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 (98) hide show
  1. package/.github/workflows/publish.yml +31 -0
  2. package/README.md +11 -137
  3. package/bin/ws.js +7 -3
  4. package/lib/App.d.ts +7 -5
  5. package/lib/App.js +45 -11
  6. package/lib/controllers/ImageController.d.ts +3 -1
  7. package/lib/controllers/ImageController.js +3 -1
  8. package/lib/controllers/PluginController.d.ts +14 -0
  9. package/lib/controllers/PluginController.js +62 -0
  10. package/lib/controllers/PresetController.d.ts +19 -0
  11. package/lib/controllers/PresetController.js +150 -0
  12. package/lib/controllers/ProjectController.d.ts +13 -5
  13. package/lib/controllers/ProjectController.js +92 -25
  14. package/lib/{plugins/ProxyPlugin.d.ts → controllers/ProxyController.d.ts} +9 -11
  15. package/lib/{plugins/ProxyPlugin.js → controllers/ProxyController.js} +120 -128
  16. package/lib/controllers/index.d.ts +3 -0
  17. package/lib/controllers/index.js +33 -0
  18. package/lib/env.js +9 -16
  19. package/lib/index.js +11 -24
  20. package/lib/makes/Docker.js +11 -25
  21. package/lib/makes/FS.d.ts +1 -1
  22. package/lib/makes/FS.js +13 -10
  23. package/lib/makes/Logger.d.ts +1 -7
  24. package/lib/makes/Logger.js +6 -33
  25. package/lib/makes/Plugin.js +2 -2
  26. package/lib/plugins/ElasticSearchPlugin.d.ts +16 -0
  27. package/lib/plugins/ElasticSearchPlugin.js +72 -0
  28. package/lib/plugins/LocaltunnelPlugin.d.ts +3 -3
  29. package/lib/plugins/LocaltunnelPlugin.js +17 -15
  30. package/lib/plugins/MaildevPlugin.d.ts +3 -1
  31. package/lib/plugins/MaildevPlugin.js +8 -5
  32. package/lib/plugins/MongodbPlugin.d.ts +5 -3
  33. package/lib/plugins/MongodbPlugin.js +10 -16
  34. package/lib/plugins/NgrokPlugin.d.ts +2 -3
  35. package/lib/plugins/NgrokPlugin.js +7 -6
  36. package/lib/plugins/PageKitePlugin.d.ts +2 -3
  37. package/lib/plugins/PageKitePlugin.js +8 -6
  38. package/lib/plugins/PostgresPlugin.js +5 -4
  39. package/lib/plugins/ProxmoxPlugin.js +2 -2
  40. package/lib/plugins/RedisPlugin.d.ts +8 -2
  41. package/lib/plugins/RedisPlugin.js +57 -20
  42. package/lib/plugins/index.d.ts +2 -6
  43. package/lib/plugins/index.js +11 -66
  44. package/lib/services/AppConfigService.d.ts +14 -4
  45. package/lib/services/AppConfigService.js +88 -3
  46. package/lib/services/AppEventsService.d.ts +5 -8
  47. package/lib/services/AppEventsService.js +2 -3
  48. package/lib/services/DockerService.d.ts +16 -0
  49. package/lib/services/DockerService.js +220 -0
  50. package/lib/services/LogService.d.ts +11 -0
  51. package/lib/services/LogService.js +39 -0
  52. package/lib/services/PluginService.d.ts +10 -0
  53. package/lib/services/PluginService.js +18 -0
  54. package/lib/services/PresetService.d.ts +9 -0
  55. package/lib/services/PresetService.js +63 -0
  56. package/lib/services/ProjectService.d.ts +8 -7
  57. package/lib/services/ProjectService.js +64 -12
  58. package/lib/services/index.d.ts +4 -0
  59. package/lib/services/index.js +44 -0
  60. package/lib/utils/demuxOutput.js +0 -2
  61. package/lib/utils/exec.d.ts +1 -1
  62. package/lib/utils/exec.js +4 -5
  63. package/lib/utils/fetch.js +3 -4
  64. package/lib/utils/image-build.js +2 -2
  65. package/lib/utils/index.d.ts +0 -4
  66. package/lib/utils/index.js +0 -44
  67. package/lib/utils/injectVariables.js +1 -1
  68. package/package.json +13 -13
  69. package/presets/node/config.json +9 -7
  70. package/presets/php-apache/Dockerfile +37 -36
  71. package/presets/php-apache/config.json +10 -15
  72. package/presets/php-fpm/Dockerfile +21 -0
  73. package/presets/php-fpm/config.json +25 -0
  74. package/lib/models/Preset.d.ts +0 -19
  75. package/lib/models/Preset.js +0 -60
  76. package/lib/models/Project.d.ts +0 -38
  77. package/lib/models/Project.js +0 -151
  78. package/lib/models/index.d.ts +0 -2
  79. package/lib/models/index.js +0 -27
  80. package/lib/plugins/MariadbPlugin.d.ts +0 -25
  81. package/lib/plugins/MariadbPlugin.js +0 -297
  82. package/lib/plugins/PresetPlugin.d.ts +0 -19
  83. package/lib/plugins/PresetPlugin.js +0 -164
  84. package/lib/plugins/ProjectPlugin.d.ts +0 -12
  85. package/lib/plugins/ProjectPlugin.js +0 -54
  86. package/lib/plugins/ServeoPlugin.d.ts +0 -36
  87. package/lib/plugins/ServeoPlugin.js +0 -260
  88. package/lib/plugins/TestPlugin.d.ts +0 -10
  89. package/lib/plugins/TestPlugin.js +0 -75
  90. package/lib/utils/promptConfirm.d.ts +0 -6
  91. package/lib/utils/promptConfirm.js +0 -21
  92. package/lib/utils/promptGroup.d.ts +0 -16
  93. package/lib/utils/promptGroup.js +0 -39
  94. package/lib/utils/promptSelect.d.ts +0 -12
  95. package/lib/utils/promptSelect.js +0 -47
  96. package/lib/utils/promptText.d.ts +0 -13
  97. package/lib/utils/promptText.js +0 -53
  98. package/plugins/serveo/Dockerfile +0 -17
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" />
2
+ import { DI, DockerService as CoreDockerService, DockerServiceParams as Params } from "@wocker/core";
3
+ import Docker, { Container } from "dockerode";
4
+ declare class DockerService extends CoreDockerService {
5
+ protected docker: Docker;
6
+ constructor(di: DI);
7
+ createContainer(params: Params.CreateContainer): Promise<Container>;
8
+ getContainer(name: string): Promise<Container | null>;
9
+ removeContainer(name: string): Promise<void>;
10
+ buildImage(params: Params.BuildImage): Promise<void>;
11
+ imageExists(tag: string): Promise<boolean>;
12
+ imageRm(tag: string): Promise<void>;
13
+ pullImage(tag: string): Promise<void>;
14
+ attachStream(stream: NodeJS.ReadWriteStream): Promise<void>;
15
+ }
16
+ export { DockerService };
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DockerService = void 0;
7
+ var _core = require("@wocker/core");
8
+ var _dockerode = _interopRequireDefault(require("dockerode"));
9
+ var _makes = require("../makes");
10
+ var _utils = require("../utils");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ class DockerService extends _core.DockerService {
13
+ constructor(di) {
14
+ super();
15
+ this.docker = new _dockerode.default({
16
+ socketPath: "/var/run/docker.sock"
17
+ });
18
+ }
19
+ async createContainer(params) {
20
+ const {
21
+ name,
22
+ tty,
23
+ image,
24
+ projectId,
25
+ restart,
26
+ ulimits,
27
+ extraHosts,
28
+ networkMode,
29
+ links = [],
30
+ env = {},
31
+ volumes = [],
32
+ ports = [],
33
+ cmd = []
34
+ } = params;
35
+ const network = this.docker.getNetwork("workspace");
36
+ try {
37
+ await network.inspect();
38
+ } catch (err) {
39
+ if (err.statusCode === 404) {
40
+ await this.docker.createNetwork({
41
+ Name: "workspace"
42
+ });
43
+ }
44
+ }
45
+ await this.pullImage(image);
46
+ return this.docker.createContainer({
47
+ name,
48
+ Image: image,
49
+ Hostname: name,
50
+ Labels: {
51
+ ...(projectId ? {
52
+ projectId
53
+ } : {})
54
+ },
55
+ AttachStdin: true,
56
+ AttachStdout: true,
57
+ AttachStderr: true,
58
+ OpenStdin: true,
59
+ StdinOnce: false,
60
+ Tty: tty,
61
+ Cmd: cmd,
62
+ Env: Object.keys(env).map(key => {
63
+ const value = env[key];
64
+ return `${key}=${value}`;
65
+ }),
66
+ ExposedPorts: ports.reduce((res, value) => {
67
+ const [,, containerPort] = /(\d+):(\d+)/.exec(value) || [];
68
+ if (containerPort) {
69
+ res[`${containerPort}/tcp`] = {};
70
+ }
71
+ return res;
72
+ }, {}),
73
+ HostConfig: {
74
+ NetworkMode: networkMode,
75
+ ExtraHosts: extraHosts,
76
+ Ulimits: ulimits ? Object.keys(ulimits).reduce((res, name) => {
77
+ return [...res, {
78
+ Name: name,
79
+ Hard: ulimits[name].hard,
80
+ Soft: ulimits[name].soft
81
+ }];
82
+ }, []) : [],
83
+ ...(restart ? {
84
+ RestartPolicy: {
85
+ Name: restart
86
+ }
87
+ } : {}),
88
+ Binds: volumes,
89
+ PortBindings: ports.reduce((res, value) => {
90
+ const [, hostPort, containerPort] = /(\d+):(\d+)/.exec(value) || [];
91
+ if (hostPort && containerPort) {
92
+ res[`${containerPort}/tcp`] = [{
93
+ HostPort: hostPort
94
+ }];
95
+ }
96
+ return res;
97
+ }, {})
98
+ },
99
+ NetworkingConfig: {
100
+ EndpointsConfig: networkMode === "host" ? {} : {
101
+ workspace: {
102
+ Links: links
103
+ }
104
+ }
105
+ }
106
+ });
107
+ }
108
+ async getContainer(name) {
109
+ const containers = await this.docker.listContainers({
110
+ all: true,
111
+ filters: {
112
+ name: [name]
113
+ }
114
+ });
115
+ const container = containers.find(container => {
116
+ return container.Names.indexOf("/" + name) >= 0;
117
+ });
118
+ if (container) {
119
+ return this.docker.getContainer(container.Id);
120
+ }
121
+ return null;
122
+ }
123
+ async removeContainer(name) {
124
+ const container = await this.getContainer(name);
125
+ if (!container) {
126
+ return;
127
+ }
128
+ const {
129
+ State: {
130
+ Status
131
+ }
132
+ } = await container.inspect();
133
+ if (Status === "running" || Status === "restarting") {
134
+ try {
135
+ await container.stop();
136
+ } catch (err) {
137
+ _core.Logger.error("DockerService.removeContainer", err.message);
138
+ }
139
+ }
140
+ try {
141
+ await container.remove();
142
+ } catch (err) {
143
+ _core.Logger.error("DockerService.removeContainer: ", err.message);
144
+ }
145
+ }
146
+ async buildImage(params) {
147
+ const {
148
+ tag,
149
+ labels = {},
150
+ buildArgs = {},
151
+ context,
152
+ src
153
+ } = params;
154
+ const files = await _makes.FS.readdirFiles(context, {
155
+ recursive: true
156
+ });
157
+ const stream = await this.docker.buildImage({
158
+ context,
159
+ src: files
160
+ }, {
161
+ t: tag,
162
+ labels,
163
+ buildargs: Object.keys(buildArgs).reduce((res, key) => {
164
+ res[key] = typeof buildArgs[key] !== "string" ? buildArgs[key].toString() : buildArgs[key];
165
+ return res;
166
+ }, {}),
167
+ dockerfile: src
168
+ });
169
+ await (0, _utils.followProgress)(stream);
170
+ }
171
+ async imageExists(tag) {
172
+ const image = this.docker.getImage(tag);
173
+ try {
174
+ await image.inspect();
175
+ return true;
176
+ } catch (ignore) {
177
+ return false;
178
+ }
179
+ }
180
+ async imageRm(tag) {
181
+ const image = await this.docker.getImage(tag);
182
+ if (!image) {
183
+ return;
184
+ }
185
+ await image.remove();
186
+ }
187
+ async pullImage(tag) {
188
+ const exists = await this.imageExists(tag);
189
+ if (exists) {
190
+ return;
191
+ }
192
+ const stream = await this.docker.pull(tag);
193
+ await (0, _utils.followProgress)(stream);
194
+ }
195
+ async attachStream(stream) {
196
+ process.stdin.resume();
197
+ process.stdin.setEncoding("utf8");
198
+ process.stdin.pipe(stream);
199
+ if (process.stdin.isTTY) {
200
+ process.stdin.setRawMode(true);
201
+ }
202
+ stream.setEncoding("utf8");
203
+ stream.pipe(process.stdout);
204
+ const end = () => {
205
+ process.stdin.pause();
206
+ process.stdin.unpipe(stream);
207
+ if (process.stdin.isTTY) {
208
+ process.stdin.setRawMode(false);
209
+ }
210
+ stream.unpipe(process.stdout);
211
+ };
212
+ await new Promise((resolve, reject) => {
213
+ stream.on("end", end);
214
+ stream.on("error", end);
215
+ stream.on("end", resolve);
216
+ stream.on("error", reject);
217
+ });
218
+ }
219
+ }
220
+ exports.DockerService = DockerService;
@@ -0,0 +1,11 @@
1
+ import { DI, AppConfigService } from "@wocker/core";
2
+ declare class LogService {
3
+ protected appConfigService: AppConfigService;
4
+ constructor(di: DI);
5
+ log(...data: any[]): void;
6
+ info(...data: any[]): void;
7
+ warning(...data: any[]): void;
8
+ error(...data: any[]): void;
9
+ protected _log(type: string, ...data: any[]): void;
10
+ }
11
+ export { LogService };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LogService = void 0;
7
+ var _core = require("@wocker/core");
8
+ var _format = _interopRequireDefault(require("date-fns/format"));
9
+ var _makes = require("../makes");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ class LogService {
12
+ constructor(di) {
13
+ this.appConfigService = di.resolveService(_core.AppConfigService);
14
+ }
15
+ log(...data) {
16
+ this._log("log", ...data);
17
+ }
18
+ info(...data) {
19
+ this._log("info", ...data);
20
+ }
21
+ warning(...data) {
22
+ this._log("warning", ...data);
23
+ }
24
+ error(...data) {
25
+ this._log("error", ...data);
26
+ }
27
+ _log(type, ...data) {
28
+ const time = (0, _format.default)(new Date(), "yyyy-MM-dd hh:mm:ss");
29
+ const logPath = this.appConfigService.dataPath("ws.log");
30
+ const logData = data.map(item => {
31
+ return typeof item !== "string" ? JSON.stringify(item) : item;
32
+ }).join(" ");
33
+ if (!_makes.FS.existsSync(logPath)) {
34
+ _makes.FS.writeFileSync(logPath, "");
35
+ }
36
+ _makes.FS.appendFileSync(logPath, `[${time}] ${type}: ${logData}\n`);
37
+ }
38
+ }
39
+ exports.LogService = LogService;
@@ -0,0 +1,10 @@
1
+ import { DI, Cli, Controller } from "@wocker/core";
2
+ declare class PluginService {
3
+ protected di: DI;
4
+ protected cli: Cli;
5
+ constructor(di: DI);
6
+ use(Constructor: {
7
+ new (...params: any[]): Controller;
8
+ }): void;
9
+ }
10
+ export { PluginService };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PluginService = void 0;
7
+ var _core = require("@wocker/core");
8
+ class PluginService {
9
+ constructor(di) {
10
+ this.di = di;
11
+ this.cli = di.resolveService(_core.Cli);
12
+ }
13
+ use(Constructor) {
14
+ const controller = new Constructor(this.di);
15
+ controller.install(this.cli);
16
+ }
17
+ }
18
+ exports.PluginService = PluginService;
@@ -0,0 +1,9 @@
1
+ import { DI, PresetService as CorePresetService, PresetServiceSearchOptions as SearchOptions, Preset, EnvConfig } from "@wocker/core";
2
+ declare class PresetService extends CorePresetService {
3
+ constructor(di: DI);
4
+ getImageName(preset: Preset, buildArgs?: EnvConfig): string;
5
+ save(preset: Preset): Promise<void>;
6
+ get(name: string): Promise<Preset>;
7
+ search(options?: SearchOptions): Promise<Preset[]>;
8
+ }
9
+ export { PresetService };
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PresetService = void 0;
7
+ var _core = require("@wocker/core");
8
+ var _md = _interopRequireDefault(require("md5"));
9
+ var _makes = require("../makes");
10
+ var _env = require("../env");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ class PresetService extends _core.PresetService {
13
+ constructor(di) {
14
+ super();
15
+ }
16
+ getImageName(preset, buildArgs = {}) {
17
+ const rawValues = [];
18
+ const hashValues = [];
19
+ Object.keys(preset.buildArgsOptions || {}).forEach(key => {
20
+ const hash = (preset.buildArgsOptions[key] || {}).hash || true;
21
+ const value = buildArgs[key];
22
+ if (hash) {
23
+ hashValues.push(value);
24
+ } else {
25
+ rawValues.push(value);
26
+ }
27
+ });
28
+ const version = [...rawValues, (0, _md.default)(hashValues.join(",")).substr(0, 6)].filter(value => {
29
+ return !!value;
30
+ }).join("-");
31
+ return `ws-preset-${preset.name}:${version}`;
32
+ }
33
+ async save(preset) {
34
+ //
35
+ }
36
+ async get(name) {
37
+ const config = await _makes.FS.readJSON(_env.PRESETS_DIR, name, "config.json");
38
+ return new _core.Preset({
39
+ name,
40
+ ...config
41
+ });
42
+ }
43
+ async search(options = {}) {
44
+ const {
45
+ name
46
+ } = options;
47
+ const presets = [];
48
+ const dirs = await _makes.FS.readdir(_env.PRESETS_DIR);
49
+ for (const dir of dirs) {
50
+ if (name && name !== dir) {
51
+ continue;
52
+ }
53
+ const config = await _makes.FS.readJSON(_env.PRESETS_DIR, dir, "config.json");
54
+ const preset = new _core.Preset({
55
+ name: dir,
56
+ ...config
57
+ });
58
+ presets.push(preset);
59
+ }
60
+ return presets;
61
+ }
62
+ }
63
+ exports.PresetService = PresetService;
@@ -1,13 +1,14 @@
1
- import { Project } from "src/models";
2
- import { AppConfigService } from "./AppConfigService";
3
- import { AppEventsService } from "./AppEventsService";
4
- declare class ProjectService {
5
- protected appConfigService: AppConfigService;
6
- protected appEventsService: AppEventsService;
7
- constructor(appConfigService: AppConfigService, appEventsService: AppEventsService);
1
+ import { DI, AppConfigService as CoreAppConfigService, AppEventsService as CoreAppEventsService, DockerService, ProjectService as CoreProjectService, ProjectServiceSearchParams as SearchParams, Project } from "@wocker/core";
2
+ declare class ProjectService extends CoreProjectService {
3
+ protected appConfigService: CoreAppConfigService;
4
+ protected appEventsService: CoreAppEventsService;
5
+ protected dockerService: DockerService;
6
+ constructor(di: DI);
8
7
  cdProject(name: string): Promise<void>;
9
8
  get(): Promise<Project>;
10
9
  start(): Promise<void>;
11
10
  stop(): Promise<void>;
11
+ save(project: Project): Promise<void>;
12
+ search(params?: Partial<SearchParams>): Promise<Project[]>;
12
13
  }
13
14
  export { ProjectService };
@@ -4,18 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ProjectService = void 0;
7
+ var _core = require("@wocker/core");
7
8
  var Path = _interopRequireWildcard(require("path"));
8
9
  var _makes = require("../makes");
9
- var _models = require("../models");
10
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
- class ProjectService {
13
- constructor(appConfigService, appEventsService) {
14
- this.appConfigService = appConfigService;
15
- this.appEventsService = appEventsService;
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ class ProjectService extends _core.ProjectService {
13
+ constructor(di) {
14
+ super();
15
+ this.appConfigService = di.resolveService(_core.AppConfigService);
16
+ this.appEventsService = di.resolveService(_core.AppEventsService);
17
+ this.dockerService = di.resolveService(_core.DockerService);
16
18
  }
17
19
  async cdProject(name) {
18
- const project = await _models.Project.searchOne({
20
+ const project = await _core.Project.searchOne({
19
21
  name
20
22
  });
21
23
  if (!project) {
@@ -24,8 +26,8 @@ class ProjectService {
24
26
  this.appConfigService.setPWD(project.path);
25
27
  }
26
28
  async get() {
27
- const project = await _models.Project.searchOne({
28
- src: this.appConfigService.getPWD()
29
+ const project = await _core.Project.searchOne({
30
+ path: this.appConfigService.getPWD()
29
31
  });
30
32
  if (!project) {
31
33
  throw new Error("Project not found");
@@ -49,7 +51,7 @@ class ProjectService {
49
51
  }
50
52
  await this.appEventsService.emit("project:beforeStart", project);
51
53
  const containerName = `${project.name}.workspace`;
52
- let container = await _makes.Docker.getContainer(containerName);
54
+ let container = await this.dockerService.getContainer(containerName);
53
55
  if (!container) {
54
56
  container = await _makes.Docker.createContainer({
55
57
  name: containerName,
@@ -62,7 +64,8 @@ class ProjectService {
62
64
  const regVolume = /^([^:]+):([^:]+)(?::([^:]+))?$/;
63
65
  const [, source, destination, options] = regVolume.exec(volume);
64
66
  return `${Path.join(this.appConfigService.getPWD(), source)}:${destination}` + (options ? `:${options}` : "");
65
- })
67
+ }),
68
+ ports: project.ports || []
66
69
  });
67
70
  } else {
68
71
  process.stdout.write("Container already exists\n");
@@ -87,5 +90,54 @@ class ProjectService {
87
90
  await _makes.Docker.removeContainer(`${project.name}.workspace`);
88
91
  }
89
92
  }
93
+ async save(project) {
94
+ if (!project.name) {
95
+ throw new Error("Project should has a name");
96
+ }
97
+ if (!project.path) {
98
+ throw new Error("Project should has a path");
99
+ }
100
+ if (!project.id) {
101
+ project.id = project.name;
102
+ }
103
+ const projectDirPath = this.appConfigService.dataPath("projects", project.id);
104
+ const configPath = this.appConfigService.dataPath("projects", project.id, "config.json");
105
+ if (!_makes.FS.existsSync(projectDirPath)) {
106
+ await _makes.FS.mkdir(projectDirPath, {
107
+ recursive: true
108
+ });
109
+ }
110
+ await this.appConfigService.setProjectConfig(project.id, project.path);
111
+ await _makes.FS.writeJSON(configPath, project);
112
+ }
113
+ async search(params = {}) {
114
+ const {
115
+ id,
116
+ name,
117
+ path
118
+ } = params;
119
+ const {
120
+ projects: configs
121
+ } = await this.appConfigService.getAppConfig();
122
+ const projects = [];
123
+ for (const config of configs) {
124
+ if (id && config.id !== id) {
125
+ continue;
126
+ }
127
+ if (path && config.src !== path) {
128
+ continue;
129
+ }
130
+ const projectData = await _makes.FS.readJSON(this.appConfigService.dataPath("projects", config.id, "config.json"));
131
+ if (name && projectData.name !== name) {
132
+ continue;
133
+ }
134
+ const project = _core.Project.fromObject({
135
+ id: config.id,
136
+ ...projectData
137
+ });
138
+ projects.push(project);
139
+ }
140
+ return projects;
141
+ }
90
142
  }
91
143
  exports.ProjectService = ProjectService;
@@ -1,3 +1,7 @@
1
1
  export * from "./AppConfigService";
2
2
  export * from "./AppEventsService";
3
+ export * from "./DockerService";
4
+ export * from "./LogService";
5
+ export * from "./PluginService";
6
+ export * from "./PresetService";
3
7
  export * from "./ProjectService";
@@ -25,6 +25,50 @@ Object.keys(_AppEventsService).forEach(function (key) {
25
25
  }
26
26
  });
27
27
  });
28
+ var _DockerService = require("./DockerService");
29
+ Object.keys(_DockerService).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _DockerService[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _DockerService[key];
36
+ }
37
+ });
38
+ });
39
+ var _LogService = require("./LogService");
40
+ Object.keys(_LogService).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _LogService[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _LogService[key];
47
+ }
48
+ });
49
+ });
50
+ var _PluginService = require("./PluginService");
51
+ Object.keys(_PluginService).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _PluginService[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _PluginService[key];
58
+ }
59
+ });
60
+ });
61
+ var _PresetService = require("./PresetService");
62
+ Object.keys(_PresetService).forEach(function (key) {
63
+ if (key === "default" || key === "__esModule") return;
64
+ if (key in exports && exports[key] === _PresetService[key]) return;
65
+ Object.defineProperty(exports, key, {
66
+ enumerable: true,
67
+ get: function () {
68
+ return _PresetService[key];
69
+ }
70
+ });
71
+ });
28
72
  var _ProjectService = require("./ProjectService");
29
73
  Object.keys(_ProjectService).forEach(function (key) {
30
74
  if (key === "default" || key === "__esModule") return;
@@ -8,8 +8,6 @@ const demuxOutput = buffer => {
8
8
  let nextDataLength = null,
9
9
  output = Buffer.from([]);
10
10
  while (buffer.length > 0) {
11
- // Logger.info(buffer.length, buffer.toString("utf8"));
12
-
13
11
  const header = bufferSlice(8);
14
12
  nextDataLength = header.readUInt32BE(4);
15
13
  const content = bufferSlice(nextDataLength);
@@ -1,2 +1,2 @@
1
- declare const exec: (command: any) => Promise<unknown>;
1
+ declare const exec: (command: string) => Promise<unknown>;
2
2
  export { exec };
package/lib/utils/exec.js CHANGED
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.exec = void 0;
7
+ var _core = require("@wocker/core");
7
8
  var _child_process = require("child_process");
8
9
  var _chalk = _interopRequireDefault(require("chalk"));
9
- var _Logger = require("../makes/Logger");
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  const exec = async command => {
12
- _Logger.Logger.info(` > ${command.trim().replace(/\s+/g, " ")}`);
12
+ _core.Logger.info(` > ${command.trim().replace(/\s+/g, " ")}`);
13
13
  return new Promise((resolve, reject) => {
14
14
  const worker = (0, _child_process.exec)(command, {
15
15
  maxBuffer: Infinity
@@ -29,15 +29,14 @@ const exec = async command => {
29
29
  }
30
30
  if (worker.stderr) {
31
31
  worker.stderr.on("data", data => {
32
- // process.stdout.write(chalk.red(data));
33
32
  process.stderr.write(data);
34
33
  });
35
34
  }
36
35
  worker.on("close", code => {
37
- _Logger.Logger.info("close", _chalk.default.red(code));
36
+ _core.Logger.info("close", _chalk.default.red(code));
38
37
  });
39
38
  worker.on("exit", code => {
40
- _Logger.Logger.info("exit", _chalk.default.red(code));
39
+ _core.Logger.info("exit", _chalk.default.red(code));
41
40
  });
42
41
  });
43
42
  };
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.fetch = void 0;
7
7
  var https = _interopRequireWildcard(require("https"));
8
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
8
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
9
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
10
10
  const fetch = async (url, options) => {
11
11
  const {
12
12
  method = "GET"
@@ -33,5 +33,4 @@ const fetch = async (url, options) => {
33
33
  req.end();
34
34
  });
35
35
  };
36
- exports.fetch = fetch;
37
- class Response {}
36
+ exports.fetch = fetch;