4.1.2 • Published 2 months ago

ini v4.1.2

Weekly downloads
23,546,647
License
ISC
Repository
github
Last release
2 months ago

An INI format parser & serializer.

Note

  • Sections are treated as nested objects.

  • Section-less items are treated as globals.

Usage

Consider an INI file such as the following:

; This comment is being ignored
scope = global

[database]
user = dbuser
password = dbpassword
database = use_this_database

[paths.default]
datadir = /var/lib/data
array[] = first value
array[] = second value
array[] = third value

You can read, modify and write it like so:

import { writeFile , readFile } from 'node:fs/promises'
import { stringify , parse } from 'ini'

//  Read INI file as text

let text = await readFile(`./Original.ini`,{
    encoding : 'utf-8'
})

//  Parse text data to object

const config = parse(text)

//  Modify data object

config.scope = 'local'
config.database.database = 'use_another_database'
config.paths.default.tmpdir = '/tmp'
delete config.paths.default.datadir
config.paths.default.array.push('fourth value')

//  Stringify data object

text = stringify(config,{ 
    section : 'section' 
})

//  Write INI file as text

await writeFile(`./Modified.ini`,text)

The written file will contain the following:

[section]
scope=local
[section.database]
user=dbuser
password=dbpassword
database=use_another_database
[section.paths.default]
tmpdir=/tmp
array[]=first value
array[]=second value
array[]=third value
array[]=fourth value

API

Parse

Attempts to turn the given INI string into a nested data object.

// You can also use `decode`
const object = parse(`<INI Text>`) 

Stringify

Encodes the given data object as an INI formatted string.

// You can also use `encode`
stringify(object,{

    /**
     *  Whether to insert spaces before & after `=`
     * 
     *  Disabled by default to have better 
     *  compatibility with old picky parsers.
     */

    whitespace : false ,

    /**
     *  Whether to align the `=` character for each section.
     *  -> Also enables the `whitespace` option
     */

    align : false ,

    /**
     *  Identifier to use for global items 
     *  and to prepend to all other sections.
     */

    section ,

    /**
     *  Whether to sort all sections & their keys alphabetically.
     */

    sort : false ,

    /**
     *  Whether to insert a newline after each section header.
     * 
     *  The TOSHIBA & FlashAir parser require this format. 
     */

    newline : false ,

    /**
     *  Which platforms line-endings should be used.
     * 
     *  win32 -> CR+LF
     *  other -> LF
     * 
     *  Default is the current platform
     */

    platform ,

    /**
     *  Whether to append `[]` to array keys.
     * 
     *  Some parsers treat duplicate names by themselves as arrays
     */

    bracketedArray : true

})

For backwards compatibility any string passed as the
options parameter is treated as the section option.

stringify(object,'section')

Un / Escape

Turn the given string into a safe to
use key or value in your INI file.

safe(`"unsafe string"`) // -> \"unsafe string\"

Or reverse the process with:

unsafe(`\\"safe string\\"`) // -> "safe string"
global-prefixrcglobal-dirsconfig-chainnpmgitconfiglocal@schematics/updatelerna@angular/cli@lerna/create@xata.io/clicuc-gaf@loopx/config@stackmate/cli@telus/create-platform@pulumi/pulumiarchetype-libraryawkit-cli@fz6m/skn@teambit/legacy@c8y/ng1-modules@tinacms/clieasy-select-rn@cyber-tools/cyber-orderreact-native-bluetooth2killi8n-react-native-fast-imagenodewebx-buildgendiff-antluibdsr-cli@tkgkn/test-clidep-costbritive-cli-test1lefit-cms-js-clipurascents-scriptsgew-nodejs-api-clientzcli-zjwdanil.rezyayev.project2laboman-helpercodiac-cli@skhon/hong-coreyozhiw-elasticdump@cashremit/cr-streamline-iconscreate-npionburst-sdkcnyrm@cyber-tools/work-cli@cyber-work/work-cliwork-scripts@recarnot/firstnode-climinxs-clinodewebx@penngrove/insomnia-plugin-remoteitallconfigfrontend-project-lvl2-by-alex-smirnovadaption-toolcloud-archive-s3codiac-ops-enterprisefiorsaoirse-gendiffcsgo-demo-helper-tmppk-phoenix-clitwdva-clioakmont-bakery-posairscanairscan-examplegendiff_likhvarreact-native-esc-pos-sahaabsanarise-pr-gen-diffrc-securefe-daily-mailersemdsemds@borisovart/atol-kkt-module@frxf/frxfbackend-storiesttt-minionfirefoxcss_clideneme323112aws-mf-samliris-view-climax-gendiffopenssl-web-development@steven-torres/jsxrreact-template-generatezjw-cli@texttree/demo-bsa-reference-rclpenguins-toolspenguins-eggs-v8@kontikijs/cli@ntt_app/react-native-custom-notificationweconnect-frontendwic-applet-cli@project-furnace/furnace-clifunds-server@foodism/cliss@startdt/next-clidiscord-music-botsreact-native-covid-sdkeasycommands-betakyle-cli-xhlow-cli
4.1.2

2 months ago

4.1.1

11 months ago

4.1.0

1 year ago

4.0.0

1 year ago

3.0.1

2 years ago

3.0.0

2 years ago

2.0.0

3 years ago

1.3.8

3 years ago

1.3.7

3 years ago

1.3.6

3 years ago

1.3.5

6 years ago

1.3.4

9 years ago

1.3.3

9 years ago

1.3.2

9 years ago

1.3.1

9 years ago

1.3.0

10 years ago

1.2.1

10 years ago

1.2.0

10 years ago

1.1.0

11 years ago

1.0.5

12 years ago

1.0.4

12 years ago

1.0.3

12 years ago

1.0.2

12 years ago

1.0.1

13 years ago

1.0.0

13 years ago