fx/npm/README.md

88 lines
1.8 KiB
Markdown
Raw Normal View History

2023-04-08 20:06:28 +00:00
# fx
2023-04-18 12:10:17 +00:00
A non-interactive, JavaScript version of the [**fx**](https://fx.wtf).
Short for _Function eXecution_ or _f(x)_.
2023-04-08 20:06:28 +00:00
```sh
npm i -g fx
```
Or use **npx**:
```sh
2023-04-12 09:01:52 +00:00
cat file.json | npx fx .field
2023-04-08 20:06:28 +00:00
```
Or use **node**:
```sh
2023-04-12 09:01:52 +00:00
cat file.json | node <(curl -s https://fx.wtf) .field
2023-04-08 20:06:28 +00:00
```
Or use **deno**:
```sh
2023-04-12 09:01:52 +00:00
cat file.json | deno run https://fx.wtf .field
2023-04-08 20:06:28 +00:00
```
## Usage
Fx treats arguments as JavaScript functions. Fx passes the input data to the first
function and then passes the result of the first function to the second function
and so on.
```sh
echo '{"name": "world"}' | fx 'x => x.name' 'x => `Hello, ${x}!`'
```
Use `this` to access the input data. Use `.` at the start of the expression to
access the input data without a `x => x` part.
```sh
2023-04-10 10:17:44 +00:00
echo '{"name": "world"}' | fx '.name' '`Hello, ${this}!`'
2023-04-08 20:06:28 +00:00
```
2023-04-10 10:17:04 +00:00
Use other JS functions to process the data.
```sh
2023-04-10 10:17:44 +00:00
echo `{"name": "world"}` | fx 'Object.keys'
2023-04-10 10:17:04 +00:00
```
2023-04-10 10:12:48 +00:00
## Advanced Usage
2023-04-10 19:29:14 +00:00
Fx has a shortcut for the map function. Fox example, `this.map(x => x.commit.message)`
can be rewritten without leading dot and without `x => x` parts.
2023-04-08 20:06:28 +00:00
```sh
2023-04-10 11:06:34 +00:00
curl https://api.github.com/repos/antonmedv/fx/commits | fx 'map(.commit.message)'
```
```sh
echo '[{"name": "world"}]' | fx 'map(`Hello, ${x.name}!`)'
2023-04-08 20:06:28 +00:00
```
Fx has a special syntax for the flatMap function. Fox example,
2023-04-10 10:18:18 +00:00
`.flatMap(x => x.labels.flatMap(x => x.name))` can be rewritten in the next way.
2023-04-08 20:06:28 +00:00
```sh
curl https://api.github.com/repos/kubernetes/kubernetes/issues | fx '.[].labels[].name'
```
2023-04-11 08:59:28 +00:00
Fx works with promises.
```sh
echo '"https://medv.io/*"' | fx 'fetch' '.text()'
```
2023-04-12 09:01:52 +00:00
When using the **-r** or **--raw** flag, the input will be treated as a raw string
instead of JSON. This can be useful when working with non-JSON input data, such as
plain text or CSV data.
```sh
ls | fx -r '.trim().split("\n")'
```
2023-04-08 20:06:28 +00:00
## License
[MIT](../LICENSE)