funar

2.0.0 • Public • Published

funar

Signature parser for functions

github action codecov npm

Example

funar allows you to convert this function:

// example package: `jscertооl`; source path: `src/cli.js`
/**
 * Update certificate on local machine using an existing TLS certificate
 * @param   {Object}  options
 * @param   {string}  options.domainName Domain name to download the certificate for
 * @param   {boolean} [options.verbose]  Be verbose
 * @returns {Promise}
 */
export async function updateCertificate ({domainName, verbose}) {}

To this CLI:

$ npx jscertооl updateCertificate --domainName google.example

No configuration required!

Getting started

Generate CLI from ESM

Run the generator:

$ npx funar cli -i src/<cli>.js -o bin/<packageName>.js

(Optionally) setup package.json for npx:

npm pkg set bin.$(npm pkg get name | xargs echo)=./bin/<packageName>.js

Compatibility

Running

Only ESM modules are supported right now

Testing

Node.js v22 is required because of native V8 coverage

How it works

How is this possible? The function metadata already includes:

  • The function's input contract, specifying the input data structure, parameter types, and associated destructured variable names
  • Function output contract
  • Synchronized parameter descriptions (you can use tsc to ensure the documentation is in sync with the function declaration)
  • The exported name to allow running different functions in one executable

Running a function as a CLI is straightforward if you have a function contract. Here's the process:

  1. Parse input parameter values from command line arguments
  2. Validate input parameter values
  3. Pass values to the function

Additional features:

  • [ ] Function name and parameter autocompletion;
  • [*] Generate usage for a function
  • [*] Generate usage for an executable to list all the functions
  • [ ] Support …rest to read extra arguments

Readme

Keywords

Package Sidebar

Install

npm i funar

Weekly Downloads

6

Version

2.0.0

License

MIT

Unpacked Size

72.3 kB

Total Files

21

Last publish

Collaborators

  • apla