diff --git a/README.md b/README.md
index 04d314a..cf58603 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,15 @@
# dax
[![deno doc](https://doc.deno.land/badge.svg)](https://doc.deno.land/https/deno.land/x/dax/mod.ts)
+[![NPM Version](https://img.shields.io/npm/v/dax-sh.svg?style=flat)](http://www.npmjs.com/package/dax-sh)
-Cross platform shell tools for Deno inspired by [zx](https://github.com/google/zx).
+Cross-platform shell tools for Deno and Node.js inspired by [zx](https://github.com/google/zx).
## Differences with zx
-1. Cross platform shell.
+1. Cross-platform shell.
- Makes more code work on Windows.
- Allows exporting the shell's environment to the current process.
- Uses [deno_task_shell](https://github.com/denoland/deno_task_shell)'s parser.
@@ -39,6 +40,8 @@ await Promise.all([
]);
```
+Note: Above instructions are for Deno. For Node.js, install via `npm install --save-dev dax-sh` then import via `import $ from "dax-sh";`.
+
### Getting output
Get the stdout of a command (makes stdout "quiet"):
@@ -105,12 +108,18 @@ Piping to a `WritableStream`:
```ts
await $`echo 1`.stdout(Deno.stderr.writable, { preventClose: true });
+// or with a redirect
+await $`echo 1 > ${someWritableStream}`;
```
To a file path:
```ts
await $`echo 1`.stdout($.path("data.txt"));
+// or
+await $`echo 1 > data.txt`;
+// or
+await $`echo 1 > ${$.path("data.txt")}`;
```
To a file:
@@ -118,6 +127,8 @@ To a file:
```ts
using file = $.path("data.txt").openSync({ write: true, create: true });
await $`echo 1`.stdout(file);
+// or
+await $`echo 1 > ${file}`;
```
From one command to another:
@@ -128,7 +139,7 @@ const output = await $`echo foo && echo bar`
.text();
// or using a pipe sequence
-const output = await $`echo foo && echo bar | grep foo`
+const output = await $`(echo foo && echo bar) | grep foo`
.text();
```
@@ -181,7 +192,7 @@ console.log(finalText); // 1
#### JavaScript objects to redirects
-You can also provide JavaScript objects to shell output redirects:
+You can provide JavaScript objects to shell output redirects:
```ts
const buffer = new Uint8Array(2);
@@ -189,7 +200,7 @@ await $`echo 1 && (echo 2 > ${buffer}) && echo 3`; // 1\n3\n
console.log(buffer); // Uint8Array(2) [ 50, 10 ] (2\n)
```
-Supported objects: `Uint8Array`, `Path`, `WritableStream`, function that returns a `WritableStream`, any object that implements `[$.symbols.writable](): WritableStream`
+Supported objects: `Uint8Array`, `Path`, `WritableStream`, any function that returns a `WritableStream`, any object that implements `[$.symbols.writable](): WritableStream`
Or input redirects:
@@ -208,7 +219,7 @@ const request = $.request("https://plugins.dprint.dev/info.json")
const bytes = await $`sleep 5 && gzip < ${request}`.bytes();
```
-Supported objects: `string`, `Uint8Array`, `Path`, `RequestBuilder`, `ReadableStream`, function that returns a `ReadableStream`, any object that implements `[$.symbols.readable](): ReadableStream`
+Supported objects: `string`, `Uint8Array`, `Path`, `RequestBuilder`, `ReadableStream`, any function that returns a `ReadableStream`, any object that implements `[$.symbols.readable](): ReadableStream`
### Providing stdin
@@ -222,6 +233,12 @@ await $`command`.stdin($.request("https://plugins.dprint.dev/info.json"));
await $`command`.stdinText("some value");
```
+Or using a redirect:
+
+```ts
+await $`command < ${$.path("data.json")}`;
+```
+
### Streaming API
Awaiting a command will get the `CommandResult`, but calling `.spawn()` on a command without `await` will return a `CommandChild`. This has some methods on it to get web streams of stdout and stderr of the executing command if the corresponding pipe is set to `"piped"`. These can then be sent wherever you'd like, such as to the body of a `$.request` or another command's stdin.
@@ -312,10 +329,8 @@ Instead of awaiting the template literal, you can get a command child by calling
```ts
const child = $`echo 1 && sleep 100 && echo 2`.spawn();
-// kill the child after 1s
-await $.sleep("1s");
+await doSomeOtherWork();
child.kill(); // defaults to "SIGTERM"
-
await child; // Error: Aborted with exit code: 124
```
@@ -747,7 +762,7 @@ const downloadPath = await $.request(url)
## Shell
-The shell is cross platform and uses the parser from [deno_task_shell](https://github.com/denoland/deno_task_shell).
+The shell is cross-platform and uses the parser from [deno_task_shell](https://github.com/denoland/deno_task_shell).
Sequential lists:
@@ -815,7 +830,7 @@ const result = await $`echo $TEST`.env("TEST", "123").text();
console.log(result); // 123
```
-### Custom cross platform shell commands
+### Custom cross-platform shell commands
Currently implemented (though not every option is supported):
@@ -841,9 +856,9 @@ Currently implemented (though not every option is supported):
You can also register your own commands with the shell parser (see below).
-Note that these cross platform commands can be bypassed by running them through `sh`: `sh -c ` (ex. `sh -c cp source destination`). Obviously doing this won't work on Windows though.
+Note that these cross-platform commands can be bypassed by running them through `sh`: `sh -c ` (ex. `sh -c cp source destination`). Obviously doing this won't work on Windows though.
-### Cross platform shebang support
+### Cross-platform shebang support
Users on unix-based platforms often write a script like so: