@wocker/mongodb-plugin 1.0.0-beta.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.git:Zone.Identifier +0 -0
- package/.gitignore:Zone.Identifier +0 -0
- package/.npmignore:Zone.Identifier +0 -0
- package/LICENSE +21 -0
- package/LICENSE:Zone.Identifier +0 -0
- package/README.md +33 -0
- package/README.md:Zone.Identifier +0 -0
- package/lib/controllers/MongodbController.d.ts +11 -0
- package/lib/controllers/MongodbController.d.ts:Zone.Identifier +0 -0
- package/lib/controllers/MongodbController.js +114 -0
- package/lib/controllers/MongodbController.js:Zone.Identifier +0 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts:Zone.Identifier +0 -0
- package/lib/index.js +38 -0
- package/lib/index.js:Zone.Identifier +0 -0
- package/lib/makes/Config.d.ts +15 -0
- package/lib/makes/Config.d.ts:Zone.Identifier +0 -0
- package/lib/makes/Config.js +43 -0
- package/lib/makes/Config.js:Zone.Identifier +0 -0
- package/lib/makes/Database.d.ts +17 -0
- package/lib/makes/Database.d.ts:Zone.Identifier +0 -0
- package/lib/makes/Database.js +24 -0
- package/lib/makes/Database.js:Zone.Identifier +0 -0
- package/lib/services/MongodbService.d.ts +18 -0
- package/lib/services/MongodbService.d.ts:Zone.Identifier +0 -0
- package/lib/services/MongodbService.js +261 -0
- package/lib/services/MongodbService.js:Zone.Identifier +0 -0
- package/package.json +37 -0
- package/package.json:Zone.Identifier +0 -0
- package/tsconfig.json:Zone.Identifier +0 -0
File without changes
|
File without changes
|
File without changes
|
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2024 Kris Papercut
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
File without changes
|
package/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# @wocker/mongodb-plugin
|
2
|
+
|
3
|
+
###### Docker workspace for web projects
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
**Note:** It is recommended to install Wocker globally to ensure accessibility from any directory in your terminal.
|
8
|
+
|
9
|
+
```shell
|
10
|
+
npm i -g @wocker/ws
|
11
|
+
```
|
12
|
+
|
13
|
+
```shell
|
14
|
+
ws plugin:add mongodb
|
15
|
+
```
|
16
|
+
|
17
|
+
|
18
|
+
### Completion
|
19
|
+
|
20
|
+
Wocker comes with shell completion support to enhance your development workflow. To enable shell completion, run the following command:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
source <(ws completion script)
|
24
|
+
```
|
25
|
+
|
26
|
+
This will enable tab completion for `ws` commands, providing a more convenient and efficient way to interact with the tool.
|
27
|
+
|
28
|
+
|
29
|
+
## Documentation
|
30
|
+
|
31
|
+
Wocker is a powerful tool for managing your web project's Docker workspace. It provides a convenient and efficient way to set up and manage your Docker containers.
|
32
|
+
|
33
|
+
For more information and detailed usage, please refer to the [documentation](https://kearisp.github.io/wocker).
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { MongodbService } from "../services/MongodbService";
|
2
|
+
export declare class MongodbController {
|
3
|
+
protected readonly mongodbService: MongodbService;
|
4
|
+
constructor(mongodbService: MongodbService);
|
5
|
+
create(name?: string): Promise<void>;
|
6
|
+
destroy(name: string, yes?: boolean, force?: boolean): Promise<void>;
|
7
|
+
start(name?: string, restart?: boolean): Promise<void>;
|
8
|
+
stop(name?: string): Promise<void>;
|
9
|
+
list(): Promise<string>;
|
10
|
+
getNames(): Promise<string[]>;
|
11
|
+
}
|
File without changes
|
@@ -0,0 +1,114 @@
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
13
|
+
};
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
21
|
+
});
|
22
|
+
};
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
24
|
+
exports.MongodbController = void 0;
|
25
|
+
const core_1 = require("@wocker/core");
|
26
|
+
const MongodbService_1 = require("../services/MongodbService");
|
27
|
+
let MongodbController = class MongodbController {
|
28
|
+
constructor(mongodbService) {
|
29
|
+
this.mongodbService = mongodbService;
|
30
|
+
}
|
31
|
+
create(name) {
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
33
|
+
yield this.mongodbService.create(name);
|
34
|
+
});
|
35
|
+
}
|
36
|
+
destroy(name, yes, force) {
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
38
|
+
yield this.mongodbService.stop(name);
|
39
|
+
yield this.mongodbService.destroy(name, yes, force);
|
40
|
+
yield this.mongodbService.admin();
|
41
|
+
});
|
42
|
+
}
|
43
|
+
start(name, restart) {
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
45
|
+
yield this.mongodbService.start(name, restart);
|
46
|
+
yield this.mongodbService.admin();
|
47
|
+
});
|
48
|
+
}
|
49
|
+
stop(name) {
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
51
|
+
yield this.mongodbService.stop(name);
|
52
|
+
yield this.mongodbService.admin();
|
53
|
+
});
|
54
|
+
}
|
55
|
+
list() {
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
57
|
+
return this.mongodbService.list();
|
58
|
+
});
|
59
|
+
}
|
60
|
+
getNames() {
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
62
|
+
return [];
|
63
|
+
});
|
64
|
+
}
|
65
|
+
};
|
66
|
+
exports.MongodbController = MongodbController;
|
67
|
+
__decorate([
|
68
|
+
(0, core_1.Command)("mongodb:create [name]"),
|
69
|
+
__param(0, (0, core_1.Param)("name")),
|
70
|
+
__metadata("design:type", Function),
|
71
|
+
__metadata("design:paramtypes", [String]),
|
72
|
+
__metadata("design:returntype", Promise)
|
73
|
+
], MongodbController.prototype, "create", null);
|
74
|
+
__decorate([
|
75
|
+
(0, core_1.Command)("mongodb:destroy <name>"),
|
76
|
+
__param(0, (0, core_1.Param)("name")),
|
77
|
+
__param(1, (0, core_1.Option)("yes", { alias: "y" })),
|
78
|
+
__param(2, (0, core_1.Option)("force", { alias: "f" })),
|
79
|
+
__metadata("design:type", Function),
|
80
|
+
__metadata("design:paramtypes", [String, Boolean, Boolean]),
|
81
|
+
__metadata("design:returntype", Promise)
|
82
|
+
], MongodbController.prototype, "destroy", null);
|
83
|
+
__decorate([
|
84
|
+
(0, core_1.Command)("mongodb:start [name]"),
|
85
|
+
__param(0, (0, core_1.Param)("name")),
|
86
|
+
__param(1, (0, core_1.Option)("restart", { alias: "r" })),
|
87
|
+
__metadata("design:type", Function),
|
88
|
+
__metadata("design:paramtypes", [String, Boolean]),
|
89
|
+
__metadata("design:returntype", Promise)
|
90
|
+
], MongodbController.prototype, "start", null);
|
91
|
+
__decorate([
|
92
|
+
(0, core_1.Command)("mongodb:stop [name]"),
|
93
|
+
__param(0, (0, core_1.Param)("name")),
|
94
|
+
__metadata("design:type", Function),
|
95
|
+
__metadata("design:paramtypes", [String]),
|
96
|
+
__metadata("design:returntype", Promise)
|
97
|
+
], MongodbController.prototype, "stop", null);
|
98
|
+
__decorate([
|
99
|
+
(0, core_1.Command)("mongodb:ls"),
|
100
|
+
__metadata("design:type", Function),
|
101
|
+
__metadata("design:paramtypes", []),
|
102
|
+
__metadata("design:returntype", Promise)
|
103
|
+
], MongodbController.prototype, "list", null);
|
104
|
+
__decorate([
|
105
|
+
(0, core_1.Completion)("name", "mongodb:start [name]"),
|
106
|
+
(0, core_1.Completion)("name", "mongodb:stop [name]"),
|
107
|
+
__metadata("design:type", Function),
|
108
|
+
__metadata("design:paramtypes", []),
|
109
|
+
__metadata("design:returntype", Promise)
|
110
|
+
], MongodbController.prototype, "getNames", null);
|
111
|
+
exports.MongodbController = MongodbController = __decorate([
|
112
|
+
(0, core_1.Controller)(),
|
113
|
+
__metadata("design:paramtypes", [MongodbService_1.MongodbService])
|
114
|
+
], MongodbController);
|
File without changes
|
package/lib/index.d.ts
ADDED
File without changes
|
package/lib/index.js
ADDED
@@ -0,0 +1,38 @@
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
15
|
+
});
|
16
|
+
};
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
18
|
+
const core_1 = require("@wocker/core");
|
19
|
+
const MongodbController_1 = require("./controllers/MongodbController");
|
20
|
+
const MongodbService_1 = require("./services/MongodbService");
|
21
|
+
let MongodbPlugin = class MongodbPlugin {
|
22
|
+
load() {
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
24
|
+
console.log(">_<");
|
25
|
+
});
|
26
|
+
}
|
27
|
+
};
|
28
|
+
MongodbPlugin = __decorate([
|
29
|
+
(0, core_1.Plugin)({
|
30
|
+
name: "mongodb",
|
31
|
+
controllers: [MongodbController_1.MongodbController],
|
32
|
+
providers: [
|
33
|
+
core_1.PluginConfigService,
|
34
|
+
MongodbService_1.MongodbService
|
35
|
+
]
|
36
|
+
})
|
37
|
+
], MongodbPlugin);
|
38
|
+
exports.default = MongodbPlugin;
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { ConfigCollection } from "@wocker/core";
|
2
|
+
import { Database, DatabaseProps } from "./Database";
|
3
|
+
export type ConfigProps = {
|
4
|
+
default?: string;
|
5
|
+
databases?: DatabaseProps[];
|
6
|
+
};
|
7
|
+
export declare abstract class Config {
|
8
|
+
default?: string;
|
9
|
+
databases: ConfigCollection<Database, DatabaseProps>;
|
10
|
+
constructor(props: ConfigProps);
|
11
|
+
getDatabase(name?: string): Database;
|
12
|
+
removeDatabase(name: string): void;
|
13
|
+
abstract save(): Promise<void>;
|
14
|
+
toJSON(): ConfigProps;
|
15
|
+
}
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.Config = void 0;
|
4
|
+
const core_1 = require("@wocker/core");
|
5
|
+
const Database_1 = require("./Database");
|
6
|
+
class Config {
|
7
|
+
constructor(props) {
|
8
|
+
const { default: defaultDatabase, databases = [] } = props;
|
9
|
+
this.default = defaultDatabase;
|
10
|
+
this.databases = new core_1.ConfigCollection(Database_1.Database, databases);
|
11
|
+
}
|
12
|
+
getDatabase(name) {
|
13
|
+
if (!name) {
|
14
|
+
if (!this.default) {
|
15
|
+
throw new Error("Default database is not defined");
|
16
|
+
}
|
17
|
+
const database = this.databases.getConfig(this.default);
|
18
|
+
if (!database) {
|
19
|
+
throw new Error(`Default database ${this.default} not found`);
|
20
|
+
}
|
21
|
+
return database;
|
22
|
+
}
|
23
|
+
const database = this.databases.getConfig(name);
|
24
|
+
if (!database) {
|
25
|
+
throw new Error(`Database ${name} not found`);
|
26
|
+
}
|
27
|
+
return database;
|
28
|
+
}
|
29
|
+
removeDatabase(name) {
|
30
|
+
const database = this.databases.getConfig(name);
|
31
|
+
if (!database) {
|
32
|
+
throw new Error(`Storage ${name} not found`);
|
33
|
+
}
|
34
|
+
this.databases.removeConfig(name);
|
35
|
+
}
|
36
|
+
toJSON() {
|
37
|
+
return {
|
38
|
+
default: this.default,
|
39
|
+
databases: this.databases.toArray()
|
40
|
+
};
|
41
|
+
}
|
42
|
+
}
|
43
|
+
exports.Config = Config;
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { Config, ConfigProperties } from "@wocker/core";
|
2
|
+
export type DatabaseProps = ConfigProperties & {
|
3
|
+
username: string;
|
4
|
+
password: string;
|
5
|
+
configStorage?: string;
|
6
|
+
storage?: string;
|
7
|
+
};
|
8
|
+
export declare class Database extends Config<DatabaseProps> {
|
9
|
+
username: string;
|
10
|
+
password: string;
|
11
|
+
configStorage: string;
|
12
|
+
storage: string;
|
13
|
+
constructor(props: DatabaseProps);
|
14
|
+
get containerName(): string;
|
15
|
+
get defaultStorage(): string;
|
16
|
+
get defaultConfigStorage(): string;
|
17
|
+
}
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.Database = void 0;
|
4
|
+
const core_1 = require("@wocker/core");
|
5
|
+
class Database extends core_1.Config {
|
6
|
+
constructor(props) {
|
7
|
+
super(props);
|
8
|
+
const { username, password, configStorage, storage } = props;
|
9
|
+
this.username = username;
|
10
|
+
this.password = password;
|
11
|
+
this.configStorage = configStorage || this.defaultConfigStorage;
|
12
|
+
this.storage = storage || this.defaultStorage;
|
13
|
+
}
|
14
|
+
get containerName() {
|
15
|
+
return `mongodb-${this.name}.ws`;
|
16
|
+
}
|
17
|
+
get defaultStorage() {
|
18
|
+
return `wocker-mongodb-${this.name}`;
|
19
|
+
}
|
20
|
+
get defaultConfigStorage() {
|
21
|
+
return `wocker-mongodb-config-${this.name}`;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
exports.Database = Database;
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { AppConfigService, PluginConfigService, DockerService, ProxyService } from "@wocker/core";
|
2
|
+
import { Config } from "../makes/Config";
|
3
|
+
export declare class MongodbService {
|
4
|
+
protected readonly appConfigService: AppConfigService;
|
5
|
+
protected readonly pluginConfigService: PluginConfigService;
|
6
|
+
protected readonly dockerService: DockerService;
|
7
|
+
protected readonly proxyService: ProxyService;
|
8
|
+
adminContainerName: string;
|
9
|
+
constructor(appConfigService: AppConfigService, pluginConfigService: PluginConfigService, dockerService: DockerService, proxyService: ProxyService);
|
10
|
+
protected _config?: Config;
|
11
|
+
get config(): Config;
|
12
|
+
create(name?: string): Promise<void>;
|
13
|
+
destroy(name: string, yes?: boolean, force?: boolean): Promise<void>;
|
14
|
+
start(name?: string, restart?: boolean): Promise<void>;
|
15
|
+
admin(): Promise<void>;
|
16
|
+
stop(name?: string): Promise<void>;
|
17
|
+
list(): Promise<string>;
|
18
|
+
}
|
File without changes
|
@@ -0,0 +1,261 @@
|
|
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
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
18
|
+
});
|
19
|
+
};
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
22
|
+
};
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
24
|
+
exports.MongodbService = void 0;
|
25
|
+
const core_1 = require("@wocker/core");
|
26
|
+
const utils_1 = require("@wocker/utils");
|
27
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
28
|
+
const Config_1 = require("../makes/Config");
|
29
|
+
const Database_1 = require("../makes/Database");
|
30
|
+
let MongodbService = class MongodbService {
|
31
|
+
constructor(appConfigService, pluginConfigService, dockerService, proxyService) {
|
32
|
+
this.appConfigService = appConfigService;
|
33
|
+
this.pluginConfigService = pluginConfigService;
|
34
|
+
this.dockerService = dockerService;
|
35
|
+
this.proxyService = proxyService;
|
36
|
+
this.adminContainerName = "dbadmin-mongodb.workspace";
|
37
|
+
}
|
38
|
+
get config() {
|
39
|
+
if (!this._config) {
|
40
|
+
const data = this.pluginConfigService.fs.exists("config.json")
|
41
|
+
? this.pluginConfigService.fs.readJSON("config.json")
|
42
|
+
: {
|
43
|
+
default: "default",
|
44
|
+
databases: [
|
45
|
+
{
|
46
|
+
name: "default",
|
47
|
+
username: "root",
|
48
|
+
password: "toor",
|
49
|
+
configStorage: "wocker-mongoconfig-default",
|
50
|
+
storage: "wocker-mongodb-default"
|
51
|
+
}
|
52
|
+
]
|
53
|
+
};
|
54
|
+
const fs = this.pluginConfigService.fs;
|
55
|
+
this._config = new class extends Config_1.Config {
|
56
|
+
save() {
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
58
|
+
if (!fs.exists()) {
|
59
|
+
fs.mkdir("", {
|
60
|
+
recursive: true
|
61
|
+
});
|
62
|
+
}
|
63
|
+
yield fs.writeJSON("config.json", this.toJSON());
|
64
|
+
});
|
65
|
+
}
|
66
|
+
}(data);
|
67
|
+
}
|
68
|
+
return this._config;
|
69
|
+
}
|
70
|
+
create(name) {
|
71
|
+
return __awaiter(this, void 0, void 0, function* () {
|
72
|
+
if (name && this.config.databases.getConfig(name)) {
|
73
|
+
throw new Error(`${name}`);
|
74
|
+
}
|
75
|
+
if (!name) {
|
76
|
+
name = (yield (0, utils_1.promptText)({
|
77
|
+
message: "Mongodb name:",
|
78
|
+
type: "string",
|
79
|
+
validate: (name) => {
|
80
|
+
if (!name) {
|
81
|
+
return "Name is required";
|
82
|
+
}
|
83
|
+
if (this.config.databases.getConfig(name)) {
|
84
|
+
return `Database name "${name}" is already taken`;
|
85
|
+
}
|
86
|
+
return true;
|
87
|
+
}
|
88
|
+
}));
|
89
|
+
}
|
90
|
+
let username = "";
|
91
|
+
if (!username) {
|
92
|
+
username = yield (0, utils_1.promptText)({
|
93
|
+
message: "Username:",
|
94
|
+
type: "string"
|
95
|
+
});
|
96
|
+
}
|
97
|
+
let password = "";
|
98
|
+
if (!password) {
|
99
|
+
password = yield (0, utils_1.promptText)({
|
100
|
+
message: "Password:",
|
101
|
+
type: "string"
|
102
|
+
});
|
103
|
+
}
|
104
|
+
const database = new Database_1.Database({
|
105
|
+
name,
|
106
|
+
username,
|
107
|
+
password
|
108
|
+
});
|
109
|
+
this.config.databases.setConfig(database);
|
110
|
+
yield this.config.save();
|
111
|
+
});
|
112
|
+
}
|
113
|
+
destroy(name, yes, force) {
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
115
|
+
if (!this.appConfigService.isVersionGTE || !this.appConfigService.isVersionGTE("1.0.19")) {
|
116
|
+
throw new Error("Please update @wocker/ws");
|
117
|
+
}
|
118
|
+
const database = this.config.getDatabase(name);
|
119
|
+
if (!force && database.name === this.config.default) {
|
120
|
+
throw new Error(`Can't delete default database.`);
|
121
|
+
}
|
122
|
+
if (!yes) {
|
123
|
+
const confirm = yield (0, utils_1.promptConfirm)({
|
124
|
+
message: `Are you sure you want to delete the "${database.name}" database? This action cannot be undone and all data will be lost.`,
|
125
|
+
default: false
|
126
|
+
});
|
127
|
+
if (!confirm) {
|
128
|
+
throw new Error("Aborted");
|
129
|
+
}
|
130
|
+
}
|
131
|
+
if (database.configStorage === database.defaultConfigStorage && (yield this.dockerService.hasVolume(database.configStorage))) {
|
132
|
+
yield this.dockerService.rmVolume(database.configStorage);
|
133
|
+
}
|
134
|
+
if (database.storage === database.defaultStorage && (yield this.dockerService.hasVolume(database.storage))) {
|
135
|
+
yield this.dockerService.rmVolume(database.storage);
|
136
|
+
}
|
137
|
+
this.config.removeDatabase(database.name);
|
138
|
+
yield this.config.save();
|
139
|
+
});
|
140
|
+
}
|
141
|
+
start(name, restart) {
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
143
|
+
if (!this.appConfigService.isVersionGTE || !this.appConfigService.isVersionGTE("1.0.19")) {
|
144
|
+
throw new Error("Please update @wocker/ws");
|
145
|
+
}
|
146
|
+
const database = this.config.getDatabase(name);
|
147
|
+
if (restart) {
|
148
|
+
yield this.dockerService.removeContainer(database.containerName);
|
149
|
+
}
|
150
|
+
let container = yield this.dockerService.getContainer(database.containerName);
|
151
|
+
if (!container) {
|
152
|
+
container = yield this.dockerService.createContainer({
|
153
|
+
name: database.containerName,
|
154
|
+
restart: "always",
|
155
|
+
image: "mongo:latest",
|
156
|
+
env: {
|
157
|
+
MONGO_INITDB_ROOT_USERNAME: database.username,
|
158
|
+
MONGO_INITDB_ROOT_PASSWORD: database.password,
|
159
|
+
MONGO_ROOT_USER: database.username,
|
160
|
+
MONGO_ROOT_PASSWORD: database.password
|
161
|
+
},
|
162
|
+
volumes: [
|
163
|
+
`${database.configStorage}:/data/configdb`,
|
164
|
+
`${database.storage}:/data/db`
|
165
|
+
]
|
166
|
+
});
|
167
|
+
}
|
168
|
+
const { State: { Running } } = yield container.inspect();
|
169
|
+
if (!Running) {
|
170
|
+
console.info(`Starting ${database.name} service...`);
|
171
|
+
yield container.start();
|
172
|
+
}
|
173
|
+
});
|
174
|
+
}
|
175
|
+
admin() {
|
176
|
+
return __awaiter(this, void 0, void 0, function* () {
|
177
|
+
const connections = [];
|
178
|
+
for (const database of this.config.databases.items) {
|
179
|
+
try {
|
180
|
+
const container = yield this.dockerService.getContainer(database.containerName);
|
181
|
+
if (!container) {
|
182
|
+
continue;
|
183
|
+
}
|
184
|
+
const { State: { Running } } = yield container.inspect();
|
185
|
+
if (Running) {
|
186
|
+
connections.push(`mongodb://${database.username}:${database.password}@${database.containerName}:27017`);
|
187
|
+
// Multiple servers are not supported by mongo-express
|
188
|
+
break;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
catch (ignore) { }
|
192
|
+
}
|
193
|
+
yield this.dockerService.removeContainer(this.adminContainerName);
|
194
|
+
if (connections.length === 0) {
|
195
|
+
return;
|
196
|
+
}
|
197
|
+
let container = yield this.dockerService.getContainer(this.adminContainerName);
|
198
|
+
if (!container) {
|
199
|
+
console.info("Mongodb Admin starting...");
|
200
|
+
yield this.dockerService.pullImage("mongo-express:latest");
|
201
|
+
container = yield this.dockerService.createContainer({
|
202
|
+
name: this.adminContainerName,
|
203
|
+
image: "mongo-express:latest",
|
204
|
+
restart: "always",
|
205
|
+
env: {
|
206
|
+
VIRTUAL_HOST: this.adminContainerName,
|
207
|
+
VIRTUAL_PORT: "80",
|
208
|
+
VCAP_APP_HOST: this.adminContainerName,
|
209
|
+
PORT: "80",
|
210
|
+
ME_CONFIG_BASICAUTH: "false",
|
211
|
+
ME_CONFIG_BASICAUTH_USERNAME: "",
|
212
|
+
ME_CONFIG_BASICAUTH_PASSWORD: "",
|
213
|
+
ME_CONFIG_MONGODB_ENABLE_ADMIN: "true",
|
214
|
+
ME_CONFIG_MONGODB_URL: connections.join(",")
|
215
|
+
}
|
216
|
+
});
|
217
|
+
}
|
218
|
+
const { State: { Running } } = yield container.inspect();
|
219
|
+
if (!Running) {
|
220
|
+
yield container.start();
|
221
|
+
yield this.proxyService.start();
|
222
|
+
}
|
223
|
+
});
|
224
|
+
}
|
225
|
+
stop(name) {
|
226
|
+
return __awaiter(this, void 0, void 0, function* () {
|
227
|
+
const database = this.config.getDatabase(name);
|
228
|
+
console.info(`Stopping ${database.name}...`);
|
229
|
+
yield this.dockerService.removeContainer(database.containerName);
|
230
|
+
});
|
231
|
+
}
|
232
|
+
list() {
|
233
|
+
return __awaiter(this, void 0, void 0, function* () {
|
234
|
+
const table = new cli_table3_1.default({
|
235
|
+
head: [
|
236
|
+
"Name",
|
237
|
+
"Username",
|
238
|
+
"Host",
|
239
|
+
"Storages"
|
240
|
+
]
|
241
|
+
});
|
242
|
+
for (const database of this.config.databases.items) {
|
243
|
+
table.push([
|
244
|
+
database.name,
|
245
|
+
database.username,
|
246
|
+
database.containerName,
|
247
|
+
`${database.configStorage}\n${database.storage}`
|
248
|
+
]);
|
249
|
+
}
|
250
|
+
return table.toString();
|
251
|
+
});
|
252
|
+
}
|
253
|
+
};
|
254
|
+
exports.MongodbService = MongodbService;
|
255
|
+
exports.MongodbService = MongodbService = __decorate([
|
256
|
+
(0, core_1.Injectable)(),
|
257
|
+
__metadata("design:paramtypes", [core_1.AppConfigService,
|
258
|
+
core_1.PluginConfigService,
|
259
|
+
core_1.DockerService,
|
260
|
+
core_1.ProxyService])
|
261
|
+
], MongodbService);
|
File without changes
|
package/package.json
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"name": "@wocker/mongodb-plugin",
|
3
|
+
"version": "1.0.0-beta.0",
|
4
|
+
"author": "Kris Papercut <krispcut@gmail.com>",
|
5
|
+
"description": "Mongodb plugin for wocker",
|
6
|
+
"license": "MIT",
|
7
|
+
"main": "lib/index.js",
|
8
|
+
"types": "lib/index.d.ts",
|
9
|
+
"keywords": [
|
10
|
+
"wocker",
|
11
|
+
"plugin",
|
12
|
+
"mongodb"
|
13
|
+
],
|
14
|
+
"homepage": "https://kearisp.github.io/wocker/plugins/mongodb",
|
15
|
+
"repository": {
|
16
|
+
"type": "git",
|
17
|
+
"url": "git+https://github.com/kearisp/wocker-mongodb-plugin.git"
|
18
|
+
},
|
19
|
+
"bugs": {
|
20
|
+
"url": "https://github.com/kearisp/wocker-mongodb-plugin/issues"
|
21
|
+
},
|
22
|
+
"scripts": {
|
23
|
+
"prepare": "npm run build",
|
24
|
+
"watch": "tsc -w",
|
25
|
+
"build": "tsc",
|
26
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
27
|
+
},
|
28
|
+
"dependencies": {
|
29
|
+
"@wocker/core": "^1.0.20",
|
30
|
+
"@wocker/utils": "^1.0.8",
|
31
|
+
"cli-table3": "^0.6.5"
|
32
|
+
},
|
33
|
+
"devDependencies": {
|
34
|
+
"@types/node": ">=20.17.6",
|
35
|
+
"typescript": "^5.6.3"
|
36
|
+
}
|
37
|
+
}
|
File without changes
|
File without changes
|