clinei v1.0.2
clinei
command-line interface handler
clinei is handler to facilitate the building of cli programs with stability and also you can specify the type of entry of each command and customization that helps you write a clean program clinei is not a cli package, it is a package that helps you build a cli package
Features
- ✅ Command
- ✅ Option
- ✅ Argument
- ✅ Help
- ✅ Version
- ✅ Customization
- ✅ Type
- ✅ Alias
- ✅ Default
- ✅ Required
- ✅ Description
- ✅ Example
Support
- ✅ ECMAScript Modules (ESM)
- ✅ CommonJS (CJS)
- ❌️ Deno
Map
Examples
index.js
#!/usr/bin/env node
import { Build } from "clinei";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
new Build({
path: __dirname + "/commands",
prefix: " real-cli",
});if You use CommonJS
- import
+ require
+ const { Build } = require("clinei");
- import { Build } from "clinei";
- import path from "path";
- import { fileURLToPath } from "url";
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
+ new Build({
+ path: __dirname + "/commands",
+ prefix: " real-cli",
+ });
and
+ module.exports = Command(...);
- export default Command(...);commands/print.js
import { Command } from "clinei";
export default Command(
{
cmd: "print", //or ["print","--print","-p","myprint"] //with aliases for this command
desc: "Log in and print data in console",
options: [
{
name: ["--username", "-u"], //with aliases
desc: "your real name",
required: true,
},
{
name: "--age", //no aliases
desc: "your real age",
type: "number",
msg: "See the documentation for more information on github",
default: 99,
},
{
name: "--store", //no aliases
desc: "store your data or no (optional)",
},
],
usage: "print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6",
},
({ getOptions, exist, getArgs, parseArgs }) => {
const username = getOptions("--username"); // or -u
const age = getOptions("--age");
const store = exist("--store");
const Skills = parseArgs("--skills"); //or any other key like --
if (getArgs("pro")) {
console.log(
`[${getArgs()[0]}] Hi ,${username} Your Data Enjoy!
[username] ${username}
[age] ${age}
[store] ${store ? "yes store my data" : "No!"}
[skills] ${Skills.join(", ")}
`
);
} else
console.log(
`[noob] Hi ,${username} Your Data Enjoy!
[username] ${username}
[age] ${age}
[store] ${store ? "yes store my data" : "No!"}
[skills] ${Skills.join(", ")}
`
);
}
);commands/help.js
import { Command } from "clinei";
export default Command(
{
cmd: ["-h", "--help", "help"], // <-- This is the command name like <Prefix> help <command>
desc: "View Commands", // <-- This is the command desc
usage: "help <command>",
},
({ printHelp, getArgs, getStructure }, focus) => {
console.log(printHelp);
if (
(getArgs()[0] || focus) &&
!getStructure.commands.find(({ cmd }) =>
cmd.find((c) => c === focus || c === getArgs()[0])
)
) {
console.log(`Warn: ${`["${getArgs()[0] || focus}"]`} not found`);
}
}
);Run
node index.js print -u Arth --age 120 --storeOutPut
[noob] Hi ,Arth Your Data Enjoy!
[username] Arth
[age] 120
[store] yes store my data
[skills]Installation
NPM
npm i clineiyarn
yarn add clineiBuild
Build is a class that is responsible for building the cli program, it is necessary to pass the path of the commands folder and the prefix of the program
We use real-cli as an example
import { Build } from "clinei";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
new Build({
path: __dirname + "/<commands folder>",
prefix: "real-cli", //<prefix>
});const { Build } = require("clinei");
new Build({
path: __dirname + "/<commands folder>",
prefix: "real-cli", //<prefix>
});Command
/<commands folder>/**/*.js
Command() a function that registers the command in the program
import { Command } from "clinei";
export default Command(
{
cmd: [], // or string
desc: "",
usage: "",
options: [],
},
({ <Methods> }) => {
// code
}
);const { Command } = require("clinei");
module.exports = Command(
{
cmd: [], // or string
desc: "",
usage: "",
options: [],
},
({ <Methods> }) => {
// code
}
);CommandConfig
{
cmd: [],
desc: "",
usage: "",
options: [...],
}cmd
cmd is the command that will be executed in the program, it can be a string or an array of strings
no alias
$ real-cli print{
cmd: "print",
}with alias
-p or --print or print
$ real-cli -p{
cmd: ["-p", "--print", "print"],
}desc
desc is the description of the command, it is used in the help command
{
desc: "Log in and print data in console",
}options
the options of the command, required if the command has options
see full documentation of CommandConfigOption
usage
usage is the usage of the command, it is used in the help command
{
usage: "print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6",
}Finally
{
cmd: "print", //or ["print","--print","-p","myprint"] //with aliases for this command
desc: "Log in and print data in console",
options: [
{
name: ["--username", "-u"], //with aliases
desc: "your real name",
required: true,
},
{
name: "--age", //no aliases
desc: "your real age",
type: "number",
msg: "See the documentation for more information on github",
default: 99,
},
{
name: "--store", //no aliases
desc: "store your data or no (optional)",
},
],
usage: "print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6",
}CommandConfigOption
ConfigOption is the configuration of the options of the command
default value
{
name: "",// or array
desc: "",
type: "string",
msg: false,
required: false,
default: undefined
}name
name of the option, it can be a string or an array of strings must start with - or --
no alias
{
name: "--username",
}$ real-cli --username Arthwith alias
-u or --username
{
name: ["-u", "--username"],
}$ real-cli -u Arthdesc
the description of the option, it is used in the help command
{
desc: "your real name",
}type
the type of the option, it is used to validate the option
{
type: "string" | "number" | "boolean",
}Type Test
{
name: "--age", //no aliases
desc: "your real age",
type: "number",
msg: "See the documentation for more information on github",
default: 99
}expected number
$ real-cli --age nineOutPut in interface
Error: Invalid value for option --age expected number got nine
^
Tip: use real-cli help print to see command optionsmsg
will be displayed if the option is not valid
{
msg: "See the documentation for more information on github",
}$ real-cli --age nineOutPut in interface
Error: Invalid value for option --age expected number got nine
^
See the documentation for more information on github
Tip: use real-cli help print to see command optionsrequired
required is a boolean that indicates if the option is required
{
name: ["--username", "-u"], //with aliases
desc: "your real name",
required: true,
}$ real-cli --age 99OutPut in interface
Missing required option --username,-u
Tip: use real-cli help print to see command optionsdefault
default is the default value of the option
{
name: "--age", //no aliases
desc: "your real age",
type: "number",
msg: "See the documentation for more information on github",
default: 99
}$ real-cligetOptions("--age"); // 99Methods
Command(
{
cmd: [], // or string
desc: "",
usage: "",
options: [],
},
({ getOptions, getArgs, parseArgs, exist, getStructure, printHelp }) => {
// code
}
);getOptions()
returns values of the options passed in the command
specify the name of the option to get the value
getOptions("--username");
// or one of the aliases
getOptions("-u");all options
getOptions();getArgs()
returns the arguments passed in the command
getArgs(); // return arrayspecify the key to get the arguments
getArgs("arg1"); // "arg1" || false$ real-cli print arg1 arg2 arg3OutPut
getArgs();
["arg1", "arg2", "arg3"]; // if the key exists
[]; // if the key does not existgetArgs("arg1");
"hi"; // if the key exists
false; // if the key does not existparseArgs()
returns the arguments associated with the key passed in the command
-- 1 2 3 4 5specify the key to get the arguments -- or any other key or string
parseArgs("--");OutPut Array
[1, 2, 3, 4, 5] // if the key exists
[] // if the key does not existexist()
returns a boolean indicating if the option exists
exist("--username");OutPut Boolean
true; // if the option exists
false; // if the option does not existgetStructure
returns the structure of the commands You can use it to build a custom help instead printHelp()
getStructure; // return objectOutPut Object
{
commands: [
{
"cmd": [], // or string
"desc": "",
"usage": "",
"options": [...]
,...
}
];
prefix: string;
//this is the structure of the command that is being executed
this: {
"cmd": [], // or string
"desc": "",
"usage": "",
"options": [...]
}
}printHelp
printHelp is a property that prints the help of the commands
printHelp;HelpCommand
HelpCommand is a command that is used to print the help of the commands
Command(
{
cmd: ["-h", "--help", "help"],
desc: "View Commands",
usage: "help <command>",
},
({ printHelp }) => {
console.log(printHelp);
}
);$ real-cli helpOutPut
usage: real-cli help <command>
real-cli -h, --help, help [options] [aliases]
View Commands
real-cli print [options] [aliases]
Log in and print data in console
Options:
--username, -u REQUIRED,STRING
your real name
--age NUMBER
your real age
--store STRING
store your data or no (optional)$ real-cli help printOutPut
usage: real-cli print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6
real-cli print [options] [aliases]
Log in and print data in console
Options:
--username, -u REQUIRED,STRING
your real name
--age NUMBER
your real age
--store STRING
store your data or no (optional)Command(
{
cmd: ["-h", "--help", "help"], // <-- This is the command name like <Prefix> help <command>
desc: "View Commands", // <-- This is the command desc
usage: "help <command>",
},
({ printHelp, getArgs, getStructure }, focus) => {
console.log(printHelp);
//focus ->> delete
if (
(getArgs()[0] || focus) &&
!getStructure.commands.find(({ cmd }) =>
cmd.find((c) => c === focus || c === getArgs()[0])
)
) {
console.log(`Warn: ${`["${getArgs()[0] || focus}"]`} not found`);
}
}
);$ real-cli delete
^^^^^^ ->> focus$ real-cli help delete
^^^^^^ ->> getArgs()[0]OutPut
usage: real-cli help <command>
real-cli -h, --help, help [options] [aliases]
View Commands
real-cli print [options] [aliases]
Log in and print data in console
Options:
--username, -u REQUIRED,STRING
your real name
--age NUMBER
your real age
--store STRING
store your data or no (optional)
Warn: ["delete"] not foundMake Cli Global
Make a global program local use npm
add this to your package.json
{
"bin": {
"real-cli": "index.js"
}
}run
$ npm linkor publish and install it globally
Example with npm
npm install <package> -gnow you can use your program
$ real-cli help