Signature parser for functions
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!
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
Only ESM modules are supported right now
Node.js v22 is required because of native V8 coverage
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:
- Parse input parameter values from command line arguments
- Validate input parameter values
- 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