Skip to content

HeyPuter/multiline-ini

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi-Line INI Parser

KV.JS logo

The first javascript INI parser supporting multiline strings.


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 broken release 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.

About

The first javascript INI parser supporting multiline strings.

Resources

License

Stars

Watchers

Forks

Packages

No packages published