This is a small utility library to parse systemd unitfiles to- and from JavaScript data structures. Three formats are available:
1.`string`, which is the representation inside a unit file,
2.`ast`, which is a JS object representation of the parser AST, including comments,
3.`data`, which is a normalized representation of the data, useful to do general computing. It hast the following format:
```
{
title: String,
settings: {
[key:String]: String|String[],
}
}[]
```
Conversions are available in all directions between these formats, with the only external dependency being `chevrotain`.
This package does not know or check whether the logic of a unit file is correct (e.g. are you using the correct names for options, etc.), it only know what the syntax is supposed to be.
## Usage
For most usecases, you'll only need two functions: `stringToData` and `dataToString`:
```
import { readFile, writeFile } from 'fs/promises';
import { stringToData, dataToString } from 'systemd-unitfiles';
Convert the normalized JS representation to the parser ast.
### dataToString(data: Array): String
Convert the normalized JS representation to a valid unit file string. This is equivalent to the following:
```
const string = astToString(dataToAst(data));
```
### Lexer
Constructor for a lexer that extends the [chevrotain Lexer](https://sap.github.io/chevrotain/documentation/7_0_3/classes/lexer.html).
### Parser
Constructor for a parser that extends the [chevrotain CSTParser](https://sap.github.io/chevrotain/documentation/7_0_3/classes/cstparser.html).
### visitorCreator(parser: Parser): ICSTVisitor
Function that takes a parser and returns a visitor for that parser that would normalize the ast to the abovementioned data format.
## Motivation
There already is a `systemd-unitfile` package on npm, but it is unmaintainted and, especially when going frankly bad. It doesn't support multiline values, it gives a