Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

shmaml

0.0.3 • Public • Published

License: MIT Build Status

SHMAML

Parse .ini files into JSON objects. Support lists.

Install

$ npm install shmaml

Use

const parse = require('shmaml');
 
const resultPromise = parse('../path/to/config.ini');
// or:
const result = parse.sync('../path/to/config.ini');

 

Example config.ini + list:

username = me
pasword = 1234
 
[SectionA]
  key=value
 
[SectionB]
  key=value
  list=[
      item1,
      item2,
      item3
  ]

Becomes:

result = {
  username: 'me',
  pasword: 1234,
  SectionA: {
    key: 'value',
  },
  SectionB: {
    key: 'value',
    list: ['item1', 'item2', 'item3']
  },
}

Convention

  • key-value pairs are noted with an equal sign.

    key="value"
  • Quoting values is optional. Strings are used as default.

    ; These are all the same: 
    key=value
    key='value'
    key="value"
  • Unquoted numbers are parsed as numbers. Use single/double quotes to make number values parsed as strings.

    number = 55
    string = '55'
    string = "55"
  • Unquoted booleans are parsed as booleans. Use single/double quotes to make boolean values parsed as strings. CaSe InSeNsITiVe.

    bool = TRUE
    bool = false
    string = 'true'
    string = "false"
  • Sections are noted with wrapping square brackets.

    [categoryA]
        key="value"
    [categoryB]
        key="value"
  • Lists are also noted with wrapping square brackets when come after a key=.

    [categoryA]
        key="value"
        list=[item1, item2, item3]
  • Multiline lists are also supported.

    [categoryA]
        multilineList=[
            item1,
            item2,
            item3
        ]
        key="value"

NOTE: Nested lists are NOT supported.
list=[A, [B, [C, D]], E]

  • Comments are ignored, obviously. Use quotes to work with semicolons:

    ; line comment 
    [category]
        key1=value1 ; inline comment 
        key2='quoted ; semicolon'
        key3="double quoted ; semicolon"
  • Whitespace (including tabs) is trimmed:

    ;Same 
    [sectionA]
    [ sectionA ]
    ;Same 
    key= value
    key =value
    key  =  value
    [sectionA]
    key=value
     
    ;Same as 
     
    [sectionA]
        key=value   
  • Preserve whitespace using quotes:

    [' section   ']
    key="  value "
    {
        " section   ": {
            key: "  value "
        }
    }
  • Duplicates.
    Duplicated section names are merged to the same object.

    [sectionA]
        key1=value1
    [sectionA]
        key2=value2
    result = {
        SectionA: {
            key1: 'value1',
            key2: 'value2',
        },
    }

    Duplicated key names in the same section: the later overwrites the former.

    sameKey=value1
    sameKey=value2
    sameKey=value3
    result = {
        sameKey: 'value3'
    }

Install

npm i shmaml

DownloadsWeekly Downloads

4

Version

0.0.3

License

MIT

Unpacked Size

29.1 kB

Total Files

19

Last publish

Collaborators

  • avatar