feat: add highlight for article html.
This commit is contained in:
@ -12,6 +12,7 @@ import { Article } from './entities/article.entity';
|
||||
import { CreateArticleInput } from './dto/create-article.input';
|
||||
import { UpdateArticleInput } from './dto/update-article.input';
|
||||
import * as marked from 'marked';
|
||||
import { getLanguage, highlight } from 'highlight.js';
|
||||
|
||||
@Resolver(() => Article)
|
||||
export class ArticlesResolver {
|
||||
@ -49,7 +50,22 @@ export class ArticlesResolver {
|
||||
|
||||
@ResolveField(() => String)
|
||||
async html(@Parent() article: Article) {
|
||||
return marked(article.content);
|
||||
const tokens = marked.lexer(article.content);
|
||||
const index = tokens.findIndex((token) => ['heading'].includes(token.type));
|
||||
if (index !== -1) {
|
||||
tokens.splice(index, 1);
|
||||
}
|
||||
return marked.parser(tokens, {
|
||||
gfm: true,
|
||||
smartLists: true,
|
||||
smartypants: true,
|
||||
langPrefix: 'hljs language-',
|
||||
highlight: (code, language) => {
|
||||
return highlight(code, {
|
||||
language: getLanguage(language) ? language : 'plaintext',
|
||||
}).value;
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@ResolveField(() => String, { nullable: true })
|
||||
|
Reference in New Issue
Block a user