ai-project-manage-cli 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/cli/commands/deploy-backend.d.ts.map +1 -1
  2. package/dist/cli/commands/deploy-backend.js +25 -33
  3. package/dist/cli/commands/deploy-backend.js.map +1 -1
  4. package/dist/core/apm-config.d.ts +18 -30
  5. package/dist/core/apm-config.d.ts.map +1 -1
  6. package/dist/core/apm-config.js +22 -52
  7. package/dist/core/apm-config.js.map +1 -1
  8. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts +9 -5
  9. package/dist/core/backend-deploy/backend-deploy-workflow.d.ts.map +1 -1
  10. package/dist/core/backend-deploy/backend-deploy-workflow.js +60 -31
  11. package/dist/core/backend-deploy/backend-deploy-workflow.js.map +1 -1
  12. package/dist/core/backend-deploy/command-runner.d.ts +11 -0
  13. package/dist/core/backend-deploy/command-runner.d.ts.map +1 -0
  14. package/dist/core/backend-deploy/command-runner.js +47 -0
  15. package/dist/core/backend-deploy/command-runner.js.map +1 -0
  16. package/dist/core/backend-deploy/dockerode-client/client.d.ts +18 -0
  17. package/dist/core/backend-deploy/dockerode-client/client.d.ts.map +1 -0
  18. package/dist/core/backend-deploy/dockerode-client/client.js +114 -0
  19. package/dist/core/backend-deploy/dockerode-client/client.js.map +1 -0
  20. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts +6 -0
  21. package/dist/core/backend-deploy/dockerode-client/connection-options.d.ts.map +1 -0
  22. package/dist/core/backend-deploy/dockerode-client/connection-options.js +52 -0
  23. package/dist/core/backend-deploy/dockerode-client/connection-options.js.map +1 -0
  24. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts +3 -0
  25. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.d.ts.map +1 -0
  26. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js +23 -0
  27. package/dist/core/backend-deploy/dockerode-client/container-inspect-format.js.map +1 -0
  28. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts +4 -0
  29. package/dist/core/backend-deploy/dockerode-client/container-options.d.ts.map +1 -0
  30. package/dist/core/backend-deploy/dockerode-client/container-options.js +36 -0
  31. package/dist/core/backend-deploy/dockerode-client/container-options.js.map +1 -0
  32. package/dist/core/backend-deploy/dockerode-client/env.d.ts +3 -0
  33. package/dist/core/backend-deploy/dockerode-client/env.d.ts.map +1 -0
  34. package/dist/core/backend-deploy/dockerode-client/env.js +37 -0
  35. package/dist/core/backend-deploy/dockerode-client/env.js.map +1 -0
  36. package/dist/core/backend-deploy/dockerode-client/index.d.ts +8 -0
  37. package/dist/core/backend-deploy/dockerode-client/index.d.ts.map +1 -0
  38. package/dist/core/backend-deploy/dockerode-client/index.js +17 -0
  39. package/dist/core/backend-deploy/dockerode-client/index.js.map +1 -0
  40. package/dist/core/backend-deploy/dockerode-client/ports.d.ts +9 -0
  41. package/dist/core/backend-deploy/dockerode-client/ports.d.ts.map +1 -0
  42. package/dist/core/backend-deploy/dockerode-client/ports.js +35 -0
  43. package/dist/core/backend-deploy/dockerode-client/ports.js.map +1 -0
  44. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts +7 -0
  45. package/dist/core/backend-deploy/dockerode-client/runtime.d.ts.map +1 -0
  46. package/dist/core/backend-deploy/dockerode-client/runtime.js +26 -0
  47. package/dist/core/backend-deploy/dockerode-client/runtime.js.map +1 -0
  48. package/dist/core/backend-deploy/dockerode-client/types.d.ts +62 -0
  49. package/dist/core/backend-deploy/dockerode-client/types.d.ts.map +1 -0
  50. package/dist/core/backend-deploy/dockerode-client/types.js +3 -0
  51. package/dist/core/backend-deploy/dockerode-client/types.js.map +1 -0
  52. package/dist/core/backend-deploy/image-tag.d.ts +1 -1
  53. package/dist/core/backend-deploy/image-tag.d.ts.map +1 -1
  54. package/dist/core/backend-deploy/image-tag.js +2 -2
  55. package/dist/core/backend-deploy/image-tag.js.map +1 -1
  56. package/dist/core/backend-deploy/index.d.ts +1 -10
  57. package/dist/core/backend-deploy/index.d.ts.map +1 -1
  58. package/dist/core/backend-deploy/index.js +1 -18
  59. package/dist/core/backend-deploy/index.js.map +1 -1
  60. package/dist/core/backend-deploy/local-docker-build.d.ts +3 -6
  61. package/dist/core/backend-deploy/local-docker-build.d.ts.map +1 -1
  62. package/dist/core/backend-deploy/local-docker-build.js +9 -13
  63. package/dist/core/backend-deploy/local-docker-build.js.map +1 -1
  64. package/dist/core/backend-deploy/logger.d.ts +10 -0
  65. package/dist/core/backend-deploy/logger.d.ts.map +1 -0
  66. package/dist/core/backend-deploy/logger.js +22 -0
  67. package/dist/core/backend-deploy/logger.js.map +1 -0
  68. package/dist/core/backend-deploy/registry-login-push.d.ts +18 -8
  69. package/dist/core/backend-deploy/registry-login-push.d.ts.map +1 -1
  70. package/dist/core/backend-deploy/registry-login-push.js +25 -36
  71. package/dist/core/backend-deploy/registry-login-push.js.map +1 -1
  72. package/dist/core/backend-deploy/remote-docker-client.d.ts.map +1 -1
  73. package/dist/core/backend-deploy/remote-docker-client.js +1 -0
  74. package/dist/core/backend-deploy/remote-docker-client.js.map +1 -1
  75. package/dist/core/backend-deploy/resolve-dockerfile.d.ts +2 -7
  76. package/dist/core/backend-deploy/resolve-dockerfile.d.ts.map +1 -1
  77. package/dist/core/backend-deploy/resolve-dockerfile.js +9 -18
  78. package/dist/core/backend-deploy/resolve-dockerfile.js.map +1 -1
  79. package/dist/core/backend-deploy/run-docker-cli.d.ts +3 -8
  80. package/dist/core/backend-deploy/run-docker-cli.d.ts.map +1 -1
  81. package/dist/core/backend-deploy/run-docker-cli.js +4 -23
  82. package/dist/core/backend-deploy/run-docker-cli.js.map +1 -1
  83. package/dist/core/backend-deploy/types.d.ts +15 -63
  84. package/dist/core/backend-deploy/types.d.ts.map +1 -1
  85. package/dist/core/backend-deploy/types.js +0 -3
  86. package/dist/core/backend-deploy/types.js.map +1 -1
  87. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createDockerodeClient = exports.DockerodeClient = void 0;
