@forgedevstack/harbor 1.0.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 +126 -0
- package/README.md +927 -0
- package/dist/changelog/index.d.ts +3 -0
- package/dist/changelog/index.d.ts.map +1 -0
- package/dist/changelog/manager.d.ts +29 -0
- package/dist/changelog/manager.d.ts.map +1 -0
- package/dist/changelog/types.d.ts +41 -0
- package/dist/changelog/types.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +43 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/constants/config.const.d.ts +11 -0
- package/dist/constants/config.const.d.ts.map +1 -0
- package/dist/constants/defaults.const.d.ts +10 -0
- package/dist/constants/defaults.const.d.ts.map +1 -0
- package/dist/constants/http.const.d.ts +43 -0
- package/dist/constants/http.const.d.ts.map +1 -0
- package/dist/constants/index.d.ts +5 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/validation.const.d.ts +35 -0
- package/dist/constants/validation.const.d.ts.map +1 -0
- package/dist/core/config.d.ts +6 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/errorHandler.d.ts +25 -0
- package/dist/core/errorHandler.d.ts.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/router.d.ts +68 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/server.d.ts +4 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/database/connection.d.ts +39 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/index.d.ts +28 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/model.d.ts +118 -0
- package/dist/database/model.d.ts.map +1 -0
- package/dist/database/schema.d.ts +63 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/types.d.ts +270 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/docker/index.d.ts +3 -0
- package/dist/docker/index.d.ts.map +1 -0
- package/dist/docker/index.js +2 -0
- package/dist/docker/index.js.map +1 -0
- package/dist/docker/manager.d.ts +21 -0
- package/dist/docker/manager.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +38 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/locales/en.d.ts +2 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/he.d.ts +2 -0
- package/dist/i18n/locales/he.d.ts.map +1 -0
- package/dist/index.cjs.js +24 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +2094 -0
- package/dist/index.es.js.map +1 -0
- package/dist/logger-D7aJSi62.mjs +102 -0
- package/dist/logger-D7aJSi62.mjs.map +1 -0
- package/dist/logger-DEnWXtpk.js +3 -0
- package/dist/logger-DEnWXtpk.js.map +1 -0
- package/dist/manager-B1UKMjXW.js +4 -0
- package/dist/manager-B1UKMjXW.js.map +1 -0
- package/dist/manager-B6vqJgEn.mjs +152 -0
- package/dist/manager-B6vqJgEn.mjs.map +1 -0
- package/dist/portal.d.ts +13 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/types/config.types.d.ts +83 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/docker.types.d.ts +92 -0
- package/dist/types/docker.types.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.types.d.ts +35 -0
- package/dist/types/logger.types.d.ts.map +1 -0
- package/dist/types/route.types.d.ts +78 -0
- package/dist/types/route.types.d.ts.map +1 -0
- package/dist/types/server.types.d.ts +67 -0
- package/dist/types/server.types.d.ts.map +1 -0
- package/dist/types/validation.types.d.ts +64 -0
- package/dist/types/validation.types.d.ts.map +1 -0
- package/dist/utils/helpers.d.ts +7 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/httpLogger.d.ts +52 -0
- package/dist/utils/httpLogger.d.ts.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/object.d.ts +6 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/mongo.d.ts +13 -0
- package/dist/validation/mongo.d.ts.map +1 -0
- package/dist/validation/paramValidators.d.ts +18 -0
- package/dist/validation/paramValidators.d.ts.map +1 -0
- package/dist/validation/validators.d.ts +9 -0
- package/dist/validation/validators.d.ts.map +1 -0
- package/harbor.config.example.json +72 -0
- package/package.json +107 -0
- package/templates/default/.eslintrc.json +45 -0
- package/templates/default/README.md +97 -0
- package/templates/default/constants/config.ts +26 -0
- package/templates/default/constants/http.ts +32 -0
- package/templates/default/constants/index.ts +3 -0
- package/templates/default/controllers/index.ts +6 -0
- package/templates/default/controllers/user.controller.ts +77 -0
- package/templates/default/env.example +22 -0
- package/templates/default/harbor.version.json +7 -0
- package/templates/default/models/index.ts +6 -0
- package/templates/default/models/user.model.ts +68 -0
- package/templates/default/package.json +44 -0
- package/templates/default/routes/index.ts +12 -0
- package/templates/default/routes/user.routes.ts +21 -0
- package/templates/default/server.ts +45 -0
- package/templates/default/services/index.ts +6 -0
- package/templates/default/services/user.service.ts +84 -0
- package/templates/default/tsconfig.json +35 -0
- package/templates/default/types/index.ts +57 -0
- package/templates/default/utils/asyncHandler.ts +14 -0
- package/templates/default/utils/index.ts +5 -0
- package/templates/default/utils/logger.ts +52 -0
- package/templates/default/utils/response.ts +24 -0
- package/templates/default/utils/validation.ts +23 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-B1UKMjXW.js","sources":["../src/docker/manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport type {\n DockerManager as IDockerManager,\n DockerManagerConfig,\n DockerContainer,\n DockerImage,\n ContainerStatus,\n DockerBuildOptions,\n} from '../types';\nimport { createLogger } from '../utils/logger';\n\nconst execAsync = promisify(exec);\nconst logger = createLogger('docker');\n\nexport function createDockerManager(config: DockerManagerConfig = {}): IDockerManager {\n const composePath = config.composePath ?? './docker-compose.yml';\n const projectName = config.projectName;\n\n async function runCommand(command: string): Promise<string> {\n try {\n logger.debug(`Executing: ${command}`);\n const { stdout, stderr } = await execAsync(command);\n if (stderr) {\n logger.warn(`Command stderr: ${stderr}`);\n }\n return stdout.trim();\n } catch (error) {\n logger.error(`Command failed: ${command}`, error as Error);\n throw error;\n }\n }\n\n function parseContainerStatus(status: string): ContainerStatus {\n const statusLower = status.toLowerCase();\n if (statusLower.includes('running')) return 'running';\n if (statusLower.includes('exited')) return 'exited';\n if (statusLower.includes('created')) return 'created';\n if (statusLower.includes('paused')) return 'paused';\n if (statusLower.includes('restarting')) return 'restarting';\n if (statusLower.includes('removing')) return 'removing';\n if (statusLower.includes('dead')) return 'dead';\n return 'exited';\n }\n\n const manager: IDockerManager = {\n async listContainers(): Promise<DockerContainer[]> {\n const output = await runCommand(\n 'docker ps -a --format \"{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.CreatedAt}}\"'\n );\n\n if (!output) return [];\n\n return output.split('\\n').map((line) => {\n const [id, name, image, status, ports, createdAt] = line.split('|');\n return {\n id,\n name,\n image,\n status: parseContainerStatus(status),\n ports: parsePorts(ports),\n createdAt: new Date(createdAt),\n };\n });\n },\n\n async listImages(): Promise<DockerImage[]> {\n const output = await runCommand(\n 'docker images --format \"{{.ID}}|{{.Repository}}|{{.Tag}}|{{.Size}}|{{.CreatedAt}}\"'\n );\n\n if (!output) return [];\n\n return output.split('\\n').map((line) => {\n const [id, name, tag, size, createdAt] = line.split('|');\n return {\n id,\n name,\n tag,\n size: parseSize(size),\n createdAt: new Date(createdAt),\n };\n });\n },\n\n async startContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker start ${nameOrId}`);\n logger.info(`Container started: ${nameOrId}`);\n },\n\n async stopContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker stop ${nameOrId}`);\n logger.info(`Container stopped: ${nameOrId}`);\n },\n\n async restartContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker restart ${nameOrId}`);\n logger.info(`Container restarted: ${nameOrId}`);\n },\n\n async removeContainer(nameOrId: string, force = false): Promise<void> {\n const forceFlag = force ? '-f' : '';\n await runCommand(`docker rm ${forceFlag} ${nameOrId}`);\n logger.info(`Container removed: ${nameOrId}`);\n },\n\n async buildImage(name: string, tag = 'latest', options?: DockerBuildOptions): Promise<void> {\n let command = `docker build -t ${name}:${tag}`;\n \n if (options?.noCache) command += ' --no-cache';\n if (options?.pull) command += ' --pull';\n if (options?.target) command += ` --target ${options.target}`;\n if (options?.platform) command += ` --platform ${options.platform}`;\n \n if (options?.buildArgs) {\n for (const [key, value] of Object.entries(options.buildArgs)) {\n command += ` --build-arg ${key}=${value}`;\n }\n }\n \n command += ' .';\n \n await runCommand(command);\n logger.info(`Image built: ${name}:${tag}`);\n },\n\n async pushImage(name: string, tag = 'latest'): Promise<void> {\n const fullName = config.registry \n ? `${config.registry}/${name}:${tag}` \n : `${name}:${tag}`;\n \n await runCommand(`docker push ${fullName}`);\n logger.info(`Image pushed: ${fullName}`);\n },\n\n async pullImage(name: string, tag = 'latest'): Promise<void> {\n await runCommand(`docker pull ${name}:${tag}`);\n logger.info(`Image pulled: ${name}:${tag}`);\n },\n\n async composeUp(detach = true): Promise<void> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' up';\n if (detach) command += ' -d';\n \n await runCommand(command);\n logger.info('Docker Compose up completed');\n },\n\n async composeDown(removeVolumes = false): Promise<void> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' down';\n if (removeVolumes) command += ' -v';\n \n await runCommand(command);\n logger.info('Docker Compose down completed');\n },\n\n async composeLogs(service?: string, follow = false): Promise<string> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' logs';\n if (follow) command += ' -f';\n if (service) command += ` ${service}`;\n \n return runCommand(command);\n },\n\n async exec(container: string, command: string): Promise<string> {\n return runCommand(`docker exec ${container} ${command}`);\n },\n };\n\n return manager;\n}\n\nfunction parsePorts(portsStr: string): DockerContainer['ports'] {\n if (!portsStr) return [];\n \n return portsStr.split(',').map((port) => {\n const match = port.match(/(\\d+):(\\d+)\\/(\\w+)/);\n if (match) {\n return {\n external: parseInt(match[1], 10),\n internal: parseInt(match[2], 10),\n protocol: match[3] as 'tcp' | 'udp',\n };\n }\n return {\n external: 0,\n internal: 0,\n protocol: 'tcp' as const,\n };\n }).filter((p) => p.internal > 0);\n}\n\nfunction parseSize(sizeStr: string): number {\n const match = sizeStr.match(/([\\d.]+)\\s*(GB|MB|KB|B)/i);\n if (!match) return 0;\n \n const value = parseFloat(match[1]);\n const unit = match[2].toUpperCase();\n \n switch (unit) {\n case 'GB': return value * 1024 * 1024 * 1024;\n case 'MB': return value * 1024 * 1024;\n case 'KB': return value * 1024;\n default: return value;\n }\n}\n\nexport class DockerManager implements IDockerManager {\n private manager: IDockerManager;\n\n constructor(config: DockerManagerConfig = {}) {\n this.manager = createDockerManager(config);\n }\n\n listContainers = () => this.manager.listContainers();\n listImages = () => this.manager.listImages();\n startContainer = (nameOrId: string) => this.manager.startContainer(nameOrId);\n stopContainer = (nameOrId: string) => this.manager.stopContainer(nameOrId);\n restartContainer = (nameOrId: string) => this.manager.restartContainer(nameOrId);\n removeContainer = (nameOrId: string, force?: boolean) => this.manager.removeContainer(nameOrId, force);\n buildImage = (name: string, tag?: string) => this.manager.buildImage(name, tag);\n pushImage = (name: string, tag?: string) => this.manager.pushImage(name, tag);\n pullImage = (name: string, tag?: string) => this.manager.pullImage(name, tag);\n composeUp = (detach?: boolean) => this.manager.composeUp(detach);\n composeDown = (removeVolumes?: boolean) => this.manager.composeDown(removeVolumes);\n composeLogs = (service?: string, follow?: boolean) => this.manager.composeLogs(service, follow);\n exec = (container: string, command: string) => this.manager.exec(container, command);\n}\n\n"],"names":["execAsync","promisify","exec","logger","createLogger","createDockerManager","config","composePath","projectName","runCommand","command","stdout","stderr","error","parseContainerStatus","status","statusLower","output","line","id","name","image","ports","createdAt","parsePorts","tag","size","parseSize","nameOrId","force","options","key","value","fullName","detach","removeVolumes","service","follow","container","portsStr","port","match","p","sizeStr","DockerManager","__publicField"],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager-B6vqJgEn.mjs","sources":["../src/docker/manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport type {\n DockerManager as IDockerManager,\n DockerManagerConfig,\n DockerContainer,\n DockerImage,\n ContainerStatus,\n DockerBuildOptions,\n} from '../types';\nimport { createLogger } from '../utils/logger';\n\nconst execAsync = promisify(exec);\nconst logger = createLogger('docker');\n\nexport function createDockerManager(config: DockerManagerConfig = {}): IDockerManager {\n const composePath = config.composePath ?? './docker-compose.yml';\n const projectName = config.projectName;\n\n async function runCommand(command: string): Promise<string> {\n try {\n logger.debug(`Executing: ${command}`);\n const { stdout, stderr } = await execAsync(command);\n if (stderr) {\n logger.warn(`Command stderr: ${stderr}`);\n }\n return stdout.trim();\n } catch (error) {\n logger.error(`Command failed: ${command}`, error as Error);\n throw error;\n }\n }\n\n function parseContainerStatus(status: string): ContainerStatus {\n const statusLower = status.toLowerCase();\n if (statusLower.includes('running')) return 'running';\n if (statusLower.includes('exited')) return 'exited';\n if (statusLower.includes('created')) return 'created';\n if (statusLower.includes('paused')) return 'paused';\n if (statusLower.includes('restarting')) return 'restarting';\n if (statusLower.includes('removing')) return 'removing';\n if (statusLower.includes('dead')) return 'dead';\n return 'exited';\n }\n\n const manager: IDockerManager = {\n async listContainers(): Promise<DockerContainer[]> {\n const output = await runCommand(\n 'docker ps -a --format \"{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.CreatedAt}}\"'\n );\n\n if (!output) return [];\n\n return output.split('\\n').map((line) => {\n const [id, name, image, status, ports, createdAt] = line.split('|');\n return {\n id,\n name,\n image,\n status: parseContainerStatus(status),\n ports: parsePorts(ports),\n createdAt: new Date(createdAt),\n };\n });\n },\n\n async listImages(): Promise<DockerImage[]> {\n const output = await runCommand(\n 'docker images --format \"{{.ID}}|{{.Repository}}|{{.Tag}}|{{.Size}}|{{.CreatedAt}}\"'\n );\n\n if (!output) return [];\n\n return output.split('\\n').map((line) => {\n const [id, name, tag, size, createdAt] = line.split('|');\n return {\n id,\n name,\n tag,\n size: parseSize(size),\n createdAt: new Date(createdAt),\n };\n });\n },\n\n async startContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker start ${nameOrId}`);\n logger.info(`Container started: ${nameOrId}`);\n },\n\n async stopContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker stop ${nameOrId}`);\n logger.info(`Container stopped: ${nameOrId}`);\n },\n\n async restartContainer(nameOrId: string): Promise<void> {\n await runCommand(`docker restart ${nameOrId}`);\n logger.info(`Container restarted: ${nameOrId}`);\n },\n\n async removeContainer(nameOrId: string, force = false): Promise<void> {\n const forceFlag = force ? '-f' : '';\n await runCommand(`docker rm ${forceFlag} ${nameOrId}`);\n logger.info(`Container removed: ${nameOrId}`);\n },\n\n async buildImage(name: string, tag = 'latest', options?: DockerBuildOptions): Promise<void> {\n let command = `docker build -t ${name}:${tag}`;\n \n if (options?.noCache) command += ' --no-cache';\n if (options?.pull) command += ' --pull';\n if (options?.target) command += ` --target ${options.target}`;\n if (options?.platform) command += ` --platform ${options.platform}`;\n \n if (options?.buildArgs) {\n for (const [key, value] of Object.entries(options.buildArgs)) {\n command += ` --build-arg ${key}=${value}`;\n }\n }\n \n command += ' .';\n \n await runCommand(command);\n logger.info(`Image built: ${name}:${tag}`);\n },\n\n async pushImage(name: string, tag = 'latest'): Promise<void> {\n const fullName = config.registry \n ? `${config.registry}/${name}:${tag}` \n : `${name}:${tag}`;\n \n await runCommand(`docker push ${fullName}`);\n logger.info(`Image pushed: ${fullName}`);\n },\n\n async pullImage(name: string, tag = 'latest'): Promise<void> {\n await runCommand(`docker pull ${name}:${tag}`);\n logger.info(`Image pulled: ${name}:${tag}`);\n },\n\n async composeUp(detach = true): Promise<void> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' up';\n if (detach) command += ' -d';\n \n await runCommand(command);\n logger.info('Docker Compose up completed');\n },\n\n async composeDown(removeVolumes = false): Promise<void> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' down';\n if (removeVolumes) command += ' -v';\n \n await runCommand(command);\n logger.info('Docker Compose down completed');\n },\n\n async composeLogs(service?: string, follow = false): Promise<string> {\n let command = `docker-compose -f ${composePath}`;\n if (projectName) command += ` -p ${projectName}`;\n command += ' logs';\n if (follow) command += ' -f';\n if (service) command += ` ${service}`;\n \n return runCommand(command);\n },\n\n async exec(container: string, command: string): Promise<string> {\n return runCommand(`docker exec ${container} ${command}`);\n },\n };\n\n return manager;\n}\n\nfunction parsePorts(portsStr: string): DockerContainer['ports'] {\n if (!portsStr) return [];\n \n return portsStr.split(',').map((port) => {\n const match = port.match(/(\\d+):(\\d+)\\/(\\w+)/);\n if (match) {\n return {\n external: parseInt(match[1], 10),\n internal: parseInt(match[2], 10),\n protocol: match[3] as 'tcp' | 'udp',\n };\n }\n return {\n external: 0,\n internal: 0,\n protocol: 'tcp' as const,\n };\n }).filter((p) => p.internal > 0);\n}\n\nfunction parseSize(sizeStr: string): number {\n const match = sizeStr.match(/([\\d.]+)\\s*(GB|MB|KB|B)/i);\n if (!match) return 0;\n \n const value = parseFloat(match[1]);\n const unit = match[2].toUpperCase();\n \n switch (unit) {\n case 'GB': return value * 1024 * 1024 * 1024;\n case 'MB': return value * 1024 * 1024;\n case 'KB': return value * 1024;\n default: return value;\n }\n}\n\nexport class DockerManager implements IDockerManager {\n private manager: IDockerManager;\n\n constructor(config: DockerManagerConfig = {}) {\n this.manager = createDockerManager(config);\n }\n\n listContainers = () => this.manager.listContainers();\n listImages = () => this.manager.listImages();\n startContainer = (nameOrId: string) => this.manager.startContainer(nameOrId);\n stopContainer = (nameOrId: string) => this.manager.stopContainer(nameOrId);\n restartContainer = (nameOrId: string) => this.manager.restartContainer(nameOrId);\n removeContainer = (nameOrId: string, force?: boolean) => this.manager.removeContainer(nameOrId, force);\n buildImage = (name: string, tag?: string) => this.manager.buildImage(name, tag);\n pushImage = (name: string, tag?: string) => this.manager.pushImage(name, tag);\n pullImage = (name: string, tag?: string) => this.manager.pullImage(name, tag);\n composeUp = (detach?: boolean) => this.manager.composeUp(detach);\n composeDown = (removeVolumes?: boolean) => this.manager.composeDown(removeVolumes);\n composeLogs = (service?: string, follow?: boolean) => this.manager.composeLogs(service, follow);\n exec = (container: string, command: string) => this.manager.exec(container, command);\n}\n\n"],"names":["execAsync","promisify","exec","logger","createLogger","createDockerManager","config","composePath","projectName","runCommand","command","stdout","stderr","error","parseContainerStatus","status","statusLower","output","line","id","name","image","ports","createdAt","parsePorts","tag","size","parseSize","nameOrId","force","options","key","value","fullName","detach","removeVolumes","service","follow","container","portsStr","port","match","p","sizeStr","DockerManager","__publicField"],"mappings":"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"}
|
package/dist/portal.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { LogLevel } from './logger.types';
|
|
2
|
+
|
|
3
|
+
export interface HarborConfig {
|
|
4
|
+
server: ServerConfig;
|
|
5
|
+
routes: RoutesConfig;
|
|
6
|
+
validation: ValidationConfig;
|
|
7
|
+
errors: ErrorsConfig;
|
|
8
|
+
logger: LoggerConfig;
|
|
9
|
+
docker?: DockerConfig;
|
|
10
|
+
}
|
|
11
|
+
export interface ServerConfig {
|
|
12
|
+
port: number;
|
|
13
|
+
host?: string;
|
|
14
|
+
cors?: CorsConfig;
|
|
15
|
+
bodyParser?: BodyParserConfig;
|
|
16
|
+
trustProxy?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CorsConfig {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
origin?: string | string[] | boolean;
|
|
21
|
+
methods?: string[];
|
|
22
|
+
allowedHeaders?: string[];
|
|
23
|
+
credentials?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface BodyParserConfig {
|
|
26
|
+
json?: boolean;
|
|
27
|
+
urlencoded?: boolean;
|
|
28
|
+
limit?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RoutesConfig {
|
|
31
|
+
prefix?: string;
|
|
32
|
+
timeout?: number;
|
|
33
|
+
defaultMiddleware?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface ValidationConfig {
|
|
36
|
+
adapter: 'mongoose' | 'custom';
|
|
37
|
+
strictMode?: boolean;
|
|
38
|
+
sanitize?: boolean;
|
|
39
|
+
customAdapter?: ValidationAdapter;
|
|
40
|
+
}
|
|
41
|
+
export interface ValidationAdapter {
|
|
42
|
+
validate: <T>(schema: unknown, data: unknown) => Promise<ValidationResult<T>>;
|
|
43
|
+
sanitize?: (data: unknown) => unknown;
|
|
44
|
+
}
|
|
45
|
+
export interface ValidationResult<T = unknown> {
|
|
46
|
+
valid: boolean;
|
|
47
|
+
data?: T;
|
|
48
|
+
errors?: ValidationError[];
|
|
49
|
+
}
|
|
50
|
+
export interface ValidationError {
|
|
51
|
+
field: string;
|
|
52
|
+
message: string;
|
|
53
|
+
code?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ErrorsConfig {
|
|
56
|
+
400?: ErrorHandler;
|
|
57
|
+
401?: ErrorHandler;
|
|
58
|
+
403?: ErrorHandler;
|
|
59
|
+
404?: ErrorHandler;
|
|
60
|
+
500?: ErrorHandler;
|
|
61
|
+
default?: ErrorHandler;
|
|
62
|
+
}
|
|
63
|
+
export interface ErrorHandler {
|
|
64
|
+
message?: string;
|
|
65
|
+
redirect?: string;
|
|
66
|
+
template?: string;
|
|
67
|
+
json?: boolean;
|
|
68
|
+
log?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface LoggerConfig {
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
level: LogLevel;
|
|
73
|
+
format?: 'json' | 'text';
|
|
74
|
+
output?: 'console' | 'file' | 'both';
|
|
75
|
+
filePath?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface DockerConfig {
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
compose?: string;
|
|
80
|
+
registry?: string;
|
|
81
|
+
imageName?: string;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=config.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export interface DockerManagerConfig {
|
|
2
|
+
composePath?: string;
|
|
3
|
+
projectName?: string;
|
|
4
|
+
registry?: string;
|
|
5
|
+
imageName?: string;
|
|
6
|
+
tag?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DockerContainer {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
image: string;
|
|
12
|
+
status: ContainerStatus;
|
|
13
|
+
ports: PortMapping[];
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
startedAt?: Date;
|
|
16
|
+
}
|
|
17
|
+
export type ContainerStatus = 'created' | 'running' | 'paused' | 'restarting' | 'removing' | 'exited' | 'dead';
|
|
18
|
+
export interface PortMapping {
|
|
19
|
+
internal: number;
|
|
20
|
+
external: number;
|
|
21
|
+
protocol: 'tcp' | 'udp';
|
|
22
|
+
}
|
|
23
|
+
export interface DockerImage {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
tag: string;
|
|
27
|
+
size: number;
|
|
28
|
+
createdAt: Date;
|
|
29
|
+
}
|
|
30
|
+
export interface DockerComposeConfig {
|
|
31
|
+
version?: string;
|
|
32
|
+
services: Record<string, DockerService>;
|
|
33
|
+
volumes?: Record<string, VolumeConfig>;
|
|
34
|
+
networks?: Record<string, NetworkConfig>;
|
|
35
|
+
}
|
|
36
|
+
export interface DockerService {
|
|
37
|
+
image?: string;
|
|
38
|
+
build?: BuildConfig;
|
|
39
|
+
ports?: string[];
|
|
40
|
+
volumes?: string[];
|
|
41
|
+
environment?: Record<string, string>;
|
|
42
|
+
depends_on?: string[];
|
|
43
|
+
restart?: RestartPolicy;
|
|
44
|
+
networks?: string[];
|
|
45
|
+
command?: string | string[];
|
|
46
|
+
healthcheck?: ServiceHealthCheck;
|
|
47
|
+
}
|
|
48
|
+
export interface BuildConfig {
|
|
49
|
+
context: string;
|
|
50
|
+
dockerfile?: string;
|
|
51
|
+
args?: Record<string, string>;
|
|
52
|
+
}
|
|
53
|
+
export type RestartPolicy = 'no' | 'always' | 'on-failure' | 'unless-stopped';
|
|
54
|
+
export interface VolumeConfig {
|
|
55
|
+
driver?: string;
|
|
56
|
+
driver_opts?: Record<string, string>;
|
|
57
|
+
external?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface NetworkConfig {
|
|
60
|
+
driver?: string;
|
|
61
|
+
external?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface ServiceHealthCheck {
|
|
64
|
+
test: string | string[];
|
|
65
|
+
interval?: string;
|
|
66
|
+
timeout?: string;
|
|
67
|
+
retries?: number;
|
|
68
|
+
start_period?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface DockerManager {
|
|
71
|
+
listContainers: () => Promise<DockerContainer[]>;
|
|
72
|
+
listImages: () => Promise<DockerImage[]>;
|
|
73
|
+
startContainer: (nameOrId: string) => Promise<void>;
|
|
74
|
+
stopContainer: (nameOrId: string) => Promise<void>;
|
|
75
|
+
restartContainer: (nameOrId: string) => Promise<void>;
|
|
76
|
+
removeContainer: (nameOrId: string, force?: boolean) => Promise<void>;
|
|
77
|
+
buildImage: (name: string, tag?: string) => Promise<void>;
|
|
78
|
+
pushImage: (name: string, tag?: string) => Promise<void>;
|
|
79
|
+
pullImage: (name: string, tag?: string) => Promise<void>;
|
|
80
|
+
composeUp: (detach?: boolean) => Promise<void>;
|
|
81
|
+
composeDown: (removeVolumes?: boolean) => Promise<void>;
|
|
82
|
+
composeLogs: (service?: string, follow?: boolean) => Promise<string>;
|
|
83
|
+
exec: (container: string, command: string) => Promise<string>;
|
|
84
|
+
}
|
|
85
|
+
export interface DockerBuildOptions {
|
|
86
|
+
noCache?: boolean;
|
|
87
|
+
pull?: boolean;
|
|
88
|
+
buildArgs?: Record<string, string>;
|
|
89
|
+
target?: string;
|
|
90
|
+
platform?: string;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=docker.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.types.d.ts","sourceRoot":"","sources":["../../src/types/docker.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
context?: string;
|
|
7
|
+
data?: Record<string, unknown>;
|
|
8
|
+
error?: Error;
|
|
9
|
+
}
|
|
10
|
+
export interface Logger {
|
|
11
|
+
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
12
|
+
info: (message: string, data?: Record<string, unknown>) => void;
|
|
13
|
+
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
14
|
+
error: (message: string, error?: Error, data?: Record<string, unknown>) => void;
|
|
15
|
+
setLevel: (level: LogLevel) => void;
|
|
16
|
+
setContext: (context: string) => Logger;
|
|
17
|
+
child: (context: string) => Logger;
|
|
18
|
+
}
|
|
19
|
+
export interface LoggerOptions {
|
|
20
|
+
level: LogLevel;
|
|
21
|
+
format: 'json' | 'text';
|
|
22
|
+
output: 'console' | 'file' | 'both';
|
|
23
|
+
filePath?: string;
|
|
24
|
+
prefix?: string;
|
|
25
|
+
colorize?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface LogFormatter {
|
|
28
|
+
format: (entry: LogEntry) => string;
|
|
29
|
+
}
|
|
30
|
+
export interface LogTransport {
|
|
31
|
+
log: (entry: LogEntry) => void;
|
|
32
|
+
flush?: () => Promise<void>;
|
|
33
|
+
close?: () => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=logger.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.types.d.ts","sourceRoot":"","sources":["../../src/types/logger.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACjE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChF,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Request, Response, NextFunction, RequestHandler } from 'express';
|
|
2
|
+
|
|
3
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
|
|
4
|
+
export interface RouteDefinition {
|
|
5
|
+
path: string;
|
|
6
|
+
method: HttpMethod;
|
|
7
|
+
handler: RouteHandler;
|
|
8
|
+
options?: RouteOptions;
|
|
9
|
+
}
|
|
10
|
+
export interface RouteOptions {
|
|
11
|
+
pre?: PreFunction[];
|
|
12
|
+
post?: PostFunction[];
|
|
13
|
+
validation?: RouteValidation;
|
|
14
|
+
timeout?: number;
|
|
15
|
+
rateLimit?: RateLimitConfig;
|
|
16
|
+
auth?: AuthConfig;
|
|
17
|
+
cache?: CacheConfig;
|
|
18
|
+
}
|
|
19
|
+
export type PreFunction = (req: HarborRequest, res: Response, next: NextFunction) => void | Promise<void>;
|
|
20
|
+
export type PostFunction = (req: HarborRequest, res: Response, result: unknown) => void | Promise<void>;
|
|
21
|
+
export type RouteHandler = (req: HarborRequest, res: HarborResponse) => unknown | Promise<unknown>;
|
|
22
|
+
export interface RouteValidation {
|
|
23
|
+
params?: ValidationSchema;
|
|
24
|
+
query?: ValidationSchema;
|
|
25
|
+
body?: ValidationSchema;
|
|
26
|
+
headers?: ValidationSchema;
|
|
27
|
+
}
|
|
28
|
+
export type ValidationSchema = Record<string, FieldValidation>;
|
|
29
|
+
export interface FieldValidation {
|
|
30
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'date' | 'email' | 'objectId';
|
|
31
|
+
required?: boolean;
|
|
32
|
+
min?: number;
|
|
33
|
+
max?: number;
|
|
34
|
+
pattern?: string;
|
|
35
|
+
enum?: unknown[];
|
|
36
|
+
default?: unknown;
|
|
37
|
+
transform?: (value: unknown) => unknown;
|
|
38
|
+
}
|
|
39
|
+
export interface RateLimitConfig {
|
|
40
|
+
windowMs: number;
|
|
41
|
+
max: number;
|
|
42
|
+
message?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AuthConfig {
|
|
45
|
+
required: boolean;
|
|
46
|
+
roles?: string[];
|
|
47
|
+
permissions?: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface CacheConfig {
|
|
50
|
+
ttl: number;
|
|
51
|
+
key?: string | ((req: HarborRequest) => string);
|
|
52
|
+
}
|
|
53
|
+
export interface HarborRequest extends Request {
|
|
54
|
+
validated?: {
|
|
55
|
+
params?: Record<string, unknown>;
|
|
56
|
+
query?: Record<string, unknown>;
|
|
57
|
+
body?: Record<string, unknown>;
|
|
58
|
+
headers?: Record<string, unknown>;
|
|
59
|
+
};
|
|
60
|
+
startTime?: number;
|
|
61
|
+
harborContext?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
export interface HarborResponse extends Response {
|
|
64
|
+
success: <T>(data: T, statusCode?: number) => void;
|
|
65
|
+
error: (message: string, statusCode?: number, details?: unknown) => void;
|
|
66
|
+
}
|
|
67
|
+
export interface RouteGroup {
|
|
68
|
+
prefix: string;
|
|
69
|
+
middleware?: RequestHandler[];
|
|
70
|
+
routes: RouteDefinition[];
|
|
71
|
+
}
|
|
72
|
+
export interface RouterConfig {
|
|
73
|
+
prefix?: string;
|
|
74
|
+
middleware?: RequestHandler[];
|
|
75
|
+
errorHandler?: ErrorHandlerFunction;
|
|
76
|
+
}
|
|
77
|
+
export type ErrorHandlerFunction = (error: Error, req: HarborRequest, res: Response, next: NextFunction) => void;
|
|
78
|
+
//# sourceMappingURL=route.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.types.d.ts","sourceRoot":"","sources":["../../src/types/route.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Express, RequestHandler } from 'express';
|
|
2
|
+
import { Server as HttpServer } from 'http';
|
|
3
|
+
import { HarborConfig } from './config.types';
|
|
4
|
+
import { RouteDefinition, RouteGroup } from './route.types';
|
|
5
|
+
|
|
6
|
+
export interface HarborServer {
|
|
7
|
+
app: Express;
|
|
8
|
+
server: HttpServer | null;
|
|
9
|
+
config: HarborConfig;
|
|
10
|
+
start: () => Promise<ServerInfo>;
|
|
11
|
+
stop: () => Promise<void>;
|
|
12
|
+
restart: () => Promise<ServerInfo>;
|
|
13
|
+
addRoute: (route: RouteDefinition) => void;
|
|
14
|
+
addRouteGroup: (group: RouteGroup) => void;
|
|
15
|
+
addMiddleware: (middleware: RequestHandler) => void;
|
|
16
|
+
getInfo: () => ServerInfo;
|
|
17
|
+
}
|
|
18
|
+
export interface ServerInfo {
|
|
19
|
+
port: number;
|
|
20
|
+
host: string;
|
|
21
|
+
uptime: number;
|
|
22
|
+
startedAt: Date | null;
|
|
23
|
+
routes: RouteInfo[];
|
|
24
|
+
status: ServerStatus;
|
|
25
|
+
}
|
|
26
|
+
export interface RouteInfo {
|
|
27
|
+
path: string;
|
|
28
|
+
method: string;
|
|
29
|
+
middleware: string[];
|
|
30
|
+
}
|
|
31
|
+
export type ServerStatus = 'stopped' | 'starting' | 'running' | 'stopping' | 'error';
|
|
32
|
+
export interface CreateServerOptions {
|
|
33
|
+
port?: number;
|
|
34
|
+
host?: string;
|
|
35
|
+
configPath?: string;
|
|
36
|
+
autoStart?: boolean;
|
|
37
|
+
onReady?: (info: ServerInfo) => void;
|
|
38
|
+
onError?: (error: Error) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface ServerMiddleware {
|
|
41
|
+
name: string;
|
|
42
|
+
handler: RequestHandler;
|
|
43
|
+
priority?: number;
|
|
44
|
+
paths?: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface HealthCheckConfig {
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
path?: string;
|
|
49
|
+
interval?: number;
|
|
50
|
+
checks?: HealthCheck[];
|
|
51
|
+
}
|
|
52
|
+
export interface HealthCheck {
|
|
53
|
+
name: string;
|
|
54
|
+
check: () => Promise<HealthCheckResult>;
|
|
55
|
+
}
|
|
56
|
+
export interface HealthCheckResult {
|
|
57
|
+
healthy: boolean;
|
|
58
|
+
message?: string;
|
|
59
|
+
latency?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface GracefulShutdownConfig {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
timeout?: number;
|
|
64
|
+
signals?: string[];
|
|
65
|
+
onShutdown?: () => Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=server.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.types.d.ts","sourceRoot":"","sources":["../../src/types/server.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,MAAM,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAErF,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC"}
|