Files
FastGPT/worker/html2md.js
2023-12-18 20:35:17 +08:00

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 '';
}
};