45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
function formatDateForFilename(dateValue) {
|
|
const date = dateValue ? new Date(dateValue) : new Date();
|
|
|
|
if (Number.isNaN(date.getTime())) {
|
|
return new Date().toISOString().slice(0, 10);
|
|
}
|
|
|
|
return date.toISOString().slice(0, 10);
|
|
}
|
|
|
|
function sanitizeFilenamePart(value) {
|
|
return String(value || "")
|
|
.normalize("NFKD")
|
|
.replace(/[\u0000-\u001F\u007F]/g, "")
|
|
.replace(/[<>:"/\\|?*]/g, " ")
|
|
.replace(/\s+/g, " ")
|
|
.replace(/^\.+|\.+$/g, "")
|
|
.replace(/^\s+|\s+$/g, "")
|
|
.trim();
|
|
}
|
|
|
|
function truncateFilename(filename, maxLength) {
|
|
if (!filename) {
|
|
return filename;
|
|
}
|
|
|
|
if (filename.length <= maxLength) {
|
|
return filename;
|
|
}
|
|
|
|
const extension = filename.slice(filename.lastIndexOf("."));
|
|
const base = filename.slice(0, filename.lastIndexOf("."));
|
|
const safeExtension = extension || ".md";
|
|
const safeBase = base.slice(0, Math.max(1, maxLength - safeExtension.length - 1)).trimEnd();
|
|
return `${safeBase}${safeExtension}`;
|
|
}
|
|
|
|
export function createConversationFilename(capturePayload) {
|
|
const date = formatDateForFilename(capturePayload?.capturedAt);
|
|
const platform = sanitizeFilenamePart(capturePayload?.sourcePlatform || "ChatGPT") || "ChatGPT";
|
|
const title = sanitizeFilenamePart(capturePayload?.title || "Conversation") || "Conversation";
|
|
const baseFilename = `${date} - ${platform} - ${title}.md`;
|
|
return truncateFilename(baseFilename, 180);
|
|
}
|