jayin

Piping with js at terminal


Keywords
bash, cli, cmd, jayin, json, pipe, shell, stream, lodash
License
MIT
Install
npm install jayin@0.0.3

Documentation

jayin

  cov   unit  e2e

Let's say you have a gitignore-like file:

# https://github.com/fritx/dotfiles
# .gitignore
*
!.gitignore
!README.md
!prs-welcome.svg
!.bashrc
!.bash_profile
!.exports
!.aliases
!.editorconfig

You want to cp the listed files to another folder.

Do it in bash?

files=$(cat .gitignore | sed /^\*$/d | sed s/\!//)
for file in $files; do cp $file ./dotfiles/; done

# or even
cat file | sed /^\*$/d | sed s/\!// \
  | while read -r file; do cp $file ./dotfiles/; done

# thanks to @congeec, http://v2ex.com/t/278831#reply3
sed /^\*$/d .gitignore | sed s/\!// | xargs -I{} cp {} ./dotfiles/

WTF?

As a node.js developer, what if using just js flow/style?

cat .gitignore | js -ti 'x.trim().split(`\n`).slice(1).map(x => x.slice(1))' \
  | js -e 'exec(`cp ${x} ./dotfiles/`)'

# same as
cat .gitignore | js -ti 'x.trim().split(`\n`)' \
  | js 'x.slice(1)' \
  | js 'x.map(x => x.slice(1))' \
  | js -e -c 'cp ${x} ./dotfiles/'
# lodash is also integrated in
# https://github.com/lodash/lodash
echo '[1,2,3,4]' | js '_.filter(x, x => x % 2)'  \
  | js '_.reverse(x)'  \
  > file

# or in chain
echo '[1,2,3,4]'  \
  | js '_(x).filter(x => x % 2).reverse().value()'  \
  > file

Don't forget to take an alias if you want.

npm install -g jayin
alias js="jayin"
  • -ti: input as text, no more JSON.parse
  • -to: output as text, no more JSON.stringify
  • -t: input/output both as text
  • -e: for each, in chain
  • -c: shortcut of exec(cmd)
  • x: current input value
  • i: current index value (with -e)
  • _: lodash
  • exec(cmd): child_process.execSync(cmd)

jayin is based on through2.

If you've seen anything that is similar to this, don't hesitate to let me know ;)

Compatibility

os Windows Ubuntu MacOS
supported
node 4 6 8 10 12 14 16 18
supported

See also: .github/workflows/

License

MIT License

Copyright (c) 2016-Present Fritz Lin