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)
|