@livestore/utils-dev 0.4.0 → 0.5.0-dev.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/node/DockerCompose/DockerCompose.d.ts +52 -0
- package/dist/node/DockerCompose/DockerCompose.d.ts.map +1 -0
- package/dist/node/DockerCompose/DockerCompose.js +158 -0
- package/dist/node/DockerCompose/DockerCompose.js.map +1 -0
- package/dist/node/DockerCompose/DockerCompose.test.d.ts +2 -0
- package/dist/node/DockerCompose/DockerCompose.test.d.ts.map +1 -0
- package/dist/node/{DockerComposeService/DockerComposeService.test.js → DockerCompose/DockerCompose.test.js} +16 -16
- package/dist/node/DockerCompose/DockerCompose.test.js.map +1 -0
- package/dist/node/DockerCompose/mod.d.ts +2 -0
- package/dist/node/DockerCompose/mod.d.ts.map +1 -0
- package/dist/node/DockerCompose/mod.js +2 -0
- package/dist/node/DockerCompose/mod.js.map +1 -0
- package/dist/node/FileLogger.d.ts +15 -8
- package/dist/node/FileLogger.d.ts.map +1 -1
- package/dist/node/FileLogger.js +63 -79
- package/dist/node/FileLogger.js.map +1 -1
- package/dist/node/cmd-log.d.ts.map +1 -1
- package/dist/node/cmd-log.js +19 -8
- package/dist/node/cmd-log.js.map +1 -1
- package/dist/node/cmd.d.ts +10 -12
- package/dist/node/cmd.d.ts.map +1 -1
- package/dist/node/cmd.js +73 -36
- package/dist/node/cmd.js.map +1 -1
- package/dist/node/cmd.test.js +17 -17
- package/dist/node/cmd.test.js.map +1 -1
- package/dist/node/mod.d.ts +4 -5
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +58 -55
- package/dist/node/mod.js.map +1 -1
- package/dist/node/workspace.d.ts +2 -2
- package/dist/node/workspace.d.ts.map +1 -1
- package/dist/node/workspace.js +7 -7
- package/dist/node/workspace.js.map +1 -1
- package/dist/node-vitest/Vitest.d.ts +17 -8
- package/dist/node-vitest/Vitest.d.ts.map +1 -1
- package/dist/node-vitest/Vitest.js +5 -5
- package/dist/node-vitest/Vitest.js.map +1 -1
- package/dist/node-vitest/Vitest.test.d.ts +3 -5
- package/dist/node-vitest/Vitest.test.d.ts.map +1 -1
- package/dist/node-vitest/Vitest.test.js +14 -3
- package/dist/node-vitest/Vitest.test.js.map +1 -1
- package/dist/wrangler/WranglerDevServer.d.ts +15 -20
- package/dist/wrangler/WranglerDevServer.d.ts.map +1 -1
- package/dist/wrangler/WranglerDevServer.js +77 -71
- package/dist/wrangler/WranglerDevServer.js.map +1 -1
- package/dist/wrangler/WranglerDevServer.test.js +28 -28
- package/dist/wrangler/WranglerDevServer.test.js.map +1 -1
- package/dist/wrangler/mod.d.ts +1 -1
- package/dist/wrangler/mod.d.ts.map +1 -1
- package/dist/wrangler/mod.js +1 -1
- package/dist/wrangler/mod.js.map +1 -1
- package/package.json +19 -37
- package/src/node/{DockerComposeService/DockerComposeService.test.ts → DockerCompose/DockerCompose.test.ts} +18 -18
- package/src/node/DockerCompose/DockerCompose.ts +328 -0
- package/src/node/DockerCompose/mod.ts +1 -0
- package/src/node/FileLogger.ts +89 -114
- package/src/node/cmd-log.ts +21 -10
- package/src/node/cmd.test.ts +19 -17
- package/src/node/cmd.ts +117 -86
- package/src/node/mod.ts +112 -104
- package/src/node/workspace.ts +9 -10
- package/src/node-vitest/Vitest.test.ts +22 -3
- package/src/node-vitest/Vitest.ts +32 -42
- package/src/wrangler/WranglerDevServer.test.ts +33 -37
- package/src/wrangler/WranglerDevServer.ts +145 -129
- package/src/wrangler/mod.ts +1 -6
- package/dist/node/DockerComposeService/DockerComposeService.d.ts +0 -63
- package/dist/node/DockerComposeService/DockerComposeService.d.ts.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.js +0 -149
- package/dist/node/DockerComposeService/DockerComposeService.js.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.test.d.ts +0 -2
- package/dist/node/DockerComposeService/DockerComposeService.test.d.ts.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.test.js.map +0 -1
- package/src/node/DockerComposeService/DockerComposeService.ts +0 -343
- /package/src/node/{DockerComposeService → DockerCompose}/test-fixtures/docker-compose.yml +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ChildProcessSpawner, Context, Duration, Effect, Layer, type PlatformError, Schema, type Scope, Stream } from '@livestore/utils/effect';
|
|
2
|
+
declare const DockerComposeError_base: Schema.Class<DockerComposeError, Schema.TaggedStruct<"DockerComposeError", {
|
|
3
|
+
readonly cause: Schema.Defect;
|
|
4
|
+
readonly note: Schema.String;
|
|
5
|
+
/** Compose env of the failed invocation, if any — structured instead of string-formatted into `note`. */
|
|
6
|
+
readonly env: Schema.optional<Schema.$Record<Schema.String, Schema.String>>;
|
|
7
|
+
}>, import("effect/Cause").YieldableError>;
|
|
8
|
+
export declare class DockerComposeError extends DockerComposeError_base {
|
|
9
|
+
}
|
|
10
|
+
export interface Options {
|
|
11
|
+
readonly cwd: string;
|
|
12
|
+
readonly serviceName?: string;
|
|
13
|
+
/** Unique project name to isolate this compose instance. If not provided, a random one is generated. */
|
|
14
|
+
readonly projectName?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface StartOptions {
|
|
17
|
+
readonly detached?: boolean;
|
|
18
|
+
readonly env?: Record<string, string>;
|
|
19
|
+
readonly healthCheck?: {
|
|
20
|
+
readonly url: string;
|
|
21
|
+
readonly timeout?: Duration.Duration;
|
|
22
|
+
readonly interval?: Duration.Duration;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface LogsOptions {
|
|
26
|
+
readonly follow?: boolean;
|
|
27
|
+
readonly tail?: number;
|
|
28
|
+
readonly since?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Service {
|
|
31
|
+
readonly pull: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
32
|
+
readonly start: (options?: StartOptions) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
33
|
+
readonly stop: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
34
|
+
readonly down: (options?: {
|
|
35
|
+
readonly env?: Record<string, string>;
|
|
36
|
+
readonly volumes?: boolean;
|
|
37
|
+
readonly removeOrphans?: boolean;
|
|
38
|
+
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
39
|
+
readonly logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
40
|
+
/** The unique project name used to isolate this compose instance */
|
|
41
|
+
readonly projectName: string;
|
|
42
|
+
}
|
|
43
|
+
declare const DockerCompose_base: Context.ServiceClass<DockerCompose, "@livestore/utils-dev/DockerCompose", Service>;
|
|
44
|
+
export declare class DockerCompose extends DockerCompose_base {
|
|
45
|
+
}
|
|
46
|
+
export declare const make: (args: Options) => Effect.Effect<Service, never, Scope.Scope | ChildProcessSpawner.ChildProcessSpawner>;
|
|
47
|
+
export declare const layer: (options: Options) => Layer.Layer<DockerCompose, never, ChildProcessSpawner.ChildProcessSpawner>;
|
|
48
|
+
export declare const startDockerComposeServicesScoped: (args: Options & {
|
|
49
|
+
healthCheck?: StartOptions["healthCheck"];
|
|
50
|
+
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, DockerCompose | ChildProcessSpawner.ChildProcessSpawner | Scope.Scope>;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=DockerCompose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerCompose.d.ts","sourceRoot":"","sources":["../../../src/node/DockerCompose/DockerCompose.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EACnB,OAAO,EACP,QAAQ,EACR,MAAM,EAEN,KAAK,EACL,KAAK,aAAa,EAElB,MAAM,EACN,KAAK,KAAK,EACV,MAAM,EACP,MAAM,yBAAyB,CAAA;;;;IAO9B,yGAAyG;;;AAL3G,qBAAa,kBAAmB,SAAQ,uBAOtC;CAAG;AAEL,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,wGAAwG;IACxG,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,OAAO;IACtB,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,CAAC,OAAO,CAAC,EAAE;QACxB,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,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IAC3E,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;IACzF,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;;AAID,qBAAa,aAAc,SAAQ,kBAA+E;CAAG;AAErH,eAAO,MAAM,IAAI,GAAI,MAAM,OAAO,yFAmM9B,CAAA;AAEJ,eAAO,MAAM,KAAK,GAAI,SAAS,OAAO,+EAA+C,CAAA;AAyCrF,eAAO,MAAM,gCAAgC,GAC3C,MAAM,OAAO,GAAG;IACd,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;CAC1C,KACA,MAAM,CAAC,MAAM,CACd,IAAI,EACJ,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAChD,aAAa,GAAG,mBAAmB,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAYnE,CAAA"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { objectToString, omitUndefineds } from '@livestore/utils';
|
|
2
|
+
import { ChildProcess, ChildProcessSpawner, Context, Duration, Effect, Fiber, Layer, Schedule, Schema, Stream, } from '@livestore/utils/effect';
|
|
3
|
+
export class DockerComposeError extends Schema.TaggedError('~@livestore/utils-dev/DockerComposeError')('DockerComposeError', {
|
|
4
|
+
cause: Schema.Defect(),
|
|
5
|
+
note: Schema.String,
|
|
6
|
+
/** Compose env of the failed invocation, if any — structured instead of string-formatted into `note`. */
|
|
7
|
+
env: Schema.optional(Schema.Record(Schema.String, Schema.String)),
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
const generateProjectName = () => `ls-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
11
|
+
export class DockerCompose extends Context.Service()('@livestore/utils-dev/DockerCompose') {
|
|
12
|
+
}
|
|
13
|
+
export const make = (args) => Effect.gen(function* () {
|
|
14
|
+
const { cwd, serviceName } = args;
|
|
15
|
+
const projectName = args.projectName ?? generateProjectName();
|
|
16
|
+
const commandExecutorContext = yield* Effect.context();
|
|
17
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
18
|
+
const baseComposeArgs = ['-p', projectName];
|
|
19
|
+
const composeCommand = (args, options = {}) => ChildProcess.make('docker', ['compose', ...baseComposeArgs, ...args], { ...options, cwd });
|
|
20
|
+
const envOptions = (env) => (env === undefined ? {} : { env, extendEnv: true });
|
|
21
|
+
const pull = Effect.gen(function* () {
|
|
22
|
+
yield* Effect.log(`Pulling Docker Compose images in ${cwd}`);
|
|
23
|
+
const process = yield* spawner.spawn(composeCommand(['pull'], { stdout: 'pipe', stderr: 'pipe' }));
|
|
24
|
+
const stdoutFiber = yield* process.stdout.pipe(Stream.decodeText({ encoding: 'utf8' }), Stream.runFold(() => '', (acc, chunk) => acc + chunk),
|
|
25
|
+
// Drain subprocess output immediately so the child cannot block while we wait for its exit code.
|
|
26
|
+
Effect.forkChild);
|
|
27
|
+
const stderrFiber = yield* process.stderr.pipe(Stream.decodeText({ encoding: 'utf8' }), Stream.runFold(() => '', (acc, chunk) => acc + chunk),
|
|
28
|
+
// Drain subprocess output immediately so the child cannot block while we wait for its exit code.
|
|
29
|
+
Effect.forkChild);
|
|
30
|
+
const exitCode = yield* process.exitCode;
|
|
31
|
+
const stdout = yield* Fiber.join(stdoutFiber);
|
|
32
|
+
const stderr = yield* Fiber.join(stderrFiber);
|
|
33
|
+
const exitCodeNumber = Number(exitCode);
|
|
34
|
+
if (exitCodeNumber !== 0) {
|
|
35
|
+
const stdoutLog = stdout.length > 0 ? stdout : '<empty stdout>';
|
|
36
|
+
const stderrLog = stderr.length > 0 ? stderr : '<empty stderr>';
|
|
37
|
+
const failureMessage = [
|
|
38
|
+
`Docker compose pull failed with exit code ${exitCodeNumber} in ${cwd}`,
|
|
39
|
+
`stdout:\n${stdoutLog}`,
|
|
40
|
+
`stderr:\n${stderrLog}`,
|
|
41
|
+
].join('\n');
|
|
42
|
+
yield* Effect.logError(failureMessage);
|
|
43
|
+
return yield* new DockerComposeError({
|
|
44
|
+
cause: new Error(`Docker compose pull failed with exit code ${exitCodeNumber}`),
|
|
45
|
+
note: failureMessage,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
yield* Effect.log(`Successfully pulled Docker Compose images`);
|
|
49
|
+
}).pipe(Effect.retry({
|
|
50
|
+
schedule: Schedule.exponentialBackoff10Sec,
|
|
51
|
+
while: Schema.is(DockerComposeError),
|
|
52
|
+
}), Effect.withSpan('pullDockerComposeImages'), Effect.scoped);
|
|
53
|
+
const start = Effect.fn('startDockerCompose')(function* (options = {}) {
|
|
54
|
+
const { detached = true, healthCheck } = options;
|
|
55
|
+
const startArgs = ['up'];
|
|
56
|
+
if (detached === true)
|
|
57
|
+
startArgs.push('-d');
|
|
58
|
+
if (serviceName !== undefined)
|
|
59
|
+
startArgs.push(serviceName);
|
|
60
|
+
const process = yield* spawner
|
|
61
|
+
.spawn(composeCommand(startArgs, { ...envOptions(options.env), stderr: 'inherit', stdout: 'inherit' }))
|
|
62
|
+
.pipe(Effect.mapError((cause) => new DockerComposeError({
|
|
63
|
+
cause,
|
|
64
|
+
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
65
|
+
})));
|
|
66
|
+
const exitCode = yield* process.exitCode;
|
|
67
|
+
if (Number(exitCode) !== 0) {
|
|
68
|
+
return yield* new DockerComposeError({
|
|
69
|
+
cause: new Error(`Docker compose exited with code ${exitCode}`),
|
|
70
|
+
note: `Docker Compose failed to start with exit code ${exitCode}`,
|
|
71
|
+
env: options.env,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (healthCheck !== undefined) {
|
|
75
|
+
yield* performHealthCheck(healthCheck).pipe(Effect.provide(commandExecutorContext));
|
|
76
|
+
}
|
|
77
|
+
yield* Effect.log(`Docker Compose services started successfully in ${cwd}`);
|
|
78
|
+
});
|
|
79
|
+
const stop = Effect.gen(function* () {
|
|
80
|
+
yield* Effect.log(`Stopping Docker Compose services in ${cwd}`);
|
|
81
|
+
const stopArgs = serviceName === undefined ? ['stop'] : ['stop', serviceName];
|
|
82
|
+
const exitCode = yield* spawner.exitCode(composeCommand(stopArgs));
|
|
83
|
+
if (Number(exitCode) !== 0) {
|
|
84
|
+
return yield* new DockerComposeError({
|
|
85
|
+
cause: new Error(`Docker compose stop exited with code ${exitCode}`),
|
|
86
|
+
note: `Failed to stop Docker Compose services`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
yield* Effect.log(`Docker Compose services stopped successfully`);
|
|
90
|
+
}).pipe(Effect.withSpan('stopDockerCompose'));
|
|
91
|
+
const logs = (options = {}) => Effect.gen(function* () {
|
|
92
|
+
const { follow = false, tail, since } = options;
|
|
93
|
+
const logsArgs = ['logs'];
|
|
94
|
+
if (follow === true)
|
|
95
|
+
logsArgs.push('-f');
|
|
96
|
+
if (tail !== undefined)
|
|
97
|
+
logsArgs.push('--tail', tail.toString());
|
|
98
|
+
if (since !== undefined)
|
|
99
|
+
logsArgs.push('--since', since);
|
|
100
|
+
if (serviceName !== undefined)
|
|
101
|
+
logsArgs.push(serviceName);
|
|
102
|
+
const process = yield* spawner.spawn(composeCommand(logsArgs)).pipe(Effect.mapError((cause) => new DockerComposeError({
|
|
103
|
+
cause,
|
|
104
|
+
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
105
|
+
})));
|
|
106
|
+
return process.stdout.pipe(Stream.decodeText({ encoding: 'utf8' }), Stream.splitLines, Stream.mapError((cause) => new DockerComposeError({
|
|
107
|
+
cause,
|
|
108
|
+
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
109
|
+
})));
|
|
110
|
+
}).pipe(Stream.unwrap);
|
|
111
|
+
const down = Effect.fn('downDockerCompose')(function* (options) {
|
|
112
|
+
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`);
|
|
113
|
+
const downArgs = ['down'];
|
|
114
|
+
if (options?.volumes === true)
|
|
115
|
+
downArgs.push('-v');
|
|
116
|
+
if (options?.removeOrphans === true)
|
|
117
|
+
downArgs.push('--remove-orphans');
|
|
118
|
+
if (serviceName !== undefined)
|
|
119
|
+
downArgs.push(serviceName);
|
|
120
|
+
const exitCode = yield* spawner.exitCode(composeCommand(downArgs, envOptions(options?.env)));
|
|
121
|
+
if (Number(exitCode) !== 0) {
|
|
122
|
+
return yield* new DockerComposeError({
|
|
123
|
+
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
124
|
+
note: `Failed to tear down Docker Compose services`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
yield* Effect.log(`Docker Compose services torn down successfully`);
|
|
128
|
+
});
|
|
129
|
+
// Register cleanup finalizer to ensure containers are removed when scope closes
|
|
130
|
+
yield* Effect.addFinalizer(() => down({ volumes: true, removeOrphans: true }).pipe(Effect.tap(() => Effect.log(`Docker Compose cleanup completed for project ${projectName}`)), Effect.catchCause((cause) => Effect.log('Docker Compose cleanup failed for project', projectName, objectToString(cause)))));
|
|
131
|
+
return DockerCompose.of({ pull, start, stop, down, logs, projectName });
|
|
132
|
+
});
|
|
133
|
+
export const layer = (options) => Layer.effect(DockerCompose, make(options));
|
|
134
|
+
const performHealthCheck = ({ url, timeout = Duration.minutes(2), interval = Duration.seconds(2), }) => Effect.gen(function* () {
|
|
135
|
+
yield* Effect.log(`Performing health check on ${url}`);
|
|
136
|
+
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
137
|
+
const checkHealth = spawner.exitCode(ChildProcess.make('curl', ['-f', '-s', url])).pipe(Effect.map((code) => code === 0), Effect.orElseSucceed(() => false));
|
|
138
|
+
const healthCheck = checkHealth.pipe(Effect.repeat({
|
|
139
|
+
while: (healthy) => healthy === false,
|
|
140
|
+
schedule: Schedule.fixed(interval),
|
|
141
|
+
}), Effect.timeout(timeout), Effect.mapError(() => new DockerComposeError({
|
|
142
|
+
cause: new Error('Health check timeout'),
|
|
143
|
+
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
144
|
+
})));
|
|
145
|
+
yield* healthCheck;
|
|
146
|
+
yield* Effect.log(`Health check passed for ${url}`);
|
|
147
|
+
});
|
|
148
|
+
// Convenience function for scoped Docker Compose operations with automatic cleanup
|
|
149
|
+
export const startDockerComposeServicesScoped = (args) => Effect.gen(function* () {
|
|
150
|
+
const dockerCompose = yield* DockerCompose;
|
|
151
|
+
// Start the services
|
|
152
|
+
yield* dockerCompose.start({
|
|
153
|
+
...omitUndefineds({ healthCheck: args.healthCheck !== undefined ? args.healthCheck : undefined }),
|
|
154
|
+
});
|
|
155
|
+
// Add cleanup finalizer to the current scope
|
|
156
|
+
yield* Effect.addFinalizer(() => dockerCompose.stop.pipe(Effect.orDie));
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=DockerCompose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerCompose.js","sourceRoot":"","sources":["../../../src/node/DockerCompose/DockerCompose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerCompose.test.d.ts","sourceRoot":"","sources":["../../../src/node/DockerCompose/DockerCompose.test.ts"],"names":[],"mappings":""}
|
|
@@ -3,33 +3,33 @@ import { expect } from 'vitest';
|
|
|
3
3
|
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
4
4
|
import { Duration, Effect, Layer, Stream } from '@livestore/utils/effect';
|
|
5
5
|
import { PlatformNode } from '@livestore/utils/node';
|
|
6
|
-
import
|
|
6
|
+
import * as DockerCompose from "./DockerCompose.js";
|
|
7
7
|
const testTimeout = 30_000;
|
|
8
8
|
const testFixturePath = path.join(import.meta.dirname, 'test-fixtures');
|
|
9
|
-
const DockerComposeTest = (args = {}) =>
|
|
9
|
+
const DockerComposeTest = (args = {}) => DockerCompose.layer({
|
|
10
10
|
cwd: testFixturePath,
|
|
11
11
|
...args,
|
|
12
12
|
});
|
|
13
|
-
Vitest.describe('
|
|
13
|
+
Vitest.describe('DockerCompose', { timeout: testTimeout }, () => {
|
|
14
14
|
Vitest.describe('Basic Operations', () => {
|
|
15
15
|
const withBasicTest = (args = {}) => Vitest.makeWithTestCtx({
|
|
16
16
|
timeout: testTimeout,
|
|
17
|
-
makeLayer: () => DockerComposeTest(args).pipe(Layer.provide(PlatformNode.
|
|
17
|
+
makeLayer: () => DockerComposeTest(args).pipe(Layer.provide(PlatformNode.NodeServices.layer)),
|
|
18
18
|
});
|
|
19
|
-
Vitest.
|
|
20
|
-
const dockerCompose = yield*
|
|
19
|
+
Vitest.live('can pull docker images', (test) => Effect.gen(function* () {
|
|
20
|
+
const dockerCompose = yield* DockerCompose.DockerCompose;
|
|
21
21
|
// Test that pull operation works (should succeed for hello-world image)
|
|
22
22
|
yield* dockerCompose.pull;
|
|
23
23
|
}).pipe(withBasicTest()(test)));
|
|
24
|
-
Vitest.
|
|
25
|
-
const dockerCompose = yield*
|
|
24
|
+
Vitest.live('can start and stop docker compose services', (test) => Effect.gen(function* () {
|
|
25
|
+
const dockerCompose = yield* DockerCompose.DockerCompose;
|
|
26
26
|
// Start the service
|
|
27
27
|
yield* dockerCompose.start({ detached: true });
|
|
28
28
|
// Stop the service
|
|
29
29
|
yield* dockerCompose.stop;
|
|
30
30
|
}).pipe(withBasicTest({ serviceName: 'hello-world' })(test)));
|
|
31
|
-
Vitest.
|
|
32
|
-
const dockerCompose = yield*
|
|
31
|
+
Vitest.live('can get logs from docker compose services', (test) => Effect.gen(function* () {
|
|
32
|
+
const dockerCompose = yield* DockerCompose.DockerCompose;
|
|
33
33
|
// Start the service first
|
|
34
34
|
yield* dockerCompose.start({ detached: true });
|
|
35
35
|
// Get logs (should contain at least the "Hello from Docker!" message)
|
|
@@ -42,10 +42,10 @@ Vitest.describe('DockerComposeService', { timeout: testTimeout }, () => {
|
|
|
42
42
|
Vitest.describe('Health Check Operations', () => {
|
|
43
43
|
const withHealthCheckTest = (args = {}) => Vitest.makeWithTestCtx({
|
|
44
44
|
timeout: testTimeout,
|
|
45
|
-
makeLayer: () => DockerComposeTest(args).pipe(Layer.provide(PlatformNode.
|
|
45
|
+
makeLayer: () => DockerComposeTest(args).pipe(Layer.provide(PlatformNode.NodeServices.layer)),
|
|
46
46
|
});
|
|
47
|
-
Vitest.
|
|
48
|
-
const dockerCompose = yield*
|
|
47
|
+
Vitest.live('handles health check timeout gracefully', (test) => Effect.gen(function* () {
|
|
48
|
+
const dockerCompose = yield* DockerCompose.DockerCompose;
|
|
49
49
|
// Test starting with a health check that will timeout (invalid URL)
|
|
50
50
|
const result = yield* dockerCompose
|
|
51
51
|
.start({
|
|
@@ -55,10 +55,10 @@ Vitest.describe('DockerComposeService', { timeout: testTimeout }, () => {
|
|
|
55
55
|
timeout: Duration.seconds(2),
|
|
56
56
|
},
|
|
57
57
|
})
|
|
58
|
-
.pipe(Effect.
|
|
58
|
+
.pipe(Effect.result);
|
|
59
59
|
// Should fail due to health check timeout
|
|
60
|
-
expect(result._tag).toBe('
|
|
60
|
+
expect(result._tag).toBe('Failure');
|
|
61
61
|
}).pipe(withHealthCheckTest({ serviceName: 'hello-world' })(test)));
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
|
-
//# sourceMappingURL=
|
|
64
|
+
//# sourceMappingURL=DockerCompose.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerCompose.test.js","sourceRoot":"","sources":["../../../src/node/DockerCompose/DockerCompose.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/node/DockerCompose/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/node/DockerCompose/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const
|
|
3
|
-
readonly threadName: string;
|
|
4
|
-
readonly colors?: boolean;
|
|
5
|
-
}) => Layer.Layer<never, never, never>;
|
|
6
|
-
export declare const defaultDateFormat: (date: Date) => string;
|
|
1
|
+
import { Cause, type LogLevel } from '@livestore/utils/effect';
|
|
2
|
+
export declare const formatLogTime: (date: Date) => string;
|
|
7
3
|
export declare const structuredMessage: (u: unknown) => unknown;
|
|
8
|
-
|
|
4
|
+
type PrettyLoggerOptions = {
|
|
9
5
|
readonly colors: boolean;
|
|
10
6
|
readonly stderr: boolean;
|
|
11
7
|
readonly formatDate: (date: Date) => string;
|
|
12
8
|
readonly onLog?: (str: string) => void;
|
|
13
|
-
}
|
|
9
|
+
};
|
|
10
|
+
export declare const formatPrettyLog: ({ annotations, cause, date, fiberId, logLevel, message: message_, options, spans, }: {
|
|
11
|
+
readonly annotations: Readonly<Record<string, unknown>>;
|
|
12
|
+
readonly cause: Cause.Cause<unknown>;
|
|
13
|
+
readonly date: Date;
|
|
14
|
+
readonly fiberId: number;
|
|
15
|
+
readonly logLevel: LogLevel.LogLevel;
|
|
16
|
+
readonly message: unknown;
|
|
17
|
+
readonly options: PrettyLoggerOptions;
|
|
18
|
+
readonly spans: ReadonlyArray<readonly [label: string, timestamp: number]>;
|
|
19
|
+
}) => string;
|
|
20
|
+
export {};
|
|
14
21
|
//# sourceMappingURL=FileLogger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLogger.d.ts","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"FileLogger.d.ts","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAuB,KAAK,QAAQ,EAA6B,MAAM,yBAAyB,CAAA;AAmC9G,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,KAAG,MAIkC,CAAA;AAE7E,eAAO,MAAM,iBAAiB,GAAI,GAAG,OAAO,KAAG,OAW9C,CAAA;AAqBD,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,qFAS7B;IACD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACvD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;CAC3E,WA+EA,CAAA"}
|
package/dist/node/FileLogger.js
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import util from 'node:util';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
yield* Effect.sync(() => fs.mkdirSync(path.dirname(logFilePath), { recursive: true }));
|
|
7
|
-
const logFile = yield* Effect.acquireRelease(Effect.sync(() => fs.openSync(logFilePath, 'a', 0o666)), (fd) => Effect.sync(() => fs.closeSync(fd)));
|
|
8
|
-
return Logger.replace(Logger.defaultLogger, prettyLoggerTty({
|
|
9
|
-
colors: options?.colors ?? false,
|
|
10
|
-
stderr: false,
|
|
11
|
-
formatDate: (date) => `${defaultDateFormat(date)} ${options?.threadName ?? ''}`,
|
|
12
|
-
onLog: (str) => fs.writeSync(logFile, str),
|
|
13
|
-
}));
|
|
14
|
-
}));
|
|
2
|
+
import { Redactable } from 'effect';
|
|
3
|
+
import { Cause, Inspectable, Logger, References, ReadonlyArray } from '@livestore/utils/effect';
|
|
15
4
|
const withColor = (text, ...colors) => {
|
|
16
5
|
let out = '';
|
|
17
6
|
for (let i = 0; i < colors.length; i++) {
|
|
@@ -38,11 +27,11 @@ const logLevelColors = {
|
|
|
38
27
|
Trace: [colors.gray],
|
|
39
28
|
Debug: [colors.blue],
|
|
40
29
|
Info: [colors.green],
|
|
41
|
-
|
|
30
|
+
Warn: [colors.yellow],
|
|
42
31
|
Error: [colors.red],
|
|
43
32
|
Fatal: [colors.bgBrightRed, colors.black],
|
|
44
33
|
};
|
|
45
|
-
export const
|
|
34
|
+
export const formatLogTime = (date) => `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date
|
|
46
35
|
.getSeconds()
|
|
47
36
|
.toString()
|
|
48
37
|
.padStart(2, '0')}.${date.getMilliseconds().toString().padStart(3, '0')}`;
|
|
@@ -54,7 +43,7 @@ export const structuredMessage = (u) => {
|
|
|
54
43
|
return String(u);
|
|
55
44
|
}
|
|
56
45
|
default: {
|
|
57
|
-
return Inspectable.
|
|
46
|
+
return Inspectable.toJson(u);
|
|
58
47
|
}
|
|
59
48
|
}
|
|
60
49
|
};
|
|
@@ -78,74 +67,69 @@ const consoleLogToString = (...s) => {
|
|
|
78
67
|
})
|
|
79
68
|
.join(' ');
|
|
80
69
|
};
|
|
81
|
-
export const
|
|
70
|
+
export const formatPrettyLog = ({ annotations, cause, date, fiberId, logLevel, message: message_, options, spans, }) => {
|
|
82
71
|
const color = options.colors === true ? withColor : withColorNoop;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
for (const span of spans) {
|
|
101
|
-
firstLine += ` ${render(span)}`;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
firstLine += ':';
|
|
105
|
-
let messageIndex = 0;
|
|
106
|
-
if (message.length > 0) {
|
|
107
|
-
const firstMaybeString = structuredMessage(message[0]);
|
|
108
|
-
if (typeof firstMaybeString === 'string') {
|
|
109
|
-
firstLine += ` ${color(firstMaybeString, colors.bold, colors.cyan)}`;
|
|
110
|
-
messageIndex++;
|
|
111
|
-
}
|
|
72
|
+
let str = '';
|
|
73
|
+
const log = (...s) => {
|
|
74
|
+
str += `${consoleLogToString(...s)}\n`;
|
|
75
|
+
options.onLog?.(str);
|
|
76
|
+
};
|
|
77
|
+
const logIndented = (...s) => {
|
|
78
|
+
str += `${consoleLogToString(...s).replace(/^/gm, ' ')}\n`;
|
|
79
|
+
options.onLog?.(str);
|
|
80
|
+
};
|
|
81
|
+
const message = ReadonlyArray.ensure(message_);
|
|
82
|
+
let firstLine = color(`[${options.formatDate(date)}]`, colors.white) +
|
|
83
|
+
` ${color(logLevel.toUpperCase(), ...logLevelColors[logLevel])}` +
|
|
84
|
+
` (#${fiberId})`;
|
|
85
|
+
if (spans.length > 0) {
|
|
86
|
+
const now = date.getTime();
|
|
87
|
+
for (const [label, timestamp] of spans) {
|
|
88
|
+
firstLine += ` ${label}=${now - timestamp}ms`;
|
|
112
89
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
90
|
+
}
|
|
91
|
+
firstLine += ':';
|
|
92
|
+
let messageIndex = 0;
|
|
93
|
+
if (message.length > 0) {
|
|
94
|
+
const firstMaybeString = structuredMessage(message[0]);
|
|
95
|
+
if (typeof firstMaybeString === 'string') {
|
|
96
|
+
firstLine += ` ${color(firstMaybeString, colors.bold, colors.cyan)}`;
|
|
97
|
+
messageIndex++;
|
|
117
98
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
99
|
+
}
|
|
100
|
+
log(firstLine);
|
|
101
|
+
// if (!processIsBun) console.group()
|
|
102
|
+
if (cause.reasons.length > 0) {
|
|
103
|
+
logIndented(Cause.pretty(cause));
|
|
104
|
+
}
|
|
105
|
+
if (messageIndex < message.length) {
|
|
106
|
+
for (; messageIndex < message.length; messageIndex++) {
|
|
107
|
+
const msg = message[messageIndex];
|
|
108
|
+
if (typeof msg === 'object' && msg !== null) {
|
|
109
|
+
logIndented(util.inspect(structuredMessage(msg), {
|
|
110
|
+
depth: 3,
|
|
111
|
+
colors: false,
|
|
112
|
+
compact: false,
|
|
113
|
+
breakLength: 120,
|
|
114
|
+
}));
|
|
132
115
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
for (const [key, value] of annotations) {
|
|
136
|
-
const formattedValue = typeof value === 'object' && value !== null
|
|
137
|
-
? util.inspect(structuredMessage(value), {
|
|
138
|
-
depth: 3,
|
|
139
|
-
colors: false,
|
|
140
|
-
compact: false,
|
|
141
|
-
breakLength: 120,
|
|
142
|
-
})
|
|
143
|
-
: Inspectable.redact(value);
|
|
144
|
-
logIndented(color(`${key}:`, colors.bold, colors.white), formattedValue);
|
|
116
|
+
else {
|
|
117
|
+
logIndented(Redactable.redact(msg));
|
|
145
118
|
}
|
|
146
119
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
120
|
+
}
|
|
121
|
+
for (const [key, value] of Object.entries(annotations)) {
|
|
122
|
+
const formattedValue = typeof value === 'object' && value !== null
|
|
123
|
+
? util.inspect(structuredMessage(value), {
|
|
124
|
+
depth: 3,
|
|
125
|
+
colors: false,
|
|
126
|
+
compact: false,
|
|
127
|
+
breakLength: 120,
|
|
128
|
+
})
|
|
129
|
+
: Redactable.redact(value);
|
|
130
|
+
logIndented(color(`${key}:`, colors.bold, colors.white), formattedValue);
|
|
131
|
+
}
|
|
132
|
+
// if (!processIsBun) console.groupEnd()
|
|
133
|
+
return str;
|
|
150
134
|
};
|
|
151
135
|
//# sourceMappingURL=FileLogger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLogger.js","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"FileLogger.js","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-log.d.ts","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cmd-log.d.ts","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,MAAM,EAAa,MAAM,yBAAyB,CAAA;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAyD/F,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAClC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAanF,CAAA"}
|