Disable/enable/ignore blocks based on rules found in the JSONC text
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);
}
{
// #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(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
"key": "foobar"
}
The block "key": "foobar"
will always be removed.
{
// #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
// "key": "#{os}"
}
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
.
Support this project by becoming a financial contributor.
ko-fi.com/daiyam | |
liberapay.com/daiyam/donate | |
paypal.me/daiyam99 |
Copyright © 2021-present Baptiste Augrain
Licensed under the MIT license.