mirror of
https://github.com/Nezumi-2711/Sink.git
synced 2026-09-22 13:48:35 +00:00
feat: init
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import { z } from 'zod'
|
||||
import { customAlphabet } from 'nanoid'
|
||||
|
||||
const { slugRegex } = useAppConfig()
|
||||
|
||||
const slugDefaultLength = +useRuntimeConfig().public.slugDefaultLength
|
||||
|
||||
export const nanoid = (length: number = slugDefaultLength) => customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', length)
|
||||
|
||||
export const LinkSchema = z.object({
|
||||
id: z.string().trim().max(26).default(nanoid(10)),
|
||||
url: z.string().trim().url().max(2048),
|
||||
slug: z.string().trim().max(2048).regex(new RegExp(slugRegex)).default(nanoid()),
|
||||
comment: z.string().trim().max(2048).optional(),
|
||||
createdAt: z.number().int().safe().default(() => Math.floor(Date.now() / 1000)),
|
||||
updatedAt: z.number().int().safe().default(() => Math.floor(Date.now() / 1000)),
|
||||
expiration: z.number().int().safe().refine(expiration => expiration > Math.floor(Date.now() / 1000), {
|
||||
message: 'expiration must be greater than current time',
|
||||
path: ['expiration'], // 这里指定错误消息关联到哪个字段
|
||||
}).optional(),
|
||||
title: z.string().trim().max(2048).optional(),
|
||||
description: z.string().trim().max(2048).optional(),
|
||||
image: z.string().trim().url().max(2048).optional(),
|
||||
})
|
||||
@@ -0,0 +1,25 @@
|
||||
import { z } from 'zod'
|
||||
|
||||
export const QuerySchema = z.object({
|
||||
id: z.string().optional(),
|
||||
startAt: z.coerce.number().int().safe().optional(),
|
||||
endAt: z.coerce.number().int().safe().optional(),
|
||||
url: z.string().optional(),
|
||||
slug: z.string().optional(),
|
||||
referer: z.string().optional(),
|
||||
country: z.string().optional(),
|
||||
region: z.string().optional(),
|
||||
city: z.string().optional(),
|
||||
timezone: z.string().optional(),
|
||||
language: z.string().optional(),
|
||||
os: z.string().optional(),
|
||||
browser: z.string().optional(),
|
||||
browserType: z.string().optional(),
|
||||
device: z.string().optional(),
|
||||
deviceType: z.string().optional(),
|
||||
limit: z.coerce.number().int().safe().default(500),
|
||||
})
|
||||
|
||||
export const FilterSchema = QuerySchema.omit({ id: true, startAt: true, endAt: true, limit: true }).extend({
|
||||
index1: z.string().optional(),
|
||||
})
|
||||
Reference in New Issue
Block a user