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.