feat(baoyu-post-to-wechat): default bottom citations for markdown input

Enable bottom citations by default for markdown articles. Add --no-cite
flag to all posting scripts (wechat-api, wechat-article, md-to-wechat)
to optionally disable. WeChat mp links stay inline.
This commit is contained in:
Jim Liu 宝玉
2026-03-06 23:38:23 -06:00
parent 8cea550627
commit 970f5e741a
5 changed files with 65 additions and 15 deletions
@@ -112,10 +112,14 @@ function parseFrontmatter(content: string): { frontmatter: Record<string, string
return { frontmatter, body: match[2]! };
}
export async function convertMarkdown(markdownPath: string, options?: { title?: string; theme?: string; color?: string }): Promise<ParsedResult> {
export async function convertMarkdown(
markdownPath: string,
options?: { title?: string; theme?: string; color?: string; citeStatus?: boolean }
): Promise<ParsedResult> {
const baseDir = path.dirname(markdownPath);
const content = fs.readFileSync(markdownPath, 'utf-8');
const theme = options?.theme ?? 'default';
const citeStatus = options?.citeStatus ?? true;
const { frontmatter, body } = parseFrontmatter(content);
@@ -185,8 +189,9 @@ export async function convertMarkdown(markdownPath: string, options?: { title?:
const renderArgs = ['-y', 'bun', renderScript, tempMdPath, '--theme', theme];
if (options?.color) renderArgs.push('--color', options.color);
if (citeStatus) renderArgs.push('--cite');
console.error(`[md-to-wechat] Rendering markdown with theme: ${theme}${options?.color ? `, color: ${options.color}` : ''}`);
console.error(`[md-to-wechat] Rendering markdown with theme: ${theme}${options?.color ? `, color: ${options.color}` : ''}, citeStatus: ${citeStatus}`);
const result = spawnSync('npx', renderArgs, {
stdio: ['inherit', 'pipe', 'pipe'],
@@ -232,6 +237,7 @@ Options:
--title <title> Override title
--theme <name> Theme name (default, grace, simple, modern)
--color <name|hex> Primary color (blue, green, vermilion, etc. or hex)
--no-cite Disable bottom citations for ordinary external links
--help Show this help
Output JSON format:
@@ -251,6 +257,7 @@ Example:
npx -y bun md-to-wechat.ts article.md
npx -y bun md-to-wechat.ts article.md --theme grace
npx -y bun md-to-wechat.ts article.md --theme modern --color blue
npx -y bun md-to-wechat.ts article.md --no-cite
`);
process.exit(0);
}
@@ -265,6 +272,7 @@ async function main(): Promise<void> {
let title: string | undefined;
let theme: string | undefined;
let color: string | undefined;
let citeStatus = true;
for (let i = 0; i < args.length; i++) {
const arg = args[i]!;
@@ -274,6 +282,10 @@ async function main(): Promise<void> {
theme = args[++i];
} else if (arg === '--color' && args[i + 1]) {
color = args[++i];
} else if (arg === '--cite') {
citeStatus = true;
} else if (arg === '--no-cite') {
citeStatus = false;
} else if (!arg.startsWith('-')) {
markdownPath = arg;
}
@@ -289,7 +301,7 @@ async function main(): Promise<void> {
process.exit(1);
}
const result = await convertMarkdown(markdownPath, { title, theme, color });
const result = await convertMarkdown(markdownPath, { title, theme, color, citeStatus });
console.log(JSON.stringify(result, null, 2));
}