@alchemy.run/docker 0.0.0 → 2.0.0-beta.85

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 (98) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +46 -4
  3. package/lib/Bootstrap.d.ts +7 -0
  4. package/lib/Bootstrap.d.ts.map +1 -0
  5. package/lib/Bootstrap.js +25 -0
  6. package/lib/Bootstrap.js.map +1 -0
  7. package/lib/BuildHash.d.ts +56 -0
  8. package/lib/BuildHash.d.ts.map +1 -0
  9. package/lib/BuildHash.js +172 -0
  10. package/lib/BuildHash.js.map +1 -0
  11. package/lib/Container.d.ts +450 -0
  12. package/lib/Container.d.ts.map +1 -0
  13. package/lib/Container.js +745 -0
  14. package/lib/Container.js.map +1 -0
  15. package/lib/Context.d.ts +86 -0
  16. package/lib/Context.d.ts.map +1 -0
  17. package/lib/Context.js +146 -0
  18. package/lib/Context.js.map +1 -0
  19. package/lib/Docker.d.ts +527 -0
  20. package/lib/Docker.d.ts.map +1 -0
  21. package/lib/Docker.js +437 -0
  22. package/lib/Docker.js.map +1 -0
  23. package/lib/Dockerfile.d.ts +72 -0
  24. package/lib/Dockerfile.d.ts.map +1 -0
  25. package/lib/Dockerfile.js +12 -0
  26. package/lib/Dockerfile.js.map +1 -0
  27. package/lib/HealthcheckCommand.d.ts +17 -0
  28. package/lib/HealthcheckCommand.d.ts.map +1 -0
  29. package/lib/HealthcheckCommand.js +33 -0
  30. package/lib/HealthcheckCommand.js.map +1 -0
  31. package/lib/Image.d.ts +179 -0
  32. package/lib/Image.d.ts.map +1 -0
  33. package/lib/Image.js +210 -0
  34. package/lib/Image.js.map +1 -0
  35. package/lib/ImageSource.d.ts +288 -0
  36. package/lib/ImageSource.d.ts.map +1 -0
  37. package/lib/ImageSource.js +498 -0
  38. package/lib/ImageSource.js.map +1 -0
  39. package/lib/Network.d.ts +70 -0
  40. package/lib/Network.d.ts.map +1 -0
  41. package/lib/Network.js +111 -0
  42. package/lib/Network.js.map +1 -0
  43. package/lib/Providers.d.ts +21 -0
  44. package/lib/Providers.d.ts.map +1 -0
  45. package/lib/Providers.js +26 -0
  46. package/lib/Providers.js.map +1 -0
  47. package/lib/Registry.d.ts +47 -0
  48. package/lib/Registry.d.ts.map +1 -0
  49. package/lib/Registry.js +67 -0
  50. package/lib/Registry.js.map +1 -0
  51. package/lib/RegistryError.d.ts +21 -0
  52. package/lib/RegistryError.d.ts.map +1 -0
  53. package/lib/RegistryError.js +28 -0
  54. package/lib/RegistryError.js.map +1 -0
  55. package/lib/RemoteImage.d.ts +118 -0
  56. package/lib/RemoteImage.d.ts.map +1 -0
  57. package/lib/RemoteImage.js +164 -0
  58. package/lib/RemoteImage.js.map +1 -0
  59. package/lib/Service.d.ts +499 -0
  60. package/lib/Service.d.ts.map +1 -0
  61. package/lib/Service.js +730 -0
  62. package/lib/Service.js.map +1 -0
  63. package/lib/ServiceImage.d.ts +78 -0
  64. package/lib/ServiceImage.d.ts.map +1 -0
  65. package/lib/ServiceImage.js +162 -0
  66. package/lib/ServiceImage.js.map +1 -0
  67. package/lib/Swarm.d.ts +119 -0
  68. package/lib/Swarm.d.ts.map +1 -0
  69. package/lib/Swarm.js +148 -0
  70. package/lib/Swarm.js.map +1 -0
  71. package/lib/Volume.d.ts +94 -0
  72. package/lib/Volume.d.ts.map +1 -0
  73. package/lib/Volume.js +133 -0
  74. package/lib/Volume.js.map +1 -0
  75. package/lib/index.d.ts +14 -0
  76. package/lib/index.d.ts.map +1 -0
  77. package/lib/index.js +13 -0
  78. package/lib/index.js.map +1 -0
  79. package/package.json +58 -3
  80. package/src/Bootstrap.ts +51 -0
  81. package/src/BuildHash.ts +265 -0
  82. package/src/Container.ts +1118 -0
  83. package/src/Context.ts +215 -0
  84. package/src/Docker.ts +1173 -0
  85. package/src/Dockerfile.ts +81 -0
  86. package/src/HealthcheckCommand.ts +35 -0
  87. package/src/Image.ts +322 -0
  88. package/src/ImageSource.ts +842 -0
  89. package/src/Network.ts +169 -0
  90. package/src/Providers.ts +46 -0
  91. package/src/Registry.ts +91 -0
  92. package/src/RegistryError.ts +48 -0
  93. package/src/RemoteImage.ts +255 -0
  94. package/src/Service.ts +1264 -0
  95. package/src/ServiceImage.ts +252 -0
  96. package/src/Swarm.ts +221 -0
  97. package/src/Volume.ts +193 -0
  98. package/src/index.ts +17 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteImage.js","sourceRoot":"","sources":["../src/RemoteImage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,499 @@
