2.0.7 • Published 4 years ago

xns v2.0.7

Weekly downloads
1,734
License
ISC
Repository
github
Last release
4 years ago

xns

Turn any function into a script that can be invoked from the command line.

xns stands for eXecute Node Script!

Problem

Let's say you have written a cool JavaScript (or TypeScript) function!

get-bitcoin-price.ts:

import got from 'got';

export default async (): Promise<string> => {
  const res = await got('https://api.coinbase.com/v2/prices/spot');
  const {currency, amount} = JSON.parse(res.body).data;
  return `1 Bitcoin is worth ${currency} ${amount}`;
};

Now you would like to execute this function in your terminal. Current options are not ideal:

  • You could make the function self-invoking, but then it also executes by itself as soon as it's imported somewhere else.
  • You could make another file, import the function and execute it, then run that file, but it's cumbersome.

Solution

Wrap your function in xns():

get-bitcoin-price.ts:

import xns from 'xns';
import got from 'got';

export default xns(async (): Promise<string> => {
  const res = await got('https://api.coinbase.com/v2/prices/spot');
  const {currency, amount} = JSON.parse(res.body).data;
  return `1 Bitcoin is worth ${currency} ${amount}`;
});

Now you can execute the function from your terminal:

ts-node get-bitcoin-price
1 Bitcoin is worth USD 7767.655

You can also still import the function from somewhere else as usual and it will not execute itself 👌

Why xns?

  • Works with node and transpiled languages: ts-node, babel-node...
  • Can still be imported as normal
  • Prints out the return value
  • Fully typed, keep Typescript typings
  • Wrapping function in xns does not change behavior of your app
  • Exit code 1 on error, exit code 0 on success, perfect for CRON jobs
  • No Unhandled promise rejection errors, proper catch handler built in
  • Works with synchronous and asynchronous functions
  • Works with ES Modules and CommonJS import style
    • Use named export for CommonJS: const {xns} = require('xns')

Old version of xns

This is version 2 of xns. Version 1 worked completely different, it compiled a file using babel and called the default export. It's still supported if you have Babel. See here for the old API.

License

MIT

Author

Jonny Burger

2.0.5

4 years ago

2.0.7

4 years ago

2.0.6

4 years ago

2.0.3

4 years ago

2.0.4

4 years ago

2.0.0-alpha.6

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

2.0.0-alpha.5

4 years ago

2.0.0-alpha.4

4 years ago

2.0.0-alpha.3

4 years ago

2.0.0-alpha.2

4 years ago

2.0.0-alpha.1

4 years ago

2.0.0-alpha.0

4 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

6 years ago