A Node.js package for encoding/decoding ini-like strings.
npm install js-ini --save
yarn add js-ini
Example of parsing:
configs.ini
option = 2
useDatabase= true
password type = string
[Database settings]
nodes=5
user = admin
; some comment
password = some very*difficult=password:
database-name =my-project-db
[User settings]
param*1 = 2.5
param*2= struct
const ini = require('js-ini');
const fs = require('fs').promises;
fs.readFile('configs.ini', 'utf-8').then((txt) => {
console.log(ini.parse(txt));
});
import { parse } from 'js-ini';
import { promises as fs } from 'fs';
fs.readFile('configs.ini', 'utf-8').then((txt: string) => {
console.log(parse(txt));
});
Output:
{
'option': 2,
'useDatabase': true,
'password type': 'string',
'Database settings': {
'node': 5,
'user': 'admin',
'password': 'some very*difficult=password:'
},
'User settings': {
'param*1': 2.5,
'param*2': 'struct'
}
}
Alias: decode
Type: string
String with ini-like data
Type: IParseConfig
Decoding params
name | type | defaut value | description |
---|---|---|---|
comment | string |
; |
String for start of comment |
delimiter | string |
= |
Delimiter between key and value |
nothrow | boolean |
false |
Use field Symbol('Errors of parsing') instead throw |
autoTyping | boolean |
true |
Try to auto translate strings to another values (translation map below) |
dataSections | string[] |
[] |
Section will be marked as dataSection and will be parsed like a array of string |
protoSymbol | boolean |
false |
no throw on __proto__ section and use symbol Symbol(__proto__) instead |
Data section sample:
option = 2
useDatabase= true
password type = string
[some strings]
a82cfac96d9b71248bf5faa2b22d7cf7
0c420a02dc13656d15aefe71e5b06ecf
[User settings]
param*1 = 2.5
param*2= struct
import { parse } from 'js-ini';
import { promises as fs } from 'fs';
fs.readFile('configs.ini', 'utf-8').then((txt: string) => {
console.log(parse(txt, { dataSections: ['some strings'] }));
});
Output:
{
'option': 2,
'useDatabase': true,
'password type': "string",
'some strings':
'a82cfac96d9b71248bf5faa2b22d7cf7',
'0c420a02dc13656d15aefe71e5b06ecf'
],
'User settings': {
'param*1': 2.5,
'param*2': 'struct'
}
}
Alias: encode
Type: object
object to encode to ini-string
Type: IStringifyConfig
Encoding params
name | type | defaut value | description |
---|---|---|---|
delimiter | string |
= |
Delimiter between key and value |
blankLine | boolean |
true |
Add blank lines between sections |
spaceBefore | boolean |
true |
Add space between key and delimiter |
spaceAfter | boolean |
false |
Add space between value and delimiter |
It is Symbol('Errors of parsing')
for nothrow
option
configs.ini
[scope with trash]
ok = value
trash
[scope with only trash]
only trash
[normal scope]
ok = value
const ini = require('js-ini');
const fs = require('fs').promises;
fs.readFile('configs.ini', 'utf-8').then((txt) => {
console.log(ini.parse(txt));
});
Output:
{
'scope with trash': {
'ok': 'value',
},
'empty scope': {},
'normal scope': {
ok: 'value',
},
Symbol('Errors of parsing'): [
new ParsingError('trash', 3),
new ParsingError('only trash', 7),
]
}
It is Symbol(__proto__)
for protoSymbol
option
value | to |
---|---|
true /false |
true /false |
0 /5.5 /nan |
0 /5.5 /NaN |
blank value | undefined |
null |
null |
12.4abc |
'12.4abc' |
- Translating is case-insensitive
- Other values will be translated to padded strings
The library is provided with simple helpers that should help decrease size of boilerplate. Tools are divided into separated files which are not included to the default export.
readIniFile
reads path
file and parses it
import { readIniFile } from 'js-ini/tools/read-ini'
await readIniFile('./mydir/example.ini', { nothrow: true })
writeIniFile
translate ini
object to ini-like string
import { writeIniFile } from 'js-ini/tools/write-ini'
await writeIniFile('./mydir/example.ini', {
server: {
IP: '127.0.0.1'
user: 'Smith'
}
}, { nothrow: true })
npm run test