|
@@ -3,6 +3,13 @@ const mongodb = require('mongodb')
|
|
|
|
|
|
|
|
const { ObjectId } = mongodb
|
|
const { ObjectId } = mongodb
|
|
|
|
|
|
|
|
|
|
+const dateWithTransform = (schema, allowNull = false) => {
|
|
|
|
|
+ return schema.transform(dt => {
|
|
|
|
|
+ if (allowNull && !dt) return null
|
|
|
|
|
+ return dt instanceof Date ? dt : new Date(dt)
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const zz = {
|
|
const zz = {
|
|
|
objectId: () =>
|
|
objectId: () =>
|
|
|
z.string().refine(ObjectId.isValid, { message: 'invalid Mongo ObjectId' }),
|
|
z.string().refine(ObjectId.isValid, { message: 'invalid Mongo ObjectId' }),
|
|
@@ -12,6 +19,14 @@ const zz = {
|
|
|
.refine(ObjectId.isValid, { message: 'invalid Mongo ObjectId' })
|
|
.refine(ObjectId.isValid, { message: 'invalid Mongo ObjectId' })
|
|
|
.transform(val => new ObjectId(val)),
|
|
.transform(val => new ObjectId(val)),
|
|
|
hex: () => z.string().regex(/^[0-9a-f]*$/),
|
|
hex: () => z.string().regex(/^[0-9a-f]*$/),
|
|
|
|
|
+ datetime: () => dateWithTransform(z.union([z.iso.datetime(), z.date()])),
|
|
|
|
|
+ datetimeNullable: () =>
|
|
|
|
|
+ dateWithTransform(z.union([z.iso.datetime(), z.date(), z.null()]), true),
|
|
|
|
|
+ datetimeNullish: () =>
|
|
|
|
|
+ dateWithTransform(
|
|
|
|
|
+ z.union([z.iso.datetime(), z.date(), z.null(), z.undefined()]),
|
|
|
|
|
+ true
|
|
|
|
|
+ ),
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
module.exports = { zz }
|
|
module.exports = { zz }
|