-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjsonc.ts
60 lines (53 loc) · 1.04 KB
/
jsonc.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* Copyright (c) 2021-2023 Richard Rodger, MIT License */
// Import Jsonic types used by plugin.
import { Jsonic, RuleSpec } from '@jsonic/jsonic-next'
type JsoncOptions = {
allowTrailingComma?: boolean
disallowComments?: boolean
}
function Jsonc(jsonic: Jsonic, options: JsoncOptions) {
jsonic.options({
text: {
lex: false,
},
number: {
hex: false,
oct: false,
bin: false,
sep: null,
exclude: /^\./,
},
string: {
chars: '"',
multiChars: '',
allowUnknown: false,
escape: {
v: null,
},
},
comment: {
lex: true !== options.disallowComments,
},
map: {
extend: false,
},
lex: {
empty: false,
},
rule: {
finish: false,
include: 'jsonc,json' + (options.allowTrailingComma ? ',comma' : ''),
},
})
const { ZZ } = jsonic.token
jsonic.rule('val', (rs: RuleSpec) => {
rs.open([
{
s: [ZZ],
g: 'jsonc',
},
])
})
}
export { Jsonc }
export type { JsoncOptions }