Socket
Socket
Sign inDemoInstall

xns

Package Overview
Dependencies
0
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    xns

Execute a JavaScript function


Version published
Weekly downloads
118
increased by34.09%
Maintainers
1
Install size
5.66 kB
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 11 Jan 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc