@livestore/utils-dev 0.0.0-snapshot-7156ff2a7c67a5a9cdd850a5826201d068840f0c → 0.0.0-snapshot-e57f280cc5ca4d636f9a5ef952cb6e0180247178
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/dist/.tsbuildinfo.json +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.d.ts +11 -1
- package/dist/node/DockerComposeService/DockerComposeService.d.ts.map +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.js +27 -10
- package/dist/node/DockerComposeService/DockerComposeService.js.map +1 -1
- package/package.json +3 -3
- package/src/node/DockerComposeService/DockerComposeService.ts +52 -10
|
@@ -3,7 +3,7 @@ declare const DockerComposeError_base: Schema.TaggedErrorClass<DockerComposeErro
|
|
|
3
3
|
readonly _tag: Schema.tag<"DockerComposeError">;
|
|
4
4
|
} & {
|
|
5
5
|
cause: typeof Schema.Defect;
|
|
6
|
-
|
|
6
|
+
note: typeof Schema.String;
|
|
7
7
|
}>;
|
|
8
8
|
export declare class DockerComposeError extends DockerComposeError_base {
|
|
9
9
|
}
|
|
@@ -29,6 +29,11 @@ export interface DockerComposeOperations {
|
|
|
29
29
|
readonly pull: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
30
30
|
readonly start: (options?: StartOptions) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
31
31
|
readonly stop: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
32
|
+
readonly down: (options?: {
|
|
33
|
+
readonly env?: Record<string, string>;
|
|
34
|
+
readonly volumes?: boolean;
|
|
35
|
+
readonly removeOrphans?: boolean;
|
|
36
|
+
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
32
37
|
readonly logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
33
38
|
}
|
|
34
39
|
declare const DockerComposeService_base: Effect.Service.Class<DockerComposeService, "DockerComposeService", {
|
|
@@ -36,6 +41,11 @@ declare const DockerComposeService_base: Effect.Service.Class<DockerComposeServi
|
|
|
36
41
|
pull: Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
37
42
|
start: (options?: StartOptions) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, Scope.Scope>;
|
|
38
43
|
stop: Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
44
|
+
down: (options?: {
|
|
45
|
+
readonly env?: Record<string, string>;
|
|
46
|
+
readonly volumes?: boolean;
|
|
47
|
+
readonly removeOrphans?: boolean;
|
|
48
|
+
}) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
39
49
|
logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError, never>;
|
|
40
50
|
}, never, CommandExecutor.CommandExecutor>;
|
|
41
51
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerComposeService.d.ts","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACpB,QAAQ,EACR,MAAM,EACN,KAAK,aAAa,EAElB,MAAM,EACN,KAAK,KAAK,EACV,MAAM,EACP,MAAM,yBAAyB,CAAA;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;KACtC,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,CAAC,EAAE,YAAY,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,CAAC,EAAE,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC1F;;4BAGgB,iBAAiB;;0BA4BJ,YAAY;;
|
|
1
|
+
{"version":3,"file":"DockerComposeService.d.ts","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACpB,QAAQ,EACR,MAAM,EACN,KAAK,aAAa,EAElB,MAAM,EACN,KAAK,KAAK,EACV,MAAM,EACP,MAAM,yBAAyB,CAAA;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;KACtC,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,CAAC,EAAE,YAAY,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KACjC,KACE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IAC1E,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,CAAC,EAAE,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC1F;;4BAGgB,iBAAiB;;0BA4BJ,YAAY;;yBAgHZ;YACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;YAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SACjC;yBAzCsB,WAAW;;;AAxGxC,qBAAa,oBAAqB,SAAQ,yBAgLxC;CAAG;AAyCL,eAAO,MAAM,gCAAgC,GAC3C,MAAM,iBAAiB,GAAG;IACxB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;CAC1C,KACA,MAAM,CAAC,MAAM,CACd,IAAI,EACJ,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAChD,oBAAoB,GAAG,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAYlE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { omitUndefineds } from '@livestore/utils';
|
|
|
2
2
|
import { Command, Duration, Effect, Schedule, Schema, Stream, } from '@livestore/utils/effect';
|
|
3
3
|
export class DockerComposeError extends Schema.TaggedError()('DockerComposeError', {
|
|
4
4
|
cause: Schema.Defect,
|
|
5
|
-
|
|
5
|
+
note: Schema.String,
|
|
6
6
|
}) {
|
|
7
7
|
}
|
|
8
8
|
export class DockerComposeService extends Effect.Service()('DockerComposeService', {
|
|
@@ -15,7 +15,7 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
15
15
|
? Effect.void
|
|
16
16
|
: Effect.fail(new DockerComposeError({
|
|
17
17
|
cause: new Error(`Docker compose pull failed with exit code ${exitCode}`),
|
|
18
|
-
|
|
18
|
+
note: `Docker compose pull failed with exit code ${exitCode}`,
|
|
19
19
|
}))), Effect.provide(commandExecutorContext));
|
|
20
20
|
yield* Effect.log(`Successfully pulled Docker Compose images`);
|
|
21
21
|
}).pipe(Effect.withSpan('pullDockerComposeImages'));
|
|
@@ -27,16 +27,16 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
27
27
|
baseArgs.push('-d');
|
|
28
28
|
if (serviceName)
|
|
29
29
|
baseArgs.push(serviceName);
|
|
30
|
-
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options.env ?? {}), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
30
|
+
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options.env ?? {}), Command.stderr('inherit'), Command.stdout('inherit'), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
31
31
|
cause,
|
|
32
|
-
|
|
32
|
+
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
33
33
|
}))), Effect.provide(commandExecutorContext));
|
|
34
34
|
// Wait for command completion
|
|
35
35
|
yield* command.exitCode.pipe(Effect.flatMap((exitCode) => exitCode === 0
|
|
36
36
|
? Effect.void
|
|
37
37
|
: Effect.fail(new DockerComposeError({
|
|
38
38
|
cause: new Error(`Docker compose exited with code ${exitCode}`),
|
|
39
|
-
|
|
39
|
+
note: `Docker Compose failed to start with exit code ${exitCode}. Env: ${JSON.stringify(options.env)}`,
|
|
40
40
|
}))), Effect.provide(commandExecutorContext));
|
|
41
41
|
// Perform health check if requested
|
|
42
42
|
if (healthCheck) {
|
|
@@ -53,7 +53,7 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
53
53
|
? Effect.void
|
|
54
54
|
: Effect.fail(new DockerComposeError({
|
|
55
55
|
cause: new Error(`Docker compose stop exited with code ${exitCode}`),
|
|
56
|
-
|
|
56
|
+
note: `Failed to stop Docker Compose services`,
|
|
57
57
|
}))), Effect.provide(commandExecutorContext));
|
|
58
58
|
yield* Effect.log(`Docker Compose services stopped successfully`);
|
|
59
59
|
}).pipe(Effect.withSpan('stopDockerCompose'));
|
|
@@ -70,14 +70,31 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
70
70
|
baseArgs.push(serviceName);
|
|
71
71
|
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
72
72
|
cause,
|
|
73
|
-
|
|
73
|
+
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
74
74
|
}))), Effect.provide(commandExecutorContext));
|
|
75
75
|
return command.stdout.pipe(Stream.decodeText('utf8'), Stream.splitLines, Stream.mapError((cause) => new DockerComposeError({
|
|
76
76
|
cause,
|
|
77
|
-
|
|
77
|
+
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
78
78
|
})));
|
|
79
79
|
}).pipe(Stream.unwrapScoped);
|
|
80
|
-
|
|
80
|
+
const down = (options) => Effect.gen(function* () {
|
|
81
|
+
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`);
|
|
82
|
+
const baseArgs = ['docker', 'compose', 'down'];
|
|
83
|
+
if (options?.volumes)
|
|
84
|
+
baseArgs.push('-v');
|
|
85
|
+
if (options?.removeOrphans)
|
|
86
|
+
baseArgs.push('--remove-orphans');
|
|
87
|
+
if (serviceName)
|
|
88
|
+
baseArgs.push(serviceName);
|
|
89
|
+
yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options?.env ?? {}), Command.exitCode, Effect.flatMap((exitCode) => exitCode === 0
|
|
90
|
+
? Effect.void
|
|
91
|
+
: Effect.fail(new DockerComposeError({
|
|
92
|
+
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
93
|
+
note: `Failed to tear down Docker Compose services`,
|
|
94
|
+
}))), Effect.provide(commandExecutorContext));
|
|
95
|
+
yield* Effect.log(`Docker Compose services torn down successfully`);
|
|
96
|
+
}).pipe(Effect.withSpan('downDockerCompose'));
|
|
97
|
+
return { pull, start, stop, down, logs };
|
|
81
98
|
}),
|
|
82
99
|
}) {
|
|
83
100
|
}
|
|
@@ -89,7 +106,7 @@ const performHealthCheck = ({ url, timeout = Duration.minutes(2), interval = Dur
|
|
|
89
106
|
schedule: Schedule.fixed(interval),
|
|
90
107
|
}), Effect.timeout(timeout), Effect.catchAll(() => Effect.fail(new DockerComposeError({
|
|
91
108
|
cause: new Error('Health check timeout'),
|
|
92
|
-
|
|
109
|
+
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
93
110
|
}))));
|
|
94
111
|
yield* healthCheck;
|
|
95
112
|
yield* Effect.log(`Health check passed for ${url}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerComposeService.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,OAAO,EAEP,QAAQ,EACR,MAAM,EAEN,QAAQ,EACR,MAAM,EAEN,MAAM,GACP,MAAM,yBAAyB,CAAA;AAEhC,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAAC,oBAAoB,EAAE;IACrG,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,
|
|
1
|
+
{"version":3,"file":"DockerComposeService.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,OAAO,EAEP,QAAQ,EACR,MAAM,EAEN,QAAQ,EACR,MAAM,EAEN,MAAM,GACP,MAAM,yBAAyB,CAAA;AAEhC,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAAC,oBAAoB,EAAE;IACrG,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC;CAAG;AAyCL,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,OAAO,EAAwB,CAAC,sBAAsB,EAAE;IACvG,MAAM,EAAE,CAAC,IAAuB,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAEjC,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAmC,CAAA;QAEvF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;YAE5D,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CACnD,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,QAAQ,EAChB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE,CAClC,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;oBACrB,KAAK,EAAE,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC;oBACzE,IAAI,EAAE,6CAA6C,QAAQ,EAAE;iBAC9D,CAAC,CACH,CACN,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QAChE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAA;QAEnD,MAAM,KAAK,GAAG,CAAC,UAAwB,EAAE,EAAE,EAAE,CAC3C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;YAEhD,sBAAsB;YACtB,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAC5C,IAAI,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAE3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1E,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EACzB,OAAO,CAAC,KAAK,EACb,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;gBACrB,KAAK;gBACL,IAAI,EAAE,8CAA8C,GAAG,EAAE;aAC1D,CAAC,CACH,CACF,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,8BAA8B;YAC9B,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;oBACrB,KAAK,EAAE,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC;oBAC/D,IAAI,EAAE,iDAAiD,QAAQ,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;iBACvG,CAAC,CACH,CACN,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,oCAAoC;YACpC,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAA;YACrF,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mDAAmD,GAAG,EAAE,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAA;YAE/D,MAAM,WAAW,GAAG,WAAW;gBAC7B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;gBACxD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAE7C,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CACrB,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,QAAQ,EAChB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE,CAClC,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;oBACrB,KAAK,EAAE,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC;oBACpE,IAAI,EAAE,wCAAwC;iBAC/C,CAAC,CACH,CACN,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QACnE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAE7C,MAAM,IAAI,GAAG,CAAC,UAAuB,EAAE,EAAE,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;YAE/C,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9C,IAAI,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,IAAI;gBAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YAClD,IAAI,KAAK;gBAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC1C,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAE3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1E,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,KAAK,EACb,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;gBACrB,KAAK;gBACL,IAAI,EAAE,yCAAyC,GAAG,EAAE;aACrD,CAAC,CACH,CACF,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EACzB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,KAAK;gBACL,IAAI,EAAE,wCAAwC,GAAG,EAAE;aACpD,CAAC,CACL,CACF,CAAA;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAE9B,MAAM,IAAI,GAAG,CAAC,OAIb,EAAE,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAA;YAEnE,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;YAC9C,IAAI,OAAO,EAAE,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,OAAO,EAAE,aAAa;gBAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC7D,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAE3C,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,EAC/B,OAAO,CAAC,QAAQ,EAChB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE,CAClC,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;oBACrB,KAAK,EAAE,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC;oBACpE,IAAI,EAAE,6CAA6C;iBACpD,CAAC,CACH,CACN,EACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACvC,CAAA;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;QACrE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAE/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAC1C,CAAC,CAAC;CACL,CAAC;CAAG;AAEL,MAAM,kBAAkB,GAAG,CAAC,EAC1B,GAAG,EACH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAC7B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAK/B,EAA0F,EAAE,CAC3F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;IAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAC5D,OAAO,CAAC,QAAQ,EAChB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,EACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAClC,MAAM,CAAC,MAAM,CAAC;QACZ,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO;QACrC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;KACnC,CAAC,EACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,IAAI,CACT,IAAI,kBAAkB,CAAC;QACrB,KAAK,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC;QACxC,IAAI,EAAE,2BAA2B,GAAG,UAAU,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;KAC7E,CAAC,CACH,CACF,CACF,CAAA;IAED,KAAK,CAAC,CAAC,WAAW,CAAA;IAClB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;AACrD,CAAC,CAAC,CAAA;AAEJ,mFAAmF;AACnF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,IAEC,EAKD,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAA;IAEjD,qBAAqB;IACrB,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;QACzB,GAAG,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;KACpF,CAAC,CAAA;IAEF,6CAA6C;IAC7C,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACzE,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/utils-dev",
|
|
3
|
-
"version": "0.0.0-snapshot-
|
|
3
|
+
"version": "0.0.0-snapshot-e57f280cc5ca4d636f9a5ef952cb6e0180247178",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"./src/node-vitest/global.ts",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"@opentelemetry/sdk-metrics": "2.0.1",
|
|
22
22
|
"@opentelemetry/sdk-trace-base": "2.0.1",
|
|
23
23
|
"@opentelemetry/sdk-trace-node": "2.0.1",
|
|
24
|
-
"wrangler": "
|
|
25
|
-
"@livestore/utils": "0.0.0-snapshot-
|
|
24
|
+
"wrangler": "4.32.0",
|
|
25
|
+
"@livestore/utils": "0.0.0-snapshot-e57f280cc5ca4d636f9a5ef952cb6e0180247178"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {},
|
|
28
28
|
"files": [
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
|
|
14
14
|
export class DockerComposeError extends Schema.TaggedError<DockerComposeError>()('DockerComposeError', {
|
|
15
15
|
cause: Schema.Defect,
|
|
16
|
-
|
|
16
|
+
note: Schema.String,
|
|
17
17
|
}) {}
|
|
18
18
|
|
|
19
19
|
export interface DockerComposeArgs {
|
|
@@ -43,6 +43,13 @@ export interface DockerComposeOperations {
|
|
|
43
43
|
options?: StartOptions,
|
|
44
44
|
) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, Scope.Scope>
|
|
45
45
|
readonly stop: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>
|
|
46
|
+
readonly down: (
|
|
47
|
+
options?: {
|
|
48
|
+
readonly env?: Record<string, string>
|
|
49
|
+
readonly volumes?: boolean
|
|
50
|
+
readonly removeOrphans?: boolean
|
|
51
|
+
},
|
|
52
|
+
) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>
|
|
46
53
|
readonly logs: (
|
|
47
54
|
options?: LogsOptions,
|
|
48
55
|
) => Stream.Stream<string, DockerComposeError | PlatformError.PlatformError, Scope.Scope>
|
|
@@ -67,7 +74,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
67
74
|
: Effect.fail(
|
|
68
75
|
new DockerComposeError({
|
|
69
76
|
cause: new Error(`Docker compose pull failed with exit code ${exitCode}`),
|
|
70
|
-
|
|
77
|
+
note: `Docker compose pull failed with exit code ${exitCode}`,
|
|
71
78
|
}),
|
|
72
79
|
),
|
|
73
80
|
),
|
|
@@ -89,12 +96,14 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
89
96
|
const command = yield* Command.make(baseArgs[0]!, ...baseArgs.slice(1)).pipe(
|
|
90
97
|
Command.workingDirectory(cwd),
|
|
91
98
|
Command.env(options.env ?? {}),
|
|
99
|
+
Command.stderr('inherit'),
|
|
100
|
+
Command.stdout('inherit'),
|
|
92
101
|
Command.start,
|
|
93
102
|
Effect.catchAll((cause) =>
|
|
94
103
|
Effect.fail(
|
|
95
104
|
new DockerComposeError({
|
|
96
105
|
cause,
|
|
97
|
-
|
|
106
|
+
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
98
107
|
}),
|
|
99
108
|
),
|
|
100
109
|
),
|
|
@@ -103,13 +112,13 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
103
112
|
|
|
104
113
|
// Wait for command completion
|
|
105
114
|
yield* command.exitCode.pipe(
|
|
106
|
-
Effect.flatMap((exitCode
|
|
115
|
+
Effect.flatMap((exitCode) =>
|
|
107
116
|
exitCode === 0
|
|
108
117
|
? Effect.void
|
|
109
118
|
: Effect.fail(
|
|
110
119
|
new DockerComposeError({
|
|
111
120
|
cause: new Error(`Docker compose exited with code ${exitCode}`),
|
|
112
|
-
|
|
121
|
+
note: `Docker Compose failed to start with exit code ${exitCode}. Env: ${JSON.stringify(options.env)}`,
|
|
113
122
|
}),
|
|
114
123
|
),
|
|
115
124
|
),
|
|
@@ -140,7 +149,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
140
149
|
: Effect.fail(
|
|
141
150
|
new DockerComposeError({
|
|
142
151
|
cause: new Error(`Docker compose stop exited with code ${exitCode}`),
|
|
143
|
-
|
|
152
|
+
note: `Failed to stop Docker Compose services`,
|
|
144
153
|
}),
|
|
145
154
|
),
|
|
146
155
|
),
|
|
@@ -167,7 +176,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
167
176
|
Effect.fail(
|
|
168
177
|
new DockerComposeError({
|
|
169
178
|
cause,
|
|
170
|
-
|
|
179
|
+
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
171
180
|
}),
|
|
172
181
|
),
|
|
173
182
|
),
|
|
@@ -181,13 +190,46 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
181
190
|
(cause) =>
|
|
182
191
|
new DockerComposeError({
|
|
183
192
|
cause,
|
|
184
|
-
|
|
193
|
+
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
185
194
|
}),
|
|
186
195
|
),
|
|
187
196
|
)
|
|
188
197
|
}).pipe(Stream.unwrapScoped)
|
|
189
198
|
|
|
190
|
-
|
|
199
|
+
const down = (options?: {
|
|
200
|
+
readonly env?: Record<string, string>
|
|
201
|
+
readonly volumes?: boolean
|
|
202
|
+
readonly removeOrphans?: boolean
|
|
203
|
+
}) =>
|
|
204
|
+
Effect.gen(function* () {
|
|
205
|
+
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`)
|
|
206
|
+
|
|
207
|
+
const baseArgs = ['docker', 'compose', 'down']
|
|
208
|
+
if (options?.volumes) baseArgs.push('-v')
|
|
209
|
+
if (options?.removeOrphans) baseArgs.push('--remove-orphans')
|
|
210
|
+
if (serviceName) baseArgs.push(serviceName)
|
|
211
|
+
|
|
212
|
+
yield* Command.make(baseArgs[0]!, ...baseArgs.slice(1)).pipe(
|
|
213
|
+
Command.workingDirectory(cwd),
|
|
214
|
+
Command.env(options?.env ?? {}),
|
|
215
|
+
Command.exitCode,
|
|
216
|
+
Effect.flatMap((exitCode: number) =>
|
|
217
|
+
exitCode === 0
|
|
218
|
+
? Effect.void
|
|
219
|
+
: Effect.fail(
|
|
220
|
+
new DockerComposeError({
|
|
221
|
+
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
222
|
+
note: `Failed to tear down Docker Compose services`,
|
|
223
|
+
}),
|
|
224
|
+
),
|
|
225
|
+
),
|
|
226
|
+
Effect.provide(commandExecutorContext),
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
yield* Effect.log(`Docker Compose services torn down successfully`)
|
|
230
|
+
}).pipe(Effect.withSpan('downDockerCompose'))
|
|
231
|
+
|
|
232
|
+
return { pull, start, stop, down, logs }
|
|
191
233
|
}),
|
|
192
234
|
}) {}
|
|
193
235
|
|
|
@@ -219,7 +261,7 @@ const performHealthCheck = ({
|
|
|
219
261
|
Effect.fail(
|
|
220
262
|
new DockerComposeError({
|
|
221
263
|
cause: new Error('Health check timeout'),
|
|
222
|
-
|
|
264
|
+
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
223
265
|
}),
|
|
224
266
|
),
|
|
225
267
|
),
|