Skip to content

@doranjs/zod ​

یک schemaِ zodِ framework-agnostic برای DoranDate.

zDoranDate() یک رشتهٔ ISO-8601، یک عددِ epoch (میلی‌ثانیه)، یک Dateِ نیتیو یا یک DoranDateِ موجود را می‌پذیرد و یک DoranDate خروجی می‌دهد. رشته‌ها و Dateها به‌عنوان لحظه‌های میلادی خوانده می‌شوند، پس مقادیر با DoranDate#toISOString() و JSON.stringify رفت‌وبرگشت می‌کنند.

bash
pnpm add @doranjs/zod zod @doranjs/core

استفاده ​

ts
import { z } from 'zod';
import { zDoranDate } from '@doranjs/zod';

const Booking = z.object({
  checkIn: zDoranDate({ min: '2024-01-01' }),
  checkOut: zDoranDate(),
});

const parsed = Booking.parse({
  checkIn: '2024-06-28',
  checkOut: new Date(),
});

parsed.checkIn; // DoranDate
// میلادی را به backend برگردانید:
fetch('/api/book', { body: JSON.stringify({ checkIn: parsed.checkIn.toISOString() }) });

bounds ​

min / max هر چیزی که zDoranDate می‌پذیرد را قبول می‌کنند (رشتهٔ ISO، Date، epoch، DoranDate) و inclusive هستند:

ts
zDoranDate({ min: '2024-01-01', max: new Date('2024-12-31T23:59:59.999Z') });

یکپارچگی با فرم‌ها ​

zDoranDate() صرفاً یک schemaِ zod است، پس از طریقِ resolverِ استانداردِ zodِ هر stack داخلِ آن می‌افتد. فرم یک DoranDate نگه می‌دارد؛ برای خروجیِ میلادی value.toISOString() را به API بفرستید.

React — react-hook-form ​

tsx
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';
import { zDoranDate } from '@doranjs/zod';

const Schema = z.object({ checkIn: zDoranDate({ min: '2024-01-01' }) });

function BookingForm() {
  const { register, handleSubmit } = useForm({ resolver: zodResolver(Schema) });
  const onSubmit = (values) =>
    // values.checkIn یک DoranDate است — میلادیِ ISO را به API بفرستید.
    fetch('/api/book', {
      method: 'POST',
      body: JSON.stringify({ checkIn: values.checkIn.toISOString() }),
    });
  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input type="date" {...register('checkIn')} />
    </form>
  );
}

Vue — VeeValidate ​

vue
<script setup>
import { useForm } from 'vee-validate';
import { toTypedSchema } from '@vee-validate/zod';
import { z } from 'zod';
import { zDoranDate } from '@doranjs/zod';

const schema = toTypedSchema(z.object({ checkIn: zDoranDate({ min: '2024-01-01' }) }));
const { handleSubmit, defineField } = useForm({ validationSchema: schema });
const [checkIn] = defineField('checkIn');

const onSubmit = handleSubmit((values) =>
  // values.checkIn یک DoranDate است — میلادیِ ISO را به API بفرستید.
  fetch('/api/book', {
    method: 'POST',
    body: JSON.stringify({ checkIn: values.checkIn.toISOString() }),
  }),
);
</script>

<template>
  <form @submit="onSubmit"><input type="date" v-model="checkIn" /></form>
</template>

Svelte (‏Felte / sveltekit-superforms) و فرم‌های reactiveِ Angular همین الگو را از طریقِ adapterهای zodِ خودشان دنبال می‌کنند.

API ​

Exportامضاتوضیح
zDoranDate(options?: { min?, max? }) => ZodSchema<DoranDate>خودِ schema.
toDoranDate(value: unknown) => DoranDate | nullcoercionِ زیرین، export‌شده برای استفادهٔ مجدد.
DoranDateInputstring | number | Date | DoranDateنوعِ ورودیِ پذیرفته‌شده.

Released under the MIT License.