-
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
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
import { Node, NodeType } from "../types/Node.ts";
function source(children: Node[]): string {
return children.map((c) => c.source).join("");
}
export const root = (children: Node[]): Node => ({
type: NodeType.Root,
children,
source: source(children),
});
export const text = (t: string): Node => ({
type: NodeType.Text,
text: t,
source: t,
});
export const strike = (children: Node[]): Node => ({
type: NodeType.Strike,
children,
source: `~${source(children)}~`,
});
export const italic = (children: Node[]): Node => ({
type: NodeType.Italic,
children,
source: `_${source(children)}_`,
});
export const bold = (children: Node[]): Node => ({
type: NodeType.Bold,
children,
source: `*${source(children)}*`,
});
export const code = (text: string): Node => ({
type: NodeType.Code,
text,
source: "`" + text + "`",
});
export const pre = (text: string): Node => ({
type: NodeType.PreText,
text,
source: "```" + text + "```",
});
export const user = (userID: string, label?: Node[]): Node => ({
type: NodeType.UserLink,
userID,
label,
source: `<@${userID}${label ? "|" + source(label) : ""}>`,
});
export const channel = (channelID: string, label?: Node[]): Node => ({
type: NodeType.ChannelLink,
channelID,
label,
source: `<#${channelID}${label ? "|" + source(label) : ""}>`,
});
export const command = (
name: string,
args: string[],
label?: Node[],
): Node => ({
type: NodeType.Command,
name,
arguments: args,
label,
source: `<!${name}${args.map((c) => `^${c}`).join("")}${
label ? "|" + source(label) : ""
}>`,
});
export const url = (link: string, label?: Node[]): Node => ({
type: NodeType.URL,
url: link,
label,
source: `<${link}${label ? "|" + source(label) : ""}>`,
});
export const emoji = (name: string, variation?: string): Node => ({
type: NodeType.Emoji,
name,
variation,
source: `:${name}${variation ? "::" + variation : ""}:`,
});
export const quote = (children: Node[], inline?: boolean): Node => ({
type: NodeType.Quote,
children,
source: `${">".repeat(inline ? 1 : 3)}${source(children)}`,
});