Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: update for npm package #242

Merged
merged 1 commit into from
Feb 9, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 28 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -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)

<img src="src/assets/logo.svg" height="150px" alt="dax logo">

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.
Expand Down Expand Up @@ -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"):
Expand Down Expand Up @@ -105,19 +108,27 @@ 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:

```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:
Expand All @@ -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();
```

Expand Down Expand Up @@ -181,15 +192,15 @@ 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);
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:

Expand All @@ -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

Expand All @@ -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.
Expand Down Expand Up @@ -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
```

Expand Down Expand Up @@ -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:

Expand Down Expand Up @@ -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):

Expand All @@ -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 <command>` (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 <command>` (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:

Expand Down
Loading