Patch, parse, and stringify TOML while preserving comments.
Note that this is a maintenance fork of the original toml-patch package. This fork aims at addressing existing issues from the original project and perform dev-dependencies updates. Hopefully, the work done here can go upstream one day if timhall returns, but until then, welcome aboard!1
toml-patch is dependency-free and can be installed via npm or yarn.
$ npm install --save @decimalturn/toml-patch
For browser usage, you can use unpkg:
<script src="https://unpkg.com/@decimalturn/toml-patch"></script>
# patch(existing, updated)
Patch an existing TOML string with the given updated JS/JSON value, while attempting to retain the format of the existing document, including comments, indentation, and structure.
const TOML = require('@decimalturn/toml-patch');
const assert = require('assert');
const existing = `
# This is a TOML document
title = "TOML example"
owner.name = "Bob"
`;
const patched = TOML.patch(existing, {
title: 'TOML example',
owner: {
name: 'Tim'
}
});
assert.strictEqual(
patched,
`
# This is a TOML document
title = "TOML example"
owner.name = "Tim"
`
);
# parse(value)
Parse a TOML string into a JS/JSON value.
const TOML = require('@decimalturn/toml-patch');
const assert = require('assert');
const parsed = TOML.parse(`
# This is a TOML document.
title = "TOML Example"
[owner]
name = "Tim"`);
assert.deepStrictEqual(parsed, {
title: 'TOML Example',
owner: {
name: 'Tim'
}
});
# stringify(value[, options])
Convert a JS/JSON value to a TOML string. options
can be provided for high-level formatting guidelines that follows prettier's configuration.
options
[printWidth = 80]
- (coming soon)[trailingComma = false]
- Add trailing comma to inline tables[bracketSpacing = true]
-true
:{ key = "value" }
,false
:{key = "value"}
const TOML = require('@decimalturn/toml-patch');
const assert = require('assert');
const toml = TOML.stringify({
title: 'TOML Example',
owner: {
name: 'Tim'
}
});
assert.strictEqual(
toml,
`title = "TOML Example"
[owner]
name = "Tim"`
);
- Update submodules:
git submodule update --remote
- Typecheck:
npm run typecheck
- Build:
npm run build
- Test:
npm test
- Specs compliance:
npm run specs
- Benchmark:
npm run benchmark [<filter>] [--help] [--example] [--reference]
Footnotes
-
Tim Hall has been inactive on most of his open source projects for more than 3 years. The sentence wording was inspired by the npm-run-all2 project. ↩