-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdelimiters.js
39 lines (36 loc) · 1.03 KB
/
delimiters.js
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
export const defaultOpener = '['
export const defaultCloser = ']'
export const defaultEscaper = '`'
export const defaultFencer = "'"
// todo: perhaps change to / or sth
export const defaultTagger = "/"
export const defaultDelimiters = {
opener: defaultOpener,
closer: defaultCloser,
escaper: defaultEscaper,
fencer: defaultFencer,
tagger: defaultTagger,
}
// todo: require each delimiter to be exactly one code unit
export const normalizeDelimiters = (delims) => {
const {
opener = defaultOpener,
closer = defaultCloser,
escaper = defaultEscaper,
fencer = defaultFencer,
tagger = defaultTagger,
} = delims ?? {}
const delimiters = [opener, closer, escaper, fencer, tagger]
const delimiterSetSize = new Set(delimiters).size
if (delimiterSetSize !== delimiters.length) {
throw Error(`Delimiters must be unique! ${delimiters.length - delimiterSetSize} of them are identical:\n${delimiters.join('\n')}`)
}
return {
opener,
closer,
escaper,
fencer,
tagger,
_normalized: true,
}
}