@effect/platform/Command
コマンドを構築
BunContext.layerなどで解決できる
e.g.
code:ts
import { Command } from "@effect/platform"
import { NodeContext, NodeRuntime } from "@effect/platform-node"
import { Effect } from "effect"
const command = Command.make("ls", "-al")
// Effect.Effect<void, PlatformError, CommandExecutor>
const program = Effect.gen(function* () {
// Runs the command returning the output as a string
const output = yield* Command.string(command)
console.log(output)
})
// Provide the necessary CommandExecutor
NodeRuntime.runMain(program.pipe(Effect.provide(NodeContext.layer)))
output formats
Command.string
stdout 全体を文字列で返す
encoding 指定あり
Command.lines
stdout を改行で分割した配列で返す
Command.stream
stdout を Stream<Uint8Array> として返す(巨大出力や逐次処理向き)
Command.streamLines
行単位の Stream(ログ追跡っぽい用途に向く)
stdout を読まずに終了ステータスだけ欲しい時に使う
e.g. ls が成功すれば 0 が返る
環境変数をコマンドに付与できる
e.g. Command.env({ MY_CUSTOM_VAR: "..." })
シェル経由で実行されるため変数展開が効く
stdin にその文字列を流し込む
e.g.
code:ts
const command = Command.make("cat").pipe(Command.feed("Hello"))
プロセスを起動して、実行中プロセスのハンドル(stdout/stderr/exitCode など)を返す
低レベル寄り API
子プロセスの stdout を Node の process.stdout に直結する