@forgedevstack/harbor 1.0.0 → 1.5.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.
- package/CHANGELOG.md +82 -101
- package/README.md +210 -794
- package/dist/auth/apiKey.d.ts +6 -0
- package/dist/auth/apiKey.d.ts.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jwt.d.ts +21 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/password.d.ts +6 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/rbac.d.ts +6 -0
- package/dist/auth/rbac.d.ts.map +1 -0
- package/dist/auth/signing.d.ts +5 -0
- package/dist/auth/signing.d.ts.map +1 -0
- package/dist/auth/types/apiKey.types.d.ts +9 -0
- package/dist/auth/types/apiKey.types.d.ts.map +1 -0
- package/dist/auth/types/index.d.ts +5 -0
- package/dist/auth/types/index.d.ts.map +1 -0
- package/dist/auth/types/jwt.types.d.ts +17 -0
- package/dist/auth/types/jwt.types.d.ts.map +1 -0
- package/dist/auth/types/rbac.types.d.ts +8 -0
- package/dist/auth/types/rbac.types.d.ts.map +1 -0
- package/dist/auth/types/signing.types.d.ts +8 -0
- package/dist/auth/types/signing.types.d.ts.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/manager.d.ts +24 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/stores.d.ts +28 -0
- package/dist/cache/stores.d.ts.map +1 -0
- package/dist/cache/types.d.ts +23 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cli/index.js +21 -22
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/router.d.ts +40 -2
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/database/connection.d.ts +1 -2
- package/dist/database/connection.d.ts.map +1 -1
- package/dist/database/index.js +2 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/model.d.ts +1 -4
- package/dist/database/model.d.ts.map +1 -1
- package/dist/docker/index.js +1 -1
- package/dist/http.const-BKHG1Lsj.mjs +62 -0
- package/dist/http.const-BKHG1Lsj.mjs.map +1 -0
- package/dist/http.const-Ckcy7OFp.js +2 -0
- package/dist/http.const-Ckcy7OFp.js.map +1 -0
- package/dist/index-Ca4WpLvw.js +2 -0
- package/dist/index-Ca4WpLvw.js.map +1 -0
- package/dist/index-DIVHd6rO.mjs +1054 -0
- package/dist/index-DIVHd6rO.mjs.map +1 -0
- package/dist/index.cjs.js +16 -16
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +676 -1691
- package/dist/index.es.js.map +1 -1
- package/dist/logger-CZn7QxCl.mjs +102 -0
- package/dist/{logger-D7aJSi62.mjs.map → logger-CZn7QxCl.mjs.map} +1 -1
- package/dist/logger-D-lfaRWQ.js +3 -0
- package/dist/{logger-DEnWXtpk.js.map → logger-D-lfaRWQ.js.map} +1 -1
- package/dist/manager-CjcKb4P9.mjs +149 -0
- package/dist/{manager-B6vqJgEn.mjs.map → manager-CjcKb4P9.mjs.map} +1 -1
- package/dist/manager-DrF1vbJg.js +4 -0
- package/dist/{manager-B1UKMjXW.js.map → manager-DrF1vbJg.js.map} +1 -1
- package/dist/middleware/health.d.ts +65 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +5 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/metrics.d.ts +68 -0
- package/dist/middleware/metrics.d.ts.map +1 -0
- package/dist/middleware/rateLimit.d.ts +52 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/upload.d.ts +59 -0
- package/dist/middleware/upload.d.ts.map +1 -0
- package/dist/password-BXBkKbv3.js +2 -0
- package/dist/password-BXBkKbv3.js.map +1 -0
- package/dist/password-y4m307oa.mjs +223 -0
- package/dist/password-y4m307oa.mjs.map +1 -0
- package/dist/scheduler/index.d.ts +3 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +30 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/types.d.ts +25 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/types/server.types.d.ts +7 -0
- package/dist/types/server.types.d.ts.map +1 -1
- package/dist/upload-9lCNnKK_.js +5 -0
- package/dist/upload-9lCNnKK_.js.map +1 -0
- package/dist/upload-DUjQiuq7.mjs +619 -0
- package/dist/upload-DUjQiuq7.mjs.map +1 -0
- package/dist/validation/index.js +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/websocket/index.d.ts +3 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +2 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/manager.d.ts +30 -0
- package/dist/websocket/manager.d.ts.map +1 -0
- package/dist/websocket/types.d.ts +27 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/package.json +58 -18
- package/templates/default/controllers/user.controller.ts +44 -64
- package/templates/default/package.json +9 -33
- package/templates/default/routes/index.ts +2 -12
- package/templates/default/routes/user.routes.ts +26 -19
- package/templates/default/server.ts +16 -35
- package/dist/logger-D7aJSi62.mjs +0 -102
- package/dist/logger-DEnWXtpk.js +0 -3
- package/dist/manager-B1UKMjXW.js +0 -4
- package/dist/manager-B6vqJgEn.mjs +0 -152
- package/dist/portal.d.ts +0 -13
- package/dist/portal.d.ts.map +0 -1
|
@@ -1,77 +1,57 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { HarborRequest } from '@forgestack/harbor';
|
|
2
|
+
import { User } from '../models';
|
|
2
3
|
import { UserService } from '../services';
|
|
3
|
-
import { CreateUserDto, UpdateUserDto } from '../types';
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const { page = 1, limit = 10 } = req.query;
|
|
11
|
-
|
|
12
|
-
const result = await UserService.findAll({
|
|
13
|
-
page: Number(page),
|
|
14
|
-
limit: Number(limit),
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
return res.json(result);
|
|
18
|
-
}
|
|
5
|
+
export const UserController = {
|
|
6
|
+
async getAll() {
|
|
7
|
+
const users = await User.find();
|
|
8
|
+
return { users };
|
|
9
|
+
},
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
static async getById(req: Request, res: Response) {
|
|
24
|
-
const { id } = req.params;
|
|
25
|
-
|
|
26
|
-
const user = await UserService.findById(id);
|
|
27
|
-
|
|
11
|
+
async getById(req: HarborRequest) {
|
|
12
|
+
const user = await User.findById(req.params.id);
|
|
28
13
|
if (!user) {
|
|
29
|
-
|
|
14
|
+
throw new Error('User not found');
|
|
30
15
|
}
|
|
16
|
+
return { user };
|
|
17
|
+
},
|
|
31
18
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Create new user
|
|
37
|
-
*/
|
|
38
|
-
static async create(req: Request, res: Response) {
|
|
39
|
-
const data: CreateUserDto = req.body;
|
|
19
|
+
async create(req: HarborRequest) {
|
|
20
|
+
const { email, name, password } = req.body;
|
|
40
21
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
22
|
+
// Hash password and create user
|
|
23
|
+
const user = await UserService.createUser({ email, name, password });
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
user: {
|
|
27
|
+
id: user._id,
|
|
28
|
+
email: user.email,
|
|
29
|
+
name: user.name,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
async update(req: HarborRequest) {
|
|
35
|
+
const user = await User.findByIdAndUpdate(
|
|
36
|
+
req.params.id,
|
|
37
|
+
req.body,
|
|
38
|
+
{ new: true }
|
|
39
|
+
);
|
|
52
40
|
|
|
53
|
-
const user = await UserService.update(id, data);
|
|
54
|
-
|
|
55
41
|
if (!user) {
|
|
56
|
-
|
|
42
|
+
throw new Error('User not found');
|
|
57
43
|
}
|
|
58
|
-
|
|
59
|
-
return res.json(user);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Delete user
|
|
64
|
-
*/
|
|
65
|
-
static async delete(req: Request, res: Response) {
|
|
66
|
-
const { id } = req.params;
|
|
67
44
|
|
|
68
|
-
|
|
45
|
+
return { user };
|
|
46
|
+
},
|
|
69
47
|
|
|
70
|
-
|
|
71
|
-
|
|
48
|
+
async delete(req: HarborRequest) {
|
|
49
|
+
const result = await User.findByIdAndDelete(req.params.id);
|
|
50
|
+
|
|
51
|
+
if (!result) {
|
|
52
|
+
throw new Error('User not found');
|
|
72
53
|
}
|
|
73
|
-
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
54
|
+
|
|
55
|
+
return { deleted: true };
|
|
56
|
+
},
|
|
57
|
+
};
|
|
@@ -1,44 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "my-harbor-app",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"
|
|
5
|
-
"main": "dist/server.js",
|
|
4
|
+
"type": "module",
|
|
6
5
|
"scripts": {
|
|
7
6
|
"dev": "tsx watch server.ts",
|
|
8
|
-
"build": "tsc",
|
|
9
7
|
"start": "node dist/server.js",
|
|
10
|
-
"
|
|
11
|
-
"lint
|
|
12
|
-
"test": "vitest",
|
|
13
|
-
"test:coverage": "vitest --coverage"
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"lint": "eslint . --ext .ts"
|
|
14
10
|
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"nodejs",
|
|
17
|
-
"express",
|
|
18
|
-
"mongodb",
|
|
19
|
-
"harbor",
|
|
20
|
-
"api"
|
|
21
|
-
],
|
|
22
|
-
"author": "",
|
|
23
|
-
"license": "MIT",
|
|
24
11
|
"dependencies": {
|
|
25
|
-
"
|
|
26
|
-
"express": "^4.18.2",
|
|
27
|
-
"harbor": "^1.2.0",
|
|
28
|
-
"mongodb": "^6.3.0"
|
|
12
|
+
"@forgestack/harbor": "^1.0.0"
|
|
29
13
|
},
|
|
30
14
|
"devDependencies": {
|
|
31
|
-
"@types/
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"eslint": "^8.55.0",
|
|
36
|
-
"tsx": "^4.6.0",
|
|
37
|
-
"typescript": "^5.3.0",
|
|
38
|
-
"vitest": "^1.0.0"
|
|
39
|
-
},
|
|
40
|
-
"engines": {
|
|
41
|
-
"node": ">=18.0.0"
|
|
15
|
+
"@types/node": "^20.0.0",
|
|
16
|
+
"eslint": "^8.0.0",
|
|
17
|
+
"tsx": "^4.0.0",
|
|
18
|
+
"typescript": "^5.0.0"
|
|
42
19
|
}
|
|
43
20
|
}
|
|
44
|
-
|
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export const routes = Router();
|
|
5
|
-
|
|
6
|
-
// Register all route modules
|
|
7
|
-
routes.use('/users', userRoutes);
|
|
8
|
-
|
|
9
|
-
// Add more routes here:
|
|
10
|
-
// routes.use('/products', productRoutes);
|
|
11
|
-
// routes.use('/orders', orderRoutes);
|
|
12
|
-
|
|
1
|
+
// Export all routes
|
|
2
|
+
export { userRoutes } from './user.routes';
|
|
@@ -1,21 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GET, POST, PUT, DELETE } from 'harbor';
|
|
1
|
+
import { router, GET, POST, PUT, DELETE } from '@forgestack/harbor';
|
|
3
2
|
import { UserController } from '../controllers';
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// GET /api/users -
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// GET /api/users/:id - Get user by ID
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// POST /api/users - Create new user
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
4
|
+
// Create user routes - no express import needed!
|
|
5
|
+
export const userRoutes = router('/api/users', [
|
|
6
|
+
// GET /api/users - List all users
|
|
7
|
+
GET('/', UserController.getAll),
|
|
8
|
+
|
|
9
|
+
// GET /api/users/:id - Get user by ID
|
|
10
|
+
GET('/:id', UserController.getById),
|
|
11
|
+
|
|
12
|
+
// POST /api/users - Create new user
|
|
13
|
+
POST('/', UserController.create, {
|
|
14
|
+
validation: {
|
|
15
|
+
body: {
|
|
16
|
+
email: { type: 'email', required: true },
|
|
17
|
+
name: { type: 'string', required: true, min: 2, max: 100 },
|
|
18
|
+
password: { type: 'string', required: true, min: 8 },
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
|
|
23
|
+
// PUT /api/users/:id - Update user
|
|
24
|
+
PUT('/:id', UserController.update),
|
|
25
|
+
|
|
26
|
+
// DELETE /api/users/:id - Delete user
|
|
27
|
+
DELETE('/:id', UserController.delete),
|
|
28
|
+
]);
|
|
@@ -1,45 +1,26 @@
|
|
|
1
|
-
import { createServer, connect, httpLogger } from 'harbor';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { createServer, connect, httpLogger } from '@forgestack/harbor';
|
|
2
|
+
import { userRoutes } from './routes';
|
|
3
|
+
import { CONFIG } from './constants';
|
|
4
4
|
|
|
5
5
|
async function bootstrap() {
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
// Connect to MongoDB
|
|
7
|
+
await connect(CONFIG.MONGODB_URI);
|
|
8
|
+
console.log('Connected to MongoDB');
|
|
9
|
+
|
|
10
|
+
// Create server with minimal config
|
|
11
|
+
const server = createServer({
|
|
12
|
+
port: CONFIG.PORT,
|
|
9
13
|
cors: true,
|
|
10
|
-
|
|
11
|
-
json: true,
|
|
12
|
-
urlencoded: true,
|
|
14
|
+
bodyParser: true,
|
|
13
15
|
});
|
|
14
16
|
|
|
15
|
-
// HTTP request
|
|
16
|
-
|
|
17
|
-
format: 'dev',
|
|
18
|
-
skip: (req) => req.path === '/health',
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
// Connect to MongoDB (optional)
|
|
22
|
-
if (config.MONGODB_URI) {
|
|
23
|
-
await connect(config.MONGODB_URI, {
|
|
24
|
-
dbName: config.DB_NAME,
|
|
25
|
-
});
|
|
26
|
-
console.log('📦 Connected to MongoDB');
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Register all routes
|
|
30
|
-
app.use('/api', routes);
|
|
17
|
+
// Add HTTP request logger
|
|
18
|
+
server.use(httpLogger());
|
|
31
19
|
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
35
|
-
});
|
|
20
|
+
// Register routes
|
|
21
|
+
server.use(userRoutes);
|
|
36
22
|
|
|
37
|
-
|
|
38
|
-
app.listen(config.PORT, () => {
|
|
39
|
-
console.log(`🚀 Server running on http://localhost:${config.PORT}`);
|
|
40
|
-
console.log(`📚 API Docs: http://localhost:${config.PORT}/api-docs`);
|
|
41
|
-
});
|
|
23
|
+
console.log(`Server running at http://localhost:${CONFIG.PORT}`);
|
|
42
24
|
}
|
|
43
25
|
|
|
44
26
|
bootstrap().catch(console.error);
|
|
45
|
-
|
package/dist/logger-D7aJSi62.mjs
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
const u = {
|
|
2
|
-
debug: 0,
|
|
3
|
-
info: 1,
|
|
4
|
-
warn: 2,
|
|
5
|
-
error: 3,
|
|
6
|
-
silent: 4
|
|
7
|
-
}, L = {
|
|
8
|
-
debug: "\x1B[36m",
|
|
9
|
-
info: "\x1B[32m",
|
|
10
|
-
warn: "\x1B[33m",
|
|
11
|
-
error: "\x1B[31m",
|
|
12
|
-
silent: ""
|
|
13
|
-
}, $ = "\x1B[0m";
|
|
14
|
-
let x = "info";
|
|
15
|
-
function v(s) {
|
|
16
|
-
x = s;
|
|
17
|
-
}
|
|
18
|
-
function n(s, r) {
|
|
19
|
-
const f = s ?? "harbor", t = {
|
|
20
|
-
level: (r == null ? void 0 : r.level) ?? x,
|
|
21
|
-
format: (r == null ? void 0 : r.format) ?? "text",
|
|
22
|
-
output: (r == null ? void 0 : r.output) ?? "console",
|
|
23
|
-
colorize: (r == null ? void 0 : r.colorize) ?? !0,
|
|
24
|
-
prefix: r == null ? void 0 : r.prefix,
|
|
25
|
-
filePath: r == null ? void 0 : r.filePath
|
|
26
|
-
};
|
|
27
|
-
function d(e) {
|
|
28
|
-
return u[e] >= u[t.level];
|
|
29
|
-
}
|
|
30
|
-
function b(e) {
|
|
31
|
-
if (t.format === "json")
|
|
32
|
-
return JSON.stringify({
|
|
33
|
-
timestamp: e.timestamp.toISOString(),
|
|
34
|
-
level: e.level,
|
|
35
|
-
context: e.context,
|
|
36
|
-
message: e.message,
|
|
37
|
-
data: e.data,
|
|
38
|
-
error: e.error ? {
|
|
39
|
-
name: e.error.name,
|
|
40
|
-
message: e.error.message,
|
|
41
|
-
stack: e.error.stack
|
|
42
|
-
} : void 0
|
|
43
|
-
});
|
|
44
|
-
const a = e.timestamp.toISOString(), c = e.level.toUpperCase().padEnd(5), m = e.context ? `[${e.context}]` : "";
|
|
45
|
-
let l = `${a} ${c} ${m} ${e.message}`;
|
|
46
|
-
return e.data && Object.keys(e.data).length > 0 && (l += ` ${JSON.stringify(e.data)}`), e.error && (l += `
|
|
47
|
-
${e.error.stack ?? e.error.message}`), t.colorize && (l = `${L[e.level]}${l}${$}`), l;
|
|
48
|
-
}
|
|
49
|
-
function o(e, a, c, m) {
|
|
50
|
-
if (!d(e)) return;
|
|
51
|
-
const g = b({
|
|
52
|
-
level: e,
|
|
53
|
-
message: a,
|
|
54
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
55
|
-
context: f,
|
|
56
|
-
data: c,
|
|
57
|
-
error: m
|
|
58
|
-
});
|
|
59
|
-
if (t.output === "console" || t.output === "both")
|
|
60
|
-
switch (e) {
|
|
61
|
-
case "debug":
|
|
62
|
-
case "info":
|
|
63
|
-
console.log(g);
|
|
64
|
-
break;
|
|
65
|
-
case "warn":
|
|
66
|
-
console.warn(g);
|
|
67
|
-
break;
|
|
68
|
-
case "error":
|
|
69
|
-
console.error(g);
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
debug(e, a) {
|
|
75
|
-
o("debug", e, a);
|
|
76
|
-
},
|
|
77
|
-
info(e, a) {
|
|
78
|
-
o("info", e, a);
|
|
79
|
-
},
|
|
80
|
-
warn(e, a) {
|
|
81
|
-
o("warn", e, a);
|
|
82
|
-
},
|
|
83
|
-
error(e, a, c) {
|
|
84
|
-
o("error", e, c, a);
|
|
85
|
-
},
|
|
86
|
-
setLevel(e) {
|
|
87
|
-
t.level = e;
|
|
88
|
-
},
|
|
89
|
-
setContext(e) {
|
|
90
|
-
return n(e, t);
|
|
91
|
-
},
|
|
92
|
-
child(e) {
|
|
93
|
-
const a = f ? `${f}:${e}` : e;
|
|
94
|
-
return n(a, t);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
export {
|
|
99
|
-
n as c,
|
|
100
|
-
v as s
|
|
101
|
-
};
|
|
102
|
-
//# sourceMappingURL=logger-D7aJSi62.mjs.map
|
package/dist/logger-DEnWXtpk.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";const n={debug:0,info:1,warn:2,error:3,silent:4},b={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",silent:""},i="\x1B[0m";let x="info";function v(s){x=s}function u(s,r){const f=s??"harbor",a={level:(r==null?void 0:r.level)??x,format:(r==null?void 0:r.format)??"text",output:(r==null?void 0:r.output)??"console",colorize:(r==null?void 0:r.colorize)??!0,prefix:r==null?void 0:r.prefix,filePath:r==null?void 0:r.filePath};function d(e){return n[e]>=n[a.level]}function L(e){if(a.format==="json")return JSON.stringify({timestamp:e.timestamp.toISOString(),level:e.level,context:e.context,message:e.message,data:e.data,error:e.error?{name:e.error.name,message:e.error.message,stack:e.error.stack}:void 0});const t=e.timestamp.toISOString(),c=e.level.toUpperCase().padEnd(5),m=e.context?`[${e.context}]`:"";let l=`${t} ${c} ${m} ${e.message}`;return e.data&&Object.keys(e.data).length>0&&(l+=` ${JSON.stringify(e.data)}`),e.error&&(l+=`
|
|
2
|
-
${e.error.stack??e.error.message}`),a.colorize&&(l=`${b[e.level]}${l}${i}`),l}function o(e,t,c,m){if(!d(e))return;const g=L({level:e,message:t,timestamp:new Date,context:f,data:c,error:m});if(a.output==="console"||a.output==="both")switch(e){case"debug":case"info":console.log(g);break;case"warn":console.warn(g);break;case"error":console.error(g);break}}return{debug(e,t){o("debug",e,t)},info(e,t){o("info",e,t)},warn(e,t){o("warn",e,t)},error(e,t,c){o("error",e,c,t)},setLevel(e){a.level=e},setContext(e){return u(e,a)},child(e){const t=f?`${f}:${e}`:e;return u(t,a)}}}exports.createLogger=u;exports.setGlobalLogLevel=v;
|
|
3
|
-
//# sourceMappingURL=logger-DEnWXtpk.js.map
|
package/dist/manager-B1UKMjXW.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";var $=Object.defineProperty;var h=(s,e,n)=>e in s?$(s,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[e]=n;var c=(s,e,n)=>h(s,typeof e!="symbol"?e+"":e,n);const C=require("child_process"),w=require("util"),k=require("./logger-DEnWXtpk.js"),y=w.promisify(C.exec),i=k.createLogger("docker");function g(s={}){const e=s.composePath??"./docker-compose.yml",n=s.projectName;async function o(r){try{i.debug(`Executing: ${r}`);const{stdout:t,stderr:a}=await y(r);return a&&i.warn(`Command stderr: ${a}`),t.trim()}catch(t){throw i.error(`Command failed: ${r}`,t),t}}function f(r){const t=r.toLowerCase();return t.includes("running")?"running":t.includes("exited")?"exited":t.includes("created")?"created":t.includes("paused")?"paused":t.includes("restarting")?"restarting":t.includes("removing")?"removing":t.includes("dead")?"dead":"exited"}return{async listContainers(){const r=await o('docker ps -a --format "{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.CreatedAt}}"');return r?r.split(`
|
|
2
|
-
`).map(t=>{const[a,u,m,l,d,p]=t.split("|");return{id:a,name:u,image:m,status:f(l),ports:I(d),createdAt:new Date(p)}}):[]},async listImages(){const r=await o('docker images --format "{{.ID}}|{{.Repository}}|{{.Tag}}|{{.Size}}|{{.CreatedAt}}"');return r?r.split(`
|
|
3
|
-
`).map(t=>{const[a,u,m,l,d]=t.split("|");return{id:a,name:u,tag:m,size:D(l),createdAt:new Date(d)}}):[]},async startContainer(r){await o(`docker start ${r}`),i.info(`Container started: ${r}`)},async stopContainer(r){await o(`docker stop ${r}`),i.info(`Container stopped: ${r}`)},async restartContainer(r){await o(`docker restart ${r}`),i.info(`Container restarted: ${r}`)},async removeContainer(r,t=!1){await o(`docker rm ${t?"-f":""} ${r}`),i.info(`Container removed: ${r}`)},async buildImage(r,t="latest",a){let u=`docker build -t ${r}:${t}`;if(a!=null&&a.noCache&&(u+=" --no-cache"),a!=null&&a.pull&&(u+=" --pull"),a!=null&&a.target&&(u+=` --target ${a.target}`),a!=null&&a.platform&&(u+=` --platform ${a.platform}`),a!=null&&a.buildArgs)for(const[m,l]of Object.entries(a.buildArgs))u+=` --build-arg ${m}=${l}`;u+=" .",await o(u),i.info(`Image built: ${r}:${t}`)},async pushImage(r,t="latest"){const a=s.registry?`${s.registry}/${r}:${t}`:`${r}:${t}`;await o(`docker push ${a}`),i.info(`Image pushed: ${a}`)},async pullImage(r,t="latest"){await o(`docker pull ${r}:${t}`),i.info(`Image pulled: ${r}:${t}`)},async composeUp(r=!0){let t=`docker-compose -f ${e}`;n&&(t+=` -p ${n}`),t+=" up",r&&(t+=" -d"),await o(t),i.info("Docker Compose up completed")},async composeDown(r=!1){let t=`docker-compose -f ${e}`;n&&(t+=` -p ${n}`),t+=" down",r&&(t+=" -v"),await o(t),i.info("Docker Compose down completed")},async composeLogs(r,t=!1){let a=`docker-compose -f ${e}`;return n&&(a+=` -p ${n}`),a+=" logs",t&&(a+=" -f"),r&&(a+=` ${r}`),o(a)},async exec(r,t){return o(`docker exec ${r} ${t}`)}}}function I(s){return s?s.split(",").map(e=>{const n=e.match(/(\d+):(\d+)\/(\w+)/);return n?{external:parseInt(n[1],10),internal:parseInt(n[2],10),protocol:n[3]}:{external:0,internal:0,protocol:"tcp"}}).filter(e=>e.internal>0):[]}function D(s){const e=s.match(/([\d.]+)\s*(GB|MB|KB|B)/i);if(!e)return 0;const n=parseFloat(e[1]);switch(e[2].toUpperCase()){case"GB":return n*1024*1024*1024;case"MB":return n*1024*1024;case"KB":return n*1024;default:return n}}class x{constructor(e={}){c(this,"manager");c(this,"listContainers",()=>this.manager.listContainers());c(this,"listImages",()=>this.manager.listImages());c(this,"startContainer",e=>this.manager.startContainer(e));c(this,"stopContainer",e=>this.manager.stopContainer(e));c(this,"restartContainer",e=>this.manager.restartContainer(e));c(this,"removeContainer",(e,n)=>this.manager.removeContainer(e,n));c(this,"buildImage",(e,n)=>this.manager.buildImage(e,n));c(this,"pushImage",(e,n)=>this.manager.pushImage(e,n));c(this,"pullImage",(e,n)=>this.manager.pullImage(e,n));c(this,"composeUp",e=>this.manager.composeUp(e));c(this,"composeDown",e=>this.manager.composeDown(e));c(this,"composeLogs",(e,n)=>this.manager.composeLogs(e,n));c(this,"exec",(e,n)=>this.manager.exec(e,n));this.manager=g(e)}}exports.DockerManager=x;exports.createDockerManager=g;
|
|
4
|
-
//# sourceMappingURL=manager-B1UKMjXW.js.map
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
var p = Object.defineProperty;
|
|
2
|
-
var $ = (s, e, n) => e in s ? p(s, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : s[e] = n;
|
|
3
|
-
var o = (s, e, n) => $(s, typeof e != "symbol" ? e + "" : e, n);
|
|
4
|
-
import { exec as h } from "child_process";
|
|
5
|
-
import { promisify as C } from "util";
|
|
6
|
-
import { c as w } from "./logger-D7aJSi62.mjs";
|
|
7
|
-
const y = C(h), i = w("docker");
|
|
8
|
-
function k(s = {}) {
|
|
9
|
-
const e = s.composePath ?? "./docker-compose.yml", n = s.projectName;
|
|
10
|
-
async function c(t) {
|
|
11
|
-
try {
|
|
12
|
-
i.debug(`Executing: ${t}`);
|
|
13
|
-
const { stdout: r, stderr: a } = await y(t);
|
|
14
|
-
return a && i.warn(`Command stderr: ${a}`), r.trim();
|
|
15
|
-
} catch (r) {
|
|
16
|
-
throw i.error(`Command failed: ${t}`, r), r;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
function f(t) {
|
|
20
|
-
const r = t.toLowerCase();
|
|
21
|
-
return r.includes("running") ? "running" : r.includes("exited") ? "exited" : r.includes("created") ? "created" : r.includes("paused") ? "paused" : r.includes("restarting") ? "restarting" : r.includes("removing") ? "removing" : r.includes("dead") ? "dead" : "exited";
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
async listContainers() {
|
|
25
|
-
const t = await c(
|
|
26
|
-
'docker ps -a --format "{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.CreatedAt}}"'
|
|
27
|
-
);
|
|
28
|
-
return t ? t.split(`
|
|
29
|
-
`).map((r) => {
|
|
30
|
-
const [a, m, u, l, d, g] = r.split("|");
|
|
31
|
-
return {
|
|
32
|
-
id: a,
|
|
33
|
-
name: m,
|
|
34
|
-
image: u,
|
|
35
|
-
status: f(l),
|
|
36
|
-
ports: I(d),
|
|
37
|
-
createdAt: new Date(g)
|
|
38
|
-
};
|
|
39
|
-
}) : [];
|
|
40
|
-
},
|
|
41
|
-
async listImages() {
|
|
42
|
-
const t = await c(
|
|
43
|
-
'docker images --format "{{.ID}}|{{.Repository}}|{{.Tag}}|{{.Size}}|{{.CreatedAt}}"'
|
|
44
|
-
);
|
|
45
|
-
return t ? t.split(`
|
|
46
|
-
`).map((r) => {
|
|
47
|
-
const [a, m, u, l, d] = r.split("|");
|
|
48
|
-
return {
|
|
49
|
-
id: a,
|
|
50
|
-
name: m,
|
|
51
|
-
tag: u,
|
|
52
|
-
size: x(l),
|
|
53
|
-
createdAt: new Date(d)
|
|
54
|
-
};
|
|
55
|
-
}) : [];
|
|
56
|
-
},
|
|
57
|
-
async startContainer(t) {
|
|
58
|
-
await c(`docker start ${t}`), i.info(`Container started: ${t}`);
|
|
59
|
-
},
|
|
60
|
-
async stopContainer(t) {
|
|
61
|
-
await c(`docker stop ${t}`), i.info(`Container stopped: ${t}`);
|
|
62
|
-
},
|
|
63
|
-
async restartContainer(t) {
|
|
64
|
-
await c(`docker restart ${t}`), i.info(`Container restarted: ${t}`);
|
|
65
|
-
},
|
|
66
|
-
async removeContainer(t, r = !1) {
|
|
67
|
-
await c(`docker rm ${r ? "-f" : ""} ${t}`), i.info(`Container removed: ${t}`);
|
|
68
|
-
},
|
|
69
|
-
async buildImage(t, r = "latest", a) {
|
|
70
|
-
let m = `docker build -t ${t}:${r}`;
|
|
71
|
-
if (a != null && a.noCache && (m += " --no-cache"), a != null && a.pull && (m += " --pull"), a != null && a.target && (m += ` --target ${a.target}`), a != null && a.platform && (m += ` --platform ${a.platform}`), a != null && a.buildArgs)
|
|
72
|
-
for (const [u, l] of Object.entries(a.buildArgs))
|
|
73
|
-
m += ` --build-arg ${u}=${l}`;
|
|
74
|
-
m += " .", await c(m), i.info(`Image built: ${t}:${r}`);
|
|
75
|
-
},
|
|
76
|
-
async pushImage(t, r = "latest") {
|
|
77
|
-
const a = s.registry ? `${s.registry}/${t}:${r}` : `${t}:${r}`;
|
|
78
|
-
await c(`docker push ${a}`), i.info(`Image pushed: ${a}`);
|
|
79
|
-
},
|
|
80
|
-
async pullImage(t, r = "latest") {
|
|
81
|
-
await c(`docker pull ${t}:${r}`), i.info(`Image pulled: ${t}:${r}`);
|
|
82
|
-
},
|
|
83
|
-
async composeUp(t = !0) {
|
|
84
|
-
let r = `docker-compose -f ${e}`;
|
|
85
|
-
n && (r += ` -p ${n}`), r += " up", t && (r += " -d"), await c(r), i.info("Docker Compose up completed");
|
|
86
|
-
},
|
|
87
|
-
async composeDown(t = !1) {
|
|
88
|
-
let r = `docker-compose -f ${e}`;
|
|
89
|
-
n && (r += ` -p ${n}`), r += " down", t && (r += " -v"), await c(r), i.info("Docker Compose down completed");
|
|
90
|
-
},
|
|
91
|
-
async composeLogs(t, r = !1) {
|
|
92
|
-
let a = `docker-compose -f ${e}`;
|
|
93
|
-
return n && (a += ` -p ${n}`), a += " logs", r && (a += " -f"), t && (a += ` ${t}`), c(a);
|
|
94
|
-
},
|
|
95
|
-
async exec(t, r) {
|
|
96
|
-
return c(`docker exec ${t} ${r}`);
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
function I(s) {
|
|
101
|
-
return s ? s.split(",").map((e) => {
|
|
102
|
-
const n = e.match(/(\d+):(\d+)\/(\w+)/);
|
|
103
|
-
return n ? {
|
|
104
|
-
external: parseInt(n[1], 10),
|
|
105
|
-
internal: parseInt(n[2], 10),
|
|
106
|
-
protocol: n[3]
|
|
107
|
-
} : {
|
|
108
|
-
external: 0,
|
|
109
|
-
internal: 0,
|
|
110
|
-
protocol: "tcp"
|
|
111
|
-
};
|
|
112
|
-
}).filter((e) => e.internal > 0) : [];
|
|
113
|
-
}
|
|
114
|
-
function x(s) {
|
|
115
|
-
const e = s.match(/([\d.]+)\s*(GB|MB|KB|B)/i);
|
|
116
|
-
if (!e) return 0;
|
|
117
|
-
const n = parseFloat(e[1]);
|
|
118
|
-
switch (e[2].toUpperCase()) {
|
|
119
|
-
case "GB":
|
|
120
|
-
return n * 1024 * 1024 * 1024;
|
|
121
|
-
case "MB":
|
|
122
|
-
return n * 1024 * 1024;
|
|
123
|
-
case "KB":
|
|
124
|
-
return n * 1024;
|
|
125
|
-
default:
|
|
126
|
-
return n;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
class L {
|
|
130
|
-
constructor(e = {}) {
|
|
131
|
-
o(this, "manager");
|
|
132
|
-
o(this, "listContainers", () => this.manager.listContainers());
|
|
133
|
-
o(this, "listImages", () => this.manager.listImages());
|
|
134
|
-
o(this, "startContainer", (e) => this.manager.startContainer(e));
|
|
135
|
-
o(this, "stopContainer", (e) => this.manager.stopContainer(e));
|
|
136
|
-
o(this, "restartContainer", (e) => this.manager.restartContainer(e));
|
|
137
|
-
o(this, "removeContainer", (e, n) => this.manager.removeContainer(e, n));
|
|
138
|
-
o(this, "buildImage", (e, n) => this.manager.buildImage(e, n));
|
|
139
|
-
o(this, "pushImage", (e, n) => this.manager.pushImage(e, n));
|
|
140
|
-
o(this, "pullImage", (e, n) => this.manager.pullImage(e, n));
|
|
141
|
-
o(this, "composeUp", (e) => this.manager.composeUp(e));
|
|
142
|
-
o(this, "composeDown", (e) => this.manager.composeDown(e));
|
|
143
|
-
o(this, "composeLogs", (e, n) => this.manager.composeLogs(e, n));
|
|
144
|
-
o(this, "exec", (e, n) => this.manager.exec(e, n));
|
|
145
|
-
this.manager = k(e);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
export {
|
|
149
|
-
L as D,
|
|
150
|
-
k as c
|
|
151
|
-
};
|
|
152
|
-
//# sourceMappingURL=manager-B6vqJgEn.mjs.map
|
package/dist/portal.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface PortalGeneratorOptions {
|
|
2
|
-
outDir?: string;
|
|
3
|
-
title?: string;
|
|
4
|
-
}
|
|
5
|
-
export declare class PortalGenerator {
|
|
6
|
-
private options;
|
|
7
|
-
constructor(options?: PortalGeneratorOptions);
|
|
8
|
-
get config(): PortalGeneratorOptions;
|
|
9
|
-
generate(): void;
|
|
10
|
-
}
|
|
11
|
-
export declare function createPortal(_options?: PortalGeneratorOptions): PortalGenerator;
|
|
12
|
-
export declare function generateDocs(): void;
|
|
13
|
-
//# sourceMappingURL=portal.d.ts.map
|
package/dist/portal.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../src/portal.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,sBAA2B;IAExD,IAAI,MAAM,IAAI,sBAAsB,CAEnC;IAED,QAAQ,IAAI,IAAI;CAGjB;AAED,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,sBAAsB,GAAG,eAAe,CAE/E;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
|