@git.zone/cli 1.16.8 → 1.17.1

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 (40) hide show
  1. package/dist_ts/00_commitinfo_data.js +2 -2
  2. package/dist_ts/gitzone.cli.js +8 -1
  3. package/dist_ts/mod_format/classes.baseformatter.js +12 -2
  4. package/dist_ts/mod_format/format.gitignore.js +27 -7
  5. package/dist_ts/mod_format/format.packagejson.js +3 -3
  6. package/dist_ts/mod_format/formatters/prettier.formatter.js +61 -37
  7. package/dist_ts/mod_format/index.js +1 -1
  8. package/dist_ts/mod_services/classes.dockercontainer.d.ts +68 -0
  9. package/dist_ts/mod_services/classes.dockercontainer.js +194 -0
  10. package/dist_ts/mod_services/classes.serviceconfiguration.d.ts +69 -0
  11. package/dist_ts/mod_services/classes.serviceconfiguration.js +195 -0
  12. package/dist_ts/mod_services/classes.servicemanager.d.ts +49 -0
  13. package/dist_ts/mod_services/classes.servicemanager.js +363 -0
  14. package/dist_ts/mod_services/helpers.d.ts +24 -0
  15. package/dist_ts/mod_services/helpers.js +108 -0
  16. package/dist_ts/mod_services/index.d.ts +1 -0
  17. package/dist_ts/mod_services/index.js +184 -0
  18. package/dist_ts/mod_services/mod.plugins.d.ts +7 -0
  19. package/dist_ts/mod_services/mod.plugins.js +8 -0
  20. package/dist_ts/plugins.d.ts +6 -1
  21. package/dist_ts/plugins.js +7 -2
  22. package/npmextra.json +1 -1
  23. package/package.json +29 -24
  24. package/readme.hints.md +8 -3
  25. package/readme.md +151 -17
  26. package/readme.plan.md +119 -168
  27. package/ts/00_commitinfo_data.ts +1 -1
  28. package/ts/gitzone.cli.ts +8 -0
  29. package/ts/mod_format/classes.baseformatter.ts +13 -1
  30. package/ts/mod_format/format.gitignore.ts +31 -6
  31. package/ts/mod_format/format.packagejson.ts +2 -2
  32. package/ts/mod_format/formatters/prettier.formatter.ts +76 -43
  33. package/ts/mod_format/index.ts +4 -1
  34. package/ts/mod_services/classes.dockercontainer.ts +227 -0
  35. package/ts/mod_services/classes.serviceconfiguration.ts +246 -0
  36. package/ts/mod_services/classes.servicemanager.ts +423 -0
  37. package/ts/mod_services/helpers.ts +123 -0
  38. package/ts/mod_services/index.ts +219 -0
  39. package/ts/mod_services/mod.plugins.ts +9 -0
  40. package/ts/plugins.ts +10 -0
