@syedar/seedar-cli 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +553 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +146 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/process.d.ts +13 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +58 -0
- package/dist/process.js.map +1 -0
- package/dist/prompts.d.ts +4 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +115 -0
- package/dist/prompts.js.map +1 -0
- package/dist/runtime.d.ts +20 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +166 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +24 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
export const DEFAULT_VERSION = "latest";
|
|
2
|
+
export const DEFAULT_PORTS = {
|
|
3
|
+
mysql: 3306,
|
|
4
|
+
server: 8090,
|
|
5
|
+
web: 8080,
|
|
6
|
+
};
|
|
7
|
+
export const DEFAULT_DB_NAME = "seedar_prod";
|
|
8
|
+
export const DEFAULT_DB_USER = "seedar";
|
|
9
|
+
export const DEFAULT_DOCKER_ORG = "syedarhandsome";
|
|
10
|
+
export const DEFAULT_SERVER_IMAGE = `${DEFAULT_DOCKER_ORG}/seedar-server`;
|
|
11
|
+
export const DEFAULT_WEB_IMAGE = `${DEFAULT_DOCKER_ORG}/seedar-web`;
|
|
12
|
+
export const MIN_NODE_MAJOR = 18;
|
|
13
|
+
export const REQUIRED_ENV_KEYS = [
|
|
14
|
+
"SEEDAR_VERSION",
|
|
15
|
+
"SEEDAR_INSTALL_ROOT",
|
|
16
|
+
"SEEDAR_INSTANCE_ID",
|
|
17
|
+
"SEEDAR_PROJECT_NAME",
|
|
18
|
+
"MYSQL_PORT",
|
|
19
|
+
"SERVER_PORT",
|
|
20
|
+
"WEB_PORT",
|
|
21
|
+
"DB_HOST",
|
|
22
|
+
"DB_PORT",
|
|
23
|
+
"DB_USERNAME",
|
|
24
|
+
"DB_PASSWORD",
|
|
25
|
+
"DB_DATABASE",
|
|
26
|
+
"MYSQL_ROOT_PASSWORD",
|
|
27
|
+
"MYSQL_DATABASE",
|
|
28
|
+
"MYSQL_USER",
|
|
29
|
+
"MYSQL_PASSWORD",
|
|
30
|
+
"AES_SECRET",
|
|
31
|
+
];
|
|
32
|
+
export const VALID_SERVICES = ["mysql", "server", "web", "migrate"];
|
|
33
|
+
export const ENV_RENDER_ORDER = [
|
|
34
|
+
"SEEDAR_VERSION",
|
|
35
|
+
"SEEDAR_INSTALL_ROOT",
|
|
36
|
+
"SEEDAR_INSTANCE_ID",
|
|
37
|
+
"SEEDAR_PROJECT_NAME",
|
|
38
|
+
"MYSQL_PORT",
|
|
39
|
+
"SERVER_PORT",
|
|
40
|
+
"WEB_PORT",
|
|
41
|
+
"DB_HOST",
|
|
42
|
+
"DB_PORT",
|
|
43
|
+
"DB_USERNAME",
|
|
44
|
+
"DB_PASSWORD",
|
|
45
|
+
"DB_DATABASE",
|
|
46
|
+
"MYSQL_ROOT_PASSWORD",
|
|
47
|
+
"MYSQL_DATABASE",
|
|
48
|
+
"MYSQL_USER",
|
|
49
|
+
"MYSQL_PASSWORD",
|
|
50
|
+
"AES_SECRET",
|
|
51
|
+
];
|
|
52
|
+
export const COMPOSE_TEMPLATE = `name: \${SEEDAR_PROJECT_NAME}
|
|
53
|
+
|
|
54
|
+
services:
|
|
55
|
+
mysql:
|
|
56
|
+
image: mysql:8.4
|
|
57
|
+
container_name: \${SEEDAR_PROJECT_NAME}-mysql
|
|
58
|
+
restart: unless-stopped
|
|
59
|
+
environment:
|
|
60
|
+
TZ: Asia/Shanghai
|
|
61
|
+
MYSQL_ROOT_PASSWORD: \${MYSQL_ROOT_PASSWORD}
|
|
62
|
+
MYSQL_DATABASE: \${MYSQL_DATABASE}
|
|
63
|
+
MYSQL_USER: \${MYSQL_USER}
|
|
64
|
+
MYSQL_PASSWORD: \${MYSQL_PASSWORD}
|
|
65
|
+
ports:
|
|
66
|
+
- "\${MYSQL_PORT}:3306"
|
|
67
|
+
volumes:
|
|
68
|
+
- "\${SEEDAR_INSTALL_ROOT}/data/mysql:/var/lib/mysql"
|
|
69
|
+
healthcheck:
|
|
70
|
+
test:
|
|
71
|
+
[
|
|
72
|
+
"CMD-SHELL",
|
|
73
|
+
"mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent",
|
|
74
|
+
]
|
|
75
|
+
interval: 10s
|
|
76
|
+
timeout: 5s
|
|
77
|
+
retries: 12
|
|
78
|
+
start_period: 20s
|
|
79
|
+
networks:
|
|
80
|
+
- seedar-net
|
|
81
|
+
|
|
82
|
+
server:
|
|
83
|
+
image: ${DEFAULT_SERVER_IMAGE}:\${SEEDAR_VERSION}
|
|
84
|
+
container_name: \${SEEDAR_PROJECT_NAME}-server
|
|
85
|
+
restart: unless-stopped
|
|
86
|
+
depends_on:
|
|
87
|
+
mysql:
|
|
88
|
+
condition: service_healthy
|
|
89
|
+
environment:
|
|
90
|
+
TZ: Asia/Shanghai
|
|
91
|
+
NODE_ENV: production
|
|
92
|
+
DB_HOST: \${DB_HOST}
|
|
93
|
+
DB_PORT: \${DB_PORT}
|
|
94
|
+
DB_USERNAME: \${DB_USERNAME}
|
|
95
|
+
DB_PASSWORD: \${DB_PASSWORD}
|
|
96
|
+
DB_DATABASE: \${DB_DATABASE}
|
|
97
|
+
AES_SECRET: \${AES_SECRET}
|
|
98
|
+
PORT: 3000
|
|
99
|
+
ports:
|
|
100
|
+
- "\${SERVER_PORT}:3000"
|
|
101
|
+
networks:
|
|
102
|
+
- seedar-net
|
|
103
|
+
|
|
104
|
+
migrate:
|
|
105
|
+
image: ${DEFAULT_SERVER_IMAGE}:\${SEEDAR_VERSION}
|
|
106
|
+
restart: "no"
|
|
107
|
+
depends_on:
|
|
108
|
+
mysql:
|
|
109
|
+
condition: service_healthy
|
|
110
|
+
environment:
|
|
111
|
+
TZ: Asia/Shanghai
|
|
112
|
+
NODE_ENV: production
|
|
113
|
+
DB_HOST: \${DB_HOST}
|
|
114
|
+
DB_PORT: \${DB_PORT}
|
|
115
|
+
DB_USERNAME: \${DB_USERNAME}
|
|
116
|
+
DB_PASSWORD: \${DB_PASSWORD}
|
|
117
|
+
DB_DATABASE: \${DB_DATABASE}
|
|
118
|
+
AES_SECRET: \${AES_SECRET}
|
|
119
|
+
PORT: 3000
|
|
120
|
+
command:
|
|
121
|
+
[
|
|
122
|
+
"node",
|
|
123
|
+
"node_modules/typeorm/cli.js",
|
|
124
|
+
"-d",
|
|
125
|
+
"dist/config/typeorm.datasource.js",
|
|
126
|
+
"migration:run",
|
|
127
|
+
]
|
|
128
|
+
networks:
|
|
129
|
+
- seedar-net
|
|
130
|
+
|
|
131
|
+
web:
|
|
132
|
+
image: ${DEFAULT_WEB_IMAGE}:\${SEEDAR_VERSION}
|
|
133
|
+
container_name: \${SEEDAR_PROJECT_NAME}-web
|
|
134
|
+
restart: unless-stopped
|
|
135
|
+
depends_on:
|
|
136
|
+
- server
|
|
137
|
+
ports:
|
|
138
|
+
- "\${WEB_PORT}:80"
|
|
139
|
+
networks:
|
|
140
|
+
- seedar-net
|
|
141
|
+
|
|
142
|
+
networks:
|
|
143
|
+
seedar-net:
|
|
144
|
+
driver: bridge
|
|
145
|
+
`;
|
|
146
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,kBAAkB,gBAAgB,CAAC;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,kBAAkB,aAAa,CAAC;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,YAAY;IACZ,aAAa;IACb,UAAU;IACV,SAAS;IACT,SAAS;IACT,aAAa;IACb,aAAa;IACb,aAAa;IACb,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;AAE7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,YAAY;IACZ,aAAa;IACb,UAAU;IACV,SAAS;IACT,SAAS;IACT,aAAa;IACb,aAAa;IACb,aAAa;IACb,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA+BnB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;aAsBpB,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;aA2BpB,iBAAiB;;;;;;;;;;;;;CAa7B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { main } from "./cli.js";
|
|
3
|
+
main(process.argv.slice(2)).catch((error) => {
|
|
4
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
5
|
+
console.error(message);
|
|
6
|
+
process.exitCode = 1;
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RunResult, RuntimeLayout } from "./types.js";
|
|
2
|
+
interface RunCommandOptions {
|
|
3
|
+
cwd?: string;
|
|
4
|
+
env?: NodeJS.ProcessEnv;
|
|
5
|
+
stdio?: "inherit" | "pipe";
|
|
6
|
+
shell?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function runCommand(command: string, args: string[], options?: RunCommandOptions): Promise<RunResult>;
|
|
9
|
+
export declare function runCommandOrThrow(command: string, args: string[], options?: RunCommandOptions): Promise<RunResult>;
|
|
10
|
+
export declare function runDockerCompose(layout: RuntimeLayout, args: string[], options?: RunCommandOptions): Promise<RunResult>;
|
|
11
|
+
export declare function runDockerComposeOrThrow(layout: RuntimeLayout, args: string[], options?: RunCommandOptions): Promise<RunResult>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAiCpB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAUpB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CASpB;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAUpB"}
|
package/dist/process.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
export async function runCommand(command, args, options = {}) {
|
|
3
|
+
return await new Promise((resolve, reject) => {
|
|
4
|
+
const child = spawn(command, args, {
|
|
5
|
+
cwd: options.cwd,
|
|
6
|
+
env: options.env ?? process.env,
|
|
7
|
+
stdio: options.stdio === "inherit" ? "inherit" : "pipe",
|
|
8
|
+
shell: options.shell ?? false,
|
|
9
|
+
});
|
|
10
|
+
let stdout = "";
|
|
11
|
+
let stderr = "";
|
|
12
|
+
if (child.stdout) {
|
|
13
|
+
child.stdout.on("data", (chunk) => {
|
|
14
|
+
stdout += chunk.toString();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (child.stderr) {
|
|
18
|
+
child.stderr.on("data", (chunk) => {
|
|
19
|
+
stderr += chunk.toString();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
child.on("error", reject);
|
|
23
|
+
child.on("close", (code) => {
|
|
24
|
+
resolve({
|
|
25
|
+
code: code ?? 1,
|
|
26
|
+
stdout,
|
|
27
|
+
stderr,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export async function runCommandOrThrow(command, args, options = {}) {
|
|
33
|
+
const result = await runCommand(command, args, options);
|
|
34
|
+
if (result.code !== 0) {
|
|
35
|
+
const detail = [result.stdout.trim(), result.stderr.trim()]
|
|
36
|
+
.filter(Boolean)
|
|
37
|
+
.join("\n");
|
|
38
|
+
throw new Error(detail || `${command} ${args.join(" ")} 执行失败`);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
export async function runDockerCompose(layout, args, options = {}) {
|
|
43
|
+
return await runCommand("docker", ["compose", "--env-file", layout.envPath, "-f", layout.composePath, ...args], {
|
|
44
|
+
cwd: layout.runtimeDir,
|
|
45
|
+
...options,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export async function runDockerComposeOrThrow(layout, args, options = {}) {
|
|
49
|
+
const result = await runDockerCompose(layout, args, options);
|
|
50
|
+
if (result.code !== 0) {
|
|
51
|
+
const detail = [result.stdout.trim(), result.stderr.trim()]
|
|
52
|
+
.filter(Boolean)
|
|
53
|
+
.join("\n");
|
|
54
|
+
throw new Error(detail || `docker compose ${args.join(" ")} 执行失败`);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAW3C,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,IAAc,EACd,UAA6B,EAAE;IAE/B,OAAO,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACvD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;SAC9B,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,IAAI,CAAC;gBACf,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAe,EACf,IAAc,EACd,UAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aACxD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,IAAc,EACd,UAA6B,EAAE;IAE/B,OAAO,MAAM,UAAU,CACrB,QAAQ,EACR,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAC5E;QACE,GAAG,EAAE,MAAM,CAAC,UAAU;QACtB,GAAG,OAAO;KACX,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAqB,EACrB,IAAc,EACd,UAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aACxD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CliFlags, EnvConfig, RuntimeLayout } from "./types.js";
|
|
2
|
+
export declare function collectInstallConfig(layout: RuntimeLayout, versionArg: string | undefined, flags: CliFlags): Promise<EnvConfig>;
|
|
3
|
+
export declare function ensurePortsAvailable(env: EnvConfig): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA6CrE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,SAAS,CAAC,CA+EpB;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAaxE"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import net from "node:net";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
5
|
+
import { DEFAULT_DB_NAME, DEFAULT_DB_USER, DEFAULT_PORTS, DEFAULT_VERSION, } from "./constants.js";
|
|
6
|
+
import { buildDefaultEnv } from "./runtime.js";
|
|
7
|
+
function createSecret(bytes = 24) {
|
|
8
|
+
return randomBytes(bytes).toString("hex");
|
|
9
|
+
}
|
|
10
|
+
async function isPortAvailable(port) {
|
|
11
|
+
return await new Promise((resolve) => {
|
|
12
|
+
const server = net.createServer();
|
|
13
|
+
server.unref();
|
|
14
|
+
server.on("error", () => resolve(false));
|
|
15
|
+
server.listen(port, "0.0.0.0", () => {
|
|
16
|
+
server.close(() => resolve(true));
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function getAvailablePort(preferredPort) {
|
|
21
|
+
let currentPort = preferredPort;
|
|
22
|
+
while (!(await isPortAvailable(currentPort))) {
|
|
23
|
+
currentPort += 1;
|
|
24
|
+
}
|
|
25
|
+
return currentPort;
|
|
26
|
+
}
|
|
27
|
+
async function ask(rl, label, defaultValue) {
|
|
28
|
+
const suffix = defaultValue ? ` [${defaultValue}]` : "";
|
|
29
|
+
const answer = (await rl.question(`${label}${suffix}: `)).trim();
|
|
30
|
+
return answer || defaultValue;
|
|
31
|
+
}
|
|
32
|
+
function assertPort(value, label) {
|
|
33
|
+
const numericPort = Number(value);
|
|
34
|
+
if (!Number.isInteger(numericPort) || numericPort < 1 || numericPort > 65535) {
|
|
35
|
+
throw new Error(`${label} 必须是 1-65535 之间的端口`);
|
|
36
|
+
}
|
|
37
|
+
return String(numericPort);
|
|
38
|
+
}
|
|
39
|
+
export async function collectInstallConfig(layout, versionArg, flags) {
|
|
40
|
+
const version = versionArg ?? DEFAULT_VERSION;
|
|
41
|
+
const defaultDbPassword = createSecret(16);
|
|
42
|
+
const defaultRootPassword = createSecret(16);
|
|
43
|
+
const defaultAesSecret = createSecret(24);
|
|
44
|
+
const [mysqlPort, serverPort, webPort] = await Promise.all([
|
|
45
|
+
getAvailablePort(DEFAULT_PORTS.mysql),
|
|
46
|
+
getAvailablePort(DEFAULT_PORTS.server),
|
|
47
|
+
getAvailablePort(DEFAULT_PORTS.web),
|
|
48
|
+
]);
|
|
49
|
+
const defaults = buildDefaultEnv(layout, {
|
|
50
|
+
SEEDAR_VERSION: version,
|
|
51
|
+
MYSQL_PORT: String(mysqlPort),
|
|
52
|
+
SERVER_PORT: String(serverPort),
|
|
53
|
+
WEB_PORT: String(webPort),
|
|
54
|
+
DB_HOST: "mysql",
|
|
55
|
+
DB_PORT: "3306",
|
|
56
|
+
DB_USERNAME: DEFAULT_DB_USER,
|
|
57
|
+
DB_PASSWORD: defaultDbPassword,
|
|
58
|
+
DB_DATABASE: DEFAULT_DB_NAME,
|
|
59
|
+
MYSQL_ROOT_PASSWORD: defaultRootPassword,
|
|
60
|
+
MYSQL_DATABASE: DEFAULT_DB_NAME,
|
|
61
|
+
MYSQL_USER: DEFAULT_DB_USER,
|
|
62
|
+
MYSQL_PASSWORD: defaultDbPassword,
|
|
63
|
+
AES_SECRET: defaultAesSecret,
|
|
64
|
+
});
|
|
65
|
+
if (!process.stdin.isTTY || flags.yes) {
|
|
66
|
+
console.log("使用默认安装参数初始化 Seedar。");
|
|
67
|
+
return defaults;
|
|
68
|
+
}
|
|
69
|
+
const rl = readline.createInterface({ input, output });
|
|
70
|
+
try {
|
|
71
|
+
const MYSQL_PORT = assertPort(await ask(rl, "MySQL 端口", defaults.MYSQL_PORT), "MySQL 端口");
|
|
72
|
+
const SERVER_PORT = assertPort(await ask(rl, "Server 端口", defaults.SERVER_PORT), "Server 端口");
|
|
73
|
+
const WEB_PORT = assertPort(await ask(rl, "Web 端口", defaults.WEB_PORT), "Web 端口");
|
|
74
|
+
const DB_DATABASE = await ask(rl, "数据库名称", defaults.DB_DATABASE);
|
|
75
|
+
const DB_USERNAME = await ask(rl, "数据库用户名", defaults.DB_USERNAME);
|
|
76
|
+
const DB_PASSWORD = await ask(rl, "数据库密码", defaults.DB_PASSWORD);
|
|
77
|
+
const MYSQL_ROOT_PASSWORD = await ask(rl, "MySQL Root 密码", defaults.MYSQL_ROOT_PASSWORD);
|
|
78
|
+
const AES_SECRET = await ask(rl, "AES_SECRET", defaults.AES_SECRET);
|
|
79
|
+
const uniquePorts = new Set([MYSQL_PORT, SERVER_PORT, WEB_PORT]);
|
|
80
|
+
if (uniquePorts.size !== 3) {
|
|
81
|
+
throw new Error("MySQL、Server、Web 端口不能重复");
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
...defaults,
|
|
85
|
+
MYSQL_PORT,
|
|
86
|
+
SERVER_PORT,
|
|
87
|
+
WEB_PORT,
|
|
88
|
+
DB_DATABASE,
|
|
89
|
+
DB_USERNAME,
|
|
90
|
+
DB_PASSWORD,
|
|
91
|
+
MYSQL_ROOT_PASSWORD,
|
|
92
|
+
MYSQL_DATABASE: DB_DATABASE,
|
|
93
|
+
MYSQL_USER: DB_USERNAME,
|
|
94
|
+
MYSQL_PASSWORD: DB_PASSWORD,
|
|
95
|
+
AES_SECRET,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
rl.close();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export async function ensurePortsAvailable(env) {
|
|
103
|
+
const checks = [
|
|
104
|
+
["MYSQL_PORT", env.MYSQL_PORT],
|
|
105
|
+
["SERVER_PORT", env.SERVER_PORT],
|
|
106
|
+
["WEB_PORT", env.WEB_PORT],
|
|
107
|
+
];
|
|
108
|
+
for (const [label, value] of checks) {
|
|
109
|
+
const port = Number(value);
|
|
110
|
+
if (!(await isPortAvailable(port))) {
|
|
111
|
+
throw new Error(`${label}=${port} 已被占用,请调整后重试`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EnvConfig, InstallState, RuntimeLayout } from "./types.js";
|
|
2
|
+
export declare function resolveInstallRoot(): string;
|
|
3
|
+
export declare function toDockerPath(targetPath: string): string;
|
|
4
|
+
export declare function getRuntimeLayout(): RuntimeLayout;
|
|
5
|
+
export declare function pathExists(targetPath: string): Promise<boolean>;
|
|
6
|
+
export declare function ensureRuntimeDirectories(layout: RuntimeLayout): Promise<void>;
|
|
7
|
+
export declare function renderEnvFile(env: EnvConfig): string;
|
|
8
|
+
export declare function parseEnvFile(content: string): Record<string, string>;
|
|
9
|
+
export declare function assertEnvShape(env: Record<string, string>): EnvConfig;
|
|
10
|
+
export declare function readEnvConfig(layout: RuntimeLayout): Promise<EnvConfig>;
|
|
11
|
+
export declare function writeRuntimeFiles(layout: RuntimeLayout, env: EnvConfig): Promise<void>;
|
|
12
|
+
export declare function writeInstalledVersion(layout: RuntimeLayout, version: string): Promise<void>;
|
|
13
|
+
export declare function readInstalledVersion(layout: RuntimeLayout): Promise<string | null>;
|
|
14
|
+
export declare function writeInstallState(layout: RuntimeLayout, state: InstallState): Promise<void>;
|
|
15
|
+
export declare function readInstallState(layout: RuntimeLayout): Promise<InstallState>;
|
|
16
|
+
export declare function hasRuntimeConfig(layout: RuntimeLayout): Promise<boolean>;
|
|
17
|
+
export declare function backupRuntime(layout: RuntimeLayout): Promise<string>;
|
|
18
|
+
export declare function buildDefaultEnv(layout: RuntimeLayout, values: Omit<EnvConfig, "SEEDAR_INSTALL_ROOT" | "SEEDAR_INSTANCE_ID" | "SEEDAR_PROJECT_NAME">): EnvConfig;
|
|
19
|
+
export declare function restoreRuntimeFromBackup(layout: RuntimeLayout, backupDir: string): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAqBhD;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAcpD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOrE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAG7E;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB1E;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC,GAC5F,SAAS,CAOX;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { COMPOSE_TEMPLATE, ENV_RENDER_ORDER, REQUIRED_ENV_KEYS, } from "./constants.js";
|
|
6
|
+
export function resolveInstallRoot() {
|
|
7
|
+
const override = process.env.SEEDAR_INSTALL_DIR?.trim();
|
|
8
|
+
if (override) {
|
|
9
|
+
return path.resolve(override);
|
|
10
|
+
}
|
|
11
|
+
return path.join(os.homedir(), ".seedar");
|
|
12
|
+
}
|
|
13
|
+
export function toDockerPath(targetPath) {
|
|
14
|
+
return path.resolve(targetPath).replace(/\\/g, "/");
|
|
15
|
+
}
|
|
16
|
+
export function getRuntimeLayout() {
|
|
17
|
+
const installRoot = resolveInstallRoot();
|
|
18
|
+
const instanceId = createHash("sha256")
|
|
19
|
+
.update(installRoot)
|
|
20
|
+
.digest("hex")
|
|
21
|
+
.slice(0, 8);
|
|
22
|
+
return {
|
|
23
|
+
installRoot,
|
|
24
|
+
runtimeDir: path.join(installRoot, "runtime"),
|
|
25
|
+
dataDir: path.join(installRoot, "data"),
|
|
26
|
+
mysqlDataDir: path.join(installRoot, "data", "mysql"),
|
|
27
|
+
logsDir: path.join(installRoot, "logs"),
|
|
28
|
+
backupsDir: path.join(installRoot, "backups"),
|
|
29
|
+
composePath: path.join(installRoot, "runtime", "docker-compose.yml"),
|
|
30
|
+
envPath: path.join(installRoot, "runtime", ".env"),
|
|
31
|
+
versionPath: path.join(installRoot, "runtime", ".installed-version"),
|
|
32
|
+
statePath: path.join(installRoot, "runtime", ".install-state"),
|
|
33
|
+
instanceId,
|
|
34
|
+
projectName: `seedar-${instanceId}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function pathExists(targetPath) {
|
|
38
|
+
try {
|
|
39
|
+
await access(targetPath);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function ensureRuntimeDirectories(layout) {
|
|
47
|
+
await mkdir(layout.runtimeDir, { recursive: true });
|
|
48
|
+
await mkdir(layout.dataDir, { recursive: true });
|
|
49
|
+
await mkdir(layout.mysqlDataDir, { recursive: true });
|
|
50
|
+
await mkdir(layout.logsDir, { recursive: true });
|
|
51
|
+
await mkdir(layout.backupsDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
export function renderEnvFile(env) {
|
|
54
|
+
const lines = [
|
|
55
|
+
"# Generated by seedar CLI",
|
|
56
|
+
"# Edit with care. Use `seedar update` to change versions safely.",
|
|
57
|
+
"",
|
|
58
|
+
];
|
|
59
|
+
for (const key of ENV_RENDER_ORDER) {
|
|
60
|
+
const value = env[key];
|
|
61
|
+
lines.push(`${key}=${value}`);
|
|
62
|
+
}
|
|
63
|
+
lines.push("");
|
|
64
|
+
return lines.join("\n");
|
|
65
|
+
}
|
|
66
|
+
export function parseEnvFile(content) {
|
|
67
|
+
const result = {};
|
|
68
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
69
|
+
const line = rawLine.trim();
|
|
70
|
+
if (!line || line.startsWith("#")) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const index = line.indexOf("=");
|
|
74
|
+
if (index === -1) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const key = line.slice(0, index).trim();
|
|
78
|
+
const value = line.slice(index + 1).trim();
|
|
79
|
+
result[key] = value;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
export function assertEnvShape(env) {
|
|
84
|
+
const missing = REQUIRED_ENV_KEYS.filter((key) => !env[key]);
|
|
85
|
+
if (missing.length > 0) {
|
|
86
|
+
throw new Error(`运行时配置缺少字段: ${missing.join(", ")}`);
|
|
87
|
+
}
|
|
88
|
+
return env;
|
|
89
|
+
}
|
|
90
|
+
export async function readEnvConfig(layout) {
|
|
91
|
+
const content = await readFile(layout.envPath, "utf8");
|
|
92
|
+
return assertEnvShape(parseEnvFile(content));
|
|
93
|
+
}
|
|
94
|
+
export async function writeRuntimeFiles(layout, env) {
|
|
95
|
+
await ensureRuntimeDirectories(layout);
|
|
96
|
+
await writeFile(layout.composePath, COMPOSE_TEMPLATE, "utf8");
|
|
97
|
+
await writeFile(layout.envPath, renderEnvFile(env), "utf8");
|
|
98
|
+
}
|
|
99
|
+
export async function writeInstalledVersion(layout, version) {
|
|
100
|
+
await writeFile(layout.versionPath, `${version}\n`, "utf8");
|
|
101
|
+
}
|
|
102
|
+
export async function readInstalledVersion(layout) {
|
|
103
|
+
if (!(await pathExists(layout.versionPath))) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
const content = await readFile(layout.versionPath, "utf8");
|
|
107
|
+
return content.trim() || null;
|
|
108
|
+
}
|
|
109
|
+
export async function writeInstallState(layout, state) {
|
|
110
|
+
await writeFile(layout.statePath, `${state}\n`, "utf8");
|
|
111
|
+
}
|
|
112
|
+
export async function readInstallState(layout) {
|
|
113
|
+
if (!(await pathExists(layout.statePath))) {
|
|
114
|
+
const hasRuntime = (await pathExists(layout.composePath)) && (await pathExists(layout.envPath));
|
|
115
|
+
return hasRuntime ? "installed" : "unknown";
|
|
116
|
+
}
|
|
117
|
+
const content = await readFile(layout.statePath, "utf8");
|
|
118
|
+
const normalized = content.trim();
|
|
119
|
+
if (normalized === "installed" || normalized === "uninstalled") {
|
|
120
|
+
return normalized;
|
|
121
|
+
}
|
|
122
|
+
return "unknown";
|
|
123
|
+
}
|
|
124
|
+
export async function hasRuntimeConfig(layout) {
|
|
125
|
+
return (await pathExists(layout.composePath)) && (await pathExists(layout.envPath));
|
|
126
|
+
}
|
|
127
|
+
export async function backupRuntime(layout) {
|
|
128
|
+
await ensureRuntimeDirectories(layout);
|
|
129
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
130
|
+
const backupDir = path.join(layout.backupsDir, stamp);
|
|
131
|
+
await mkdir(backupDir, { recursive: true });
|
|
132
|
+
const files = [
|
|
133
|
+
[layout.envPath, path.join(backupDir, ".env")],
|
|
134
|
+
[layout.composePath, path.join(backupDir, "docker-compose.yml")],
|
|
135
|
+
[layout.versionPath, path.join(backupDir, ".installed-version")],
|
|
136
|
+
[layout.statePath, path.join(backupDir, ".install-state")],
|
|
137
|
+
];
|
|
138
|
+
for (const [source, target] of files) {
|
|
139
|
+
if (await pathExists(source)) {
|
|
140
|
+
await copyFile(source, target);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return backupDir;
|
|
144
|
+
}
|
|
145
|
+
export function buildDefaultEnv(layout, values) {
|
|
146
|
+
return {
|
|
147
|
+
...values,
|
|
148
|
+
SEEDAR_INSTALL_ROOT: toDockerPath(layout.installRoot),
|
|
149
|
+
SEEDAR_INSTANCE_ID: layout.instanceId,
|
|
150
|
+
SEEDAR_PROJECT_NAME: layout.projectName,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export async function restoreRuntimeFromBackup(layout, backupDir) {
|
|
154
|
+
const files = [
|
|
155
|
+
[path.join(backupDir, ".env"), layout.envPath],
|
|
156
|
+
[path.join(backupDir, "docker-compose.yml"), layout.composePath],
|
|
157
|
+
[path.join(backupDir, ".installed-version"), layout.versionPath],
|
|
158
|
+
[path.join(backupDir, ".install-state"), layout.statePath],
|
|
159
|
+
];
|
|
160
|
+
for (const [source, target] of files) {
|
|
161
|
+
if (await pathExists(source)) {
|
|
162
|
+
await copyFile(source, target);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface RuntimeLayout {
|
|
2
|
+
installRoot: string;
|
|
3
|
+
runtimeDir: string;
|
|
4
|
+
dataDir: string;
|
|
5
|
+
mysqlDataDir: string;
|
|
6
|
+
logsDir: string;
|
|
7
|
+
backupsDir: string;
|
|
8
|
+
composePath: string;
|
|
9
|
+
envPath: string;
|
|
10
|
+
versionPath: string;
|
|
11
|
+
statePath: string;
|
|
12
|
+
instanceId: string;
|
|
13
|
+
projectName: string;
|
|
14
|
+
}
|
|
15
|
+
export interface EnvConfig {
|
|
16
|
+
SEEDAR_VERSION: string;
|
|
17
|
+
SEEDAR_INSTALL_ROOT: string;
|
|
18
|
+
SEEDAR_INSTANCE_ID: string;
|
|
19
|
+
SEEDAR_PROJECT_NAME: string;
|
|
20
|
+
MYSQL_PORT: string;
|
|
21
|
+
SERVER_PORT: string;
|
|
22
|
+
WEB_PORT: string;
|
|
23
|
+
DB_HOST: string;
|
|
24
|
+
DB_PORT: string;
|
|
25
|
+
DB_USERNAME: string;
|
|
26
|
+
DB_PASSWORD: string;
|
|
27
|
+
DB_DATABASE: string;
|
|
28
|
+
MYSQL_ROOT_PASSWORD: string;
|
|
29
|
+
MYSQL_DATABASE: string;
|
|
30
|
+
MYSQL_USER: string;
|
|
31
|
+
MYSQL_PASSWORD: string;
|
|
32
|
+
AES_SECRET: string;
|
|
33
|
+
}
|
|
34
|
+
export type InstallState = "installed" | "uninstalled" | "unknown";
|
|
35
|
+
export interface CliFlags {
|
|
36
|
+
yes: boolean;
|
|
37
|
+
force: boolean;
|
|
38
|
+
follow: boolean;
|
|
39
|
+
removeData: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface RunResult {
|
|
42
|
+
code: number;
|
|
43
|
+
stdout: string;
|
|
44
|
+
stderr: string;
|
|
45
|
+
}
|
|
46
|
+
export interface DoctorCheck {
|
|
47
|
+
code: string;
|
|
48
|
+
status: "ok" | "warn" | "fail";
|
|
49
|
+
title: string;
|
|
50
|
+
detail: string;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types.js
ADDED