An ini-file parser which supports multi line, multiple levels and arrays to get a maximum of compatibility with Zend config files.
npm install multi-ini
An ini-file parser which supports multi line, multiple levels and arrays to get a maximum of compatibility with Zend config files.
``shell`
npm install multi-ini
`js`
ini = require('multi-ini');
content = ini.read(file);
content.section.key = value;
ini.write(file, content);
Following options are available:
- encoding \[_'utf8'_\] - directly passed to readFileSync
- keep_quotes \[_false_\] - does not strip quotes around values
- filters - predefined _lowercase_, _uppercase_, _trim_, _constants_, _boolean_, _integer_
- nested_section_names \[_false_\] - support to parse section names e.g. [section.subsection]
- keep_zero_prefix \[_false_\] - controls the integer parsing by ignoring numbers with leading 0
#### encoding
`js`
ini = require('multi-ini');
content = ini.read(file, { encoding: 'utf8' });
content.section.key = value;
ini.write(file, content, { encoding: 'utf8' });
#### keep_quotes
This option is by default off to be backward compatible, if you ever need the value containing the quotes then use this.
`ini`
key="value"
Enabling this option will result in "value" instead of value.
`js`
ini = require('multi-ini');
content = ini.read(file, { keep_quotes: true });
This will also affect the Serializer and serialized values. Using it will not quote anything automatically.
`js`
{
production: {
quoted: '"quoted"',
not_quoted: 'not_quoted'
}
}
Will result in a ini like
`ini`
[production]
quoted="quoted"
not_quotes=not_quoted
#### filters
`js`
MultiIni = require('multi-ini');
ini = new MultiIni.Class({
filters: [MultiIni.filters.lowercase],
});
content = ini.read(file);
_Replacing constants_
`js`
MultiIni = require('multi-ini');
ini = new MultiIni.Class({
constants: { CONSTANT: 'replacement' },
filters: [MultiIni.filters.constants],
});
content = ini.read(file);
_Define a custom filter_
`js`
MultiIni = require('multi-ini');
ini = new MultiIni.Class({
filters: [
function (value) {
return 'Prepend ' + value;
},
],
});
content = ini.read(file);
#### line_breaks
Either unix or windows for line breaks.
`js`
ini = require('multi-ini');
content = ini.read(file, { line_breaks: 'windows' });
content.section.key = value;
#### nested_section_names
Using nested_section_names will parse nested section names having a ..
`js`
ini = require('multi-ini');
content = ini.read(file, { nested_section_names: true });
`ini`
[section.subsection]
key="value"
Will result in
`json`
{
"section": {
"subsection": {
"key": "value"
}
}
}
#### Parser
It's also possible to parse a ini file from an array of strings.
`js`
ini = require('multi-ini');
parser = new ini.Parser();
content = parser.parse(lines);
#### Serializer
Like parsing it's also possible to serialize an ini object to a string.
`js`
ini = require('multi-ini');
serializer = new ini.Serializer();
content = serializer.serialize({
production: {
base_url: 'https://google.com',
},
});
- Support for nested section names
- filter for integer parsing
- Fixed prototype pollution by ignoring constructor and prototype
- Fixed prototype pollution by ignoring __proto__
- Fixed bug with keep_quotes ignored when writing files
- First full release keeping backwards compatibility
- Introduced option for line breaks
- Fixed a bug where single lines of multilines got trimmed
- Added support for filters per value
- Refactoring of the basic implementation to be no longer a singleton
- Fixed a bug with wrong detected escaped double quotes
Now correctly reads
`ini``
key= example
to the value "example" instead of " example"
Implemented support for constants and removed a lot of bugs and the options ignore_invalid and oninvalid, this may be introduced again but are currently not necessary.
Fixed a bug that the module was not recognized as a module by Node.