@@ -0,0 +1,194 @@
1
+ import * as plugins from './mod.plugins.js';
2
+ import * as helpers from './helpers.js';
3
+ import { logger } from '../gitzone.logging.js';
4
+ export class DockerContainer {
5
+ constructor() {
6
+ this.smartshell = new plugins.smartshell.Smartshell({
7
+ executor: 'bash',
8
+ });
9
+ }
10
+ /**
11
+ * Check if Docker is installed and available
12
+ */
13
+ async checkDocker() {
14
+ try {
15
+ const result = await this.smartshell.exec('docker --version');
16
+ return result.exitCode === 0;
17
+ }
18
+ catch (error) {
19
+ return false;
20
+ }
21
+ }
22
+ /**
23
+ * Get container status
24
+ */
25
+ async getStatus(containerName) {
26
+ try {
27
+ // Check if running
28
+ const runningResult = await this.smartshell.exec(`docker ps --format '{{.Names}}' | grep -q "^${containerName}$"`);
29
+ if (runningResult.exitCode === 0) {
30
+ return 'running';
31
+ }
32
+ // Check if exists but stopped
33
+ const existsResult = await this.smartshell.exec(`docker ps -a --format '{{.Names}}' | grep -q "^${containerName}$"`);
34
+ if (existsResult.exitCode === 0) {
35
+ return 'stopped';
36
+ }
37
+ return 'not_exists';
38
+ }
39
+ catch (error) {
40
+ return 'not_exists';
41
+ }
42
+ }
43
+ /**
44
+ * Start a container
45
+ */
46
+ async start(containerName) {
47
+ try {
48
+ const result = await this.smartshell.exec(`docker start ${containerName}`);
49
+ return result.exitCode === 0;
50
+ }
51
+ catch (error) {
52
+ return false;
53
+ }
54
+ }
55
+ /**
56
+ * Stop a container
57
+ */
58
+ async stop(containerName) {
59
+ try {
60
+ const result = await this.smartshell.exec(`docker stop ${containerName}`);
61
+ return result.exitCode === 0;
62
+ }
63
+ catch (error) {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Remove a container
69
+ */
70
+ async remove(containerName, force = false) {
71
+ try {
72
+ const forceFlag = force ? '-f' : '';
73
+ const result = await this.smartshell.exec(`docker rm ${forceFlag} ${containerName}`);
74
+ return result.exitCode === 0;
75
+ }
76
+ catch (error) {
77
+ return false;
78
+ }
79
+ }
80
+ /**
81
+ * Run a new container
82
+ */
83
+ async run(options) {
84
+ let command = 'docker run -d';
85
+ // Add name
86
+ command += ` --name ${options.name}`;
87
+ // Add ports
88
+ if (options.ports) {
89
+ for (const [hostPort, containerPort] of Object.entries(options.ports)) {
90
+ command += ` -p ${hostPort}:${containerPort}`;
91
+ }
92
+ }
93
+ // Add volumes
94
+ if (options.volumes) {
95
+ for (const [hostPath, containerPath] of Object.entries(options.volumes)) {
96
+ command += ` -v "${hostPath}:${containerPath}"`;
97
+ }
98
+ }
99
+ // Add environment variables
100
+ if (options.environment) {
101
+ for (const [key, value] of Object.entries(options.environment)) {
102
+ command += ` -e ${key}="${value}"`;
103
+ }
104
+ }
105
+ // Add restart policy
106
+ if (options.restart) {
107
+ command += ` --restart ${options.restart}`;
108
+ }
109
+ // Add image
110
+ command += ` ${options.image}`;
111
+ // Add command if provided
112
+ if (options.command) {
113
+ command += ` ${options.command}`;
114
+ }
115
+ try {
116
+ const result = await this.smartshell.exec(command);
117
+ return result.exitCode === 0;
118
+ }
119
+ catch (error) {
120
+ logger.log('error', `Failed to run container: ${error.message}`);
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Execute a command in a running container
126
+ */
127
+ async exec(containerName, command) {
128
+ try {
129
+ const result = await this.smartshell.exec(`docker exec ${containerName} ${command}`);
130
+ if (result.exitCode === 0) {
131
+ return result.stdout;
132
+ }
133
+ return '';
134
+ }
135
+ catch (error) {
136
+ return '';
137
+ }
138
+ }
139
+ /**
140
+ * Get container logs
141
+ */
142
+ async logs(containerName, lines) {
143
+ try {
144
+ const tailFlag = lines ? `--tail ${lines}` : '';
145
+ const result = await this.smartshell.exec(`docker logs ${tailFlag} ${containerName}`);
146
+ return result.stdout;
147
+ }
148
+ catch (error) {
149
+ return `Error getting logs: ${error.message}`;
150
+ }
151
+ }
152
+ /**
153
+ * Check if a container exists
154
+ */
155
+ async exists(containerName) {
156
+ const status = await this.getStatus(containerName);
157
+ return status !== 'not_exists';
158
+ }
159
+ /**
160
+ * Check if a container is running
161
+ */
162
+ async isRunning(containerName) {
163
+ const status = await this.getStatus(containerName);
164
+ return status === 'running';
165
+ }
166
+ /**
167
+ * Wait for a container to be ready
168
+ */
169
+ async waitForReady(containerName, maxAttempts = 30) {
170
+ for (let i = 0; i < maxAttempts; i++) {
171
+ if (await this.isRunning(containerName)) {
172
+ return true;
173
+ }
174
+ await plugins.smartdelay.delayFor(1000);
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Get container information
180
+ */
181
+ async inspect(containerName) {
182
+ try {
183
+ const result = await this.smartshell.exec(`docker inspect ${containerName}`);
184
+ if (result.exitCode === 0) {
185
+ return JSON.parse(result.stdout);
186
+ }
187
+ return null;
188
+ }
189
+ catch (error) {
190
+ return null;
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kb2NrZXJjb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2Rfc2VydmljZXMvY2xhc3Nlcy5kb2NrZXJjb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFjL0MsTUFBTSxPQUFPLGVBQWU7SUFHMUI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDbEQsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVc7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQXFCO1FBQzFDLElBQUksQ0FBQztZQUNILG1CQUFtQjtZQUNuQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QywrQ0FBK0MsYUFBYSxJQUFJLENBQ2pFLENBQUM7WUFFRixJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsTUFBTSxZQUFZLEdB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
@@ -0,0 +1,69 @@
1
+ export interface IServiceConfig {
2
+ PROJECT_NAME: string;
3
+ MONGODB_HOST: string;
4
+ MONGODB_NAME: string;
5
+ MONGODB_PORT: string;
6
+ MONGODB_USER: string;
7
+ MONGODB_PASS: string;
8
+ S3_HOST: string;
9
+ S3_PORT: string;
10
+ S3_CONSOLE_PORT: string;
11
+ S3_USER: string;
12
+ S3_PASS: string;
13
+ S3_BUCKET: string;
14
+ }
15
+ export declare class ServiceConfiguration {
16
+ private configPath;
17
+ private config;
18
+ constructor();
19
+ /**
20
+ * Load or create the configuration
21
+ */
22
+ loadOrCreate(): Promise<IServiceConfig>;
23
+ /**
24
+ * Get the current configuration
25
+ */
26
+ getConfig(): IServiceConfig;
27
+ /**
28
+ * Save the configuration to file
29
+ */
30
+ saveConfig(): Promise<void>;
31
+ /**
32
+ * Ensure .nogit directory exists
33
+ */
34
+ private ensureNogitDirectory;
35
+ /**
36
+ * Check if configuration file exists
37
+ */
38
+ private configExists;
39
+ /**
40
+ * Load configuration from file
41
+ */
42
+ private loadConfig;
43
+ /**
44
+ * Create default configuration
45
+ */
46
+ private createDefaultConfig;
47
+ /**
48
+ * Update missing fields in existing configuration
49
+ */
50
+ private updateMissingFields;
51
+ /**
52
+ * Get MongoDB connection string
53
+ */
54
+ getMongoConnectionString(useNetworkIp?: boolean): string;
55
+ /**
56
+ * Get container names
57
+ */
58
+ getContainerNames(): {
59
+ mongo: string;
60
+ minio: string;
61
+ };
62
+ /**
63
+ * Get data directories
64
+ */
65
+ getDataDirectories(): {
66
+ mongo: string;
67
+ minio: string;
68
+ };
69
+ }
@@ -0,0 +1,195 @@
1
+ import * as plugins from './mod.plugins.js';
2
+ import * as helpers from './helpers.js';
3
+ import { logger } from '../gitzone.logging.js';
4
+ export class ServiceConfiguration {
5
+ constructor() {
6
+ this.configPath = plugins.path.join(process.cwd(), '.nogit', 'env.json');
7
+ }
8
+ /**
9
+ * Load or create the configuration
10
+ */
11
+ async loadOrCreate() {
12
+ await this.ensureNogitDirectory();
13
+ if (await this.configExists()) {
14
+ await this.loadConfig();
15
+ await this.updateMissingFields();
16
+ }
17
+ else {
18
+ await this.createDefaultConfig();
19
+ }
20
+ return this.config;
21
+ }
22
+ /**
23
+ * Get the current configuration
24
+ */
25
+ getConfig() {
26
+ return this.config;
27
+ }
28
+ /**
29
+ * Save the configuration to file
30
+ */
31
+ async saveConfig() {
32
+ await plugins.smartfile.memory.toFs(JSON.stringify(this.config, null, 2), this.configPath);
33
+ }
34
+ /**
35
+ * Ensure .nogit directory exists
36
+ */
37
+ async ensureNogitDirectory() {
38
+ const nogitPath = plugins.path.join(process.cwd(), '.nogit');
39
+ await plugins.smartfile.fs.ensureDir(nogitPath);
40
+ }
41
+ /**
42
+ * Check if configuration file exists
43
+ */
44
+ async configExists() {
45
+ return plugins.smartfile.fs.fileExists(this.configPath);
46
+ }
47
+ /**
48
+ * Load configuration from file
49
+ */
50
+ async loadConfig() {
51
+ const configContent = await plugins.smartfile.fs.toStringSync(this.configPath);
52
+ this.config = JSON.parse(configContent);
53
+ }
54
+ /**
55
+ * Create default configuration
56
+ */
57
+ async createDefaultConfig() {
58
+ const projectName = helpers.getProjectName();
59
+ const mongoPort = await helpers.getRandomAvailablePort();
60
+ const s3Port = await helpers.getRandomAvailablePort();
61
+ let s3ConsolePort = s3Port + 1;
62
+ // Ensure console port is also available
63
+ while (!(await helpers.isPortAvailable(s3ConsolePort))) {
64
+ s3ConsolePort++;
65
+ }
66
+ this.config = {
67
+ PROJECT_NAME: projectName,
68
+ MONGODB_HOST: 'localhost',
69
+ MONGODB_NAME: projectName,
70
+ MONGODB_PORT: mongoPort.toString(),
71
+ MONGODB_USER: 'defaultadmin',
72
+ MONGODB_PASS: 'defaultpass',
73
+ S3_HOST: 'localhost',
74
+ S3_PORT: s3Port.toString(),
75
+ S3_CONSOLE_PORT: s3ConsolePort.toString(),
76
+ S3_USER: 'defaultadmin',
77
+ S3_PASS: 'defaultpass',
78
+ S3_BUCKET: `${projectName}-documents`
79
+ };
80
+ await this.saveConfig();
81
+ logger.log('ok', '✅ Created .nogit/env.json with project defaults');
82
+ logger.log('info', `📍 MongoDB port: ${mongoPort}`);
83
+ logger.log('info', `📍 S3 API port: ${s3Port}`);
84
+ logger.log('info', `📍 S3 Console port: ${s3ConsolePort}`);
85
+ }
86
+ /**
87
+ * Update missing fields in existing configuration
88
+ */
89
+ async updateMissingFields() {
90
+ const projectName = helpers.getProjectName();
91
+ let updated = false;
92
+ const fieldsAdded = [];
93
+ // Check and add missing fields
94
+ if (!this.config.PROJECT_NAME) {
95
+ this.config.PROJECT_NAME = projectName;
96
+ fieldsAdded.push('PROJECT_NAME');
97
+ updated = true;
98
+ }
99
+ if (!this.config.MONGODB_HOST) {
100
+ this.config.MONGODB_HOST = 'localhost';
101
+ fieldsAdded.push('MONGODB_HOST');
102
+ updated = true;
103
+ }
104
+ if (!this.config.MONGODB_NAME) {
105
+ this.config.MONGODB_NAME = projectName;
106
+ fieldsAdded.push('MONGODB_NAME');
107
+ updated = true;
108
+ }
109
+ if (!this.config.MONGODB_PORT) {
110
+ const port = await helpers.getRandomAvailablePort();
111
+ this.config.MONGODB_PORT = port.toString();
112
+ fieldsAdded.push(`MONGODB_PORT(${port})`);
113
+ updated = true;
114
+ }
115
+ if (!this.config.MONGODB_USER) {
116
+ this.config.MONGODB_USER = 'defaultadmin';
117
+ fieldsAdded.push('MONGODB_USER');
118
+ updated = true;
119
+ }
120
+ if (!this.config.MONGODB_PASS) {
121
+ this.config.MONGODB_PASS = 'defaultpass';
122
+ fieldsAdded.push('MONGODB_PASS');
123
+ updated = true;
124
+ }
125
+ if (!this.config.S3_HOST) {
126
+ this.config.S3_HOST = 'localhost';
127
+ fieldsAdded.push('S3_HOST');
128
+ updated = true;
129
+ }
130
+ if (!this.config.S3_PORT) {
131
+ const port = await helpers.getRandomAvailablePort();
132
+ this.config.S3_PORT = port.toString();
133
+ fieldsAdded.push(`S3_PORT(${port})`);
134
+ updated = true;
135
+ }
136
+ if (!this.config.S3_CONSOLE_PORT) {
137
+ const s3Port = parseInt(this.config.S3_PORT);
138
+ let consolePort = s3Port + 1;
139
+ while (!(await helpers.isPortAvailable(consolePort))) {
140
+ consolePort++;
141
+ }
142
+ this.config.S3_CONSOLE_PORT = consolePort.toString();
143
+ fieldsAdded.push(`S3_CONSOLE_PORT(${consolePort})`);
144
+ updated = true;
145
+ }
146
+ if (!this.config.S3_USER) {
147
+ this.config.S3_USER = 'defaultadmin';
148
+ fieldsAdded.push('S3_USER');
149
+ updated = true;
150
+ }
151
+ if (!this.config.S3_PASS) {
152
+ this.config.S3_PASS = 'defaultpass';
153
+ fieldsAdded.push('S3_PASS');
154
+ updated = true;
155
+ }
156
+ if (!this.config.S3_BUCKET) {
157
+ this.config.S3_BUCKET = `${projectName}-documents`;
158
+ fieldsAdded.push('S3_BUCKET');
159
+ updated = true;
160
+ }
161
+ if (updated) {
162
+ await this.saveConfig();
163
+ logger.log('ok', `✅ Added missing fields: ${fieldsAdded.join(', ')}`);
164
+ }
165
+ else {
166
+ logger.log('ok', '✅ Configuration complete');
167
+ }
168
+ }
169
+ /**
170
+ * Get MongoDB connection string
171
+ */
172
+ getMongoConnectionString(useNetworkIp = false) {
173
+ const host = useNetworkIp ? '${networkIp}' : this.config.MONGODB_HOST;
174
+ return `mongodb://${this.config.MONGODB_USER}:${this.config.MONGODB_PASS}@${host}:${this.config.MONGODB_PORT}/${this.config.MONGODB_NAME}?authSource=admin`;
175
+ }
176
+ /**
177
+ * Get container names
178
+ */
179
+ getContainerNames() {
180
+ return {
181
+ mongo: `${this.config.PROJECT_NAME}-mongodb`,
182
+ minio: `${this.config.PROJECT_NAME}-minio`
183
+ };
184
+ }
185
+ /**
186
+ * Get data directories
187
+ */
188
+ getDataDirectories() {
189
+ return {
190
+ mongo: plugins.path.join(process.cwd(), '.nogit', 'mongodata'),
191
+ minio: plugins.path.join(process.cwd(), '.nogit', 'miniodata')
192
+ };
193
+ }
194
+ }
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXJ2aWNlY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9zZXJ2aWNlcy9jbGFzc2VzLnNlcnZpY2Vjb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBaUIvQyxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CO1FBQ0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFbEMsSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFB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
@@ -0,0 +1,49 @@
1
+ export declare class ServiceManager {
2
+ private config;
3
+ private docker;
4
+ constructor();
5
+ /**
6
+ * Initialize the service manager
7
+ */
8
+ init(): Promise<void>;
9
+ /**
10
+ * Start MongoDB service
11
+ */
12
+ startMongoDB(): Promise<void>;
13
+ /**
14
+ * Start MinIO service
15
+ */
16
+ startMinIO(): Promise<void>;
17
+ /**
18
+ * Stop MongoDB service
19
+ */
20
+ stopMongoDB(): Promise<void>;
21
+ /**
22
+ * Stop MinIO service
23
+ */
24
+ stopMinIO(): Promise<void>;
25
+ /**
26
+ * Show service status
27
+ */
28
+ showStatus(): Promise<void>;
29
+ /**
30
+ * Show configuration
31
+ */
32
+ showConfig(): Promise<void>;
33
+ /**
34
+ * Show MongoDB Compass connection string
35
+ */
36
+ showCompassConnection(): Promise<void>;
37
+ /**
38
+ * Show logs for a service
39
+ */
40
+ showLogs(service: string, lines?: number): Promise<void>;
41
+ /**
42
+ * Remove containers
43
+ */
44
+ removeContainers(): Promise<void>;
45
+ /**
46
+ * Clean data directories
47
+ */
48
+ cleanData(): Promise<void>;
49
+ }