UNPKG

@udus/notion-renderer

Version:
85 lines (84 loc) 2.42 kB
import { Client, isFullDatabase, isFullPage } from "@notionhq/client"; import { fetchSiteMeta } from "../../../libs/utils/sitemeta.js"; import { generateUUID } from "../../utils/utils.js"; import { retrieveDatabase } from "../database/retrieve.js"; import { retrievePage } from "../index.js"; export const convertMentionObjectResponse = async (mention, client) => { switch (mention.type) { case "user": { return { ...mention, }; } case "date": { return { ...mention, }; } case "link_preview": { const { ok, data } = await fetchSiteMeta(mention.link_preview.url); if (!ok) { return { ...mention, }; } return { ...mention, link_preview: { ...mention.link_preview, site_meta: data, }, }; } case "template_mention": { return { ...mention, }; } case "page": { const { ok, data } = await retrievePage(client, { page_id: mention.page.id, }); if (ok && isFullPage(data)) { return { ...mention, page: { ...mention.page, page: data, }, }; } return { ...mention, }; } case "database": { const { ok, data } = await retrieveDatabase(client, { database_id: mention.database.id, }); if (ok && isFullDatabase(data)) { return { ...mention, database: { ...mention.database, database: data, }, }; } return { ...mention, }; } default: { return mention; } } }; export const convertMentionRichTextItemResponse = async (item, client) => { const mention = await convertMentionObjectResponse(item.mention, client); return { ...item, mention, id: generateUUID(), }; };