alchemy 0.35.1 → 0.37.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.
Files changed (78) hide show
  1. package/bin/alchemy.mjs +45102 -45100
  2. package/bin/alchemy.ts +1 -1
  3. package/bin/create-alchemy.ts +10 -4
  4. package/lib/cloudflare/bundle/bundle-worker.js +1 -1
  5. package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
  6. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  7. package/lib/cloudflare/d1-database.js +0 -3
  8. package/lib/cloudflare/d1-database.js.map +1 -1
  9. package/lib/cloudflare/do-state-store/internal.d.ts.map +1 -1
  10. package/lib/cloudflare/do-state-store/internal.js +35 -28
  11. package/lib/cloudflare/do-state-store/internal.js.map +1 -1
  12. package/lib/cloudflare/website.d.ts.map +1 -1
  13. package/lib/cloudflare/website.js +28 -13
  14. package/lib/cloudflare/website.js.map +1 -1
  15. package/lib/cloudflare/worker-metadata.d.ts +8 -5
  16. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  17. package/lib/cloudflare/worker-metadata.js +48 -11
  18. package/lib/cloudflare/worker-metadata.js.map +1 -1
  19. package/lib/cloudflare/worker.d.ts +18 -12
  20. package/lib/cloudflare/worker.d.ts.map +1 -1
  21. package/lib/cloudflare/worker.js +74 -68
  22. package/lib/cloudflare/worker.js.map +1 -1
  23. package/lib/docker/api.d.ts +185 -0
  24. package/lib/docker/api.d.ts.map +1 -0
  25. package/lib/docker/api.js +288 -0
  26. package/lib/docker/api.js.map +1 -0
  27. package/lib/docker/container.d.ts +147 -0
  28. package/lib/docker/container.d.ts.map +1 -0
  29. package/lib/docker/container.js +109 -0
  30. package/lib/docker/container.js.map +1 -0
  31. package/lib/docker/image.d.ts +92 -0
  32. package/lib/docker/image.d.ts.map +1 -0
  33. package/lib/docker/image.js +92 -0
  34. package/lib/docker/image.js.map +1 -0
  35. package/lib/docker/index.d.ts +7 -0
  36. package/lib/docker/index.d.ts.map +1 -0
  37. package/lib/docker/index.js +7 -0
  38. package/lib/docker/index.js.map +1 -0
  39. package/lib/docker/network.d.ts +62 -0
  40. package/lib/docker/network.d.ts.map +1 -0
  41. package/lib/docker/network.js +49 -0
  42. package/lib/docker/network.js.map +1 -0
  43. package/lib/docker/remote-image.d.ts +45 -0
  44. package/lib/docker/remote-image.d.ts.map +1 -0
  45. package/lib/docker/remote-image.js +36 -0
  46. package/lib/docker/remote-image.js.map +1 -0
  47. package/lib/docker/volume.d.ts +83 -0
  48. package/lib/docker/volume.d.ts.map +1 -0
  49. package/lib/docker/volume.js +76 -0
  50. package/lib/docker/volume.js.map +1 -0
  51. package/lib/os/exec.d.ts +19 -1
  52. package/lib/os/exec.d.ts.map +1 -1
  53. package/lib/os/exec.js +28 -4
  54. package/lib/os/exec.js.map +1 -1
  55. package/lib/stripe/price.d.ts +24 -0
  56. package/lib/stripe/price.d.ts.map +1 -1
  57. package/lib/stripe/price.js +30 -0
  58. package/lib/stripe/price.js.map +1 -1
  59. package/lib/util/cli.d.ts.map +1 -1
  60. package/lib/util/cli.js +1 -1
  61. package/lib/util/cli.js.map +1 -1
  62. package/package.json +5 -1
  63. package/src/cloudflare/bundle/bundle-worker.ts +1 -1
  64. package/src/cloudflare/d1-database.ts +0 -4
  65. package/src/cloudflare/do-state-store/internal.ts +45 -29
  66. package/src/cloudflare/website.ts +40 -16
  67. package/src/cloudflare/worker-metadata.ts +101 -19
  68. package/src/cloudflare/worker.ts +104 -148
  69. package/src/docker/api.ts +365 -0
  70. package/src/docker/container.ts +267 -0
  71. package/src/docker/image.ts +200 -0
  72. package/src/docker/index.ts +6 -0
  73. package/src/docker/network.ts +101 -0
  74. package/src/docker/remote-image.ts +83 -0
  75. package/src/docker/volume.ts +154 -0
  76. package/src/os/exec.ts +48 -6
  77. package/src/stripe/price.ts +47 -1
  78. package/src/util/cli.ts +1 -3
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Options for Docker API requests
3
+ */
4
+ export interface DockerApiOptions {
5
+ /**
6
+ * Custom path to Docker binary
7
+ */
8
+ dockerPath?: string;
9
+ }
10
+ type VolumeInfo = {
11
+ CreatedAt: string;
12
+ Driver: string;
13
+ Labels: Record<string, string>;
14
+ Mountpoint: string;
15
+ Name: string;
16
+ Options: Record<string, string>;
17
+ Scope: string;
18
+ };
19
+ /**
20
+ * Docker API client that wraps Docker CLI commands
21
+ */
22
+ export declare class DockerApi {
23
+ /** Path to Docker CLI */
24
+ readonly dockerPath: string;
25
+ /**
26
+ * Create a new Docker API client
27
+ *
28
+ * @param options Docker API options
29
+ */
30
+ constructor(options?: DockerApiOptions);
31
+ /**
32
+ * Run a Docker CLI command
33
+ *
34
+ * @param args Command arguments to pass to Docker CLI
35
+ * @returns Result of the command
36
+ */
37
+ exec(args: string[]): Promise<{
38
+ stdout: string;
39
+ stderr: string;
40
+ }>;
41
+ /**
42
+ * Check if Docker daemon is running
43
+ *
44
+ * @returns True if Docker daemon is running
45
+ */
46
+ isRunning(): Promise<boolean>;
47
+ /**
48
+ * Pull Docker image
49
+ *
50
+ * @param image Image name and tag
51
+ * @returns Result of the pull command
52
+ */
53
+ pullImage(image: string): Promise<{
54
+ stdout: string;
55
+ stderr: string;
56
+ }>;
57
+ /**
58
+ * Build Docker image
59
+ *
60
+ * @param path Path to Dockerfile directory
61
+ * @param tag Tag for the image
62
+ * @param buildArgs Build arguments
63
+ * @returns Result of the build command
64
+ */
65
+ buildImage(path: string, tag: string, buildArgs?: Record<string, string>): Promise<{
66
+ stdout: string;
67
+ stderr: string;
68
+ }>;
69
+ /**
70
+ * List Docker images
71
+ *
72
+ * @returns JSON string containing image list
73
+ */
74
+ listImages(): Promise<string>;
75
+ /**
76
+ * Create Docker container
77
+ *
78
+ * @param image Image name
79
+ * @param name Container name
80
+ * @param options Container options
81
+ * @returns Container ID
82
+ */
83
+ createContainer(image: string, name: string, options?: {
84
+ ports?: Record<string, string>;
85
+ env?: Record<string, string>;
86
+ volumes?: Record<string, string>;
87
+ cmd?: string[];
88
+ }): Promise<string>;
89
+ /**
90
+ * Start Docker container
91
+ *
92
+ * @param containerId Container ID or name
93
+ */
94
+ startContainer(containerId: string): Promise<void>;
95
+ /**
96
+ * Stop Docker container
97
+ *
98
+ * @param containerId Container ID or name
99
+ */
100
+ stopContainer(containerId: string): Promise<void>;
101
+ /**
102
+ * Remove Docker container
103
+ *
104
+ * @param containerId Container ID or name
105
+ * @param force Force removal
106
+ */
107
+ removeContainer(containerId: string, force?: boolean): Promise<void>;
108
+ /**
109
+ * Get container logs
110
+ *
111
+ * @param containerId Container ID or name
112
+ * @returns Container logs
113
+ */
114
+ getContainerLogs(containerId: string): Promise<string>;
115
+ /**
116
+ * Check if a container exists
117
+ *
118
+ * @param containerId Container ID or name
119
+ * @returns True if container exists
120
+ */
121
+ containerExists(containerId: string): Promise<boolean>;
122
+ /**
123
+ * Create Docker network
124
+ *
125
+ * @param name Network name
126
+ * @param driver Network driver
127
+ * @returns Network ID
128
+ */
129
+ createNetwork(name: string, driver?: string): Promise<string>;
130
+ /**
131
+ * Remove Docker network
132
+ *
133
+ * @param networkId Network ID or name
134
+ */
135
+ removeNetwork(networkId: string): Promise<void>;
136
+ /**
137
+ * Connect container to network
138
+ *
139
+ * @param containerId Container ID or name
140
+ * @param networkId Network ID or name
141
+ */
142
+ connectNetwork(containerId: string, networkId: string, options?: {
143
+ aliases?: string[];
144
+ }): Promise<void>;
145
+ /**
146
+ * Disconnect container from network
147
+ *
148
+ * @param containerId Container ID or name
149
+ * @param networkId Network ID or name
150
+ */
151
+ disconnectNetwork(containerId: string, networkId: string): Promise<void>;
152
+ /**
153
+ * Create Docker volume
154
+ *
155
+ * @param name Volume name
156
+ * @param driver Volume driver
157
+ * @param driverOpts Driver options
158
+ * @param labels Volume labels
159
+ * @returns Volume name
160
+ */
161
+ createVolume(name: string, driver?: string, driverOpts?: Record<string, string>, labels?: Record<string, string>): Promise<string>;
162
+ /**
163
+ * Remove Docker volume
164
+ *
165
+ * @param volumeName Volume name
166
+ * @param force Force removal of the volume
167
+ */
168
+ removeVolume(volumeName: string, force?: boolean): Promise<void>;
169
+ /**
170
+ * Get Docker volume information
171
+ *
172
+ * @param volumeName Volume name
173
+ * @returns Volume details in JSON format
174
+ */
175
+ inspectVolume(volumeName: string): Promise<VolumeInfo[]>;
176
+ /**
177
+ * Check if a volume exists
178
+ *
179
+ * @param volumeName Volume name
180
+ * @returns True if volume exists
181
+ */
182
+ volumeExists(volumeName: string): Promise<boolean>;
183
+ }
184
+ export {};
185
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/docker/api.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IACpB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;gBACS,OAAO,GAAE,gBAAqB;IAI1C;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAWvE;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAanC;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAI3E;;;;;;;OAOG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACrC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAU9C;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC;;;;;;;OAOG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;KACX,GACL,OAAO,CAAC,MAAM,CAAC;IAmClB;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE;;;;;OAKG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5D;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5D;;;;;;OAMG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrE;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACf,GACL,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;;OAKG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;OAQG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,MAAM,SAAU,EAChB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACvC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,OAAO,CAAC,MAAM,CAAC;IAiBlB;;;;;OAKG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE;;;;;OAKG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAS9D;;;;;OAKG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQzD"}
@@ -0,0 +1,288 @@
1
+ import { exec } from "../os/exec.js";
2
+ /**
3
+ * Docker API client that wraps Docker CLI commands
4
+ */
5
+ export class DockerApi {
6
+ /** Path to Docker CLI */
7
+ dockerPath;
8
+ /**
9
+ * Create a new Docker API client
10
+ *
11
+ * @param options Docker API options
12
+ */
13
+ constructor(options = {}) {
14
+ this.dockerPath = options.dockerPath || "docker";
15
+ }
16
+ /**
17
+ * Run a Docker CLI command
18
+ *
19
+ * @param args Command arguments to pass to Docker CLI
20
+ * @returns Result of the command
21
+ */
22
+ async exec(args) {
23
+ const command = `${this.dockerPath} ${args.join(" ")}`;
24
+ const result = (await exec(command, {
25
+ captureOutput: true,
26
+ shell: true,
27
+ env: process.env,
28
+ }));
29
+ return result;
30
+ }
31
+ /**
32
+ * Check if Docker daemon is running
33
+ *
34
+ * @returns True if Docker daemon is running
35
+ */
36
+ async isRunning() {
37
+ try {
38
+ // Use a quick, lightweight command to test if Docker is running
39
+ await this.exec(["version", "--format", "{{.Server.Version}}"]);
40
+ return true;
41
+ }
42
+ catch (error) {
43
+ console.log(`Docker daemon not running: ${error instanceof Error ? error.message : String(error)}`);
44
+ return false;
45
+ }
46
+ }
47
+ /**
48
+ * Pull Docker image
49
+ *
50
+ * @param image Image name and tag
51
+ * @returns Result of the pull command
52
+ */
53
+ async pullImage(image) {
54
+ return this.exec(["pull", image]);
55
+ }
56
+ /**
57
+ * Build Docker image
58
+ *
59
+ * @param path Path to Dockerfile directory
60
+ * @param tag Tag for the image
61
+ * @param buildArgs Build arguments
62
+ * @returns Result of the build command
63
+ */
64
+ async buildImage(path, tag, buildArgs = {}) {
65
+ const args = ["build", "-t", tag, path];
66
+ for (const [key, value] of Object.entries(buildArgs)) {
67
+ args.push("--build-arg", `${key}=${value}`);
68
+ }
69
+ return this.exec(args);
70
+ }
71
+ /**
72
+ * List Docker images
73
+ *
74
+ * @returns JSON string containing image list
75
+ */
76
+ async listImages() {
77
+ const { stdout } = await this.exec(["images", "--format", "{{json .}}"]);
78
+ return stdout;
79
+ }
80
+ /**
81
+ * Create Docker container
82
+ *
83
+ * @param image Image name
84
+ * @param name Container name
85
+ * @param options Container options
86
+ * @returns Container ID
87
+ */
88
+ async createContainer(image, name, options = {}) {
89
+ const args = ["create", "--name", name];
90
+ // Add port mappings
91
+ if (options.ports) {
92
+ for (const [hostPort, containerPort] of Object.entries(options.ports)) {
93
+ args.push("-p", `${hostPort}:${containerPort}`);
94
+ }
95
+ }
96
+ // Add environment variables
97
+ if (options.env) {
98
+ for (const [key, value] of Object.entries(options.env)) {
99
+ args.push("-e", `${key}=${value}`);
100
+ }
101
+ }
102
+ // Add volume mappings
103
+ if (options.volumes) {
104
+ for (const [hostPath, containerPath] of Object.entries(options.volumes)) {
105
+ args.push("-v", `${hostPath}:${containerPath}`);
106
+ }
107
+ }
108
+ args.push(image);
109
+ // Add command if specified
110
+ if (options.cmd && options.cmd.length > 0) {
111
+ args.push(...options.cmd);
112
+ }
113
+ const { stdout } = await this.exec(args);
114
+ return stdout.trim();
115
+ }
116
+ /**
117
+ * Start Docker container
118
+ *
119
+ * @param containerId Container ID or name
120
+ */
121
+ async startContainer(containerId) {
122
+ await this.exec(["start", containerId]);
123
+ }
124
+ /**
125
+ * Stop Docker container
126
+ *
127
+ * @param containerId Container ID or name
128
+ */
129
+ async stopContainer(containerId) {
130
+ await this.exec(["stop", containerId]);
131
+ }
132
+ /**
133
+ * Remove Docker container
134
+ *
135
+ * @param containerId Container ID or name
136
+ * @param force Force removal
137
+ */
138
+ async removeContainer(containerId, force = false) {
139
+ const args = ["rm"];
140
+ if (force) {
141
+ args.push("-f");
142
+ }
143
+ args.push(containerId);
144
+ await this.exec(args);
145
+ }
146
+ /**
147
+ * Get container logs
148
+ *
149
+ * @param containerId Container ID or name
150
+ * @returns Container logs
151
+ */
152
+ async getContainerLogs(containerId) {
153
+ const { stdout } = await this.exec(["logs", containerId]);
154
+ return stdout;
155
+ }
156
+ /**
157
+ * Check if a container exists
158
+ *
159
+ * @param containerId Container ID or name
160
+ * @returns True if container exists
161
+ */
162
+ async containerExists(containerId) {
163
+ try {
164
+ await this.exec(["inspect", containerId]);
165
+ return true;
166
+ }
167
+ catch (_error) {
168
+ return false;
169
+ }
170
+ }
171
+ /**
172
+ * Create Docker network
173
+ *
174
+ * @param name Network name
175
+ * @param driver Network driver
176
+ * @returns Network ID
177
+ */
178
+ async createNetwork(name, driver = "bridge") {
179
+ const { stdout } = await this.exec([
180
+ "network",
181
+ "create",
182
+ "--driver",
183
+ driver,
184
+ name,
185
+ ]);
186
+ return stdout.trim();
187
+ }
188
+ /**
189
+ * Remove Docker network
190
+ *
191
+ * @param networkId Network ID or name
192
+ */
193
+ async removeNetwork(networkId) {
194
+ await this.exec(["network", "rm", networkId]);
195
+ }
196
+ /**
197
+ * Connect container to network
198
+ *
199
+ * @param containerId Container ID or name
200
+ * @param networkId Network ID or name
201
+ */
202
+ async connectNetwork(containerId, networkId, options = {}) {
203
+ const args = ["network", "connect"];
204
+ if (options.aliases) {
205
+ for (const alias of options.aliases) {
206
+ args.push("--alias", alias);
207
+ }
208
+ }
209
+ args.push(networkId, containerId);
210
+ await this.exec(args);
211
+ }
212
+ /**
213
+ * Disconnect container from network
214
+ *
215
+ * @param containerId Container ID or name
216
+ * @param networkId Network ID or name
217
+ */
218
+ async disconnectNetwork(containerId, networkId) {
219
+ await this.exec(["network", "disconnect", networkId, containerId]);
220
+ }
221
+ /**
222
+ * Create Docker volume
223
+ *
224
+ * @param name Volume name
225
+ * @param driver Volume driver
226
+ * @param driverOpts Driver options
227
+ * @param labels Volume labels
228
+ * @returns Volume name
229
+ */
230
+ async createVolume(name, driver = "local", driverOpts = {}, labels = {}) {
231
+ const args = ["volume", "create", "--name", name, "--driver", driver];
232
+ // Add driver options
233
+ for (const [key, value] of Object.entries(driverOpts)) {
234
+ args.push("--opt", `${key}=${value}`);
235
+ }
236
+ // Add labels
237
+ for (const [key, value] of Object.entries(labels)) {
238
+ args.push("--label", `${key}=${value}`);
239
+ }
240
+ const { stdout } = await this.exec(args);
241
+ return stdout.trim();
242
+ }
243
+ /**
244
+ * Remove Docker volume
245
+ *
246
+ * @param volumeName Volume name
247
+ * @param force Force removal of the volume
248
+ */
249
+ async removeVolume(volumeName, force = false) {
250
+ const args = ["volume", "rm"];
251
+ if (force) {
252
+ args.push("--force");
253
+ }
254
+ args.push(volumeName);
255
+ await this.exec(args);
256
+ }
257
+ /**
258
+ * Get Docker volume information
259
+ *
260
+ * @param volumeName Volume name
261
+ * @returns Volume details in JSON format
262
+ */
263
+ async inspectVolume(volumeName) {
264
+ const { stdout } = await this.exec(["volume", "inspect", volumeName]);
265
+ try {
266
+ return JSON.parse(stdout.trim());
267
+ }
268
+ catch (_error) {
269
+ return [];
270
+ }
271
+ }
272
+ /**
273
+ * Check if a volume exists
274
+ *
275
+ * @param volumeName Volume name
276
+ * @returns True if volume exists
277
+ */
278
+ async volumeExists(volumeName) {
279
+ try {
280
+ await this.inspectVolume(volumeName);
281
+ return true;
282
+ }
283
+ catch (_error) {
284
+ return false;
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/docker/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import type { Context } from "../context.ts";
2
+ import { Resource } from "../resource.ts";
3
+ import type { Image } from "./image.ts";
4
+ import type { RemoteImage } from "./remote-image.ts";
5
+ /**
6
+ * Port mapping configuration
7
+ */
8
+ export interface PortMapping {
9
+ /**
10
+ * External port on the host
11
+ */
12
+ external: number | string;
13
+ /**
14
+ * Internal port inside the container
15
+ */
16
+ internal: number | string;
17
+ /**
18
+ * Protocol (tcp or udp)
19
+ */
20
+ protocol?: "tcp" | "udp";
21
+ }
22
+ /**
23
+ * Volume mapping configuration
24
+ */
25
+ export interface VolumeMapping {
26
+ /**
27
+ * Host path
28
+ */
29
+ hostPath: string;
30
+ /**
31
+ * Container path
32
+ */
33
+ containerPath: string;
34
+ /**
35
+ * Read-only flag
36
+ */
37
+ readOnly?: boolean;
38
+ }
39
+ /**
40
+ * Network mapping configuration
41
+ */
42
+ export interface NetworkMapping {
43
+ /**
44
+ * Network name or ID
45
+ */
46
+ name: string;
47
+ /**
48
+ * Aliases for the container in the network
49
+ */
50
+ aliases?: string[];
51
+ }
52
+ /**
53
+ * Properties for creating a Docker container
54
+ */
55
+ export interface ContainerProps {
56
+ /**
57
+ * Image to use for the container
58
+ * Can be an Alchemy Image or RemoteImage resource or a string image reference
59
+ */
60
+ image: Image | RemoteImage | string;
61
+ /**
62
+ * Container name
63
+ */
64
+ name?: string;
65
+ /**
66
+ * Command to run in the container
67
+ */
68
+ command?: string[];
69
+ /**
70
+ * Environment variables
71
+ */
72
+ environment?: Record<string, string>;
73
+ /**
74
+ * Port mappings
75
+ */
76
+ ports?: PortMapping[];
77
+ /**
78
+ * Volume mappings
79
+ */
80
+ volumes?: VolumeMapping[];
81
+ /**
82
+ * Restart policy
83
+ */
84
+ restart?: "no" | "always" | "on-failure" | "unless-stopped";
85
+ /**
86
+ * Networks to connect to
87
+ */
88
+ networks?: NetworkMapping[];
89
+ /**
90
+ * Whether to remove the container when it exits
91
+ */
92
+ removeOnExit?: boolean;
93
+ /**
94
+ * Start the container after creation
95
+ */
96
+ start?: boolean;
97
+ }
98
+ /**
99
+ * Docker Container resource
100
+ */
101
+ export interface Container extends Resource<"docker::Container">, ContainerProps {
102
+ /**
103
+ * Container ID
104
+ */
105
+ id: string;
106
+ /**
107
+ * Container state
108
+ */
109
+ state?: "created" | "running" | "paused" | "stopped" | "exited";
110
+ /**
111
+ * Time when the container was created
112
+ */
113
+ createdAt: number;
114
+ }
115
+ /**
116
+ * Create and manage a Docker Container
117
+ *
118
+ * @example
119
+ * // Create a simple Nginx container
120
+ * const webContainer = await Container("web", {
121
+ * image: "nginx:latest",
122
+ * ports: [
123
+ * { external: 8080, internal: 80 }
124
+ * ],
125
+ * start: true
126
+ * });
127
+ *
128
+ * @example
129
+ * // Create a container with environment variables and volume mounts
130
+ * const appContainer = await Container("app", {
131
+ * image: customImage, // Using an Alchemy RemoteImage resource
132
+ * environment: {
133
+ * NODE_ENV: "production",
134
+ * API_KEY: "secret-key"
135
+ * },
136
+ * volumes: [
137
+ * { hostPath: "./data", containerPath: "/app/data" }
138
+ * ],
139
+ * ports: [
140
+ * { external: 3000, internal: 3000 }
141
+ * ],
142
+ * restart: "always",
143
+ * start: true
144
+ * });
145
+ */
146
+ export declare const Container: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<Container>, id: string, props: ContainerProps) => Promise<Container>);
147
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/docker/container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAE5D;;OAEG;IACH,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SACf,SAAQ,QAAQ,CAAC,mBAAmB,CAAC,EACnC,cAAc;IAChB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEhE;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,SAAS,yFAGZ,OAAO,CAAC,SAAS,CAAC,MACpB,MAAM,SACH,cAAc,KACpB,OAAO,CAAC,SAAS,CAAC,CA0FtB,CAAC"}