UNPKG

@hankei6km/reposition

Version:

`reposition` is a command line tool to send a repository list to Notion database.

103 lines (102 loc) 2.7 kB
export function pageParams(repo) { const cover = { external: { url: repo.openGraphImageUrl }, type: 'external' }; const properties = { createdAt: { date: { start: repo.createdAt } }, description: { rich_text: [ { type: 'text', text: { content: repo.description } } ] }, isPrivate: { checkbox: repo.isPrivate }, name: { rich_text: [ { type: 'text', text: { content: repo.name } } ] }, title: { title: [{ type: 'text', text: { content: repo.nameWithOwner } }] }, owner: { rich_text: [ { type: 'text', text: { content: repo.owner.login } } ] }, //openGraphImageUrl: { // files: [ // { // external: { // url: repo.openGraphImageUrl // Notion 側で画像と認識してもらうには?(ファイル名の拡張子で決まる?) // }, // type: 'external', // name: 'ogp.jpg' // } // ] //}, repositoryTopics: { multi_select: (repo.repositoryTopics || []).map(({ name }) => ({ name })) }, pushedAt: { date: { start: repo.pushedAt } }, updatedAt: { date: { start: repo.updatedAt } }, url: { url: repo.url } }; return { cover, properties }; } export async function send(client, databaseId, repo) { const response = await client.databases .query({ database_id: databaseId, filter: { property: 'title', title: { equals: repo.nameWithOwner } } }) .catch((err) => { throw new Error(`send: query: ${err.message}`); }); if (response.results.length > 0) { //console.log(response.results[0]) await client.pages .update({ page_id: response.results[0].id, ...pageParams(repo) }) .catch((err) => { throw new Error(`send: update: ${err.message}`); }); return; } await client.pages .create({ parent: { database_id: databaseId }, ...pageParams(repo) }) .catch((err) => { throw new Error(`send: create: ${err.message}`); }); }