@heyputer/multiline-ini
v1.0.1
Published
INI file parser with support for multiline strings
Downloads
4
Readme
Multi-Line INI Parser
multiline-ini is a fast INI parser meant to support multiline strings and other syntax. It uses a state-machine parser which makes it possible to support features missing from other ini parsers that use the naive "split-by-line then regex match" approach.
The syntax of INI files is not standardized, so our approach is to treat systemd's config parser as a reference implementation.
Installation
npm install --save @heyputer/multiline-ini
Usage
// Require the module
const ini = require('@heyputer/multiline-ini');
// Example: systemd-like input
const result = ini.parse(`
[Service]
Type=simple
ExecStart=/bin/sh -c 'exec /usr/bin/my-exe \
>>/var/log/my-app/out.log \
2>>/var/log/my-app/err.log'
Environment=NODE_ENV=production-linux
`);
console.log(JSON.stringify(result, null, ' ')); /*
{
Service: {
Type: 'simple',
ExecStart: "/bin/sh -c 'exec /usr/bin/my-exe >>/var/log/my-app/out.log 2>>/var/log/my-app/err.log'",
Environment: 'NODE_ENV=production-linux'
}
}
*/
Why multiline-ini
?
This INI parser was created out of a need to parse systemd unit files. INI is not a standardized file format, but there is precedent for escaping line feeds in INI values. This is supported by systemd.
The following INI parsers were tested and do not support multi-line values:
| module name | problem | is regex | complexity | | ----------- | ------- | -------- | ---------- | | ini | subsequent lines become keys with a value of true | yes | very over-engineered | | ini-parser | subsequent lines ignored | yes | under 40 lines | | iniparser | subsequent lines ignored | yes | under 70 lines | | node-ini | this module contains a typo and doesn't even work | yes | moderately over-engineered |
These parsers are all implemented using regex, and are designed to process each
line individually searching for a [section]
or key=value
pair.
This makes it more challenging to add multiline support to an existing parser.
Contributing
In-Scope
The following items are in scope and contributions in these areas are welcome.
- support for all INI syntax supported by systemd with zero configuration
- i.e. we use systemd as a reference implementation for an INI standard
- plugin support for handling other INI conventions
License
Distributed under the MIT License. See ./LICENSE for more information.