import {
parseMarkdown,
stringifyMarkdown,
walkAst,
isLinkNode,
isCodeNode,
root,
paragraph,
text,
strong,
link,
codeBlock
} from "chat";
// Parse markdown
const ast = parseMarkdown(`
# Hello
This is **bold** and [a link](https://example.com).
\`\`\`js
console.log('code');
\`\`\`
`);
// Transform: remove links, highlight code
const transformed = walkAst(ast, (node) => {
// Remove all links, keep text
if (isLinkNode(node)) {
return text(node.children[0].value);
}
// Add line numbers to code blocks
if (isCodeNode(node)) {
const lines = node.value.split("\n");
const numbered = lines
.map((line, i) => `${i + 1}: ${line}`)
.join("\n");
return codeBlock(numbered, node.lang);
}
return node;
});
// Convert back to markdown
const markdown = stringifyMarkdown(transformed);
// Or post directly
await thread.post({ ast: transformed });