program-utils
v1.1.0
Published
A module to parse arguments and to provide easy configuration file
Downloads
3
Maintainers
Readme
program-utils
A module to parse arguments and to provide easy configuration file.
1.1.0 Changelog
- It is now possible to prevent the value parsing with the config parser using
:=
assignment. - Linted README.md and modified some things in it.
Parse config
The config style is inspired from the windows INI file. But it works slightly differently.
const programUtils = require('program-utils');
let parsedConfig = programUtils.parseConfig(filePath);
Exemples :
# example.conf
foo = bar
spam = true
t = false
nbr = 5.5
# you can do a comment with an '#' on a blank line
# => {foo:"bar", spam: true, t: false, nbr:5.5}
Every value that is not true, false, or a number is a string.
But you can do subobjects with the syntax [obj subobj]
# example.conf
var_in_global = bar
[test]
var_in_test_in_global = bar
[test comp]
var_in_comp_in_test_in_global = bar
# => {var_in_global:"bar",test:{var_in_test_in_global:"bar",comp:{var_in_comp_in_test_in_global:"bar"}}}
Notes and other examples
# example.conf
hey1 = this is a hey1
test = is this going to be overridden ?
[test]
res = yes !
# if you create a subobject with the same name as an existing property, the property will be overriden by the
# subobject name
[]
hey2 = this is a hey2
# you can return to global scope with [], so "hey2" will be along "hey1"
[test]
# this case will not override the current test, so there is already "res" defined here
[]
test = not a subobject anymore
# if test is reassigned as a property in parent scope, the test subobject will be overriden also
[hey this is very cool]
# this scope is the "cool" object in "very" in "is" in "this" in "hey" in global
[hey this is]
# this scope targetting "is" in "this" in "hey" in global
[]
no_space= space
to_much_space= space
# it's possible to have no space around the equal sign, or one (but more will add a space in the value)
# so in this example "no_space" is equal to "space" but "to_much_space" is equal to " space"
You can also force the config parser to not parse the value using :=
instead of =
:
# Will be equal to 45 as a number
my_number=45
# Will be equal to "45" as a string
my_other_number:=45
# It works also with booleans
a_bool=true
string_bool:=true
Build a config
You might want to build a config, for example the first time your program is run, in this case you can use the config builder.
const programUtils = require('program-utils');
let builder = new programUtils.configBuilder();
builder
.addSection('hey') // this will add a [hey]
.setValue('t', 't') // this will add "t=t"
.letSpace() // this will jump a line
.addComment('the line above is empty')
// .toString(); -- Returns a string containing the config content
.toFile('./config.conf'); // Directly writes config into a file
/* outputs in config.conf :
[hey]
t=t
# this is cool
*/
Args parser
If you want to parse args you can do this by doing for example :
const programUtils = require('program-utils');
let argsParser = new programUtils.argsParser();
let arr = ['-v'];
let args = argsParser
.addCharFlag('v') // Adds a mono char flag to be recognized
.addCharFlag('h') // Adds a second
//.setSourceArray(arr, startingIndex) Sets the source array and its starting point
.addStringFlag('help') // Adds a string arg
.getResult();
So now when the program is launched it will result according to args passed For example
args => "-v"
{"flags":{"v":[]},"unknown":[]}
args => "-vh"
{"flags":{"v":[],"h":[]},"unknown":[]}
args => "-vhp"
{"flags":{"v":[],"h":[]},"unknown":["-p"]}
args => "-vh=45"
{"flags":{"v":[],"h":[45]},"unknown":[]}
args => "-vh=100,bar"
{"flags":{"v":[],"h":[100,"bar"]},"unknown":[]}
args => "-h=100 -v=bar"
{"flags":{"h":[100],"v":["bar"]},"unknown":[]}
args => "-h=100 -v=bar --help=true"
{"flags":{"h":[100],"v":["bar"],"help":[true]},"unknown":[]}
args => "-h=100 -v=bar --help=true --wtf"
{"flags":{"h":[100],"v":["bar"],"help":[true]},"unknown":["--wtf"]}
Here it is
License
MIT