fix: add number type parse

This commit is contained in:
KazooTTT
2025-02-25 11:55:07 +08:00
parent 58f4e095b5
commit 57ee25f4f3

View File

@ -5,6 +5,23 @@ function removeDupsAndLowerCase(array: string[]) {
return [...new Set(array.map((str) => str.toLowerCase()))]; return [...new Set(array.map((str) => str.toLowerCase()))];
} }
// 辅助函数:处理各种格式的日期
function processDate(val: string | number | Date): Date {
// 如果是数字如20250225转换为字符串并格式化
if (typeof val === "number") {
const numStr = val.toString();
// 假设格式为YYYYMMDD
if (numStr.length === 8) {
const year = numStr.substring(0, 4);
const month = numStr.substring(4, 6);
const day = numStr.substring(6, 8);
return new Date(`${year}-${month}-${day}`);
}
}
// 其他情况直接使用Date构造函数
return new Date(val);
}
const baseSchema = z.object({ const baseSchema = z.object({
title: z.string(), title: z.string(),
}); });
@ -17,9 +34,15 @@ const post = defineCollection({
draft: z.boolean().default(false), draft: z.boolean().default(false),
banner: z.string().optional(), banner: z.string().optional(),
tags: z.array(z.string()).default([]).transform(removeDupsAndLowerCase), tags: z.array(z.string()).default([]).transform(removeDupsAndLowerCase),
date: z.union([z.string(), z.date()]).transform((val) => new Date(val)), date: z.union([z.string(), z.number(), z.date()]).transform(processDate),
date_modified: z.date().optional(), date_modified: z
data_created: z.date().optional(), .union([z.string(), z.number(), z.date()])
.optional()
.transform((val) => (val ? processDate(val) : undefined)),
data_created: z
.union([z.string(), z.number(), z.date()])
.optional()
.transform((val) => (val ? processDate(val) : undefined)),
category: z.string().optional().nullable(), category: z.string().optional().nullable(),
fixedToTop: z.boolean().optional().default(false), fixedToTop: z.boolean().optional().default(false),
}), }),
@ -29,9 +52,15 @@ const note = defineCollection({
loader: glob({ base: "./src/content/note", pattern: "**/*.{md,mdx}" }), loader: glob({ base: "./src/content/note", pattern: "**/*.{md,mdx}" }),
schema: baseSchema.extend({ schema: baseSchema.extend({
description: z.string().optional().nullable(), description: z.string().optional().nullable(),
date: z.union([z.string(), z.date()]).transform((val) => new Date(val)), date: z.union([z.string(), z.number(), z.date()]).transform(processDate),
date_modified: z.date().optional(), date_modified: z
data_created: z.date().optional(), .union([z.string(), z.number(), z.date()])
.optional()
.transform((val) => (val ? processDate(val) : undefined)),
data_created: z
.union([z.string(), z.number(), z.date()])
.optional()
.transform((val) => (val ? processDate(val) : undefined)),
tags: z.array(z.string()).default([]).transform(removeDupsAndLowerCase), tags: z.array(z.string()).default([]).transform(removeDupsAndLowerCase),
}), }),
}); });