@udus/notion-renderer
Version:

85 lines (84 loc) • 2.42 kB
JavaScript
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(),
};
};