@hankei6km/reposition
Version:
`reposition` is a command line tool to send a repository list to Notion database.
103 lines (102 loc) • 2.7 kB
JavaScript
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}`);
});
}