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

termoil

v1.1.5

Published

TermOil =================== ##Well oiled terminal apps

Downloads

11

Readme

TermOil

Build Status Average time to resolve an issue Percentage of issues still open Doclets API

##Well oiled terminal apps

Termoil is built on the simple concept of recursive references to the Termoil object. You create your main instance and then include sub instances (SubRoutines).

npm install --save termoil

Include the module

var Termoil = require('termoil');

Create your app

var myapp = new Termoil;

Add app name

myapp.name('Termoil App');

Add usage instructions

Usage info is shown when no options are passed or when passing -h, -H and --help

myapp.instructions('myapp [options]');

Add version info

Termoil allows you to associate multiple versions with your app and define the current active version. Right now the software only makes use of the active version info

myapp.addVersion(new Termoil.Version('1.0', true)) //add active version 1.0

Version is shown by calling -v, -V and --version

Add options

myapp.addOption(new Termoil.Option(['-n', '-N', '--name'], 'userName', new Termoil.Option.Type('value', true), 'User name field', 'John Smith', function(val){ return val.toLowerCase(); }));

The Option Object:

The option object is the most complex, customizable and useful class in the Termoil library. It extends the Argument class, which handles processing any arguments passed through process.argv

Check out the Argument api for details on options: https://doclets.io/the-letter-e-production/termoil/master#dl-Argument

Option Args: new Termoil.Option(keys, name, type, description, default, filter);

  • keys - An array of (n) allowed keys
    • var keys = ['-n', '-N', '--name'];
  • name - The property name of this argument
    • var name = 'name';
  • type - Option type: (required|optional|flag)
    • var type = 'required';
    • required - This option must have a value passed after it
    • optional - This option may have a value passed after it, otherwise it will use the default value
    • flag - Flags are booleans, if passed they result in truth
  • description - A description for the option, used in help page
    • var description = 'My description';
  • default - A default value in the event no value is passed
    • var default = 'Default Value';
  • filter - A function to pass the option value through
    • var filter = function(val){ return parseInt(val); };

The Option Type Object:

The option type object allows you to determine the behavior of each option.

Option Type Args: new Termoil.Option.Type(key, required, repeating);

  • key - The type of option to be used. Either 'value' or 'flag'.
    • value - An option that accepts a value
    • flag - An option that returns true when set
  • required - A boolean used for value options to denote a required to be passed after the option
  • repeating - A boolean used for value options to denote multiple values may be passed after the option
    • repeating values will be stored in an array

Add A SubRoutine

There is no limit to how deep you can nest sub routines (inception style)

var mysubapp = new Termoil;
    //define all app options here
myapp.addSubRoutine(new Termoil.SubRoutine(['sub'], 'sub', mysubapp));

Usage info will show for subroutines with no options passed as well

myapp sub; #this will show usage info for mysubapp

Parse Argv

myapp.parse(Termoil.Skip(process.argv, 2));

You only need to call .parse on your main app. Parsing of options for SubRoutines will be handled automatically

Options will cascade through SubRoutines. However, they will not be available upstream. mysubapp gets a copy of options from myapp, but myapp doesn't see options passed to mysubapp

Use Options

There are two main ways to make use of options

  1. After calling parse - You can simply access the options using the Termoil getters after you've called .parse, since it's a synchronous method. This method can be annoying as you will have to write your own conditionals to handle whether or not options were in fact parsed or SubRoutines got called.
  2. Attach to the .on('parsed') event - This is recommended as it will only run the callback if your app actually had options passed to it.
//after parse example
myapp.parse(Termoil.Skip(process.argv, 2));
console.log(myapp.get());

//on event example
myapp.on('parsed', function(){
    console.log(this.get());
}).parse(Termoil.Skip(process.argv, 2));

Using the .on('parsed') callback will allow you to access the instance of your Termoil Object using this

Helper Methods

There are 3 main helper methods you should use to make scripting with termoil easier

  1. .get - Get option(s)
  2. .has - Check for existence of option
  3. .has_all - Check for existence of options
myapp.on('parsed', function(){
    //get example
    var myopt = this.get('myopt'); //return option if exists, else returns false
    var opts = this.get(); //return json object of all options

    //has example
    var boolean = this.has('myopt'); //returns true if option exists, else returns false
    var boolean = this.has('myopt', function(myopt){ //returns callback if myopt exists
        console.log(myopt); //value of myopt
    }); //still returns same boolean
    
    //has all example
    var boolean = this.has_all(['myopt', 'youropt']); //return true if both opts exist, else return false
    var boolean = this.has_all(['myopt', 'youropt'], function(myopt, youropt){ //returns callback if both opts exist
        console.log(myopt, youropt); //values of myopt and youropt
    }); //still returns same boolean
}).parse(Termoil.Skip(process.argv, 2));

New Features Roadmap

You can find a list of enhancements that are on the roadmap by clicking here

Questions, Comments

We hope this documentation is sufficient to get you started with Termoil. However, if you have any questions or require help please open a ticket on GitHub


Built under the ISC License