@effect/platform-node 0.19.9 → 0.20.1
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/Command/dist/effect-platform-node-Command.cjs.dev.js +32 -32
- package/Command/dist/effect-platform-node-Command.cjs.prod.js +32 -32
- package/CommandExecutor/dist/effect-platform-node-CommandExecutor.cjs.dev.js +184 -16
- package/CommandExecutor/dist/effect-platform-node-CommandExecutor.cjs.prod.js +184 -16
- package/CommandExecutor/dist/effect-platform-node-CommandExecutor.esm.js +158 -13
- package/Effectify/dist/effect-platform-node-Effectify.cjs.dev.js +2 -2
- package/Effectify/dist/effect-platform-node-Effectify.cjs.prod.js +2 -2
- package/Error/dist/effect-platform-node-Error.cjs.dev.js +6 -6
- package/Error/dist/effect-platform-node-Error.cjs.prod.js +6 -6
- package/FileSystem/dist/effect-platform-node-FileSystem.cjs.dev.js +423 -17
- package/FileSystem/dist/effect-platform-node-FileSystem.cjs.prod.js +423 -17
- package/FileSystem/dist/effect-platform-node-FileSystem.esm.js +395 -12
- package/Http/FormData/dist/effect-platform-node-Http-FormData.cjs.dev.js +3 -3
- package/Http/FormData/dist/effect-platform-node-Http-FormData.cjs.prod.js +3 -3
- package/Http/FormData/dist/effect-platform-node-Http-FormData.esm.js +3 -3
- package/Http/NodeClient/dist/effect-platform-node-Http-NodeClient.cjs.dev.js +4 -4
- package/Http/NodeClient/dist/effect-platform-node-Http-NodeClient.cjs.prod.js +4 -4
- package/Http/NodeClient/dist/effect-platform-node-Http-NodeClient.esm.js +4 -4
- package/Http/Platform/dist/effect-platform-node-Http-Platform.cjs.dev.js +2 -2
- package/Http/Platform/dist/effect-platform-node-Http-Platform.cjs.prod.js +2 -2
- package/Http/Platform/dist/effect-platform-node-Http-Platform.esm.js +2 -2
- package/Http/Server/dist/effect-platform-node-Http-Server.cjs.dev.js +8 -7
- package/Http/Server/dist/effect-platform-node-Http-Server.cjs.prod.js +8 -7
- package/Http/Server/dist/effect-platform-node-Http-Server.esm.js +8 -7
- package/HttpClient/dist/effect-platform-node-HttpClient.cjs.dev.js +19 -19
- package/HttpClient/dist/effect-platform-node-HttpClient.cjs.prod.js +19 -19
- package/HttpClient/dist/effect-platform-node-HttpClient.esm.js +4 -4
- package/HttpServer/dist/effect-platform-node-HttpServer.cjs.dev.js +23 -23
- package/HttpServer/dist/effect-platform-node-HttpServer.cjs.prod.js +23 -23
- package/HttpServer/dist/effect-platform-node-HttpServer.esm.js +8 -8
- package/KeyValueStore/dist/effect-platform-node-KeyValueStore.cjs.dev.js +39 -9
- package/KeyValueStore/dist/effect-platform-node-KeyValueStore.cjs.prod.js +39 -9
- package/KeyValueStore/dist/effect-platform-node-KeyValueStore.esm.js +18 -4
- package/NodeContext/dist/effect-platform-node-NodeContext.cjs.dev.js +39 -7
- package/NodeContext/dist/effect-platform-node-NodeContext.cjs.prod.js +39 -7
- package/NodeContext/dist/effect-platform-node-NodeContext.esm.js +22 -6
- package/Path/dist/effect-platform-node-Path.cjs.dev.js +91 -11
- package/Path/dist/effect-platform-node-Path.cjs.prod.js +91 -11
- package/Path/dist/effect-platform-node-Path.esm.js +68 -6
- package/Runtime/dist/effect-platform-node-Runtime.cjs.dev.js +57 -6
- package/Runtime/dist/effect-platform-node-Runtime.cjs.prod.js +57 -6
- package/Runtime/dist/effect-platform-node-Runtime.esm.js +38 -3
- package/Sink/dist/effect-platform-node-Sink.cjs.dev.js +15 -3
- package/Sink/dist/effect-platform-node-Sink.cjs.prod.js +15 -3
- package/Sink/dist/effect-platform-node-Sink.esm.js +18 -2
- package/Stream/dist/effect-platform-node-Stream.cjs.dev.js +29 -5
- package/Stream/dist/effect-platform-node-Stream.cjs.prod.js +29 -5
- package/Stream/dist/effect-platform-node-Stream.esm.js +30 -2
- package/dist/{FormData-053407d4.cjs.dev.js → FormData-15af6672.cjs.dev.js} +1 -1
- package/dist/{FormData-bafc0b9a.esm.js → FormData-5ea8a8b6.esm.js} +1 -1
- package/dist/{FormData-c7339a7b.cjs.prod.js → FormData-d91e8016.cjs.prod.js} +1 -1
- package/dist/{NodeClient-ea1a9ab0.cjs.prod.js → NodeClient-3432a6a8.cjs.prod.js} +2 -2
- package/dist/{NodeClient-e349733e.esm.js → NodeClient-cd56cae8.esm.js} +2 -2
- package/dist/{NodeClient-1df9d813.cjs.dev.js → NodeClient-ebd71893.cjs.dev.js} +2 -2
- package/dist/{Server-ea100887.cjs.prod.js → Server-5dbcee7b.cjs.prod.js} +7 -5
- package/dist/{Server-264c702d.cjs.dev.js → Server-5f055bfd.cjs.dev.js} +7 -5
- package/dist/{Server-5237fa52.esm.js → Server-c08c825c.esm.js} +6 -5
- package/dist/declarations/src/index.d.ts.map +1 -1
- package/dist/effect-platform-node.cjs.dev.js +58 -86
- package/dist/effect-platform-node.cjs.prod.js +58 -86
- package/dist/effect-platform-node.esm.js +26 -73
- package/dist/{formData-fac89256.cjs.dev.js → formData-632b1146.cjs.dev.js} +1 -1
- package/dist/{formData-4330f230.esm.js → formData-dd75bbe1.esm.js} +1 -1
- package/dist/{formData-09ad7f6d.cjs.prod.js → formData-ecf6742b.cjs.prod.js} +1 -1
- package/dist/{incomingMessage-12764c2c.esm.js → incomingMessage-11c9bea6.esm.js} +1 -1
- package/dist/{incomingMessage-8a9a29f7.cjs.prod.js → incomingMessage-86bcf94d.cjs.dev.js} +1 -1
- package/dist/{incomingMessage-d7f144e7.cjs.dev.js → incomingMessage-f56be93e.cjs.prod.js} +1 -1
- package/dist/{platform-f3d31bb1.esm.js → platform-2c00c2c5.esm.js} +1 -1
- package/dist/{platform-1c31462c.cjs.dev.js → platform-5b27475e.cjs.dev.js} +1 -1
- package/dist/{platform-d09ef04f.cjs.prod.js → platform-80b90f07.cjs.prod.js} +1 -1
- package/package.json +8 -5
- package/src/index.ts +13 -13
- package/src/internal/http/server.ts +8 -1
- package/dist/Command-15b84341.cjs.dev.js +0 -29
- package/dist/Command-2fc875e9.cjs.prod.js +0 -29
- package/dist/Command-56d67f13.esm.js +0 -27
- package/dist/CommandExecutor-b7cb55b8.cjs.dev.js +0 -195
- package/dist/CommandExecutor-bccc7563.cjs.prod.js +0 -195
- package/dist/CommandExecutor-cfc0af4b.esm.js +0 -165
- package/dist/Effectify-1676f59e.cjs.prod.js +0 -14
- package/dist/Effectify-24bba5b0.esm.js +0 -12
- package/dist/Effectify-c94620ca.cjs.dev.js +0 -14
- package/dist/Error-1e8c05fb.esm.js +0 -14
- package/dist/Error-243639ac.cjs.dev.js +0 -16
- package/dist/Error-eaa907c8.cjs.prod.js +0 -16
- package/dist/FileSystem-a207377d.cjs.prod.js +0 -433
- package/dist/FileSystem-d4a3521c.esm.js +0 -403
- package/dist/FileSystem-d7b8eeac.cjs.dev.js +0 -433
- package/dist/HttpClient-11e2237f.esm.js +0 -26
- package/dist/HttpClient-19998c5e.cjs.dev.js +0 -54
- package/dist/HttpClient-1ad217ea.cjs.prod.js +0 -54
- package/dist/HttpServer-08393436.esm.js +0 -34
- package/dist/HttpServer-6652ce27.cjs.dev.js +0 -64
- package/dist/HttpServer-d510f888.cjs.prod.js +0 -64
- package/dist/KeyValueStore-35cb6494.cjs.prod.js +0 -62
- package/dist/KeyValueStore-66bca5fd.esm.js +0 -38
- package/dist/KeyValueStore-af7495b6.cjs.dev.js +0 -62
- package/dist/NodeContext-3c96e955.cjs.dev.js +0 -50
- package/dist/NodeContext-4bca6ed4.esm.js +0 -27
- package/dist/NodeContext-dff7bc0b.cjs.prod.js +0 -50
- package/dist/Path-7a81561f.esm.js +0 -76
- package/dist/Path-bf4c3b07.cjs.prod.js +0 -104
- package/dist/Path-feae3dcf.cjs.dev.js +0 -104
- package/dist/Runtime-3bc7ee1e.esm.js +0 -44
- package/dist/Runtime-6aeac6f0.cjs.dev.js +0 -68
- package/dist/Runtime-e746c66d.cjs.prod.js +0 -68
- package/dist/Sink-536c2b16.cjs.dev.js +0 -26
- package/dist/Sink-554d2819.esm.js +0 -23
- package/dist/Sink-735101fa.cjs.prod.js +0 -26
- package/dist/Stream-2d5b1ece.esm.js +0 -37
- package/dist/Stream-53f57af5.cjs.dev.js +0 -42
- package/dist/Stream-7424efca.cjs.prod.js +0 -42
|
@@ -1,15 +1,160 @@
|
|
|
1
|
-
|
|
1
|
+
import * as Command from '@effect/platform/Command';
|
|
2
|
+
import * as CommandExecutor from '@effect/platform/CommandExecutor';
|
|
2
3
|
export { CommandExecutor } from '@effect/platform/CommandExecutor';
|
|
3
|
-
import '@effect/platform/
|
|
4
|
-
import '
|
|
5
|
-
import 'effect/
|
|
6
|
-
import 'effect/
|
|
7
|
-
import 'effect/
|
|
8
|
-
import 'effect/
|
|
9
|
-
import 'effect/
|
|
10
|
-
import '
|
|
11
|
-
import '
|
|
12
|
-
import '../../dist/
|
|
4
|
+
import * as FileSystem from '@effect/platform/FileSystem';
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import { pipe, constUndefined } from 'effect/Function';
|
|
7
|
+
import * as Layer from 'effect/Layer';
|
|
8
|
+
import * as Option from 'effect/Option';
|
|
9
|
+
import * as Sink from 'effect/Sink';
|
|
10
|
+
import * as Stream from 'effect/Stream';
|
|
11
|
+
import * as ChildProcess from 'node:child_process';
|
|
12
|
+
import { h as handleErrnoException } from '../../dist/error-4865cb95.esm.js';
|
|
13
|
+
import { f as fromWritable } from '../../dist/sink-bd7ef408.esm.js';
|
|
14
|
+
import { f as fromReadable } from '../../dist/stream-860139d3.esm.js';
|
|
13
15
|
import '@effect/platform/Error';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
const inputToStdioOption = stdin => Option.match(stdin, {
|
|
18
|
+
onNone: () => "inherit",
|
|
19
|
+
onSome: () => "pipe"
|
|
20
|
+
});
|
|
21
|
+
const outputToStdioOption = output => typeof output === "string" ? output : "pipe";
|
|
22
|
+
const toError = err => err instanceof globalThis.Error ? err : new globalThis.Error(String(err));
|
|
23
|
+
const toPlatformError = (method, error, command) => {
|
|
24
|
+
const flattened = Command.flatten(command).reduce((acc, curr) => {
|
|
25
|
+
const command = `${curr.command} ${curr.args.join(" ")}`;
|
|
26
|
+
return acc.length === 0 ? command : `${acc} | ${command}`;
|
|
27
|
+
}, "");
|
|
28
|
+
return handleErrnoException("Command", method)(error, [flattened]);
|
|
29
|
+
};
|
|
30
|
+
const runCommand = fileSystem => command => {
|
|
31
|
+
switch (command._tag) {
|
|
32
|
+
case "StandardCommand":
|
|
33
|
+
{
|
|
34
|
+
return pipe(
|
|
35
|
+
// Validate that the directory is accessible
|
|
36
|
+
Option.match(command.cwd, {
|
|
37
|
+
onNone: () => Effect.unit,
|
|
38
|
+
onSome: dir => fileSystem.access(dir)
|
|
39
|
+
}), Effect.zipRight(Effect.sync(() => globalThis.process.env)), Effect.flatMap(env => Effect.async(resume => {
|
|
40
|
+
const handle = ChildProcess.spawn(command.command, command.args, {
|
|
41
|
+
stdio: [inputToStdioOption(command.stdin), outputToStdioOption(command.stdout), outputToStdioOption(command.stderr)],
|
|
42
|
+
cwd: Option.getOrElse(command.cwd, constUndefined),
|
|
43
|
+
env: {
|
|
44
|
+
...env,
|
|
45
|
+
...Object.fromEntries(command.env)
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
let exited = false;
|
|
49
|
+
handle.on("exit", () => {
|
|
50
|
+
exited = true;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// If starting the process throws an error, make sure to capture it
|
|
54
|
+
handle.on("error", err => {
|
|
55
|
+
handle.kill("SIGKILL");
|
|
56
|
+
resume(Effect.fail(toPlatformError("spawn", err, command)));
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// If the process is assigned a process identifier, then we know it
|
|
60
|
+
// was spawned successfully
|
|
61
|
+
if (handle.pid) {
|
|
62
|
+
let stdin = Sink.drain;
|
|
63
|
+
if (handle.stdin !== null) {
|
|
64
|
+
stdin = fromWritable(() => handle.stdin, err => toPlatformError("toWritable", toError(err), command));
|
|
65
|
+
}
|
|
66
|
+
const exitCode = Effect.async(resume => {
|
|
67
|
+
if (exited) {
|
|
68
|
+
return resume(handle.exitCode !== null ? Effect.succeed(CommandExecutor.ExitCode(handle.exitCode)) : Effect.fail(toPlatformError("exitCode", new globalThis.Error(`Process interrupted due to receipt of signal: ${handle.signalCode}`), command)));
|
|
69
|
+
}
|
|
70
|
+
handle.on("exit", (code, signal) => {
|
|
71
|
+
if (code !== null) {
|
|
72
|
+
resume(Effect.succeed(CommandExecutor.ExitCode(code)));
|
|
73
|
+
} else {
|
|
74
|
+
// If code is `null`, then `signal` must be defined. See the NodeJS
|
|
75
|
+
// documentation for the `"exit"` event on a `child_process`.
|
|
76
|
+
// https://nodejs.org/api/child_process.html#child_process_event_exit
|
|
77
|
+
resume(Effect.fail(toPlatformError("exitCode", new globalThis.Error(`Process interrupted due to receipt of signal: ${signal}`), command)));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Make sure to terminate the running process if the fiber is
|
|
81
|
+
// terminated
|
|
82
|
+
return Effect.sync(() => {
|
|
83
|
+
handle.kill("SIGKILL");
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
const isRunning = Effect.sync(() => handle.exitCode === null && handle.signalCode === null && !handle.killed);
|
|
87
|
+
const kill = (signal = "SIGTERM") => Effect.async(resume => {
|
|
88
|
+
handle.kill(signal);
|
|
89
|
+
handle.on("exit", () => {
|
|
90
|
+
resume(Effect.unit);
|
|
91
|
+
});
|
|
92
|
+
// Make sure to terminate the running process if the fiber
|
|
93
|
+
// is terminated
|
|
94
|
+
return Effect.sync(() => {
|
|
95
|
+
handle.kill("SIGKILL");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
resume(Effect.sync(() => {
|
|
99
|
+
const pid = CommandExecutor.ProcessId(handle.pid);
|
|
100
|
+
const stderr = fromReadable(() => handle.stderr, err => toPlatformError("fromReadable(stderr)", toError(err), command));
|
|
101
|
+
let stdout = fromReadable(() => handle.stdout, err => toPlatformError("fromReadable(stdout)", toError(err), command));
|
|
102
|
+
// TODO: add Sink.isSink
|
|
103
|
+
if (typeof command.stdout !== "string") {
|
|
104
|
+
stdout = Stream.transduce(stdout, command.stdout);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
[CommandExecutor.ProcessTypeId]: CommandExecutor.ProcessTypeId,
|
|
108
|
+
pid,
|
|
109
|
+
exitCode,
|
|
110
|
+
isRunning,
|
|
111
|
+
kill,
|
|
112
|
+
stdin,
|
|
113
|
+
stderr,
|
|
114
|
+
stdout
|
|
115
|
+
};
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
return Effect.async(resume => {
|
|
119
|
+
if (handle.pid) {
|
|
120
|
+
handle.kill("SIGTERM");
|
|
121
|
+
}
|
|
122
|
+
handle.on("exit", () => {
|
|
123
|
+
resume(Effect.unit);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
})), Effect.tap(process => Option.match(command.stdin, {
|
|
127
|
+
onNone: () => Effect.unit,
|
|
128
|
+
onSome: stdin => Effect.forkDaemon(Stream.run(stdin, process.stdin))
|
|
129
|
+
})));
|
|
130
|
+
}
|
|
131
|
+
case "PipedCommand":
|
|
132
|
+
{
|
|
133
|
+
const flattened = Command.flatten(command);
|
|
134
|
+
if (flattened.length === 1) {
|
|
135
|
+
return pipe(flattened[0], runCommand(fileSystem));
|
|
136
|
+
}
|
|
137
|
+
const head = flattened[0];
|
|
138
|
+
const tail = flattened.slice(1);
|
|
139
|
+
const initial = tail.slice(0, tail.length - 1);
|
|
140
|
+
const last = tail[tail.length - 1];
|
|
141
|
+
const stream = initial.reduce((stdin, command) => pipe(Command.stdin(command, stdin), runCommand(fileSystem), Stream.flatMap(process => process.stdout)), pipe(runCommand(fileSystem)(head), Stream.flatMap(process => process.stdout)));
|
|
142
|
+
return pipe(Command.stdin(last, stream), runCommand(fileSystem));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/** @internal */
|
|
148
|
+
const layer$1 = /*#__PURE__*/Layer.effect(CommandExecutor.CommandExecutor, /*#__PURE__*/pipe(FileSystem.FileSystem, /*#__PURE__*/Effect.map(fileSystem => CommandExecutor.makeExecutor(runCommand(fileSystem)))));
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @since 1.0.0
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @since 1.0.0
|
|
156
|
+
* @category layer
|
|
157
|
+
*/
|
|
158
|
+
const layer = layer$1;
|
|
159
|
+
|
|
160
|
+
export { layer };
|
|
@@ -7,14 +7,14 @@ var Error = require('@effect/platform/Error');
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, 'BadArgument', {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return Error.BadArgument; }
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exports, 'PlatformErrorTypeId', {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return Error.PlatformErrorTypeId; }
|
|
16
16
|
});
|
|
17
17
|
Object.defineProperty(exports, 'SystemError', {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return Error.SystemError; }
|
|
20
20
|
});
|
|
@@ -7,14 +7,14 @@ var Error = require('@effect/platform/Error');
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, 'BadArgument', {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return Error.BadArgument; }
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exports, 'PlatformErrorTypeId', {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return Error.PlatformErrorTypeId; }
|
|
16
16
|
});
|
|
17
17
|
Object.defineProperty(exports, 'SystemError', {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return Error.SystemError; }
|
|
20
20
|
});
|