Nonstop Pajama Models

    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

    3

    Version

    0.0.3

    License

    MIT

    Unpacked Size

    29.1 kB

    Total Files

    19

    Last publish

    Collaborators

    • taitulism