@udus/notion-renderer
Version:

58 lines (57 loc) • 1.99 kB
JavaScript
import { isFullBlock, isFullPage, isFullDatabase, Client, } from "@notionhq/client";
import { retrieveBlock } from "./blocks/retrieve.js";
import { retrieveDatabase } from "./database/retrieve.js";
import { retrievePage } from "./pages/retrieve.js";
export const fetchParent = async (parent, client) => {
if (parent.type === "block_id") {
const parentBlock = await retrieveBlock(client, {
block_id: parent.block_id,
});
return parentBlock;
}
else if (parent.type === "page_id") {
const parentPage = await retrievePage(client, { page_id: parent.page_id });
return parentPage;
}
else if (parent.type === "database_id") {
const parentDatabase = await retrieveDatabase(client, {
database_id: parent.database_id,
});
return parentDatabase;
}
return;
};
export const fetchParentBlockObject = async (parent, client) => {
if (parent.type === "block_id") {
const { ok, data } = await retrieveBlock(client, {
block_id: parent.block_id,
});
if (ok && isFullBlock(data)) {
return await data;
}
}
else if (parent.type === "page_id") {
const { ok, data } = await retrievePage(client, {
page_id: parent.page_id,
});
if (ok && isFullPage(data)) {
return data;
}
}
else if (parent.type === "database_id") {
const { ok, data } = await retrieveDatabase(client, {
database_id: parent.database_id,
});
if (ok && isFullDatabase(data)) {
return data;
}
}
return;
};
export const fetchAllParents = async (parent, parentList = [], client) => {
const parentObjectResponse = await fetchParentBlockObject(parent, client);
if (!parentObjectResponse) {
return parentList;
}
return await fetchAllParents(parentObjectResponse.parent, [parentObjectResponse, ...parentList], client);
};