Select Git revision
generate.ts
-
renovate[bot] authored
* chore(deps): update dependency prettier to v2 * Run prettier-fix Co-authored-by:
Renovate Bot <bot@renovateapp.com> Co-authored-by:
Jamie Magee <jamie.magee@gmail.com>
renovate[bot] authored* chore(deps): update dependency prettier to v2 * Run prettier-fix Co-authored-by:
Renovate Bot <bot@renovateapp.com> Co-authored-by:
Jamie Magee <jamie.magee@gmail.com>
markdown.ts 1.44 KiB
import remark from 'remark';
import github from 'remark-github';
import { regEx } from './regex';
// Generic replacements/link-breakers
export function sanitizeMarkdown(markdown: string): string {
let res = markdown;
// Put a zero width space after every # followed by a digit
res = res.replace(regEx(/#(\d)/gi), '#​$1');
// Put a zero width space after every @ symbol to prevent unintended hyperlinking
res = res.replace(regEx(/@/g), '@​');
res = res.replace(regEx(/(`\[?@)​/g), '$1');
res = res.replace(regEx(/([a-z]@)​/gi), '$1');
res = res.replace(regEx(/\/compare\/@​/g), '/compare/@');
res = res.replace(regEx(/(\(https:\/\/[^)]*?)\.\.\.@​/g), '$1...@');
res = res.replace(regEx(/([\s(])#(\d+)([)\s]?)/g), '$1#​$2$3');
// convert escaped backticks back to `
const backTickRe = regEx(/`([^/]*?)`/g);
res = res.replace(backTickRe, '`$1`');
res = res.replace(regEx(/`#​(\d+)`/g), '`#$1`');
return res;
}
/**
*
* @param content content to process
* @param options github options
* @returns linkified content
*/
export async function linkify(
content: string,
options: github.RemarkGithubOptions
): Promise<string> {
// https://github.com/syntax-tree/mdast-util-to-markdown#optionsbullet
const output = await remark()
.use({ settings: { bullet: '-' } })
.use(github, { mentionStrong: false, ...options })
.process(content);
return output.toString();
}