@livestore/utils-dev 0.4.0-dev.21 → 0.4.0-dev.23
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 -0
- package/dist/node/DockerComposeService/DockerComposeService.d.ts +8 -3
- package/dist/node/DockerComposeService/DockerComposeService.d.ts.map +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.js +47 -42
- package/dist/node/DockerComposeService/DockerComposeService.js.map +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.test.js +2 -2
- package/dist/node/DockerComposeService/DockerComposeService.test.js.map +1 -1
- package/dist/node/FileLogger.d.ts.map +1 -1
- package/dist/node/FileLogger.js +3 -3
- package/dist/node/FileLogger.js.map +1 -1
- package/dist/node/cmd-log.d.ts +2 -2
- package/dist/node/cmd-log.d.ts.map +1 -1
- package/dist/node/cmd-log.js +6 -6
- package/dist/node/cmd-log.js.map +1 -1
- package/dist/node/cmd.d.ts +1 -1
- package/dist/node/cmd.d.ts.map +1 -1
- package/dist/node/cmd.js +25 -27
- package/dist/node/cmd.js.map +1 -1
- package/dist/node/cmd.test.js +2 -1
- package/dist/node/cmd.test.js.map +1 -1
- package/dist/node/mod.d.ts +2 -2
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +17 -16
- package/dist/node/mod.js.map +1 -1
- package/dist/node/workspace.d.ts.map +1 -1
- package/dist/node/workspace.js.map +1 -1
- package/dist/node-vitest/Vitest.d.ts.map +1 -1
- package/dist/node-vitest/Vitest.js +11 -11
- package/dist/node-vitest/Vitest.js.map +1 -1
- package/dist/node-vitest/Vitest.test.d.ts +8 -0
- package/dist/node-vitest/Vitest.test.d.ts.map +1 -1
- package/dist/node-vitest/Vitest.test.js +11 -7
- package/dist/node-vitest/Vitest.test.js.map +1 -1
- package/dist/wrangler/WranglerDevServer.d.ts +2 -2
- package/dist/wrangler/WranglerDevServer.d.ts.map +1 -1
- package/dist/wrangler/WranglerDevServer.js +7 -7
- package/dist/wrangler/WranglerDevServer.js.map +1 -1
- package/dist/wrangler/WranglerDevServer.test.js +2 -2
- package/dist/wrangler/WranglerDevServer.test.js.map +1 -1
- package/package.json +73 -20
- package/src/node/DockerComposeService/DockerComposeService.test.ts +5 -2
- package/src/node/DockerComposeService/DockerComposeService.ts +105 -90
- package/src/node/DockerComposeService/test-fixtures/docker-compose.yml +1 -1
- package/src/node/FileLogger.ts +4 -3
- package/src/node/cmd-log.ts +52 -55
- package/src/node/cmd.test.ts +54 -50
- package/src/node/cmd.ts +54 -57
- package/src/node/mod.ts +20 -18
- package/src/node/workspace.ts +1 -0
- package/src/node-vitest/Vitest.test.ts +12 -7
- package/src/node-vitest/Vitest.ts +28 -24
- package/src/wrangler/WranglerDevServer.test.ts +4 -2
- package/src/wrangler/WranglerDevServer.ts +9 -8
- package/src/wrangler/fixtures/wrangler.toml +1 -1
- package/dist/.tsbuildinfo.json +0 -1
|
@@ -10,6 +10,8 @@ export declare class DockerComposeError extends DockerComposeError_base {
|
|
|
10
10
|
export interface DockerComposeArgs {
|
|
11
11
|
readonly cwd: string;
|
|
12
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;
|
|
13
15
|
}
|
|
14
16
|
export interface StartOptions {
|
|
15
17
|
readonly detached?: boolean;
|
|
@@ -35,19 +37,22 @@ export interface DockerComposeOperations {
|
|
|
35
37
|
readonly removeOrphans?: boolean;
|
|
36
38
|
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
37
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;
|
|
38
42
|
}
|
|
39
43
|
declare const DockerComposeService_base: Effect.Service.Class<DockerComposeService, "DockerComposeService", {
|
|
40
44
|
readonly scoped: (args: DockerComposeArgs) => Effect.Effect<{
|
|
41
45
|
pull: Effect.Effect<undefined, PlatformError.PlatformError | DockerComposeError, never>;
|
|
42
|
-
start: (options?: StartOptions) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, Scope.Scope>;
|
|
46
|
+
start: (options?: StartOptions | undefined) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, Scope.Scope>;
|
|
43
47
|
stop: Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
44
48
|
down: (options?: {
|
|
45
49
|
readonly env?: Record<string, string>;
|
|
46
50
|
readonly volumes?: boolean;
|
|
47
51
|
readonly removeOrphans?: boolean;
|
|
48
|
-
}) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
52
|
+
} | undefined) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
49
53
|
logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError, never>;
|
|
50
|
-
|
|
54
|
+
projectName: string;
|
|
55
|
+
}, never, Scope.Scope | CommandExecutor.CommandExecutor>;
|
|
51
56
|
}>;
|
|
52
57
|
export declare class DockerComposeService extends DockerComposeService_base {
|
|
53
58
|
}
|
|
@@ -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,EAEN,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,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;
|
|
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,EAEN,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;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,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,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;;4BAKgB,iBAAiB;;;;;2BAiLX,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;+BAClB,OAAO;qCACD,OAAO;;yBAvCX,WAAW;;;;AA7IxC,qBAAa,oBAAqB,SAAQ,yBA6NxC;CAAG;AAwCL,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"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { omitUndefineds } from '@livestore/utils';
|
|
1
|
+
import { objectToString, omitUndefineds } from '@livestore/utils';
|
|
2
2
|
import { Command, Duration, Effect, Fiber, Schedule, Schema, Stream, } from '@livestore/utils/effect';
|
|
3
|
-
export class DockerComposeError extends Schema.TaggedError()('DockerComposeError', {
|
|
3
|
+
export class DockerComposeError extends Schema.TaggedError('~@livestore/utils-dev/DockerComposeError')('DockerComposeError', {
|
|
4
4
|
cause: Schema.Defect,
|
|
5
5
|
note: Schema.String,
|
|
6
6
|
}) {
|
|
7
7
|
}
|
|
8
|
+
const generateProjectName = () => `ls-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
8
9
|
export class DockerComposeService extends Effect.Service()('DockerComposeService', {
|
|
9
10
|
scoped: (args) => Effect.gen(function* () {
|
|
10
11
|
const { cwd, serviceName } = args;
|
|
12
|
+
const projectName = args.projectName ?? generateProjectName();
|
|
11
13
|
const commandExecutorContext = yield* Effect.context();
|
|
14
|
+
const baseComposeArgs = ['-p', projectName];
|
|
12
15
|
const pull = Effect.gen(function* () {
|
|
13
16
|
yield* Effect.log(`Pulling Docker Compose images in ${cwd}`);
|
|
14
17
|
// TODO (@IMax153) Refactor the effect command related code below as there is probably a much more elegant way to accomplish what we want here in a more effect idiomatic way.
|
|
15
|
-
const pullCommand = Command.make('docker', 'compose', 'pull').pipe(Command.workingDirectory(cwd), Command.stdout('pipe'), Command.stderr('pipe'));
|
|
18
|
+
const pullCommand = Command.make('docker', 'compose', ...baseComposeArgs, 'pull').pipe(Command.workingDirectory(cwd), Command.stdout('pipe'), Command.stderr('pipe'));
|
|
16
19
|
const process = yield* pullCommand.pipe(Command.start, Effect.provide(commandExecutorContext));
|
|
17
20
|
const stdoutFiber = yield* process.stdout.pipe(Stream.decodeText('utf8'), Stream.runFold('', (acc, chunk) => acc + chunk), Effect.fork);
|
|
18
21
|
const stderrFiber = yield* process.stderr.pipe(Stream.decodeText('utf8'), Stream.runFold('', (acc, chunk) => acc + chunk), Effect.fork);
|
|
@@ -39,18 +42,18 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
39
42
|
schedule: Schedule.exponentialBackoff10Sec,
|
|
40
43
|
while: Schema.is(DockerComposeError),
|
|
41
44
|
}), Effect.withSpan('pullDockerComposeImages'), Effect.scoped);
|
|
42
|
-
const start = (options = {})
|
|
45
|
+
const start = Effect.fn('startDockerCompose')(function* (options = {}) {
|
|
43
46
|
const { detached = true, healthCheck } = options;
|
|
44
47
|
// Build start command
|
|
45
|
-
const
|
|
46
|
-
if (detached)
|
|
47
|
-
|
|
48
|
-
if (serviceName)
|
|
49
|
-
|
|
50
|
-
const command = yield* Command.make(
|
|
48
|
+
const startArgs = ['docker', 'compose', ...baseComposeArgs, 'up'];
|
|
49
|
+
if (detached === true)
|
|
50
|
+
startArgs.push('-d');
|
|
51
|
+
if (serviceName !== undefined)
|
|
52
|
+
startArgs.push(serviceName);
|
|
53
|
+
const command = yield* Command.make(startArgs[0], ...startArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options.env ?? {}), Command.stderr('inherit'), Command.stdout('inherit'), Command.start, Effect.mapError((cause) => new DockerComposeError({
|
|
51
54
|
cause,
|
|
52
55
|
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
53
|
-
}))
|
|
56
|
+
})), Effect.provide(commandExecutorContext));
|
|
54
57
|
// Wait for command completion
|
|
55
58
|
yield* command.exitCode.pipe(Effect.flatMap((exitCode) => exitCode === 0
|
|
56
59
|
? Effect.void
|
|
@@ -59,16 +62,16 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
59
62
|
note: `Docker Compose failed to start with exit code ${exitCode}. Env: ${JSON.stringify(options.env)}`,
|
|
60
63
|
}))), Effect.provide(commandExecutorContext));
|
|
61
64
|
// Perform health check if requested
|
|
62
|
-
if (healthCheck) {
|
|
65
|
+
if (healthCheck !== undefined) {
|
|
63
66
|
yield* performHealthCheck(healthCheck).pipe(Effect.provide(commandExecutorContext));
|
|
64
67
|
}
|
|
65
68
|
yield* Effect.log(`Docker Compose services started successfully in ${cwd}`);
|
|
66
|
-
})
|
|
69
|
+
});
|
|
67
70
|
const stop = Effect.gen(function* () {
|
|
68
71
|
yield* Effect.log(`Stopping Docker Compose services in ${cwd}`);
|
|
69
|
-
const stopCommand = serviceName
|
|
70
|
-
? Command.make('docker', 'compose', 'stop', serviceName)
|
|
71
|
-
: Command.make('docker', 'compose', 'stop');
|
|
72
|
+
const stopCommand = serviceName !== undefined
|
|
73
|
+
? Command.make('docker', 'compose', ...baseComposeArgs, 'stop', serviceName)
|
|
74
|
+
: Command.make('docker', 'compose', ...baseComposeArgs, 'stop');
|
|
72
75
|
yield* stopCommand.pipe(Command.workingDirectory(cwd), Command.exitCode, Effect.flatMap((exitCode) => exitCode === 0
|
|
73
76
|
? Effect.void
|
|
74
77
|
: Effect.fail(new DockerComposeError({
|
|
@@ -79,42 +82,44 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
79
82
|
}).pipe(Effect.withSpan('stopDockerCompose'));
|
|
80
83
|
const logs = (options = {}) => Effect.gen(function* () {
|
|
81
84
|
const { follow = false, tail, since } = options;
|
|
82
|
-
const
|
|
83
|
-
if (follow)
|
|
84
|
-
|
|
85
|
-
if (tail)
|
|
86
|
-
|
|
87
|
-
if (since)
|
|
88
|
-
|
|
89
|
-
if (serviceName)
|
|
90
|
-
|
|
91
|
-
const command = yield* Command.make(
|
|
85
|
+
const logsArgs = ['docker', 'compose', ...baseComposeArgs, 'logs'];
|
|
86
|
+
if (follow === true)
|
|
87
|
+
logsArgs.push('-f');
|
|
88
|
+
if (tail !== undefined)
|
|
89
|
+
logsArgs.push('--tail', tail.toString());
|
|
90
|
+
if (since !== undefined)
|
|
91
|
+
logsArgs.push('--since', since);
|
|
92
|
+
if (serviceName !== undefined)
|
|
93
|
+
logsArgs.push(serviceName);
|
|
94
|
+
const command = yield* Command.make(logsArgs[0], ...logsArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.start, Effect.mapError((cause) => new DockerComposeError({
|
|
92
95
|
cause,
|
|
93
96
|
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
94
|
-
}))
|
|
97
|
+
})), Effect.provide(commandExecutorContext));
|
|
95
98
|
return command.stdout.pipe(Stream.decodeText('utf8'), Stream.splitLines, Stream.mapError((cause) => new DockerComposeError({
|
|
96
99
|
cause,
|
|
97
100
|
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
98
101
|
})));
|
|
99
102
|
}).pipe(Stream.unwrapScoped);
|
|
100
|
-
const down =
|
|
103
|
+
const down = Effect.fn('downDockerCompose')(function* (options) {
|
|
101
104
|
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`);
|
|
102
|
-
const
|
|
103
|
-
if (options?.volumes)
|
|
104
|
-
|
|
105
|
-
if (options?.removeOrphans)
|
|
106
|
-
|
|
107
|
-
if (serviceName)
|
|
108
|
-
|
|
109
|
-
yield* Command.make(
|
|
105
|
+
const downArgs = ['docker', 'compose', ...baseComposeArgs, 'down'];
|
|
106
|
+
if (options?.volumes === true)
|
|
107
|
+
downArgs.push('-v');
|
|
108
|
+
if (options?.removeOrphans === true)
|
|
109
|
+
downArgs.push('--remove-orphans');
|
|
110
|
+
if (serviceName !== undefined)
|
|
111
|
+
downArgs.push(serviceName);
|
|
112
|
+
yield* Command.make(downArgs[0], ...downArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options?.env ?? {}), Command.exitCode, Effect.flatMap((exitCode) => exitCode === 0
|
|
110
113
|
? Effect.void
|
|
111
114
|
: Effect.fail(new DockerComposeError({
|
|
112
115
|
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
113
116
|
note: `Failed to tear down Docker Compose services`,
|
|
114
117
|
}))), Effect.provide(commandExecutorContext));
|
|
115
118
|
yield* Effect.log(`Docker Compose services torn down successfully`);
|
|
116
|
-
})
|
|
117
|
-
|
|
119
|
+
});
|
|
120
|
+
// Register cleanup finalizer to ensure containers are removed when scope closes
|
|
121
|
+
yield* Effect.addFinalizer(() => down({ volumes: true, removeOrphans: true }).pipe(Effect.tap(() => Effect.log(`Docker Compose cleanup completed for project ${projectName}`)), Effect.catchAll((error) => Effect.log('Docker Compose cleanup failed for project', projectName, objectToString(error)))));
|
|
122
|
+
return { pull, start, stop, down, logs, projectName };
|
|
118
123
|
}),
|
|
119
124
|
}) {
|
|
120
125
|
}
|
|
@@ -122,12 +127,12 @@ const performHealthCheck = ({ url, timeout = Duration.minutes(2), interval = Dur
|
|
|
122
127
|
yield* Effect.log(`Performing health check on ${url}`);
|
|
123
128
|
const checkHealth = Command.make('curl', '-f', '-s', url).pipe(Command.exitCode, Effect.map((code) => code === 0), Effect.catchAll(() => Effect.succeed(false)));
|
|
124
129
|
const healthCheck = checkHealth.pipe(Effect.repeat({
|
|
125
|
-
while: (healthy) =>
|
|
130
|
+
while: (healthy) => healthy === false,
|
|
126
131
|
schedule: Schedule.fixed(interval),
|
|
127
|
-
}), Effect.timeout(timeout), Effect.
|
|
132
|
+
}), Effect.timeout(timeout), Effect.mapError(() => new DockerComposeError({
|
|
128
133
|
cause: new Error('Health check timeout'),
|
|
129
134
|
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
130
|
-
})))
|
|
135
|
+
})));
|
|
131
136
|
yield* healthCheck;
|
|
132
137
|
yield* Effect.log(`Health check passed for ${url}`);
|
|
133
138
|
});
|
|
@@ -136,7 +141,7 @@ export const startDockerComposeServicesScoped = (args) => Effect.gen(function* (
|
|
|
136
141
|
const dockerCompose = yield* DockerComposeService;
|
|
137
142
|
// Start the services
|
|
138
143
|
yield* dockerCompose.start({
|
|
139
|
-
...omitUndefineds({ healthCheck: args.healthCheck ? args.healthCheck : undefined }),
|
|
144
|
+
...omitUndefineds({ healthCheck: args.healthCheck !== undefined ? args.healthCheck : undefined }),
|
|
140
145
|
});
|
|
141
146
|
// Add cleanup finalizer to the current scope
|
|
142
147
|
yield* Effect.addFinalizer(() => dockerCompose.stop.pipe(Effect.orDie));
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"DockerComposeService.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { expect } from 'vitest';
|
|
3
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
2
4
|
import { Duration, Effect, Layer, Stream } from '@livestore/utils/effect';
|
|
3
5
|
import { PlatformNode } from '@livestore/utils/node';
|
|
4
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
5
|
-
import { expect } from 'vitest';
|
|
6
6
|
import { DockerComposeService } from "./DockerComposeService.js";
|
|
7
7
|
const testTimeout = 30_000;
|
|
8
8
|
const testFixturePath = path.join(import.meta.dirname, 'test-fixtures');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerComposeService.test.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"DockerComposeService.test.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLogger.d.ts","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileLogger.d.ts","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,EAEL,MAAM,EAIP,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,cAAc,GACzB,aAAa,MAAM,EACnB,UAAU;IACR,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B,qCAqBA,CAAA;AAmCH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,MAI8B,CAAA;AAE7E,eAAO,MAAM,iBAAiB,GAAI,GAAG,OAAO,KAAG,OAW9C,CAAA;AAqBD,eAAO,MAAM,eAAe,GAAI,SAAS;IACvC,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,mCAoFA,CAAA"}
|
package/dist/node/FileLogger.js
CHANGED
|
@@ -79,7 +79,7 @@ const consoleLogToString = (...s) => {
|
|
|
79
79
|
.join(' ');
|
|
80
80
|
};
|
|
81
81
|
export const prettyLoggerTty = (options) => {
|
|
82
|
-
const color = options.colors ? withColor : withColorNoop;
|
|
82
|
+
const color = options.colors === true ? withColor : withColorNoop;
|
|
83
83
|
return Logger.make(({ annotations, cause, date, fiberId, logLevel, message: message_, spans }) => {
|
|
84
84
|
let str = '';
|
|
85
85
|
const log = (...s) => {
|
|
@@ -94,7 +94,7 @@ export const prettyLoggerTty = (options) => {
|
|
|
94
94
|
let firstLine = color(`[${options.formatDate(date)}]`, colors.white) +
|
|
95
95
|
` ${color(logLevel.label, ...logLevelColors[logLevel._tag])}` +
|
|
96
96
|
` (${FiberId.threadName(fiberId)})`;
|
|
97
|
-
if (List.isCons(spans)) {
|
|
97
|
+
if (List.isCons(spans) === true) {
|
|
98
98
|
const now = date.getTime();
|
|
99
99
|
const render = LogSpan.render(now);
|
|
100
100
|
for (const span of spans) {
|
|
@@ -112,7 +112,7 @@ export const prettyLoggerTty = (options) => {
|
|
|
112
112
|
}
|
|
113
113
|
log(firstLine);
|
|
114
114
|
// if (!processIsBun) console.group()
|
|
115
|
-
if (
|
|
115
|
+
if (Cause.isEmpty(cause) === false) {
|
|
116
116
|
logIndented(Cause.pretty(cause, { renderErrorCause: true }));
|
|
117
117
|
}
|
|
118
118
|
if (messageIndex < message.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileLogger.js","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"FileLogger.js","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"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"}
|
package/dist/node/cmd-log.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type TCmdLoggingOptions = {
|
|
|
8
8
|
* Prepares logging directories, archives previous canonical log and prunes archives.
|
|
9
9
|
* Returns the canonical current log path if logging is enabled, otherwise undefined.
|
|
10
10
|
*/
|
|
11
|
-
export declare const prepareCmdLogging: (options: TCmdLoggingOptions) => Effect.Effect<string | undefined
|
|
11
|
+
export declare const prepareCmdLogging: (options: TCmdLoggingOptions) => Effect.Effect<string | undefined>;
|
|
12
12
|
/**
|
|
13
13
|
* Given a command input, applies logging by piping output through `tee` to the
|
|
14
14
|
* canonical log file. Returns the transformed input and whether a shell is required.
|
|
@@ -17,5 +17,5 @@ export declare const applyLoggingToCommand: (commandInput: string | (string | un
|
|
|
17
17
|
input: string | string[];
|
|
18
18
|
subshell: boolean;
|
|
19
19
|
logPath?: string;
|
|
20
|
-
}
|
|
20
|
+
}>;
|
|
21
21
|
//# sourceMappingURL=cmd-log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-log.d.ts","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,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,
|
|
1
|
+
{"version":3,"file":"cmd-log.d.ts","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,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,CA6C/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"}
|
package/dist/node/cmd-log.js
CHANGED
|
@@ -6,8 +6,8 @@ import { Effect } from '@livestore/utils/effect';
|
|
|
6
6
|
* Prepares logging directories, archives previous canonical log and prunes archives.
|
|
7
7
|
* Returns the canonical current log path if logging is enabled, otherwise undefined.
|
|
8
8
|
*/
|
|
9
|
-
export const prepareCmdLogging = Effect.fn('cmd.logging.prepare')(function* ({ logDir, logFileName = 'dev.log', logRetention = 50
|
|
10
|
-
if (
|
|
9
|
+
export const prepareCmdLogging = Effect.fn('cmd.logging.prepare')(function* ({ logDir, logFileName = 'dev.log', logRetention = 50 }) {
|
|
10
|
+
if (logDir == null || logDir === '')
|
|
11
11
|
return undefined;
|
|
12
12
|
const logsDir = logDir;
|
|
13
13
|
const archiveDir = path.join(logsDir, 'archive');
|
|
@@ -15,7 +15,7 @@ export const prepareCmdLogging = Effect.fn('cmd.logging.prepare')(function* ({ l
|
|
|
15
15
|
// Ensure directories exist
|
|
16
16
|
yield* Effect.sync(() => fs.mkdirSync(archiveDir, { recursive: true }));
|
|
17
17
|
// Archive previous log if present
|
|
18
|
-
if (fs.existsSync(currentLogPath)) {
|
|
18
|
+
if (fs.existsSync(currentLogPath) === true) {
|
|
19
19
|
const safeIso = new Date().toISOString().replaceAll(':', '-');
|
|
20
20
|
const archivedBase = `${path.parse(logFileName).name}-${safeIso}.log`;
|
|
21
21
|
const archivedLog = path.join(archiveDir, archivedBase);
|
|
@@ -36,12 +36,12 @@ export const prepareCmdLogging = Effect.fn('cmd.logging.prepare')(function* ({ l
|
|
|
36
36
|
*/
|
|
37
37
|
export const applyLoggingToCommand = Effect.fn('cmd.logging.apply')(function* (commandInput, options) {
|
|
38
38
|
const asArray = Array.isArray(commandInput);
|
|
39
|
-
const parts = asArray ? commandInput.filter(isNotUndefined) : undefined;
|
|
39
|
+
const parts = asArray === true ? commandInput.filter(isNotUndefined) : undefined;
|
|
40
40
|
const logPath = yield* prepareCmdLogging(options);
|
|
41
41
|
return {
|
|
42
|
-
input: asArray ? (parts ?? []) : commandInput,
|
|
42
|
+
input: asArray === true ? (parts ?? []) : commandInput,
|
|
43
43
|
subshell: false,
|
|
44
|
-
...(logPath ? { logPath } : {}),
|
|
44
|
+
...(logPath !== undefined ? { logPath } : {}),
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
47
|
//# sourceMappingURL=cmd-log.js.map
|
package/dist/node/cmd-log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-log.js","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAQhD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"cmd-log.js","sourceRoot":"","sources":["../../src/node/cmd-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAQhD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuE,MAAM,CAAC,EAAE,CAC5G,qBAAqB,CACtB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,YAAY,GAAG,EAAE,EAAsB;IACrF,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,SAA+B,CAAA;IAE3E,MAAM,OAAO,GAAG,MAAM,CAAA;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEtD,2BAA2B;IAC3B,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEvE,kCAAkC;IAClC,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,OAAO,MAAM,CAAA;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QACvD,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACtE,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;YACd,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;YAC5C,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;QACpC,CAAC,CAAC,CACH,EACD,MAAM,CAAC,MAAM,CACd,CAAA;QAED,6CAA6C;QAC7C,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK;aACF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACpF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CACzC,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACnF,CACF,EACD,MAAM,CAAC,MAAM,CACd,CAAA;IACH,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAGsD,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CACpH,QAAQ,CAAC,EAAE,YAAY,EAAE,OAAO;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAEjD,OAAO;QACL,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,KAAkB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;QACpE,QAAQ,EAAE,KAAK;QACf,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAA;AACH,CAAC,CACF,CAAA"}
|
package/dist/node/cmd.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare const cmd: (commandInput: string | (string | undefined)[], option
|
|
|
14
14
|
logFileName?: string;
|
|
15
15
|
/** Optional number of archived logs to retain; defaults to 50 */
|
|
16
16
|
logRetention?: number;
|
|
17
|
-
}
|
|
17
|
+
}) => Effect.Effect<CommandExecutor.ExitCode, PlatformError.PlatformError | CmdError, CommandExecutor.CommandExecutor | CurrentWorkingDirectory>;
|
|
18
18
|
export declare const cmdText: (commandInput: string | (string | undefined)[], options?: {
|
|
19
19
|
stderr?: 'inherit' | 'pipe';
|
|
20
20
|
runInShell?: boolean;
|
package/dist/node/cmd.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/node/cmd.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,eAAe,EACpB,MAAM,EAQN,KAAK,aAAa,EAClB,MAAM,EAEP,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/node/cmd.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,eAAe,EACpB,MAAM,EAQN,KAAK,aAAa,EAClB,MAAM,EAEP,MAAM,yBAAyB,CAAA;AAIhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAKxD,eAAO,MAAM,GAAG,EAAE,CAChB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,KACE,MAAM,CAAC,MAAM,CAChB,eAAe,CAAC,QAAQ,EACxB,aAAa,CAAC,aAAa,GAAG,QAAQ,EACtC,eAAe,CAAC,eAAe,GAAG,uBAAuB,CA8DzD,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,CACpB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC,KACE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,eAAe,GAAG,uBAAuB,CAuB7G,CAAA;;;;;;;;;;AAEJ,qBAAa,QAAS,SAAQ,aAM5B;CAAG"}
|
package/dist/node/cmd.js
CHANGED
|
@@ -9,22 +9,22 @@ const SUCCESS_EXIT_CODE = 0;
|
|
|
9
9
|
export const cmd = Effect.fn('cmd')(function* (commandInput, options) {
|
|
10
10
|
const cwd = yield* CurrentWorkingDirectory;
|
|
11
11
|
const asArray = Array.isArray(commandInput);
|
|
12
|
-
const parts = asArray ? commandInput.filter(isNotUndefined) : undefined;
|
|
13
|
-
const [command, ...args] = asArray ? parts : commandInput.split(' ');
|
|
12
|
+
const parts = asArray === true ? commandInput.filter(isNotUndefined) : undefined;
|
|
13
|
+
const [command, ...args] = asArray === true ? parts : commandInput.split(' ');
|
|
14
14
|
const debugEnvStr = Object.entries(options?.env ?? {})
|
|
15
|
-
.map(([key, value]) => `${key}='${value}' `)
|
|
15
|
+
.map(([key, value]) => `${key}='${String(value)}' `)
|
|
16
16
|
.join('');
|
|
17
17
|
const loggingOpts = {
|
|
18
|
-
...(options?.logDir ? { logDir: options.logDir } : {}),
|
|
19
|
-
...(options?.logFileName ? { logFileName: options.logFileName } : {}),
|
|
20
|
-
...(options?.logRetention ? { logRetention: options.logRetention } : {}),
|
|
18
|
+
...(options?.logDir !== undefined ? { logDir: options.logDir } : {}),
|
|
19
|
+
...(options?.logFileName !== undefined ? { logFileName: options.logFileName } : {}),
|
|
20
|
+
...(options?.logRetention !== undefined ? { logRetention: options.logRetention } : {}),
|
|
21
21
|
};
|
|
22
22
|
const { input: finalInput, subshell: needsShell, logPath } = yield* applyLoggingToCommand(commandInput, loggingOpts);
|
|
23
23
|
const stdoutMode = options?.stdout ?? 'inherit';
|
|
24
24
|
const stderrMode = options?.stderr ?? 'inherit';
|
|
25
|
-
const useShell = (options?.shell ? true : false) || needsShell;
|
|
26
|
-
const commandDebugStr = debugEnvStr + (Array.isArray(finalInput) ? finalInput.join(' ') : finalInput);
|
|
27
|
-
const subshellStr = useShell ? ' (in subshell)' : '';
|
|
25
|
+
const useShell = (options?.shell === true ? true : false) || needsShell;
|
|
26
|
+
const commandDebugStr = debugEnvStr + (Array.isArray(finalInput) === true ? finalInput.join(' ') : finalInput);
|
|
27
|
+
const subshellStr = useShell === true ? ' (in subshell)' : '';
|
|
28
28
|
yield* Effect.logDebug(`Running '${commandDebugStr}' in '${cwd}'${subshellStr}`);
|
|
29
29
|
yield* Effect.annotateCurrentSpan({
|
|
30
30
|
'span.label': commandDebugStr,
|
|
@@ -41,40 +41,38 @@ export const cmd = Effect.fn('cmd')(function* (commandInput, options) {
|
|
|
41
41
|
stderrMode,
|
|
42
42
|
useShell,
|
|
43
43
|
};
|
|
44
|
-
const exitCode = yield* isNotUndefined(logPath)
|
|
44
|
+
const exitCode = yield* isNotUndefined(logPath) === true
|
|
45
45
|
? Effect.gen(function* () {
|
|
46
46
|
yield* Effect.sync(() => console.log(`Logging output to ${logPath}`));
|
|
47
47
|
return yield* runWithLogging({ ...baseArgs, logPath, threadName: commandDebugStr });
|
|
48
48
|
})
|
|
49
49
|
: runWithoutLogging(baseArgs);
|
|
50
50
|
if (exitCode !== SUCCESS_EXIT_CODE) {
|
|
51
|
-
return yield*
|
|
51
|
+
return yield* CmdError.make({
|
|
52
52
|
command: command,
|
|
53
53
|
args,
|
|
54
54
|
cwd,
|
|
55
55
|
env: options?.env ?? {},
|
|
56
56
|
stderr: stderrMode,
|
|
57
|
-
})
|
|
57
|
+
});
|
|
58
58
|
}
|
|
59
59
|
return exitCode;
|
|
60
60
|
});
|
|
61
61
|
export const cmdText = Effect.fn('cmdText')(function* (commandInput, options) {
|
|
62
62
|
const cwd = yield* CurrentWorkingDirectory;
|
|
63
|
-
const [command, ...args] = Array.isArray(commandInput)
|
|
64
|
-
? commandInput.filter(isNotUndefined)
|
|
65
|
-
: commandInput.split(' ');
|
|
63
|
+
const [command, ...args] = Array.isArray(commandInput) === true ? commandInput.filter(isNotUndefined) : commandInput.split(' ');
|
|
66
64
|
const debugEnvStr = Object.entries(options?.env ?? {})
|
|
67
|
-
.map(([key, value]) => `${key}='${value}' `)
|
|
65
|
+
.map(([key, value]) => `${key}='${String(value)}' `)
|
|
68
66
|
.join('');
|
|
69
67
|
const commandDebugStr = debugEnvStr + [command, ...args].join(' ');
|
|
70
|
-
const subshellStr = options?.runInShell ? ' (in subshell)' : '';
|
|
68
|
+
const subshellStr = options?.runInShell === true ? ' (in subshell)' : '';
|
|
71
69
|
yield* Effect.logDebug(`Running '${commandDebugStr}' in '${cwd}'${subshellStr}`);
|
|
72
70
|
yield* Effect.annotateCurrentSpan({ 'span.label': commandDebugStr, command, cwd });
|
|
73
71
|
return yield* Command.make(command, ...args).pipe(
|
|
74
72
|
// inherit = Stream stderr to process.stderr, pipe = Stream stderr to process.stdout
|
|
75
|
-
Command.stderr(options?.stderr ?? 'inherit'), Command.workingDirectory(cwd), options?.runInShell ? Command.runInShell(true) : identity, Command.env(options?.env ?? {}), Command.string);
|
|
73
|
+
Command.stderr(options?.stderr ?? 'inherit'), Command.workingDirectory(cwd), options?.runInShell === true ? Command.runInShell(true) : identity, Command.env(options?.env ?? {}), Command.string);
|
|
76
74
|
});
|
|
77
|
-
export class CmdError extends Schema.TaggedError()('CmdError', {
|
|
75
|
+
export class CmdError extends Schema.TaggedError('~@livestore/utils-dev/CmdError')('CmdError', {
|
|
78
76
|
command: Schema.String,
|
|
79
77
|
args: Schema.Array(Schema.String),
|
|
80
78
|
cwd: Schema.String,
|
|
@@ -82,7 +80,7 @@ export class CmdError extends Schema.TaggedError()('CmdError', {
|
|
|
82
80
|
stderr: Schema.Literal('inherit', 'pipe'),
|
|
83
81
|
}) {
|
|
84
82
|
}
|
|
85
|
-
const runWithoutLogging = ({ commandInput, cwd, env, stdoutMode, stderrMode, useShell }) => buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout(stdoutMode), Command.stderr(stderrMode), Command.workingDirectory(cwd), useShell ? Command.runInShell(true) : identity, Command.env(env), Command.exitCode);
|
|
83
|
+
const runWithoutLogging = ({ commandInput, cwd, env, stdoutMode, stderrMode, useShell }) => buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout(stdoutMode), Command.stderr(stderrMode), Command.workingDirectory(cwd), useShell === true ? Command.runInShell(true) : identity, Command.env(env), Command.exitCode);
|
|
86
84
|
const runWithLogging = ({ commandInput, cwd, env, stdoutMode, stderrMode, useShell, logPath, threadName, }) =>
|
|
87
85
|
// When logging is enabled we have to replace the `2>&1 | tee` pipeline the
|
|
88
86
|
// shell used to give us. We now pipe both streams through Effect so we can
|
|
@@ -109,9 +107,9 @@ Effect.scoped(Effect.gen(function* () {
|
|
|
109
107
|
});
|
|
110
108
|
fs.writeSync(logFile, formatted);
|
|
111
109
|
});
|
|
112
|
-
const command = buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout('pipe'), Command.stderr('pipe'), Command.workingDirectory(cwd), useShell ? Command.runInShell(true) : identity, Command.env(envWithColor));
|
|
110
|
+
const command = buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout('pipe'), Command.stderr('pipe'), Command.workingDirectory(cwd), useShell === true ? Command.runInShell(true) : identity, Command.env(envWithColor));
|
|
113
111
|
// Acquire/start the command and make sure we kill it on interruption.
|
|
114
|
-
const runningProcess = yield* Effect.acquireRelease(command.pipe(Command.start), (proc) => proc.isRunning.pipe(Effect.flatMap((running) =>
|
|
112
|
+
const runningProcess = yield* Effect.acquireRelease(command.pipe(Command.start), (proc) => proc.isRunning.pipe(Effect.flatMap((running) => running === true ? proc.kill().pipe(Effect.catchAll(() => Effect.void)) : Effect.void), Effect.ignore));
|
|
115
113
|
const stdoutHandler = makeStreamHandler({
|
|
116
114
|
channel: 'stdout',
|
|
117
115
|
...(stdoutMode === 'inherit' ? { mirrorTarget: process.stdout } : {}),
|
|
@@ -127,7 +125,7 @@ Effect.scoped(Effect.gen(function* () {
|
|
|
127
125
|
// Dump any buffered data and finish both stream fibers before we return.
|
|
128
126
|
const flushOutputs = Effect.gen(function* () {
|
|
129
127
|
const stillRunning = yield* runningProcess.isRunning.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
130
|
-
if (stillRunning) {
|
|
128
|
+
if (stillRunning === true) {
|
|
131
129
|
yield* Effect.ignore(runningProcess.kill());
|
|
132
130
|
}
|
|
133
131
|
yield* Effect.ignore(Fiber.join(stdoutFiber));
|
|
@@ -139,11 +137,11 @@ Effect.scoped(Effect.gen(function* () {
|
|
|
139
137
|
return exitCode;
|
|
140
138
|
}));
|
|
141
139
|
const buildCommand = (input, useShell) => {
|
|
142
|
-
if (Array.isArray(input)) {
|
|
140
|
+
if (Array.isArray(input) === true) {
|
|
143
141
|
const [c, ...a] = input;
|
|
144
142
|
return Command.make(c, ...a);
|
|
145
143
|
}
|
|
146
|
-
if (useShell) {
|
|
144
|
+
if (useShell === true) {
|
|
147
145
|
return Command.make(input);
|
|
148
146
|
}
|
|
149
147
|
const [c, ...a] = input.split(' ');
|
|
@@ -159,7 +157,7 @@ const makeStreamHandler = ({ channel, mirrorTarget, appendLog, }) => {
|
|
|
159
157
|
channel,
|
|
160
158
|
content,
|
|
161
159
|
terminator,
|
|
162
|
-
...(mirrorTarget ? { mirrorTarget } : {}),
|
|
160
|
+
...(mirrorTarget !== undefined ? { mirrorTarget } : {}),
|
|
163
161
|
appendLog,
|
|
164
162
|
});
|
|
165
163
|
const consumeBuffer = () => {
|
|
@@ -210,7 +208,7 @@ const makeStreamHandler = ({ channel, mirrorTarget, appendLog, }) => {
|
|
|
210
208
|
};
|
|
211
209
|
};
|
|
212
210
|
const emitSegment = ({ channel, content, terminator, mirrorTarget, appendLog, }) => Effect.gen(function* () {
|
|
213
|
-
if (mirrorTarget) {
|
|
211
|
+
if (mirrorTarget !== undefined) {
|
|
214
212
|
yield* Effect.sync(() => mirrorSegment(mirrorTarget, content, terminator));
|
|
215
213
|
}
|
|
216
214
|
const contentForLog = terminator === 'carriage-return' ? `${content}\r` : content;
|