@sidekick-coder/db
Version:
Cli Tool to manipulate data from diferent sources
186 lines (182 loc) • 4.45 kB
JavaScript
'use strict';
var lodashEs = require('lodash-es');
// src/providers/notion/parse.ts
function getOne(value, keys) {
for (const key of keys) {
if (lodashEs.has(value, key)) {
return lodashEs.get(value, key);
}
}
}
function toDataItem(notionObject) {
const result = {};
const entries = Object.entries(notionObject.properties);
for (const [key, value] of entries) {
if (value.id === "title") {
result[key] = value.title.map((t) => t.plain_text).join("");
continue;
}
if (value.type === "status") {
result[key] = lodashEs.get(value, "status.name");
continue;
}
if (value.type === "rich_text") {
const text = value.rich_text.map((t) => t.plain_text).join("");
result[key] = text;
continue;
}
if (value.type === "number") {
result[key] = value.number;
continue;
}
if (value.type === "formula") {
result[key] = getOne(value.formula, ["number", "string"]);
continue;
}
if (value.type === "select") {
result[key] = lodashEs.get(value, "select.name");
continue;
}
if (value.type === "multi_select") {
result[key] = value.multi_select.map((s) => s == null ? void 0 : s.name);
continue;
}
if (value.type === "url") {
result[key] = value.url;
continue;
}
if (value.type === "files") {
result[key] = value.files;
continue;
}
if (value.type === "last_edited_time") {
result[key] = value.last_edited_time;
continue;
}
if (value.type === "created_time") {
result[key] = value.created_time;
continue;
}
}
return result;
}
function toNotionObject(itemData, properties) {
const result = {
properties: {}
};
for (const [key, value] of Object.entries(itemData)) {
const property = properties[key];
if (!property) continue;
if (property.type === "title") {
result.properties[key] = {
title: [
{
type: "text",
text: {
content: value
}
}
]
};
continue;
}
if (property.type === "rich_text") {
result.properties[key] = {
rich_text: [
{
type: "text",
text: {
content: String(value)
}
}
]
};
continue;
}
if (property.type === "status") {
const options = lodashEs.get(property, "status.options", []);
const status = options.find((o) => {
if (o.name === value) return o;
if (o.id === value) return o;
});
if (!status) continue;
result.properties[key] = {
status
};
continue;
}
if (property.type === "multi_select") {
const options = lodashEs.get(property, "multi_select.options", []);
const multiSelect = value.map((v) => {
const option = options.find((o) => {
if (o.name === v) return o;
if (o.id === v) return o;
});
return option;
});
result.properties[key] = {
multi_select: multiSelect
};
continue;
}
if (property.type === "number") {
result.properties[key] = {
number: Number(value)
};
continue;
}
if (property.type === "formula") {
result.properties[key] = {
formula: value
};
continue;
}
if (property.type === "select") {
result.properties[key] = {
select: {
name: value
}
};
continue;
}
if (property.type === "multi_select") {
result.properties[key] = {
multi_select: value.map((s) => ({ name: s }))
};
continue;
}
if (property.type === "url") {
result.properties[key] = {
url: value
};
continue;
}
if (property.type === "files") {
result.properties[key] = {
files: value
};
continue;
}
if (property.type === "last_edited_time") {
result.properties[key] = {
last_edited_time: value
};
continue;
}
if (property.type === "created_time") {
result.properties[key] = {
created_time: value
};
continue;
}
if (property.type === "date") {
result.properties[key] = {
date: value
};
continue;
}
}
return result;
}
exports.toDataItem = toDataItem;
exports.toNotionObject = toNotionObject;