import { get_node_by_id } from './cache.ts' import type { Config } from './config.ts' import type { Render } from './render.ts' import type { DB_block, S_Node } from './siyuan_type.ts' /** 生成当前实例所有引用文档的RSS XML */ export async function generateRSSXML( path: string, renderInstance: Render, config: Config, getHPathByID_Node: (id_node: string | S_Node) => Promise, ): Promise { const refNode = ( await Promise.all([...renderInstance.refs.values()].map(get_node_by_id)) ).filter((el) => el) return ` ${config.sitemap.title} ${config.sitemap.siteLink} ${config.sitemap.description} ${new Date().toISOString()} ${( await Promise.all( refNode.map( async (node) => ` ${node?.Properties?.title} ${config.sitemap.sitePrefix}${ node?.ID ? (await getHPathByID_Node(node?.ID)) + '.html' : '' } ${'' /** TODO 或许可以加入ai 进行摘要 */} ${ node?.Properties?.updated ? new Date( node.Properties.updated.replace( /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1/$2/$3 $4:$5:$6', ), ).toISOString() : '' } `, ), ) ).join('\n')} ` } /** 生成 sitemap.xml 文件内容 */ export function sitemap_xml( docArr: DB_block[], config: { sitePrefix: string }, ) { const urlList: string = docArr .map((doc) => { let lastmod = '' const time = doc.ial.match(/updated=\"(\d+)\"/)?.[1] ?? doc.created if (time) { lastmod = `\n${time.slice(0, 4)}-${time.slice( 4, 6, )}-${time.slice(6, 8)}` } return ` ${config.sitePrefix}${doc.hpath}.html${lastmod} \n` }) .join('') return ` ${urlList} ` }