import { MarkdownRule, Ruleset, SlateRule } from "@moonlight-mod/types/coreExtensions/markdown"; export const rules: Record) => MarkdownRule> = {}; export const slateRules: Record) => SlateRule> = {}; export const slateDecorators: Record = {}; export const ruleBlacklists: Record> = { RULES: {}, CHANNEL_TOPIC_RULES: {}, VOICE_CHANNEL_STATUS_RULES: {}, EMBED_TITLE_RULES: {}, INLINE_REPLY_RULES: {}, GUILD_VERIFICATION_FORM_RULES: {}, GUILD_EVENT_RULES: {}, PROFILE_BIO_RULES: {}, AUTO_MODERATION_SYSTEM_MESSAGE_RULES: {}, NATIVE_SEARCH_RESULT_LINK_RULES: {} }; export function addRule( name: string, markdown: (rules: Record) => MarkdownRule, slate: (rules: Record) => SlateRule, decorator?: string ) { rules[name] = markdown; slateRules[name] = slate; if (decorator != null) slateDecorators[name] = decorator; } export function blacklistFromRuleset(ruleset: Ruleset, name: string) { if (ruleBlacklists[ruleset] == null) ruleBlacklists[ruleset] = {}; ruleBlacklists[ruleset][name] = true; } export function _addRules(originalRules: Record) { for (const name in rules) { originalRules["__moonlight_" + name] = rules[name](originalRules); } return originalRules; } export function _addSlateRules(originalRules: Record) { for (const name in slateRules) { originalRules["__moonlight_" + name] = slateRules[name](originalRules); } return originalRules; } export function _addSlateDecorators(originalRules: Record) { for (const name in slateDecorators) { originalRules["__moonlight_" + name] = slateDecorators[name]; } return originalRules; } export function _applyRulesetBlacklist(rulesets: Record>) { for (const ruleset of Object.keys(rulesets) as Ruleset[]) { if (ruleset === "RULES") continue; const rules = rulesets[ruleset]; for (const rule in ruleBlacklists[ruleset] || {}) { delete rules["__moonlight_" + rule]; } } }