Skip to content
This repository has been archived by the owner on Aug 22, 2023. It is now read-only.
/ consultant Public archive

[Deprecated] πŸ“‹ Gathers structural and validateable input from command line or interactive menu

License

Notifications You must be signed in to change notification settings

eser/consultant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“‹ consultant

build status npm version npm download dependencies coverage status license

Update (July 2022)

DEPRECATED in favor of hex. See https://github.com/eserozvataf/hex for details.

What is the Consultant?

Consultant is a JavaScript library which allows you gathering options from various sources such as command line, optstring or interactive menu.

Provides:

  • Well-defined input model for operations require parameters.
  • Declerative approach.
  • Multiple methods for getting parameter (or options)
    • Parsing command line input like cmd --parameter=value --option1 --option2.
    • Interactive command line user interface to getting options directly from user.
  • Prepares an help output based on model definition.

Quick start

Execute npm install consultant to install consultant and its dependencies into your project directory.

Usage

import { Consultant } from 'consultant';

const rules = {
    label: 'sample menu',
    children: {
        plugins: {
            type: Consultant.types.command,
            aliases: [ 'p' ],
            id: 'plugins',
            label: 'Plugin commands',
            description: 'Add/list plugins',

            children: {
                add: {
                    type: Consultant.types.command,
                    id: 'plugins-add',
                    label: 'Add',
                    description: 'Adds a plugin'
                },
                repo: {
                    type: Consultant.types.stringParameter,
                    label: 'Repo',
                    description: 'Specifies repo address',
                    'default': 'http://github.com/eserozvataf/',
                    min: 0,
                    max: 1
                }
            }
        },
        makefile: {
            type: Consultant.types.stringParameter,
            aliases: [ 'f' ],
            label: 'Makefile',
            description: 'Load tasks from FILE',
            parameter: 'FILE',
            'default': [ 'makefile.js' ],
            min: 0,
            max: undefined,
            validate: (value) => value.length >= 3 || 'minimum 3 chars required'
        },
        tasks: {
            type: Consultant.types.booleanParameter,
            aliases: [ 't' ],
            label: 'Tasks',
            description: 'Lists defined tasks',
            'default': false
        },
        verbosity: {
            type: Consultant.types.stringParameter,
            label: 'Verbosity',
            description: 'Sets verbosity of log messages [debug, warn, info, error]',
            'default': 'info',
            values: [ 'debug', 'warn', 'info', 'error' ],
            min: 0,
            max: 1
        },
        version: {
            type: Consultant.types.booleanParameter,
            aliases: [ 'v' ],
            label: 'Version',
            description: 'Displays the jsmake version',
            'default': false
        },
        help: {
            type: Consultant.types.booleanParameter,
            aliases: [ 'h', '?' ],
            label: 'Help',
            description: 'Displays this help message',
            'default': false
        }
    }
};

const params = new Consultant(rules);

// string parsing
const input1 = await params.fromString('plugins add --makefile testfile.js');
console.log(input1.commandId); // plugins-add
console.log(input1.values.makefile); // [ 'testfile.js' ]

// command line parsing
const input2 = await params.fromCommandLine();
console.log(input2.values.verbosity); // info

// command line user interface
const input3 = await params.fromInquiry();

Todo List

See GitHub Projects for more.

Requirements

License

Apache 2.0, for further details, please see LICENSE file

Contributing

See contributors.md

It is publicly open for any contribution. Bugfixes, new features and extra modules are welcome.

  • To contribute to code: Fork the repo, push your changes to your fork, and submit a pull request.
  • To report a bug: If something does not work, please report it using GitHub Issues.

To Support

Visit my patreon profile at patreon.com/eserozvataf

About

[Deprecated] πŸ“‹ Gathers structural and validateable input from command line or interactive menu

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published