npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sx

v0.1.5

Published

Javascript's command-line swiss army knife

Downloads

152

Readme

Sx

Build Status via Travis CI

sx is a command line utility which executes javascript code, mostly to process input and/or generate output.

Pull requests are very welcome!

Install

$ npm install -g sx

Features

  • Various input modes, including list and JSON input parsing.
  • Standard and file I/O supported.
  • Many automations: module auto-loading, last value auto-return, auto-escaping for zsh and auto-completion both for zsh and bash.
  • Poor man's beautifier (JSON.stringify).
  • An interactive REPL

Command-line tool

Usage

$ sx [options] "commands"

Options

Combos

More examples

Extras


Options

Pretty prints produced output, in case it's an object or an array.

Examples

An introductory hello world

$ sx -p "{hello:'world'}"

{
    "hello": "world"
}

Accepts input as JSON, useful for chaining sx calls.

Examples

Fetches geoip data and prints user's city

$ curl -sL http://freegeoip.net/json | sx -jx x.city

Berlin

Starts accepting input trough stdin, and exposes each line as x.

Examples

Prints all user's processes pids

$ ps | sx -x 'x.match(/\d+/)[0]'

337
345
4118
79235
97048

Treats all input passed through stdin as an array of lines, and exposes it as l.

Examples

Counts all matching occurrences

grep "console.log" * | sx -l l.length

5

Expects an asynchronous result, code must pass result to print callback exposed as a.

Examples

Echoes all incoming random bytes

$ /dev/urandom | sx -a "process.stdin.on('data', a); process.stdin.resume()" 

...

Uses provided code as a predicate to test input.

Examples

Returns only javascript files

$ ls | sx -fx "path.extname(x) === '.js'"

jayscript.js

Calls current object's toString method.

Examples

Inspects http.createServer

$ sx -s http.createServer

// vim: filetype=javascript
function (requestListener) {
      return new Server(requestListener);
}

Uses provided file as input instead of stdin.

Examples

Filters matching lines from file

$ sx -xlfi ~/.zshrc x.match\(/export PATH/\)

node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Uses provided file as output instead of stdout.

NOTE: Contents of output file will be wipped out preventively.

Examples

Saves input while writing stdout

$ tail -f /var/log/system.log | sx -xo local.log "console.log(x); x"

...

Uses provided file as input instead of stdin and at the same time as output instead of stdout, could be used to mutate contents of files, writing to them after the contents are on memory.

NOTE: Contents of output file will be wipped out preventively.

Examples

Replaces file contents in place

$ sx -bF Makefile "b.replace(/win32/i, 'darwin')"

Use another input dialect instead of javascript.

Javascript dialects are basically different languages which follow the style and the semantics of javascript.

This library includes the following dialects:

Standard Javascript (js): Common ECMAScript 5.

function pow(a, b){
    for (var r = a, n = 0; n < b; n++) {
        r = r * a
    }
    return r
}

function head(arr){
    return arr.slice(0, 1);
}

Go-Script (gs): A clone of Go syntax without the type stuff.

func pow(a, b){
    for r := a, n := 0; n < b; n++ {
        r = r * a
    }
    return r
}

func head(arr){
    return arr[0:1]
}

More information (will be available soon) on (node-jsjs)[http://github.com/aynik/jsjs] parser repository.


Combos

Accepts JSON input, treating it as a list and exposing each item.

Examples

Get all even numbers in a given range

$ sx '_.range(8)' | sx -jxlf x%2==0

0
2
4
6

More examples

$ npm install -g express
$ sx 'express.call().use(express.static("./")).listen(3000); "http://localhost:3000"'

http://localhost:3000

HTTP GET with request

$ npm install -g request
$ sx -a 'request.call(0, "http://google.com", function(err, resp, body){ a(body) })'

...

Extras

Auto-completion is provided as a script for bash and zsh.

Test in current zsh:

$ source <(sx --completion)

Install (bash):

$ echo "source <(sx --completion)" >> ~/.bashrc

Install (zsh):

$ echo "source <(sx --completion)" >> ~/.zshrc

Usage (core):

$ sx fs.<tab>
$ sx h<tab>

Usage (external module):

$ npm install -g lodash
$ sx _.<tab>

Auto-escaping is provided as a function for zsh.

Install:

  • First you'll have to find what are your zsh function paths.
$ echo $fpath

/usr/share/zsh/site-functions /usr/share/zsh/5.0.2/functions

Then chose the first of them, and install the script (you may need root permissions):

$ sudo sx --escaping > /usr/share/zsh/site-functions/sx-escape-magic

And add to your .zshrc an autoload command:

$ echo "autoload -Uz sx-escape-magic" >> ~/.zshrc
$ echo "sx-escape-magic" >> ~/.zshrc

Now when you restart your shell you should be able to write javascript code and special characters will be automatically escaped.


As an extra, sx comes with an interactive REPL called isx. It allows to build interactive programs by offering a set of REPL commands.

Usage

$ isx <session-filename.js (default: .session.js)> 

In-REPL Commands

  • :load <session-filename.js> loads a worker and a new session into it's buffer
  • :reload reloads the worker and feeds in current buffer
  • :test sets the repl in test mode (no code is saved into the buffer)
  • :build sets the repl in build mode (written code will be save into buffer)
  • :write writes the current buffer to it's session file
  • :drop N-N drops lines from the buffer at the given range
  • :move N-N N moves selected lines at the given range to a destination line number in the buffer
  • :print prints the current buffer
  • :quit exits the repl