/node-jsonc-preprocessor

Primary LanguageTypeScriptMIT LicenseMIT

MIT licensed NPM Version License License License

Disable/enable/ignore blocks based on rules found in the JSONC text

Getting Started

With node previously installed:

npm install @daiyam/jsonc-preprocessor
import {transform} from '@daiyam/jsonc-preprocessor';

const TYPES = {
	version: 'version',
};

function preprocessJSON(text: string, {host: string, os: string, editor: string, version: string}): string {
	const args = {
		host,
		os,
		editor,
		version,
	};

	return transform(text, TYPES, args);
}

Directives

enable

{
    // #enable(os="linux")
    // "key": "foobar"
}

If os is equal to linux, the block "key": "foobar" will be uncommented. If not, the block will be commented.

if/else

{
    // #if(os="mac")
    // "key": "foo"
    // #elif(os="windows", host="host1"|"host2")
    // "key": "bar"
    // #elif(version>="2.18.1")
    // "key": "qux"
    // #else
    // "key": "baz"
    // #endif
}

#elif(os="windows", host="host1"|"host2") is true when os equals windows and host equals host1 or host2.
#elif(os="windows", version>="2.18.1") is true when version is greater than or equal to 2.18.1.

ignore

{
    // #ignore
    "key": "foobar"
}

The block "key": "foobar" will always be removed.

rewrite-enable/rewrite-disable

{
    // #rewrite-enable
    // #if(os="mac"|"windows")
    // "key": "#{os}"
    // #else
    // "key": "linux"
    // #endif
    // #rewrite-disable

    // #if(os="mac"|"windows")
    // "key2": "#{os}"
    // #else
    // "key2": "linux"
    // #endif
}

key will have the following values: max, windows or linux. key2 will have the following values: #{os} or linux.

rewrite-next-line

{
    // #rewrite-next-line
    // "key": "#{os}"
}

Condition

condition = expression ("," expression)*
expression = (unary-operator identifier) | (identifier operator values)
identifier = \w+
operator = "=" | "!=" | "<" | "<=" | ">" | ">="
unary-operator = "?" | "!?"
values = value ("|" value)*

value is a double quote string.
The operators <, <=, >, >= are only working for the identifier version.

Donations

Support this project by becoming a financial contributor.

Ko-fi ko-fi.com/daiyam
Liberapay liberapay.com/daiyam/donate
PayPal paypal.me/daiyam99

License

Copyright © 2021-present Baptiste Augrain

Licensed under the MIT license.