7
+ const dockerode_1 = __importDefault(require("dockerode"));
8
+ const connection_options_1 = require("./connection-options");
9
+ const container_inspect_format_1 = require("./container-inspect-format");
10
+ const container_options_1 = require("./container-options");
11
+ class DockerodeClient {
12
+ client;
13
+ constructor(config) {
14
+ const options = (0, connection_options_1.toDockerConnectionOptions)(config);
15
+ this.client = new dockerode_1.default(options);
16
+ }
17
+ async ping() {
18
+ await this.client.ping();
19
+ }
20
+ async imageExists(image) {
21
+ try {
22
+ await this.client.getImage(image).inspect();
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ async removeImage(image) {
30
+ await this.client.getImage(image).remove({ force: true });
31
+ }
32
+ async pullImage(image, auth) {
33
+ const stream = await new Promise((resolve, reject) => {
34
+ const pullOptions = auth ? { authconfig: auth } : undefined;
35
+ this.client.pull(image, pullOptions, (err, output) => {
36
+ if (err || !output) {
37
+ reject(err ?? new Error("docker pull 返回空输出"));
38
+ return;
39
+ }
40
+ resolve(output);
41
+ });
42
+ });
43
+ await new Promise((resolve, reject) => {
44
+ this.client.modem.followProgress(stream, (err) => {
45
+ if (err) {
46
+ reject(err);
47
+ return;
48
+ }
49
+ resolve();
50
+ }, () => undefined);
51
+ });
52
+ }
53
+ async findContainerIdByName(name) {
54
+ const containers = await this.client.listContainers({ all: true });
55
+ const matched = containers.find((item) => (item.Names ?? []).some((n) => n === `/${name}`));
56
+ return matched?.Id;
57
+ }
58
+ async stopContainer(id) {
59
+ const container = this.client.getContainer(id);
60
+ try {
61
+ await container.stop();
62
+ }
63
+ catch {
64
+ // Container may already be stopped.
65
+ }
66
+ }
67
+ async removeContainer(id) {
68
+ const container = this.client.getContainer(id);
69
+ await container.remove({ force: true });
70
+ }
71
+ async createContainer(input) {
72
+ const payload = (0, container_options_1.toContainerCreateOptions)(input);
73
+ const container = await this.client.createContainer(payload);
74
+ return container.id;
75
+ }
76
+ async startContainer(id) {
77
+ const container = this.client.getContainer(id);
78
+ await container.start();
79
+ }
80
+ async inspectContainer(id) {
81
+ const container = this.client.getContainer(id);
82
+ const inspectInfo = await container.inspect();
83
+ const state = inspectInfo?.State;
84
+ const portMappings = (0, container_inspect_format_1.formatPortMappings)(inspectInfo);
85
+ return {
86
+ running: state?.Running,
87
+ status: state?.Status,
88
+ exitCode: state?.ExitCode,
89
+ error: state?.Error,
90
+ startedAt: state?.StartedAt,
91
+ finishedAt: state?.FinishedAt,
92
+ health: state?.Health?.Status,
93
+ portMappings,
94
+ };
95
+ }
96
+ async getContainerLogs(id, tail = 100) {
97
+ const container = this.client.getContainer(id);
98
+ const logs = await container.logs({
99
+ stdout: true,
100
+ stderr: true,
101
+ timestamps: true,
102
+ follow: false,
103
+ tail,
104
+ });
105
+ if (typeof logs === "string") {
106
+ return logs;
107
+ }
108
+ return logs.toString("utf8");
109
+ }
110
+ }
111
+ exports.DockerodeClient = DockerodeClient;
112
+ const createDockerodeClient = (config) => new DockerodeClient(config);
113
+ exports.createDockerodeClient = createDockerodeClient;
114
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DockerDeployConnectionConfig } from "./types";
2
+ /**
3
+ * 将通用连接配置转为 dockerode 可用的 modem 选项(含可选 TLS)。
4
+ */
5
+ export declare function toDockerConnectionOptions(config: DockerDeployConnectionConfig): Record<string, unknown>;
6
+ //# sourceMappingURL=connection-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/connection-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAgB5D;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,4BAA4B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toDockerConnectionOptions = toDockerConnectionOptions;
4
+ const node_fs_1 = require("node:fs");
5
+ function asOptionalTlsBuffer(value) {
6
+ if (typeof value !== "string") {
7
+ return undefined;
8
+ }
9
+ const normalized = value.trim();
10
+ if (normalized === "") {
11
+ return undefined;
12
+ }
13
+ if ((0, node_fs_1.existsSync)(normalized)) {
14
+ return (0, node_fs_1.readFileSync)(normalized);
15
+ }
16
+ return Buffer.from(normalized);
17
+ }
18
+ /**
19
+ * 将通用连接配置转为 dockerode 可用的 modem 选项(含可选 TLS)。
20
+ */
21
+ function toDockerConnectionOptions(config) {
22
+ const protocol = (config.protocol ?? "https").toLowerCase();
23
+ const isHttps = protocol === "https";
24
+ const options = {
25
+ host: config.host ?? "127.0.0.1",
26
+ port: config.port ?? 2376,
27
+ protocol,
28
+ };
29
+ const socketPath = (config.socketPath ?? "").trim();
30
+ if (socketPath !== "") {
31
+ options.socketPath = socketPath;
32
+ }
33
+ if (isHttps) {
34
+ const tlsOptions = {
35
+ ca: asOptionalTlsBuffer(config.ca),
36
+ cert: asOptionalTlsBuffer(config.cert),
37
+ key: asOptionalTlsBuffer(config.key),
38
+ };
39
+ if (tlsOptions.ca) {
40
+ options.ca = tlsOptions.ca;
41
+ }
42
+ if (tlsOptions.cert) {
43
+ options.cert = tlsOptions.cert;
44
+ }
45
+ if (tlsOptions.key) {
46
+ options.key = tlsOptions.key;
47
+ }
48
+ options.checkServerIdentity = () => undefined;
49
+ }
50
+ return options;
51
+ }
52
+ //# sourceMappingURL=connection-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-options.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/connection-options.ts"],"names":[],"mappings":";;AAqBA,8DAiCC;AAtDD,qCAAmD;AAInD,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAA,sBAAY,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,MAAoC;IAEpC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,OAAO,GAAG,QAAQ,KAAK,OAAO,CAAC;IACrC,MAAM,OAAO,GAA4B;QACvC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;QACzB,QAAQ;KACT,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG;YACjB,EAAE,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;SACrC,CAAC;QACF,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QACjC,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,mBAAmB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type Docker from "dockerode";
2
+ export declare function formatPortMappings(inspectInfo: Docker.ContainerInspectInfo): string[] | undefined;
3
+ //# sourceMappingURL=container-inspect-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-inspect-format.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-inspect-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,CAAC,oBAAoB,GACvC,MAAM,EAAE,GAAG,SAAS,CAoBtB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatPortMappings = formatPortMappings;
4
+ function formatPortMappings(inspectInfo) {
5
+ const ports = inspectInfo?.NetworkSettings?.Ports;
6
+ if (!ports || typeof ports !== "object") {
7
+ return undefined;
8
+ }
9
+ const mappings = [];
10
+ for (const [containerPort, hostBindings] of Object.entries(ports)) {
11
+ if (!hostBindings || hostBindings.length === 0) {
12
+ mappings.push(`${containerPort} -> <not-published>`);
13
+ continue;
14
+ }
15
+ for (const binding of hostBindings) {
16
+ const hostIp = binding.HostIp || "0.0.0.0";
17
+ const hostPort = binding.HostPort || "<unknown>";
18
+ mappings.push(`${containerPort} -> ${hostIp}:${hostPort}`);
19
+ }
20
+ }
21
+ return mappings.length > 0 ? mappings : undefined;
22
+ }
23
+ //# sourceMappingURL=container-inspect-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-inspect-format.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-inspect-format.ts"],"names":[],"mappings":";;AAEA,gDAsBC;AAtBD,SAAgB,kBAAkB,CAChC,WAAwC;IAExC,MAAM,KAAK,GAAG,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,qBAAqB,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;YAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import Docker from "dockerode";
2
+ import type { DockerCreateContainerInput } from "./types";
3
+ export declare function toContainerCreateOptions(input: DockerCreateContainerInput): Docker.ContainerCreateOptions;
4
+ //# sourceMappingURL=container-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-options.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-options.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,0BAA0B,GAChC,MAAM,CAAC,sBAAsB,CAiC/B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toContainerCreateOptions = toContainerCreateOptions;
4
+ function toContainerCreateOptions(input) {
5
+ const hostConfig = {};
6
+ let hasHostConfig = false;
7
+ if (input.portBindings) {
8
+ hostConfig.PortBindings = input.portBindings;
9
+ hasHostConfig = true;
10
+ }
11
+ if (input.binds) {
12
+ hostConfig.Binds = input.binds;
13
+ hasHostConfig = true;
14
+ }
15
+ if (typeof input.nanoCpus === "number") {
16
+ hostConfig.NanoCpus = input.nanoCpus;
17
+ hasHostConfig = true;
18
+ }
19
+ if (typeof input.memory === "number") {
20
+ hostConfig.Memory = Number(input.memory) * 1024 * 1024;
21
+ hasHostConfig = true;
22
+ }
23
+ const payload = {
24
+ name: input.name,
25
+ Image: input.image,
26
+ Env: input.env,
27
+ };
28
+ if (input.exposedPorts) {
29
+ payload.ExposedPorts = input.exposedPorts;
30
+ }
31
+ if (hasHostConfig) {
32
+ payload.HostConfig = hostConfig;
33
+ }
34
+ return payload;
35
+ }
36
+ //# sourceMappingURL=container-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-options.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/container-options.ts"],"names":[],"mappings":";;AAIA,4DAmCC;AAnCD,SAAgB,wBAAwB,CACtC,KAAiC;IAEjC,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAC7C,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACrC,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACvD,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAkC;QAC7C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC;IACF,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC5C,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function loadEnvFromFile(envFilePath: string): Record<string, string>;
2
+ export declare function toEnvArray(env: Record<string, string>): string[];
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/env.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB3E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAEhE"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadEnvFromFile = loadEnvFromFile;
7
+ exports.toEnvArray = toEnvArray;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ function loadEnvFromFile(envFilePath) {
11
+ if (!envFilePath || !(0, node_fs_1.statSync)(envFilePath).isFile()) {
12
+ return {};
13
+ }
14
+ const targetPath = node_path_1.default.resolve(envFilePath);
15
+ const raw = (0, node_fs_1.readFileSync)(targetPath, "utf-8");
16
+ const result = {};
17
+ for (const line of raw.split(/\r?\n/)) {
18
+ const normalized = line.trim();
19
+ if (normalized === "" || normalized.startsWith("#")) {
20
+ continue;
21
+ }
22
+ const eqIndex = normalized.indexOf("=");
23
+ if (eqIndex <= 0) {
24
+ continue;
25
+ }
26
+ const key = normalized.slice(0, eqIndex).trim();
27
+ const value = normalized.slice(eqIndex + 1);
28
+ if (key !== "") {
29
+ result[key] = value;
30
+ }
31
+ }
32
+ return result;
33
+ }
34
+ function toEnvArray(env) {
35
+ return Object.entries(env).map(([key, value]) => `${key}=${value}`);
36
+ }
37
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/env.ts"],"names":[],"mappings":";;;;;AAGA,0CAyBC;AAED,gCAEC;AAhCD,qCAAiD;AACjD,0DAA6B;AAE7B,SAAgB,eAAe,CAAC,WAAmB;IACjD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,GAA2B;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type { DockerContainerRuntimeInput, DockerContainerStateSummary, DockerCreateContainerInput, DockerDeployConnectionConfig, DockerodeClientFactory, DockerodeClientPort, DockerPullAuth, } from "./types";
2
+ export { DockerodeClient, createDockerodeClient } from "./client";
3
+ export { toDockerConnectionOptions } from "./connection-options";
4
+ export { formatPortMappings } from "./container-inspect-format";
5
+ export { toContainerCreateOptions } from "./container-options";
6
+ export { loadEnvFromFile } from "./env";
7
+ export { parsePorts } from "./ports";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePorts = exports.loadEnvFromFile = exports.toContainerCreateOptions = exports.formatPortMappings = exports.toDockerConnectionOptions = exports.createDockerodeClient = exports.DockerodeClient = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "DockerodeClient", { enumerable: true, get: function () { return client_1.DockerodeClient; } });
6
+ Object.defineProperty(exports, "createDockerodeClient", { enumerable: true, get: function () { return client_1.createDockerodeClient; } });
7
+ var connection_options_1 = require("./connection-options");
8
+ Object.defineProperty(exports, "toDockerConnectionOptions", { enumerable: true, get: function () { return connection_options_1.toDockerConnectionOptions; } });
9
+ var container_inspect_format_1 = require("./container-inspect-format");
10
+ Object.defineProperty(exports, "formatPortMappings", { enumerable: true, get: function () { return container_inspect_format_1.formatPortMappings; } });
11
+ var container_options_1 = require("./container-options");
12
+ Object.defineProperty(exports, "toContainerCreateOptions", { enumerable: true, get: function () { return container_options_1.toContainerCreateOptions; } });
13
+ var env_1 = require("./env");
14
+ Object.defineProperty(exports, "loadEnvFromFile", { enumerable: true, get: function () { return env_1.loadEnvFromFile; } });
15
+ var ports_1 = require("./ports");
16
+ Object.defineProperty(exports, "parsePorts", { enumerable: true, get: function () { return ports_1.parsePorts; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/index.ts"],"names":[],"mappings":";;;AAUA,mCAAkE;AAAzD,yGAAA,eAAe,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAC/C,2DAAiE;AAAxD,+HAAA,yBAAyB,OAAA;AAClC,uEAAgE;AAAvD,8HAAA,kBAAkB,OAAA;AAC3B,yDAA+D;AAAtD,6HAAA,wBAAwB,OAAA;AACjC,6BAAwC;AAA/B,sGAAA,eAAe,OAAA;AACxB,iCAAqC;AAA5B,mGAAA,UAAU,OAAA"}
@@ -0,0 +1,9 @@
1
+ import Docker from "dockerode";
2
+ /**
3
+ * 解析 `hostPort:containerPort[/udp]` 形式的端口列表为 dockerode 的 ExposedPorts / PortBindings。
4
+ */
5
+ export declare function parsePorts(ports?: string[]): {
6
+ exposedPorts?: Docker.ContainerCreateOptions["ExposedPorts"];
7
+ portBindings?: Docker.HostConfig["PortBindings"];
8
+ };
9
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/ports.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;CAClD,CAgCA"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePorts = parsePorts;
4
+ /**
5
+ * 解析 `hostPort:containerPort[/udp]` 形式的端口列表为 dockerode 的 ExposedPorts / PortBindings。
6
+ */
7
+ function parsePorts(ports) {
8
+ if (!ports || ports.length === 0) {
9
+ return {};
10
+ }
11
+ const exposedPorts = {};
12
+ const portBindings = {};
13
+ for (const rawPort of ports) {
14
+ const normalized = rawPort.trim();
15
+ if (normalized === "") {
16
+ continue;
17
+ }
18
+ const [hostAndContainer, protocolPart] = normalized.split("/");
19
+ const protocol = protocolPart?.trim() === "udp" ? "udp" : "tcp";
20
+ const segments = hostAndContainer.split(":").map((part) => part.trim());
21
+ if (segments.length !== 2 || !segments[0] || !segments[1]) {
22
+ throw new Error(`container.ports 配置无效: ${rawPort}`);
23
+ }
24
+ const hostPort = segments[0];
25
+ const containerPort = segments[1];
26
+ const key = `${containerPort}/${protocol}`;
27
+ exposedPorts[key] = {};
28
+ portBindings[key] = [{ HostPort: hostPort }];
29
+ }
30
+ return {
31
+ exposedPorts: Object.keys(exposedPorts).length > 0 ? exposedPorts : undefined,
32
+ portBindings: Object.keys(portBindings).length > 0 ? portBindings : undefined,
33
+ };
34
+ }
35
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/ports.ts"],"names":[],"mappings":";;AAKA,gCAmCC;AAtCD;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAgB;IAIzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAkD,EAAE,CAAC;IACvE,MAAM,YAAY,GAAsC,EAAE,CAAC;IAE3D,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,YAAY,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,aAAa,IAAI,QAAQ,EAAE,CAAC;QAC3C,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC7E,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DockerContainerRuntimeInput, DockerCreateContainerInput } from "./types";
2
+ export declare function toRuntimeContainerInput(input: {
3
+ runtime: DockerContainerRuntimeInput;
4
+ resolve: (...parts: string[]) => string;
5
+ readText: (path: string) => string;
6
+ }): DockerCreateContainerInput;
7
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAIvF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,OAAO,EAAE,2BAA2B,CAAC;IACrC,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC,GAAG,0BAA0B,CAoB7B"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toRuntimeContainerInput = toRuntimeContainerInput;
4
+ const env_1 = require("./env");
5
+ const ports_1 = require("./ports");
6
+ function toRuntimeContainerInput(input) {
7
+ const envFromFile = (0, env_1.loadEnvFromFile)({
8
+ projectRoot: input.runtime.projectRoot,
9
+ envFilePath: input.runtime.envFilePath,
10
+ resolve: input.resolve,
11
+ readText: input.readText,
12
+ });
13
+ const env = (0, env_1.mergeEnv)(envFromFile, input.runtime.env, input.runtime.cliEnv);
14
+ const ports = (0, ports_1.parsePorts)(input.runtime.ports);
15
+ return {
16
+ name: input.runtime.name,
17
+ image: input.runtime.image,
18
+ env,
19
+ exposedPorts: ports.exposedPorts,
20
+ portBindings: ports.portBindings,
21
+ binds: input.runtime.binds,
22
+ nanoCpus: input.runtime.nanoCpus,
23
+ memory: input.runtime.memory,
24
+ };
25
+ }
26
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/runtime.ts"],"names":[],"mappings":";;AAIA,0DAwBC;AA3BD,+BAAkD;AAClD,mCAAqC;AAErC,SAAgB,uBAAuB,CAAC,KAIvC;IACC,MAAM,WAAW,GAAG,IAAA,qBAAe,EAAC;QAClC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;QACtC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;QACtC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAA,cAAQ,EAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QACxB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC1B,GAAG;QACH,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC1B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;QAChC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type Docker from "dockerode";
2
+ export type DockerDeployConnectionConfig = {
3
+ socketPath?: string;
4
+ host?: string;
5
+ port?: number;
6
+ protocol?: string;
7
+ ca?: string;
8
+ cert?: string;
9
+ key?: string;
10
+ };
11
+ export type DockerodeClientPort = {
12
+ ping: () => Promise<void>;
13
+ imageExists: (image: string) => Promise<boolean>;
14
+ removeImage: (image: string) => Promise<void>;
15
+ pullImage: (image: string, auth?: DockerPullAuth) => Promise<void>;
16
+ findContainerIdByName: (name: string) => Promise<string | undefined>;
17
+ stopContainer: (id: string) => Promise<void>;
18
+ removeContainer: (id: string) => Promise<void>;
19
+ createContainer: (input: DockerCreateContainerInput) => Promise<string>;
20
+ startContainer: (id: string) => Promise<void>;
21
+ inspectContainer: (id: string) => Promise<DockerContainerStateSummary>;
22
+ getContainerLogs: (id: string, tail?: number) => Promise<string>;
23
+ };
24
+ export type DockerCreateContainerInput = {
25
+ name: string;
26
+ image: string;
27
+ env: string[];
28
+ exposedPorts?: Docker.ContainerCreateOptions["ExposedPorts"];
29
+ portBindings?: Docker.HostConfig["PortBindings"];
30
+ binds?: Docker.HostConfig["Binds"];
31
+ nanoCpus?: Docker.HostConfig["NanoCpus"];
32
+ memory?: number;
33
+ };
34
+ export type DockerContainerRuntimeInput = {
35
+ name: string;
36
+ image: string;
37
+ projectRoot: string;
38
+ envFilePath?: string;
39
+ env?: Record<string, string>;
40
+ cliEnv?: Record<string, string>;
41
+ ports?: string[];
42
+ binds?: string[];
43
+ nanoCpus?: number;
44
+ memory?: number;
45
+ };
46
+ export type DockerPullAuth = {
47
+ username?: string;
48
+ password?: string;
49
+ serveraddress?: string;
50
+ };
51
+ export type DockerContainerStateSummary = {
52
+ running?: boolean;
53
+ status?: string;
54
+ exitCode?: number;
55
+ error?: string;
56
+ startedAt?: string;
57
+ finishedAt?: string;
58
+ health?: string;
59
+ portMappings?: string[];
60
+ };
61
+ export type DockerodeClientFactory = (config: DockerDeployConnectionConfig) => DockerodeClientPort;
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/backend-deploy/dockerode-client/types.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- export declare function assertDeployImageTag(tag: string, label: string): void;
1
+ export declare function assertDeployImageTag(tag: string): void;
2
2
  //# sourceMappingURL=image-tag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-tag.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOrE"}
1
+ {"version":3,"file":"image-tag.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":"AAMA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOtD"}
@@ -6,10 +6,10 @@ exports.assertDeployImageTag = assertDeployImageTag;
6
6
  * 例:test、aaa_bbb、feat-1、prod
7
7
  */
8
8
  const DEPLOY_IMAGE_TAG = /^(?!\.|-)[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;
9
- function assertDeployImageTag(tag, label) {
9
+ function assertDeployImageTag(tag) {
10
10
  const t = tag.trim();
11
11
  if (!DEPLOY_IMAGE_TAG.test(t)) {
12
- throw new Error(`${label} 须为合法镜像 tag(字母数字及 ._-,不以 . 或 - 开头,最长 128 字符),当前:${JSON.stringify(tag)}`);
12
+ throw new Error(`${t} 须为合法镜像 tag(字母数字及 ._-,不以 . 或 - 开头,最长 128 字符),当前:${JSON.stringify(tag)}`);
13
13
  }
14
14
  }
15
15
  //# sourceMappingURL=image-tag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-tag.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":";;AAMA,oDAOC;AAbD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAEtE,SAAgB,oBAAoB,CAAC,GAAW,EAAE,KAAa;IAC7D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,mDAAmD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"image-tag.js","sourceRoot":"","sources":["../../../src/core/backend-deploy/image-tag.ts"],"names":[],"mappings":";;AAMA,oDAOC;AAbD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAEtE,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,GAAG,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,12 +1,3 @@
1
- export { assertDeployImageTag } from "./image-tag";
2
1
  export { BackendDeployWorkflow } from "./backend-deploy-workflow";
3
- export { buildDockerImageLocally } from "./local-docker-build";
4
- export { resolveDockerBuildPaths } from "./resolve-dockerfile";
5
- export type { ResolvedDockerBuildPaths } from "./resolve-dockerfile";
6
- export { dockerLoginPrivateRegistry, dockerPushImage, loginAndPushImage, } from "./registry-login-push";
7
- export { runDockerCli, runProcess } from "./run-docker-cli";
8
- export { createRemoteDockerClient } from "./remote-docker-client";
9
- export type { DockerodeInstance } from "./remote-docker-client";
10
- export { pullImageOnRemote } from "./remote-pull-image";
11
- export type { BackendDeployParams, BackendDeployResult, BackendDeployStep, PrivateRegistryCredentials, RemoteDockerTlsOptions, RemotePullRegistryAuth, } from "./types";
2
+ export type { BackendDeployParams } from "./types";
12
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/backend-deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}