1
+ import { Platform, type Main, type PlatformProps } from "alchemy/Platform";
2
+ import * as Provider from "alchemy/Provider";
3
+ import type { Resource } from "alchemy/Resource";
4
+ import { type HostRuntimeContext, type ServerHost } from "alchemy/Runtime/Process";
5
+ import { Stack } from "alchemy/Stack";
6
+ import * as Redacted from "effect/Redacted";
7
+ import type * as rolldown from "rolldown";
8
+ import { Docker } from "./Docker.ts";
9
+ import type { Providers } from "./Providers.ts";
10
+ export interface ServicePropsBase extends PlatformProps {
11
+ /**
12
+ * Service name.
13
+ *
14
+ * @default Generated from stack, stage, logical id, and instance id.
15
+ */
16
+ name?: string;
17
+ /**
18
+ * The engine the service is deployed to: a Docker context name, a
19
+ * `Docker.Context` resource, or a `Docker.Swarm` — passing the swarm also
20
+ * orders the service after the swarm is initialized.
21
+ */
22
+ context?: Docker.EngineRef;
23
+ /** Entrypoint command passed after the image. */
24
+ command?: string[];
25
+ /** Additional args appended after `command`. */
26
+ args?: string[];
27
+ /** Environment variables. Use Redacted for secrets. */
28
+ environment?: Record<string, string | Redacted.Redacted<string>>;
29
+ /**
30
+ * Environment variables injected by the platform (bound `Config` values and
31
+ * future bindings). Merged after `environment`; usually not set directly.
32
+ */
33
+ env?: Record<string, any>;
34
+ /** Overlay networks attached to this service. */
35
+ networks?: Array<string | Service.NetworkAttachment>;
36
+ /** Published port mappings. */
37
+ ports?: Service.PortMapping[];
38
+ /**
39
+ * Service discovery endpoint mode.
40
+ *
41
+ * @default "vip"
42
+ */
43
+ endpointMode?: "vip" | "dnsrr";
44
+ /**
45
+ * Desired number of service replicas.
46
+ *
47
+ * @default 1
48
+ */
49
+ replicas?: number;
50
+ /** Placement controls for task scheduling. */
51
+ placement?: Service.Placement;
52
+ /** Deprecated alias for `placement.constraints`. */
53
+ constraints?: string[];
54
+ /** Rolling update strategy for service updates. */
55
+ updateConfig?: Service.RolloutConfig;
56
+ /** Rollback strategy applied when updates fail. */
57
+ rollbackConfig?: Service.RolloutConfig;
58
+ /** Task restart behavior. */
59
+ restartPolicy?: Service.RestartPolicy;
60
+ /** Container healthcheck for service tasks. */
61
+ healthcheck?: Service.Healthcheck;
62
+ /** Grace period before force-killing a task during shutdown, e.g. `"30s"`. */
63
+ stopGracePeriod?: string;
64
+ /** Volume or bind mounts. */
65
+ volumes?: Service.VolumeMapping[];
66
+ /** Swarm secrets mounted into task containers. */
67
+ secrets?: Service.SecretRef[];
68
+ /** Swarm configs mounted into task containers. */
69
+ configs?: Service.ConfigRef[];
70
+ /**
71
+ * Mount task root filesystem read-only.
72
+ *
73
+ * @default false
74
+ */
75
+ readOnlyRootFs?: boolean;
76
+ /**
77
+ * Service labels. Alchemy's internal ownership labels are added
78
+ * automatically.
79
+ */
80
+ labels?: Record<string, string>;
81
+ }
82
+ /**
83
+ * Run a pre-built image: a registry reference or a Docker image resource
84
+ * (`Docker.Image` / `Docker.RemoteImage`).
85
+ */
86
+ export interface ImageServiceProps extends ServicePropsBase {
87
+ /** Docker image reference or Docker image resource. */
88
+ image: Service.Image;
89
+ main?: undefined;
90
+ }
91
+ /**
92
+ * Bundle an inline Effect program (`main`) into a generated image built
93
+ * against the service's Docker context. The optional `image` is the
94
+ * environment base (`FROM`) and must be able to run the bun runtime.
95
+ */
96
+ export interface BundledServiceProps extends ServicePropsBase {
97
+ /**
98
+ * Module entrypoint for the bundled program. This should typically be
99
+ * `import.meta.url` (or `import.meta.filename`) from an inline Effect
100
+ * program.
101
+ */
102
+ main: string;
103
+ /**
104
+ * Environment image used as the generated Dockerfile's `FROM`. Must be
105
+ * able to run the bun runtime.
106
+ *
107
+ * @default "oven/bun:1"
108
+ */
109
+ image?: string;
110
+ /**
111
+ * Container port the bundled HTTP server listens on. Baked into the image
112
+ * as `ENV PORT` + `EXPOSE`; publish it to the swarm ingress with `ports`.
113
+ */
114
+ port?: number;
115
+ /**
116
+ * Named export to load from `main`.
117
+ *
118
+ * @default "default"
119
+ */
120
+ handler?: string;
121
+ /** Bundler configuration for the entrypoint. */
122
+ build?: {
123
+ input?: Partial<rolldown.InputOptions>;
124
+ output?: Partial<rolldown.OutputOptions>;
125
+ };
126
+ }
127
+ /**
128
+ * Service props — the image comes from exactly one of two sources, flat on
129
+ * the props: `image` (a pre-built reference) or `main` (a bundled Effect
130
+ * program).
131
+ */
132
+ export type ServiceProps = ImageServiceProps | BundledServiceProps;
133
+ export declare namespace Service {
134
+ type Image = string | {
135
+ imageRef: string;
136
+ };
137
+ interface PortMapping {
138
+ /** Published port on the swarm node. Omit to let Swarm assign one dynamically. */
139
+ external?: number;
140
+ /** Container port receiving traffic. */
141
+ internal: number;
142
+ /**
143
+ * Protocol used for the mapping.
144
+ *
145
+ * @default "tcp"
146
+ */
147
+ protocol?: "tcp" | "udp";
148
+ /**
149
+ * Publish through the swarm routing mesh (`ingress`) or directly on each
150
+ * node (`host`).
151
+ *
152
+ * @default "ingress"
153
+ */
154
+ mode?: "ingress" | "host";
155
+ }
156
+ interface VolumeMapping {
157
+ /** Host path or named volume source. */
158
+ hostPath: string;
159
+ /** Container path. */
160
+ containerPath: string;
161
+ /**
162
+ * Mount read-only.
163
+ *
164
+ * @default false
165
+ */
166
+ readOnly?: boolean;
167
+ }
168
+ interface NetworkAttachment {
169
+ /** Network name. */
170
+ name: string;
171
+ /** Network aliases for the service's tasks. */
172
+ aliases?: string[];
173
+ }
174
+ interface Placement {
175
+ /** Placement constraints, e.g. `"node.role==worker"`. */
176
+ constraints?: string[];
177
+ /** Placement preferences, e.g. `"spread=node.labels.zone"`. */
178
+ preferences?: string[];
179
+ /** Maximum number of replicas per swarm node. */
180
+ maxReplicasPerNode?: number;
181
+ }
182
+ interface RolloutConfig {
183
+ /** Number of tasks updated simultaneously. */
184
+ parallelism?: number;
185
+ /** Delay between task updates, e.g. `"10s"`. */
186
+ delay?: string;
187
+ /** Duration to monitor each updated task for failure, e.g. `"30s"`. */
188
+ monitor?: string;
189
+ /** Action on update failure. */
190
+ failureAction?: "pause" | "continue" | "rollback";
191
+ /** Failure ratio tolerated during an update. */
192
+ maxFailureRatio?: number;
193
+ /** Operation order during updates. */
194
+ order?: "stop-first" | "start-first";
195
+ }
196
+ interface RestartPolicy {
197
+ /** Condition under which tasks restart. */
198
+ condition?: "none" | "on-failure" | "any";
199
+ /** Delay between restart attempts, e.g. `"5s"`. */
200
+ delay?: string;
201
+ /** Maximum restart attempts before giving up. */
202
+ maxAttempts?: number;
203
+ /** Window used to evaluate the restart policy, e.g. `"120s"`. */
204
+ window?: string;
205
+ }
206
+ interface Healthcheck {
207
+ /**
208
+ * Command to run for health checks. A string runs in the container's
209
+ * shell. An array follows Docker's healthcheck `Test` form:
210
+ * `["CMD-SHELL", "pg_isready -U app"]`, `["CMD", "pg_isready", "-U", "app"]`,
211
+ * or `["NONE"]` to disable the image's healthcheck.
212
+ */
213
+ cmd: string[] | string;
214
+ /** Time between checks, e.g. `"30s"`. */
215
+ interval?: string;
216
+ /** Maximum time a check may run, e.g. `"5s"`. */
217
+ timeout?: string;
218
+ /** Consecutive failures before unhealthy. */
219
+ retries?: number;
220
+ /** Startup grace period, e.g. `"30s"`. */
221
+ startPeriod?: string;
222
+ }
223
+ interface SecretRef {
224
+ /** Swarm secret name. */
225
+ source: string;
226
+ /** Target file name in `/run/secrets/`. Defaults to `source`. */
227
+ target?: string;
228
+ /** File owner uid. */
229
+ uid?: string;
230
+ /** File owner gid. */
231
+ gid?: string;
232
+ /** File mode, e.g. `0o400`. */
233
+ mode?: number | string;
234
+ }
235
+ interface ConfigRef {
236
+ /** Swarm config name. */
237
+ source: string;
238
+ /** Target path in the container. Defaults to `/<source>`. */
239
+ target?: string;
240
+ /** File owner uid. */
241
+ uid?: string;
242
+ /** File owner gid. */
243
+ gid?: string;
244
+ /** File mode, e.g. `0o444`. */
245
+ mode?: number | string;
246
+ }
247
+ }
248
+ export interface Service extends Resource<"Docker.Service", ServiceProps, {
249
+ /** Swarm service id. */
250
+ id: string;
251
+ /** Swarm service name. */
252
+ name: string;
253
+ /** Docker context the service is deployed to. */
254
+ context?: string;
255
+ /** Image reference the service runs. */
256
+ image: string;
257
+ /** Desired number of replicas. */
258
+ replicas: number;
259
+ /** Network ids the service's tasks attach to. */
260
+ networks: string[];
261
+ /** Published port mappings reported by Swarm. */
262
+ ports: Service.PortMapping[];
263
+ /** Service labels reported by Swarm. */
264
+ labels: Record<string, string>;
265
+ /** Service discovery endpoint mode. */
266
+ endpointMode: "vip" | "dnsrr";
267
+ /** Creation timestamp in milliseconds since epoch. */
268
+ createdAt: number;
269
+ /** Last update timestamp in milliseconds since epoch. */
270
+ updatedAt: number;
271
+ /** Content hash of the bundled program's image (`main` form only). */
272
+ code?: {
273
+ /** Content hash of the bundled program's image. */
274
+ hash: string;
275
+ };
276
+ }, never, Providers> {
277
+ }
278
+ /** Services available to an effectful `Service` impl at init time. */
279
+ export type ServiceServices = ServerHost;
280
+ /**
281
+ * The impl shape for an effectful `Service`: a long-running server returning
282
+ * `{ fetch }` (plus optional RPC methods).
283
+ */
284
+ export type ServiceShape = Main<ServiceServices>;
285
+ export interface ServiceRuntimeContext extends HostRuntimeContext {
286
+ readonly Type: "Docker.Service";
287
+ }
288
+ /**
289
+ * A Docker Swarm service: N replicas of a container kept alive by the swarm,
290
+ * deployed through the active (or a named) Docker context.
291
+ *
292
+ * The target engine must be a swarm manager — `Service` wraps
293
+ * `docker service`, swarm mode's orchestration API. Declare the swarm with
294
+ * `Docker.Swarm` and pass it as `context` so the service deploys after the
295
+ * swarm exists; for a plain single container on a non-swarm daemon use
296
+ * `Docker.Container` instead.
297
+ *
298
+ * The service's image comes from one of two sources:
299
+ *
300
+ * - `image` — run a pre-built reference (a registry ref, or a `Docker.Image`
301
+ * / `Docker.RemoteImage` resource).
302
+ * - `main` — bundle an inline Effect program into a generated bun image,
303
+ * built directly against the service's Docker context. The impl returns
304
+ * `{ fetch }` and may register background loops via `ServerHost.run` —
305
+ * the same effectful platform shape as `AWS.ECS.Service`.
306
+ *
307
+ * The bundled image is content-addressed and only rebuilt when the program
308
+ * (or its generated Dockerfile) changes. It is built on the target engine's
309
+ * local store — single-node swarms run it as-is; multi-node swarms need the
310
+ * image on a registry every node can reach (build with `Docker.Image` +
311
+ * `registry` and pass the pushed ref as `image` instead).
312
+ *
313
+ * Only replicated services are supported. Changes to the image, replicas,
314
+ * environment, labels, networks, ports, mounts, secrets, configs, constraints,
315
+ * healthcheck, and rollout or restart policies are applied in place with
316
+ * `docker service update`, so swarm rolls tasks over following `updateConfig`.
317
+ * An update that swarm rolls back or pauses fails the deploy with
318
+ * `DockerServiceUpdateFailed`. Changing the name, context, command, args,
319
+ * endpoint mode, placement preferences, or read-only root filesystem, or
320
+ * removing a policy setting, replaces the service (delete-then-create).
321
+ * ### Creating Services
322
+ * **Example:** Replicated Nginx
323
+ * ```typescript
324
+ * const swarm = yield* Docker.Swarm("swarm");
325
+ * const web = yield* Docker.Service("web", {
326
+ * context: swarm,
327
+ * image: "nginx:alpine",
328
+ * replicas: 3,
329
+ * ports: [{ external: 8080, internal: 80 }],
330
+ * });
331
+ * ```
332
+ *
333
+ * **Example:** Run a Built Image
334
+ * ```typescript
335
+ * const image = yield* Docker.Image("app-image", {
336
+ * build: { context: "./app" },
337
+ * });
338
+ * const app = yield* Docker.Service("app", {
339
+ * context: swarm,
340
+ * image,
341
+ * replicas: 2,
342
+ * });
343
+ * ```
344
+ *
345
+ * ### Effectful Services
346
+ * **Example:** Inline Effect Server
347
+ * ```typescript
348
+ * const swarm = yield* Docker.Swarm("swarm");
349
+ * const api = yield* Docker.Service(
350
+ * "Api",
351
+ * {
352
+ * context: swarm,
353
+ * main: import.meta.url,
354
+ * port: 3000,
355
+ * ports: [{ external: 8080, internal: 3000 }],
356
+ * replicas: 2,
357
+ * },
358
+ * Effect.gen(function* () {
359
+ * return {
360
+ * fetch: Effect.gen(function* () {
361
+ * return yield* HttpServerResponse.json({ ok: true });
362
+ * }),
363
+ * };
364
+ * }),
365
+ * );
366
+ * ```
367
+ *
368
+ * **Example:** Background Loops with ServerHost
369
+ * ```typescript
370
+ * // Class props may be an Effect, so the service can yield the swarm it
371
+ * // deploys into (declared once at module level).
372
+ * const Swarm = Docker.Swarm("swarm");
373
+ *
374
+ * export default class Worker extends Docker.Service<Worker>()(
375
+ * "Worker",
376
+ * Effect.gen(function* () {
377
+ * const swarm = yield* Swarm;
378
+ * return { context: swarm, main: import.meta.url, port: 3000 };
379
+ * }),
380
+ * Effect.gen(function* () {
381
+ * const host = yield* ServerHost;
382
+ * yield* host.run(
383
+ * pollQueue.pipe(Effect.repeat(Schedule.spaced("5 seconds")), Effect.asVoid),
384
+ * );
385
+ * return {
386
+ * fetch: Effect.succeed(HttpServerResponse.text("ok")),
387
+ * };
388
+ * }),
389
+ * ) {}
390
+ * ```
391
+ *
392
+ * ### Bundling & Tree-shaking
393
+ * `main` is bundled with rolldown at deploy time. Unused code is
394
+ * tree-shaken. `effect`, alchemy, and `@distilled.cloud` are marked
395
+ * pure so unused parts prune more aggressively. Your app is not
396
+ * marked pure.
397
+ *
398
+ * **Example:** Mark additional packages as pure
399
+ * Only list packages with no top-level side effects.
400
+ * ```typescript
401
+ * {
402
+ * main: import.meta.url,
403
+ * build: {
404
+ * pure: { packages: ["my-lib", "@my-scope/*"] },
405
+ * },
406
+ * }
407
+ * ```
408
+ *
409
+ * **Example:** Turn it off
410
+ * ```typescript
411
+ * {
412
+ * main: import.meta.url,
413
+ * build: { pure: false },
414
+ * }
415
+ * ```
416
+ *
417
+ * ### Docker Contexts
418
+ * **Example:** Deploy to a Remote Swarm over SSH
419
+ * ```typescript
420
+ * const vps = yield* Docker.Context("vps", {
421
+ * docker: "host=ssh://deploy@example.com",
422
+ * });
423
+ * const swarm = yield* Docker.Swarm("swarm", {
424
+ * context: vps,
425
+ * advertiseAddr: "10.0.0.1",
426
+ * });
427
+ * const app = yield* Docker.Service("app", {
428
+ * context: swarm,
429
+ * image: "nginx:alpine",
430
+ * replicas: 3,
431
+ * });
432
+ * ```
433
+ *
434
+ * ### Networks & Volumes
435
+ * **Example:** Overlay Network with Aliases
436
+ * ```typescript
437
+ * const network = yield* Docker.Network("app-net", {
438
+ * context: swarm,
439
+ * driver: "overlay",
440
+ * });
441
+ * const db = yield* Docker.Service("db", {
442
+ * context: swarm,
443
+ * image: "postgres:18-alpine",
444
+ * networks: [{ name: network.name, aliases: ["postgres"] }],
445
+ * volumes: [{ hostPath: "pg-data", containerPath: "/var/lib/postgresql/data" }],
446
+ * });
447
+ * ```
448
+ *
449
+ * ### Rollouts & Placement
450
+ * **Example:** Rolling Update with Rollback
451
+ * ```typescript
452
+ * const app = yield* Docker.Service("app", {
453
+ * image: "ghcr.io/acme/app:latest",
454
+ * replicas: 4,
455
+ * updateConfig: {
456
+ * parallelism: 1,
457
+ * delay: "10s",
458
+ * failureAction: "rollback",
459
+ * order: "start-first",
460
+ * },
461
+ * placement: {
462
+ * constraints: ["node.role==worker"],
463
+ * maxReplicasPerNode: 2,
464
+ * },
465
+ * });
466
+ * ```
467
+ *
468
+ * ### Secrets & Configs
469
+ * **Example:** Mount Swarm Secrets
470
+ * ```typescript
471
+ * const app = yield* Docker.Service("app", {
472
+ * image: "ghcr.io/acme/app:latest",
473
+ * secrets: [{ source: "db-password", target: "db_password", mode: 0o400 }],
474
+ * configs: [{ source: "app-config", target: "/etc/app/config.yaml" }],
475
+ * });
476
+ * ```
477
+ *
478
+ * @resource
479
+ * @product Swarm
480
+ */
481
+ export declare const Service: Platform<Service, ServiceServices, ServiceShape, ServiceRuntimeContext>;
482
+ declare const DockerServiceUpdateFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
483
+ readonly _tag: "DockerServiceUpdateFailed";
484
+ } & Readonly<A>;
485
+ /**
486
+ * A `docker service update` that swarm rolled back or paused instead of
487
+ * completing. `--detach=false` exits 0 on a rollback and 1 on a pause, so the
488
+ * provider reads the service's `UpdateStatus` after the update.
489
+ */
490
+ export declare class DockerServiceUpdateFailed extends DockerServiceUpdateFailed_base<{
491
+ readonly service: string;
492
+ readonly state: string;
493
+ readonly reason: string;
494
+ }> {
495
+ get message(): string;
496
+ }
497
+ export declare const ServiceProvider: () => import("effect/Layer").Layer<Provider.Provider<Service>, never, import("alchemy/AlchemyContext").AlchemyContext | Docker | import("effect/FileSystem").FileSystem | import("effect/Path").Path | Stack | import("alchemy/Stage").Stage>;
498
+ export {};
499
+ //# sourceMappingURL=Service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.d.ts","sourceRoot":"","sources":["../src/Service.ts"],"names":[],"mappings":"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"}