mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 05:12:39 +00:00
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
const { parentPort } = require('worker_threads');
|
|
const TurndownService = require('turndown');
|
|
const domino = require('domino-ext');
|
|
const turndownPluginGfm = require('joplin-turndown-plugin-gfm');
|
|
|
|
const turndownService = new TurndownService({
|
|
headingStyle: 'atx',
|
|
bulletListMarker: '-',
|
|
codeBlockStyle: 'fenced',
|
|
fence: '```',
|
|
emDelimiter: '_',
|
|
strongDelimiter: '**',
|
|
linkStyle: 'inlined',
|
|
linkReferenceStyle: 'full'
|
|
});
|
|
parentPort?.on('message', (html) => {
|
|
const md = html2md(html);
|
|
|
|
parentPort.postMessage(md);
|
|
});
|
|
|
|
const html2md = (html) => {
|
|
try {
|
|
const window = domino.createWindow(html);
|
|
const document = window.document;
|
|
|
|
turndownService.remove(['i', 'script', 'iframe']);
|
|
turndownService.addRule('codeBlock', {
|
|
filter: 'pre',
|
|
replacement(_, node) {
|
|
const content = node.textContent?.trim() || '';
|
|
// @ts-ignore
|
|
const codeName = node?._attrsByQName?.class?.data?.trim() || '';
|
|
|
|
return `\n\`\`\`${codeName}\n${content}\n\`\`\`\n`;
|
|
}
|
|
});
|
|
|
|
turndownService.use(turndownPluginGfm.gfm);
|
|
|
|
return turndownService.turndown(document);
|
|
} catch (error) {
|
|
return '';
|
|
}
|
|
};
|