TOML parser in typescript
Copyright Sergio Garcia
A chevrotain based TOML v0.5.0 parser, written in typescript.
npm install @sgarciac/bombadil
var bombadil = require('@sgarciac/bombadil')
var input = 'whatever = 1'
var reader = new bombadil.TomlReader
reader.readToml(input)
reader.result // -> {whatever: 1}
If the input is not a valid TOML string, the reader will store undefined
in its result
property and it will keep the errors in its errors
property. Errors can be either:
export interface ITomlException {
message: string,
token: ct.IToken
}
which uses IToken
By default, the toml reader will map TOML values to javascript values as follows:
As you can see in the previous example, there is some information loss. If you
need the original typing information, you can pass a second parameter to
readToml
set to true
.
This will parse the following TOML:
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00Z # First class dates? Why not?
to the following javascript object:
{ type: 'table',
content:
{ title:
{ type: 'atomicString',
image: 'TOML Example',
value: 'TOML Example' },
owner:
{ type: 'table',
content:
{ name:
{ type: 'atomicString',
image: 'Tom Preston-Werner',
value: 'Tom Preston-Werner' },
dob:
{ type: 'offsetDateTime',
image: '1979-05-27T07:32:00Z',
value: 1979-05-27T07:32:00.000Z } } } } }
Documents are transformed as following:
Keeping the original string image of the value can be helpful, for example when dealing with big integers, which can not be handled by the javascript Number type.
Chevrotain is known to rely on function names, which means that minification (such as performed by, for example, Uglify) can break bombadil. There are some solutions to this problem here
Unless you are running the code inside the browser, and using minification, you probably don't need to worry about this.