this repo has no description
1/* eslint-disable no-console */
2import {
3 MarkdownRule,
4 Ruleset,
5 SlateRule
6} from "@moonlight-mod/types/coreExtensions/markdown";
7
8export const rules: Record<
9 string,
10 (rules: Record<string, MarkdownRule>) => MarkdownRule
11> = {};
12export const slateRules: Record<
13 string,
14 (rules: Record<string, SlateRule>) => SlateRule
15> = {};
16export const slateDecorators: Record<string, string> = {};
17export const ruleBlacklists: Record<Ruleset, Record<string, boolean>> = {
18 RULES: {},
19 CHANNEL_TOPIC_RULES: {},
20 VOICE_CHANNEL_STATUS_RULES: {},
21 EMBED_TITLE_RULES: {},
22 INLINE_REPLY_RULES: {},
23 GUILD_VERIFICATION_FORM_RULES: {},
24 GUILD_EVENT_RULES: {},
25 PROFILE_BIO_RULES: {},
26 AUTO_MODERATION_SYSTEM_MESSAGE_RULES: {},
27 NATIVE_SEARCH_RESULT_LINK_RULES: {}
28};
29
30export function addRule(
31 name: string,
32 markdown: (rules: Record<string, MarkdownRule>) => MarkdownRule,
33 slate: (rules: Record<string, SlateRule>) => SlateRule,
34 decorator?: string
35) {
36 rules[name] = markdown;
37 slateRules[name] = slate;
38 if (decorator != null) slateDecorators[name] = decorator;
39}
40
41export function blacklistFromRuleset(ruleset: Ruleset, name: string) {
42 if (ruleBlacklists[ruleset] == null) ruleBlacklists[ruleset] = {};
43 ruleBlacklists[ruleset][name] = true;
44}
45
46export function _addRules(originalRules: Record<string, MarkdownRule>) {
47 for (const name in rules) {
48 originalRules["__moonlight_" + name] = rules[name](originalRules);
49 }
50
51 return originalRules;
52}
53
54export function _addSlateRules(originalRules: Record<string, SlateRule>) {
55 for (const name in slateRules) {
56 originalRules["__moonlight_" + name] = slateRules[name](originalRules);
57 }
58
59 return originalRules;
60}
61
62export function _addSlateDecorators(originalRules: Record<string, string>) {
63 for (const name in slateDecorators) {
64 originalRules["__moonlight_" + name] = slateDecorators[name];
65 }
66
67 return originalRules;
68}
69
70export function _applyRulesetBlacklist(
71 rulesets: Record<Ruleset, Record<string, MarkdownRule>>
72) {
73 for (const ruleset of Object.keys(rulesets) as Ruleset[]) {
74 if (ruleset === "RULES") continue;
75
76 const rules = rulesets[ruleset];
77 for (const rule in ruleBlacklists[ruleset] || {}) {
78 delete rules["__moonlight_" + rule];
79 }
80 }
81}