The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Rocket.Chat/apps/meteor/server/hooks/messages/markdownParser.ts

57 lines
1.6 KiB

import { isE2EEMessage, isOTRMessage } from '@rocket.chat/core-typings';
import type { Options, Root } from '@rocket.chat/message-parser';
[IMPROVE] Expand the feature set of the new message rendering (#25970) <!-- This is a pull request template, you do not need to uncomment or remove the comments, they won't show up in the PR text. --> <!-- Your Pull Request name should start with one of the following tags [NEW] For new features [IMPROVE] For an improvement (performance or little improvements) in existing features [FIX] For bug fixes that affect the end-user [BREAK] For pull requests including breaking changes Chore: For small tasks Doc: For documentation --> <!-- Checklist!!! If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code. - I have read the Contributing Guide - https://github.com/RocketChat/Rocket.Chat/blob/develop/.github/CONTRIBUTING.md#contributing-to-rocketchat doc - I have signed the CLA - https://cla-assistant.io/RocketChat/Rocket.Chat - Lint and unit tests pass locally with my changes - I have added tests that prove my fix is effective or that my feature works (if applicable) - I have added necessary documentation (if applicable) - Any dependent changes have been merged and published in downstream modules --> ## Proposed changes (including videos or screenshots) <!-- CHANGELOG --> <!-- Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue below. This description will appear in the release notes if we accept the contribution. --> - Everything inside a new package (`@rocket.chat/gazzodown`); - KaTeX support; - Highlighted Words support; - Emoji rendering expanded; - Code rendering fixed <!-- END CHANGELOG --> ## Issue(s) <!-- Link the issues being closed by or related to this PR. For example, you can use #594 if this PR closes issue number 594 --> ## Steps to test or reproduce <!-- Mention how you would reproduce the bug if not mentioned on the issue page already. Also mention which screens are going to have the changes if applicable --> ## Further comments <!-- If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc... -->
4 years ago
import { parse } from '@rocket.chat/message-parser';
import { callbacks } from '../../../lib/callbacks';
import { SystemLogger } from '../../lib/logger/system';
[IMPROVE] Expand the feature set of the new message rendering (#25970) <!-- This is a pull request template, you do not need to uncomment or remove the comments, they won't show up in the PR text. --> <!-- Your Pull Request name should start with one of the following tags [NEW] For new features [IMPROVE] For an improvement (performance or little improvements) in existing features [FIX] For bug fixes that affect the end-user [BREAK] For pull requests including breaking changes Chore: For small tasks Doc: For documentation --> <!-- Checklist!!! If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code. - I have read the Contributing Guide - https://github.com/RocketChat/Rocket.Chat/blob/develop/.github/CONTRIBUTING.md#contributing-to-rocketchat doc - I have signed the CLA - https://cla-assistant.io/RocketChat/Rocket.Chat - Lint and unit tests pass locally with my changes - I have added tests that prove my fix is effective or that my feature works (if applicable) - I have added necessary documentation (if applicable) - Any dependent changes have been merged and published in downstream modules --> ## Proposed changes (including videos or screenshots) <!-- CHANGELOG --> <!-- Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue below. This description will appear in the release notes if we accept the contribution. --> - Everything inside a new package (`@rocket.chat/gazzodown`); - KaTeX support; - Highlighted Words support; - Emoji rendering expanded; - Code rendering fixed <!-- END CHANGELOG --> ## Issue(s) <!-- Link the issues being closed by or related to this PR. For example, you can use #594 if this PR closes issue number 594 --> ## Steps to test or reproduce <!-- Mention how you would reproduce the bug if not mentioned on the issue page already. Also mention which screens are going to have the changes if applicable --> ## Further comments <!-- If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc... -->
4 years ago
import { settings } from '../../../app/settings/server';
if (process.env.DISABLE_MESSAGE_PARSER !== 'true') {
callbacks.add(
'beforeSaveMessage',
(message) => {
if (isE2EEMessage(message) || isOTRMessage(message)) {
return message;
}
try {
if (message.msg) {
message.md = messageTextToAstMarkdown(message.msg);
}
if (message.attachments?.[0]?.description !== undefined) {
message.attachments[0].descriptionMd = messageTextToAstMarkdown(message.attachments[0].description);
}
} catch (e) {
SystemLogger.error(e); // errors logged while the parser is at experimental stage
}
return message;
},
callbacks.priority.MEDIUM,
'markdownParser',
);
}
const messageTextToAstMarkdown = (messageText: string): Root => {
const customDomains = settings.get<string>('Message_CustomDomain_AutoLink')
? settings
.get<string>('Message_CustomDomain_AutoLink')
.split(',')
.map((domain) => domain.trim())
: [];
const parseOptions: Options = {
colors: settings.get('HexColorPreview_Enabled'),
emoticons: true,
customDomains,
...(settings.get('Katex_Enabled') && {
katex: {
dollarSyntax: settings.get('Katex_Dollar_Syntax'),
parenthesisSyntax: settings.get('Katex_Parenthesis_Syntax'),
},
}),
};
return parse(messageText, parseOptions);
};