@ssyazilim/ss-shopping-schemas 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ // src/forms/auth.ts
6
+
7
+ // src/forms/locales/tr.ts
8
+ var auth = {
9
+ emailRequired: "E-posta zorunludur",
10
+ emailInvalid: "Ge\xE7erli bir e-posta adresi giriniz",
11
+ passwordRequired: "\u015Eifre zorunludur",
12
+ passwordMin: "\u015Eifre en az 8 karakter olmal\u0131d\u0131r",
13
+ passwordMax: "\u015Eifre en fazla 64 karakter olabilir",
14
+ passwordUppercase: "En az bir b\xFCy\xFCk harf i\xE7ermelidir",
15
+ passwordNumber: "En az bir rakam i\xE7ermelidir",
16
+ passwordConfirmRequired: "\u015Eifre tekrar\u0131 zorunludur",
17
+ passwordConfirmMismatch: "\u015Eifreler e\u015Fle\u015Fmiyor"
18
+ };
19
+
20
+ // src/forms/locales/en.ts
21
+ var auth2 = {
22
+ emailRequired: "Email is required",
23
+ emailInvalid: "Please enter a valid email address",
24
+ passwordRequired: "Password is required",
25
+ passwordMin: "Password must be at least 8 characters",
26
+ passwordMax: "Password must be at most 64 characters",
27
+ passwordUppercase: "Must contain at least one uppercase letter",
28
+ passwordNumber: "Must contain at least one number",
29
+ passwordConfirmRequired: "Password confirmation is required",
30
+ passwordConfirmMismatch: "Passwords do not match"
31
+ };
32
+
33
+ // src/forms/locales/ru.ts
34
+ var auth3 = {
35
+ emailRequired: "\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u0430",
36
+ emailInvalid: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B",
37
+ passwordRequired: "\u041F\u0430\u0440\u043E\u043B\u044C \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D",
38
+ passwordMin: "\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 8 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
39
+ passwordMax: "\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 64 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
40
+ passwordUppercase: "\u0414\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u0430\u044F \u0431\u0443\u043A\u0432\u0430",
41
+ passwordNumber: "\u0414\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u0446\u0438\u0444\u0440\u0430",
42
+ passwordConfirmRequired: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u0430\u0440\u043E\u043B\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E",
43
+ passwordConfirmMismatch: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442"
44
+ };
45
+
46
+ // src/forms/locales/ar.ts
47
+ var auth4 = {
48
+ emailRequired: "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0645\u0637\u0644\u0648\u0628",
49
+ emailInvalid: "\u064A\u0631\u062C\u0649 \u0625\u062F\u062E\u0627\u0644 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0635\u062D\u064A\u062D",
50
+ passwordRequired: "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0645\u0637\u0644\u0648\u0628\u0629",
51
+ passwordMin: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 8 \u0623\u062D\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
52
+ passwordMax: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 64 \u062D\u0631\u0641\u0627\u064B \u0639\u0644\u0649 \u0627\u0644\u0623\u0643\u062B\u0631",
53
+ passwordUppercase: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u062D\u0631\u0641 \u0643\u0628\u064A\u0631 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
54
+ passwordNumber: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0631\u0642\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
55
+ passwordConfirmRequired: "\u062A\u0623\u0643\u064A\u062F \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0645\u0637\u0644\u0648\u0628",
56
+ passwordConfirmMismatch: "\u0643\u0644\u0645\u062A\u0627 \u0627\u0644\u0645\u0631\u0648\u0631 \u063A\u064A\u0631 \u0645\u062A\u0637\u0627\u0628\u0642\u062A\u064A\u0646"
57
+ };
58
+
59
+ // src/forms/locales/fa.ts
60
+ var auth5 = {
61
+ emailRequired: "\u0627\u06CC\u0645\u06CC\u0644 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
62
+ emailInvalid: "\u0644\u0637\u0641\u0627\u064B \u06CC\u06A9 \u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644 \u0645\u0639\u062A\u0628\u0631 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F",
63
+ passwordRequired: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
64
+ passwordMin: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06F8 \u06A9\u0627\u0631\u0627\u06A9\u062A\u0631 \u0628\u0627\u0634\u062F",
65
+ passwordMax: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u06A9\u062B\u0631 \u06F6\u06F4 \u06A9\u0627\u0631\u0627\u06A9\u062A\u0631 \u0628\u0627\u0634\u062F",
66
+ passwordUppercase: "\u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06CC\u06A9 \u062D\u0631\u0641 \u0628\u0632\u0631\u06AF \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F",
67
+ passwordNumber: "\u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06CC\u06A9 \u0639\u062F\u062F \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F",
68
+ passwordConfirmRequired: "\u062A\u0623\u06CC\u06CC\u062F \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
69
+ passwordConfirmMismatch: "\u0631\u0645\u0632\u0647\u0627\u06CC \u0639\u0628\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062A \u0646\u062F\u0627\u0631\u0646\u062F"
70
+ };
71
+
72
+ // src/forms/auth.ts
73
+ var messages = { tr: auth, en: auth2, ru: auth3, ar: auth4, fa: auth5 };
74
+ function createLoginFormSchema(locale = "tr") {
75
+ const m = messages[locale];
76
+ return zod.z.object({
77
+ email: zod.z.string({ message: m.emailRequired }).min(1, m.emailRequired).email(m.emailInvalid),
78
+ password: zod.z.string({ message: m.passwordRequired }).min(8, m.passwordMin).max(64, m.passwordMax)
79
+ });
80
+ }
81
+ function createRegisterFormSchema(locale = "tr") {
82
+ const m = messages[locale];
83
+ return zod.z.object({
84
+ email: zod.z.string({ message: m.emailRequired }).min(1, m.emailRequired).email(m.emailInvalid),
85
+ password: zod.z.string({ message: m.passwordRequired }).min(8, m.passwordMin).max(64, m.passwordMax).regex(/[A-Z]/, m.passwordUppercase).regex(/[0-9]/, m.passwordNumber),
86
+ passwordConfirm: zod.z.string({ message: m.passwordConfirmRequired }).min(1, m.passwordConfirmRequired)
87
+ }).refine((data) => data.password === data.passwordConfirm, {
88
+ message: m.passwordConfirmMismatch,
89
+ path: ["passwordConfirm"]
90
+ });
91
+ }
92
+
93
+ exports.createLoginFormSchema = createLoginFormSchema;
94
+ exports.createRegisterFormSchema = createRegisterFormSchema;
95
+ //# sourceMappingURL=index.cjs.map
96
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/forms/locales/tr.ts","../../src/forms/locales/en.ts","../../src/forms/locales/ru.ts","../../src/forms/locales/ar.ts","../../src/forms/locales/fa.ts","../../src/forms/auth.ts"],"names":["auth","z"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'E-posta zorunludur',\n emailInvalid: 'Geçerli bir e-posta adresi giriniz',\n passwordRequired: 'Şifre zorunludur',\n passwordMin: 'Şifre en az 8 karakter olmalıdır',\n passwordMax: 'Şifre en fazla 64 karakter olabilir',\n passwordUppercase: 'En az bir büyük harf içermelidir',\n passwordNumber: 'En az bir rakam içermelidir',\n passwordConfirmRequired: 'Şifre tekrarı zorunludur',\n passwordConfirmMismatch: 'Şifreler eşleşmiyor',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'Email is required',\n emailInvalid: 'Please enter a valid email address',\n passwordRequired: 'Password is required',\n passwordMin: 'Password must be at least 8 characters',\n passwordMax: 'Password must be at most 64 characters',\n passwordUppercase: 'Must contain at least one uppercase letter',\n passwordNumber: 'Must contain at least one number',\n passwordConfirmRequired: 'Password confirmation is required',\n passwordConfirmMismatch: 'Passwords do not match',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'Электронная почта обязательна',\n emailInvalid: 'Введите действительный адрес электронной почты',\n passwordRequired: 'Пароль обязателен',\n passwordMin: 'Пароль должен содержать не менее 8 символов',\n passwordMax: 'Пароль должен содержать не более 64 символов',\n passwordUppercase: 'Должна быть хотя бы одна заглавная буква',\n passwordNumber: 'Должна быть хотя бы одна цифра',\n passwordConfirmRequired: 'Подтверждение пароля обязательно',\n passwordConfirmMismatch: 'Пароли не совпадают',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'البريد الإلكتروني مطلوب',\n emailInvalid: 'يرجى إدخال عنوان بريد إلكتروني صحيح',\n passwordRequired: 'كلمة المرور مطلوبة',\n passwordMin: 'يجب أن تكون كلمة المرور 8 أحرف على الأقل',\n passwordMax: 'يجب أن تكون كلمة المرور 64 حرفاً على الأكثر',\n passwordUppercase: 'يجب أن تحتوي على حرف كبير واحد على الأقل',\n passwordNumber: 'يجب أن تحتوي على رقم واحد على الأقل',\n passwordConfirmRequired: 'تأكيد كلمة المرور مطلوب',\n passwordConfirmMismatch: 'كلمتا المرور غير متطابقتين',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'ایمیل الزامی است',\n emailInvalid: 'لطفاً یک آدرس ایمیل معتبر وارد کنید',\n passwordRequired: 'رمز عبور الزامی است',\n passwordMin: 'رمز عبور باید حداقل ۸ کاراکتر باشد',\n passwordMax: 'رمز عبور باید حداکثر ۶۴ کاراکتر باشد',\n passwordUppercase: 'باید حداقل یک حرف بزرگ داشته باشد',\n passwordNumber: 'باید حداقل یک عدد داشته باشد',\n passwordConfirmRequired: 'تأیید رمز عبور الزامی است',\n passwordConfirmMismatch: 'رمزهای عبور مطابقت ندارند',\n};\n","import { z } from 'zod';\nimport * as locales from './locales/index.js';\nimport type { Locale } from './locales/index.js';\n\nconst messages = { tr: locales.tr, en: locales.en, ru: locales.ru, ar: locales.ar, fa: locales.fa };\n\nexport function createLoginFormSchema(locale: Locale = 'tr') {\n const m = messages[locale];\n return z.object({\n email: z\n .string({ message: m.emailRequired })\n .min(1, m.emailRequired)\n .email(m.emailInvalid),\n password: z\n .string({ message: m.passwordRequired })\n .min(8, m.passwordMin)\n .max(64, m.passwordMax),\n });\n}\n\nexport function createRegisterFormSchema(locale: Locale = 'tr') {\n const m = messages[locale];\n return z\n .object({\n email: z\n .string({ message: m.emailRequired })\n .min(1, m.emailRequired)\n .email(m.emailInvalid),\n password: z\n .string({ message: m.passwordRequired })\n .min(8, m.passwordMin)\n .max(64, m.passwordMax)\n .regex(/[A-Z]/, m.passwordUppercase)\n .regex(/[0-9]/, m.passwordNumber),\n passwordConfirm: z\n .string({ message: m.passwordConfirmRequired })\n .min(1, m.passwordConfirmRequired),\n })\n .refine((data) => data.password === data.passwordConfirm, {\n message: m.passwordConfirmMismatch,\n path: ['passwordConfirm'],\n });\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+
3
+ type Locale = 'tr' | 'en' | 'ru' | 'ar' | 'fa';
4
+
5
+ declare function createLoginFormSchema(locale?: Locale): z.ZodObject<{
6
+ email: z.ZodString;
7
+ password: z.ZodString;
8
+ }, z.core.$strip>;
9
+ declare function createRegisterFormSchema(locale?: Locale): z.ZodObject<{
10
+ email: z.ZodString;
11
+ password: z.ZodString;
12
+ passwordConfirm: z.ZodString;
13
+ }, z.core.$strip>;
14
+
15
+ export { type Locale, createLoginFormSchema, createRegisterFormSchema };
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+
3
+ type Locale = 'tr' | 'en' | 'ru' | 'ar' | 'fa';
4
+
5
+ declare function createLoginFormSchema(locale?: Locale): z.ZodObject<{
6
+ email: z.ZodString;
7
+ password: z.ZodString;
8
+ }, z.core.$strip>;
9
+ declare function createRegisterFormSchema(locale?: Locale): z.ZodObject<{
10
+ email: z.ZodString;
11
+ password: z.ZodString;
12
+ passwordConfirm: z.ZodString;
13
+ }, z.core.$strip>;
14
+
15
+ export { type Locale, createLoginFormSchema, createRegisterFormSchema };
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/forms/auth.ts
4
+
5
+ // src/forms/locales/tr.ts
6
+ var auth = {
7
+ emailRequired: "E-posta zorunludur",
8
+ emailInvalid: "Ge\xE7erli bir e-posta adresi giriniz",
9
+ passwordRequired: "\u015Eifre zorunludur",
10
+ passwordMin: "\u015Eifre en az 8 karakter olmal\u0131d\u0131r",
11
+ passwordMax: "\u015Eifre en fazla 64 karakter olabilir",
12
+ passwordUppercase: "En az bir b\xFCy\xFCk harf i\xE7ermelidir",
13
+ passwordNumber: "En az bir rakam i\xE7ermelidir",
14
+ passwordConfirmRequired: "\u015Eifre tekrar\u0131 zorunludur",
15
+ passwordConfirmMismatch: "\u015Eifreler e\u015Fle\u015Fmiyor"
16
+ };
17
+
18
+ // src/forms/locales/en.ts
19
+ var auth2 = {
20
+ emailRequired: "Email is required",
21
+ emailInvalid: "Please enter a valid email address",
22
+ passwordRequired: "Password is required",
23
+ passwordMin: "Password must be at least 8 characters",
24
+ passwordMax: "Password must be at most 64 characters",
25
+ passwordUppercase: "Must contain at least one uppercase letter",
26
+ passwordNumber: "Must contain at least one number",
27
+ passwordConfirmRequired: "Password confirmation is required",
28
+ passwordConfirmMismatch: "Passwords do not match"
29
+ };
30
+
31
+ // src/forms/locales/ru.ts
32
+ var auth3 = {
33
+ emailRequired: "\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u043E\u0447\u0442\u0430 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u0430",
34
+ emailInvalid: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B",
35
+ passwordRequired: "\u041F\u0430\u0440\u043E\u043B\u044C \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D",
36
+ passwordMin: "\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u0435\u0435 8 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
37
+ passwordMax: "\u041F\u0430\u0440\u043E\u043B\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 64 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
38
+ passwordUppercase: "\u0414\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u0430\u044F \u0431\u0443\u043A\u0432\u0430",
39
+ passwordNumber: "\u0414\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u0446\u0438\u0444\u0440\u0430",
40
+ passwordConfirmRequired: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u0430\u0440\u043E\u043B\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E",
41
+ passwordConfirmMismatch: "\u041F\u0430\u0440\u043E\u043B\u0438 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442"
42
+ };
43
+
44
+ // src/forms/locales/ar.ts
45
+ var auth4 = {
46
+ emailRequired: "\u0627\u0644\u0628\u0631\u064A\u062F \u0627\u0644\u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0645\u0637\u0644\u0648\u0628",
47
+ emailInvalid: "\u064A\u0631\u062C\u0649 \u0625\u062F\u062E\u0627\u0644 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A \u0635\u062D\u064A\u062D",
48
+ passwordRequired: "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0645\u0637\u0644\u0648\u0628\u0629",
49
+ passwordMin: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 8 \u0623\u062D\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
50
+ passwordMax: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 64 \u062D\u0631\u0641\u0627\u064B \u0639\u0644\u0649 \u0627\u0644\u0623\u0643\u062B\u0631",
51
+ passwordUppercase: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u062D\u0631\u0641 \u0643\u0628\u064A\u0631 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
52
+ passwordNumber: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0631\u0642\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
53
+ passwordConfirmRequired: "\u062A\u0623\u0643\u064A\u062F \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0645\u0637\u0644\u0648\u0628",
54
+ passwordConfirmMismatch: "\u0643\u0644\u0645\u062A\u0627 \u0627\u0644\u0645\u0631\u0648\u0631 \u063A\u064A\u0631 \u0645\u062A\u0637\u0627\u0628\u0642\u062A\u064A\u0646"
55
+ };
56
+
57
+ // src/forms/locales/fa.ts
58
+ var auth5 = {
59
+ emailRequired: "\u0627\u06CC\u0645\u06CC\u0644 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
60
+ emailInvalid: "\u0644\u0637\u0641\u0627\u064B \u06CC\u06A9 \u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644 \u0645\u0639\u062A\u0628\u0631 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F",
61
+ passwordRequired: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
62
+ passwordMin: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06F8 \u06A9\u0627\u0631\u0627\u06A9\u062A\u0631 \u0628\u0627\u0634\u062F",
63
+ passwordMax: "\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u06A9\u062B\u0631 \u06F6\u06F4 \u06A9\u0627\u0631\u0627\u06A9\u062A\u0631 \u0628\u0627\u0634\u062F",
64
+ passwordUppercase: "\u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06CC\u06A9 \u062D\u0631\u0641 \u0628\u0632\u0631\u06AF \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F",
65
+ passwordNumber: "\u0628\u0627\u06CC\u062F \u062D\u062F\u0627\u0642\u0644 \u06CC\u06A9 \u0639\u062F\u062F \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F",
66
+ passwordConfirmRequired: "\u062A\u0623\u06CC\u06CC\u062F \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0627\u0644\u0632\u0627\u0645\u06CC \u0627\u0633\u062A",
67
+ passwordConfirmMismatch: "\u0631\u0645\u0632\u0647\u0627\u06CC \u0639\u0628\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062A \u0646\u062F\u0627\u0631\u0646\u062F"
68
+ };
69
+
70
+ // src/forms/auth.ts
71
+ var messages = { tr: auth, en: auth2, ru: auth3, ar: auth4, fa: auth5 };
72
+ function createLoginFormSchema(locale = "tr") {
73
+ const m = messages[locale];
74
+ return z.object({
75
+ email: z.string({ message: m.emailRequired }).min(1, m.emailRequired).email(m.emailInvalid),
76
+ password: z.string({ message: m.passwordRequired }).min(8, m.passwordMin).max(64, m.passwordMax)
77
+ });
78
+ }
79
+ function createRegisterFormSchema(locale = "tr") {
80
+ const m = messages[locale];
81
+ return z.object({
82
+ email: z.string({ message: m.emailRequired }).min(1, m.emailRequired).email(m.emailInvalid),
83
+ password: z.string({ message: m.passwordRequired }).min(8, m.passwordMin).max(64, m.passwordMax).regex(/[A-Z]/, m.passwordUppercase).regex(/[0-9]/, m.passwordNumber),
84
+ passwordConfirm: z.string({ message: m.passwordConfirmRequired }).min(1, m.passwordConfirmRequired)
85
+ }).refine((data) => data.password === data.passwordConfirm, {
86
+ message: m.passwordConfirmMismatch,
87
+ path: ["passwordConfirm"]
88
+ });
89
+ }
90
+
91
+ export { createLoginFormSchema, createRegisterFormSchema };
92
+ //# sourceMappingURL=index.js.map
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/forms/locales/tr.ts","../../src/forms/locales/en.ts","../../src/forms/locales/ru.ts","../../src/forms/locales/ar.ts","../../src/forms/locales/fa.ts","../../src/forms/auth.ts"],"names":["auth"],"mappings":"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","file":"index.js","sourcesContent":["import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'E-posta zorunludur',\n emailInvalid: 'Geçerli bir e-posta adresi giriniz',\n passwordRequired: 'Şifre zorunludur',\n passwordMin: 'Şifre en az 8 karakter olmalıdır',\n passwordMax: 'Şifre en fazla 64 karakter olabilir',\n passwordUppercase: 'En az bir büyük harf içermelidir',\n passwordNumber: 'En az bir rakam içermelidir',\n passwordConfirmRequired: 'Şifre tekrarı zorunludur',\n passwordConfirmMismatch: 'Şifreler eşleşmiyor',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'Email is required',\n emailInvalid: 'Please enter a valid email address',\n passwordRequired: 'Password is required',\n passwordMin: 'Password must be at least 8 characters',\n passwordMax: 'Password must be at most 64 characters',\n passwordUppercase: 'Must contain at least one uppercase letter',\n passwordNumber: 'Must contain at least one number',\n passwordConfirmRequired: 'Password confirmation is required',\n passwordConfirmMismatch: 'Passwords do not match',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'Электронная почта обязательна',\n emailInvalid: 'Введите действительный адрес электронной почты',\n passwordRequired: 'Пароль обязателен',\n passwordMin: 'Пароль должен содержать не менее 8 символов',\n passwordMax: 'Пароль должен содержать не более 64 символов',\n passwordUppercase: 'Должна быть хотя бы одна заглавная буква',\n passwordNumber: 'Должна быть хотя бы одна цифра',\n passwordConfirmRequired: 'Подтверждение пароля обязательно',\n passwordConfirmMismatch: 'Пароли не совпадают',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'البريد الإلكتروني مطلوب',\n emailInvalid: 'يرجى إدخال عنوان بريد إلكتروني صحيح',\n passwordRequired: 'كلمة المرور مطلوبة',\n passwordMin: 'يجب أن تكون كلمة المرور 8 أحرف على الأقل',\n passwordMax: 'يجب أن تكون كلمة المرور 64 حرفاً على الأكثر',\n passwordUppercase: 'يجب أن تحتوي على حرف كبير واحد على الأقل',\n passwordNumber: 'يجب أن تحتوي على رقم واحد على الأقل',\n passwordConfirmRequired: 'تأكيد كلمة المرور مطلوب',\n passwordConfirmMismatch: 'كلمتا المرور غير متطابقتين',\n};\n","import type { AuthMessages } from './types.js';\n\nexport const auth: AuthMessages = {\n emailRequired: 'ایمیل الزامی است',\n emailInvalid: 'لطفاً یک آدرس ایمیل معتبر وارد کنید',\n passwordRequired: 'رمز عبور الزامی است',\n passwordMin: 'رمز عبور باید حداقل ۸ کاراکتر باشد',\n passwordMax: 'رمز عبور باید حداکثر ۶۴ کاراکتر باشد',\n passwordUppercase: 'باید حداقل یک حرف بزرگ داشته باشد',\n passwordNumber: 'باید حداقل یک عدد داشته باشد',\n passwordConfirmRequired: 'تأیید رمز عبور الزامی است',\n passwordConfirmMismatch: 'رمزهای عبور مطابقت ندارند',\n};\n","import { z } from 'zod';\nimport * as locales from './locales/index.js';\nimport type { Locale } from './locales/index.js';\n\nconst messages = { tr: locales.tr, en: locales.en, ru: locales.ru, ar: locales.ar, fa: locales.fa };\n\nexport function createLoginFormSchema(locale: Locale = 'tr') {\n const m = messages[locale];\n return z.object({\n email: z\n .string({ message: m.emailRequired })\n .min(1, m.emailRequired)\n .email(m.emailInvalid),\n password: z\n .string({ message: m.passwordRequired })\n .min(8, m.passwordMin)\n .max(64, m.passwordMax),\n });\n}\n\nexport function createRegisterFormSchema(locale: Locale = 'tr') {\n const m = messages[locale];\n return z\n .object({\n email: z\n .string({ message: m.emailRequired })\n .min(1, m.emailRequired)\n .email(m.emailInvalid),\n password: z\n .string({ message: m.passwordRequired })\n .min(8, m.passwordMin)\n .max(64, m.passwordMax)\n .regex(/[A-Z]/, m.passwordUppercase)\n .regex(/[0-9]/, m.passwordNumber),\n passwordConfirm: z\n .string({ message: m.passwordConfirmRequired })\n .min(1, m.passwordConfirmRequired),\n })\n .refine((data) => data.password === data.passwordConfirm, {\n message: m.passwordConfirmMismatch,\n path: ['passwordConfirm'],\n });\n}\n"]}
package/dist/index.cjs ADDED
@@ -0,0 +1,207 @@
1
+ 'use strict';
2
+
3
+ var zodToOpenapi = require('@asteasolutions/zod-to-openapi');
4
+ var zod = require('zod');
5
+
6
+ // src/schemas/registry.ts
7
+ zodToOpenapi.extendZodWithOpenApi(zod.z);
8
+ var registry = new zodToOpenapi.OpenAPIRegistry();
9
+ var UuidSchema = registry.register(
10
+ "Uuid",
11
+ zod.z.string().uuid().meta({ description: "UUID v4 format\u0131nda benzersiz kimlik", examples: ["123e4567-e89b-12d3-a456-426614174000"] })
12
+ );
13
+ var PaginationQuerySchema = registry.register(
14
+ "PaginationQuery",
15
+ zod.z.object({
16
+ page: zod.z.coerce.number().int().min(1).default(1).meta({ description: "Sayfa numaras\u0131" }),
17
+ limit: zod.z.coerce.number().int().min(1).max(100).default(20).meta({ description: "Sayfa ba\u015F\u0131na kay\u0131t say\u0131s\u0131" })
18
+ })
19
+ );
20
+ var ApiErrorSchema = registry.register(
21
+ "ApiError",
22
+ zod.z.object({
23
+ code: zod.z.string().meta({ description: "Hata kodu", examples: ["VALIDATION_ERROR"] }),
24
+ message: zod.z.string().meta({ description: "Hata mesaj\u0131" }),
25
+ details: zod.z.record(zod.z.string(), zod.z.array(zod.z.string())).optional().meta({ description: "Alan bazl\u0131 hata detaylar\u0131" })
26
+ })
27
+ );
28
+ var ProductCategorySchema = zod.z.enum([
29
+ "catheter",
30
+ "gel",
31
+ "instillation",
32
+ "implant",
33
+ "irrigation"
34
+ ]);
35
+ var ProductSchema = registry.register(
36
+ "Product",
37
+ zod.z.object({
38
+ id: zod.z.string().uuid().meta({ description: "\xDCr\xFCn ID" }),
39
+ name: zod.z.string().min(1).max(200).meta({ description: "\xDCr\xFCn ad\u0131", examples: ["LUBRAGEL"] }),
40
+ category: ProductCategorySchema.meta({ description: "\xDCr\xFCn kategorisi" }),
41
+ catalogCode: zod.z.string().regex(/^[A-Z0-9-]+$/).meta({ description: "Katalog kodu", examples: ["LUB-006"] }),
42
+ isActive: zod.z.boolean().default(true).meta({ description: "\xDCr\xFCn aktif mi?" }),
43
+ createdAt: zod.z.string().datetime().meta({ description: "Olu\u015Fturulma tarihi" })
44
+ })
45
+ );
46
+ var CreateProductSchema = registry.register(
47
+ "CreateProduct",
48
+ ProductSchema.omit({ id: true, createdAt: true })
49
+ );
50
+ var UpdateProductSchema = registry.register(
51
+ "UpdateProduct",
52
+ CreateProductSchema.partial()
53
+ );
54
+ var ProductIdParam = zod.z.object({
55
+ id: UuidSchema
56
+ });
57
+ registry.registerPath({
58
+ method: "get",
59
+ path: "/products",
60
+ tags: ["Products"],
61
+ summary: "\xDCr\xFCn listesi",
62
+ request: {
63
+ query: PaginationQuerySchema
64
+ },
65
+ responses: {
66
+ 200: {
67
+ description: "Ba\u015Far\u0131l\u0131",
68
+ content: {
69
+ "application/json": {
70
+ schema: zod.z.object({
71
+ data: zod.z.array(ProductSchema),
72
+ total: zod.z.number().int(),
73
+ page: zod.z.number().int(),
74
+ limit: zod.z.number().int()
75
+ })
76
+ }
77
+ }
78
+ }
79
+ }
80
+ });
81
+ registry.registerPath({
82
+ method: "get",
83
+ path: "/products/{id}",
84
+ tags: ["Products"],
85
+ summary: "\xDCr\xFCn detay\u0131",
86
+ request: {
87
+ params: ProductIdParam
88
+ },
89
+ responses: {
90
+ 200: {
91
+ description: "Ba\u015Far\u0131l\u0131",
92
+ content: {
93
+ "application/json": {
94
+ schema: ProductSchema
95
+ }
96
+ }
97
+ },
98
+ 404: {
99
+ description: "\xDCr\xFCn bulunamad\u0131",
100
+ content: {
101
+ "application/json": {
102
+ schema: ApiErrorSchema
103
+ }
104
+ }
105
+ }
106
+ }
107
+ });
108
+ registry.registerPath({
109
+ method: "post",
110
+ path: "/products",
111
+ tags: ["Products"],
112
+ summary: "Yeni \xFCr\xFCn olu\u015Ftur",
113
+ request: {
114
+ body: {
115
+ content: {
116
+ "application/json": {
117
+ schema: CreateProductSchema
118
+ }
119
+ }
120
+ }
121
+ },
122
+ responses: {
123
+ 201: {
124
+ description: "Olu\u015Fturuldu",
125
+ content: {
126
+ "application/json": {
127
+ schema: ProductSchema
128
+ }
129
+ }
130
+ },
131
+ 400: {
132
+ description: "Validasyon hatas\u0131",
133
+ content: {
134
+ "application/json": {
135
+ schema: ApiErrorSchema
136
+ }
137
+ }
138
+ }
139
+ }
140
+ });
141
+ registry.registerPath({
142
+ method: "patch",
143
+ path: "/products/{id}",
144
+ tags: ["Products"],
145
+ summary: "\xDCr\xFCn g\xFCncelle",
146
+ request: {
147
+ params: ProductIdParam,
148
+ body: {
149
+ content: {
150
+ "application/json": {
151
+ schema: UpdateProductSchema
152
+ }
153
+ }
154
+ }
155
+ },
156
+ responses: {
157
+ 200: {
158
+ description: "G\xFCncellendi",
159
+ content: {
160
+ "application/json": {
161
+ schema: ProductSchema
162
+ }
163
+ }
164
+ },
165
+ 404: {
166
+ description: "\xDCr\xFCn bulunamad\u0131",
167
+ content: {
168
+ "application/json": {
169
+ schema: ApiErrorSchema
170
+ }
171
+ }
172
+ }
173
+ }
174
+ });
175
+ registry.registerPath({
176
+ method: "delete",
177
+ path: "/products/{id}",
178
+ tags: ["Products"],
179
+ summary: "\xDCr\xFCn sil",
180
+ request: {
181
+ params: ProductIdParam
182
+ },
183
+ responses: {
184
+ 204: {
185
+ description: "Silindi"
186
+ },
187
+ 404: {
188
+ description: "\xDCr\xFCn bulunamad\u0131",
189
+ content: {
190
+ "application/json": {
191
+ schema: ApiErrorSchema
192
+ }
193
+ }
194
+ }
195
+ }
196
+ });
197
+
198
+ exports.ApiErrorSchema = ApiErrorSchema;
199
+ exports.CreateProductSchema = CreateProductSchema;
200
+ exports.PaginationQuerySchema = PaginationQuerySchema;
201
+ exports.ProductCategorySchema = ProductCategorySchema;
202
+ exports.ProductSchema = ProductSchema;
203
+ exports.UpdateProductSchema = UpdateProductSchema;
204
+ exports.UuidSchema = UuidSchema;
205
+ exports.registry = registry;
206
+ //# sourceMappingURL=index.cjs.map
207
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/registry.ts","../src/schemas/common.ts","../src/schemas/product.ts","../src/schemas/product.paths.ts"],"names":["extendZodWithOpenApi","z","OpenAPIRegistry"],"mappings":";;;;;;AAIAA,iCAAA,CAAqBC,KAAC,CAAA;AAEf,IAAM,QAAA,GAAW,IAAIC,4BAAA;ACHrB,IAAM,aAAa,QAAA,CAAS,QAAA;AAAA,EACjC,MAAA;AAAA,EACAD,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK,CAAE,IAAA,CAAK,EAAE,WAAA,EAAa,0CAAA,EAAuC,QAAA,EAAU,CAAC,sCAAsC,GAAG;AACnI;AAEO,IAAM,wBAAwB,QAAA,CAAS,QAAA;AAAA,EAC5C,iBAAA;AAAA,EACAA,MAAE,MAAA,CAAO;AAAA,IACP,MAAMA,KAAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,KAAK,EAAE,WAAA,EAAa,uBAAkB,CAAA;AAAA,IACtF,KAAA,EAAOA,MAAE,MAAA,CAAO,MAAA,GAAS,GAAA,EAAI,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA,CAAE,KAAK,EAAE,WAAA,EAAa,sDAA6B;AAAA,GAC7G;AACH;AAEO,IAAM,iBAAiB,QAAA,CAAS,QAAA;AAAA,EACrC,UAAA;AAAA,EACAA,MAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,CAAK,EAAE,WAAA,EAAa,WAAA,EAAa,QAAA,EAAU,CAAC,kBAAkB,CAAA,EAAG,CAAA;AAAA,IAClF,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,KAAK,EAAE,WAAA,EAAa,oBAAe,CAAA;AAAA,IACvD,SAASA,KAAAA,CAAE,MAAA,CAAOA,MAAE,MAAA,EAAO,EAAGA,MAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAC,EAAE,QAAA,EAAS,CAAE,KAAK,EAAE,WAAA,EAAa,uCAA6B;AAAA,GAChH;AACH;ACpBO,IAAM,qBAAA,GAAwBA,MAAE,IAAA,CAAK;AAAA,EAC1C,UAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,gBAAgB,QAAA,CAAS,QAAA;AAAA,EACpC,SAAA;AAAA,EACAA,MAAE,MAAA,CAAO;AAAA,IACP,EAAA,EAAIA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,IAAA,CAAK,EAAE,WAAA,EAAa,eAAA,EAAW,CAAA;AAAA,IACrD,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,CAAA,CAAE,IAAA,CAAK,EAAE,WAAA,EAAa,qBAAA,EAAY,UAAU,CAAC,UAAU,GAAG,CAAA;AAAA,IACzF,UAAU,qBAAA,CAAsB,IAAA,CAAK,EAAE,WAAA,EAAa,yBAAmB,CAAA;AAAA,IACvE,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,MAAM,cAAc,CAAA,CAAE,IAAA,CAAK,EAAE,aAAa,cAAA,EAAgB,QAAA,EAAU,CAAC,SAAS,GAAG,CAAA;AAAA,IACzG,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,WAAA,EAAa,sBAAA,EAAkB,CAAA;AAAA,IAC1E,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,IAAA,CAAK,EAAE,WAAA,EAAa,yBAAA,EAAsB;AAAA,GAC5E;AACH;AAEO,IAAM,sBAAsB,QAAA,CAAS,QAAA;AAAA,EAC1C,eAAA;AAAA,EACA,cAAc,IAAA,CAAK,EAAE,IAAI,IAAA,EAAM,SAAA,EAAW,MAAM;AAClD;AAEO,IAAM,sBAAsB,QAAA,CAAS,QAAA;AAAA,EAC1C,eAAA;AAAA,EACA,oBAAoB,OAAA;AACtB;ACtBA,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EAC9B,EAAA,EAAI;AACN,CAAC,CAAA;AAGD,QAAA,CAAS,YAAA,CAAa;AAAA,EACpB,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,EACjB,OAAA,EAAS,oBAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,yBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQA,MAAE,MAAA,CAAO;AAAA,YACf,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAAA,YAC3B,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,YACtB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,YACrB,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA;AAAI,WACvB;AAAA;AACH;AACF;AACF;AAEJ,CAAC,CAAA;AAGD,QAAA,CAAS,YAAA,CAAa;AAAA,EACpB,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,EACjB,OAAA,EAAS,wBAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,yBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,4BAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAC,CAAA;AAGD,QAAA,CAAS,YAAA,CAAa;AAAA,EACpB,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,EACjB,OAAA,EAAS,8BAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF,GACF;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,kBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,wBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAC,CAAA;AAGD,QAAA,CAAS,YAAA,CAAa;AAAA,EACpB,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,EACjB,OAAA,EAAS,wBAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,cAAA;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF,GACF;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,gBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,4BAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAC,CAAA;AAGD,QAAA,CAAS,YAAA,CAAa;AAAA,EACpB,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,EACjB,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,MACH,WAAA,EAAa;AAAA,KACf;AAAA,IACA,GAAA,EAAK;AAAA,MACH,WAAA,EAAa,4BAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AAEJ,CAAC,CAAA","file":"index.cjs","sourcesContent":["import { extendZodWithOpenApi, OpenAPIRegistry } from '@asteasolutions/zod-to-openapi';\nimport { z } from 'zod';\n\n// Zod'a .openapi() metodunu ekler — tüm schema dosyalarından önce çalışmalı\nextendZodWithOpenApi(z);\n\nexport const registry = new OpenAPIRegistry();\n","import { z } from 'zod';\nimport { registry } from './registry.js';\n\nexport const UuidSchema = registry.register(\n 'Uuid',\n z.string().uuid().meta({ description: 'UUID v4 formatında benzersiz kimlik', examples: ['123e4567-e89b-12d3-a456-426614174000'] })\n);\n\nexport const PaginationQuerySchema = registry.register(\n 'PaginationQuery',\n z.object({\n page: z.coerce.number().int().min(1).default(1).meta({ description: 'Sayfa numarası' }),\n limit: z.coerce.number().int().min(1).max(100).default(20).meta({ description: 'Sayfa başına kayıt sayısı' }),\n })\n);\n\nexport const ApiErrorSchema = registry.register(\n 'ApiError',\n z.object({\n code: z.string().meta({ description: 'Hata kodu', examples: ['VALIDATION_ERROR'] }),\n message: z.string().meta({ description: 'Hata mesajı' }),\n details: z.record(z.string(), z.array(z.string())).optional().meta({ description: 'Alan bazlı hata detayları' }),\n })\n);\n","import { z } from 'zod';\nimport { registry } from './registry.js';\n\nexport const ProductCategorySchema = z.enum([\n 'catheter',\n 'gel',\n 'instillation',\n 'implant',\n 'irrigation',\n]);\n\nexport const ProductSchema = registry.register(\n 'Product',\n z.object({\n id: z.string().uuid().meta({ description: 'Ürün ID' }),\n name: z.string().min(1).max(200).meta({ description: 'Ürün adı', examples: ['LUBRAGEL'] }),\n category: ProductCategorySchema.meta({ description: 'Ürün kategorisi' }),\n catalogCode: z.string().regex(/^[A-Z0-9-]+$/).meta({ description: 'Katalog kodu', examples: ['LUB-006'] }),\n isActive: z.boolean().default(true).meta({ description: 'Ürün aktif mi?' }),\n createdAt: z.string().datetime().meta({ description: 'Oluşturulma tarihi' }),\n })\n);\n\nexport const CreateProductSchema = registry.register(\n 'CreateProduct',\n ProductSchema.omit({ id: true, createdAt: true })\n);\n\nexport const UpdateProductSchema = registry.register(\n 'UpdateProduct',\n CreateProductSchema.partial()\n);\n","import { z } from 'zod';\nimport { registry } from './registry.js';\nimport {\n ProductSchema,\n CreateProductSchema,\n UpdateProductSchema,\n} from './product.js';\nimport { PaginationQuerySchema, ApiErrorSchema, UuidSchema } from './common.js';\n\nconst ProductIdParam = z.object({\n id: UuidSchema,\n});\n\n// GET /products\nregistry.registerPath({\n method: 'get',\n path: '/products',\n tags: ['Products'],\n summary: 'Ürün listesi',\n request: {\n query: PaginationQuerySchema,\n },\n responses: {\n 200: {\n description: 'Başarılı',\n content: {\n 'application/json': {\n schema: z.object({\n data: z.array(ProductSchema),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n }),\n },\n },\n },\n },\n});\n\n// GET /products/:id\nregistry.registerPath({\n method: 'get',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün detayı',\n request: {\n params: ProductIdParam,\n },\n responses: {\n 200: {\n description: 'Başarılı',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// POST /products\nregistry.registerPath({\n method: 'post',\n path: '/products',\n tags: ['Products'],\n summary: 'Yeni ürün oluştur',\n request: {\n body: {\n content: {\n 'application/json': {\n schema: CreateProductSchema,\n },\n },\n },\n },\n responses: {\n 201: {\n description: 'Oluşturuldu',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 400: {\n description: 'Validasyon hatası',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// PATCH /products/:id\nregistry.registerPath({\n method: 'patch',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün güncelle',\n request: {\n params: ProductIdParam,\n body: {\n content: {\n 'application/json': {\n schema: UpdateProductSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n description: 'Güncellendi',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// DELETE /products/:id\nregistry.registerPath({\n method: 'delete',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün sil',\n request: {\n params: ProductIdParam,\n },\n responses: {\n 204: {\n description: 'Silindi',\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n"]}
@@ -0,0 +1,70 @@
1
+ import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi';
2
+ import { z } from 'zod';
3
+
4
+ declare const registry: OpenAPIRegistry;
5
+
6
+ declare const UuidSchema: z.ZodString;
7
+ declare const PaginationQuerySchema: z.ZodObject<{
8
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
9
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
10
+ }, z.core.$strip>;
11
+ declare const ApiErrorSchema: z.ZodObject<{
12
+ code: z.ZodString;
13
+ message: z.ZodString;
14
+ details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
15
+ }, z.core.$strip>;
16
+
17
+ declare const ProductCategorySchema: z.ZodEnum<{
18
+ catheter: "catheter";
19
+ gel: "gel";
20
+ instillation: "instillation";
21
+ implant: "implant";
22
+ irrigation: "irrigation";
23
+ }>;
24
+ declare const ProductSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ category: z.ZodEnum<{
28
+ catheter: "catheter";
29
+ gel: "gel";
30
+ instillation: "instillation";
31
+ implant: "implant";
32
+ irrigation: "irrigation";
33
+ }>;
34
+ catalogCode: z.ZodString;
35
+ isActive: z.ZodDefault<z.ZodBoolean>;
36
+ createdAt: z.ZodString;
37
+ }, z.core.$strip>;
38
+ declare const CreateProductSchema: z.ZodObject<{
39
+ name: z.ZodString;
40
+ category: z.ZodEnum<{
41
+ catheter: "catheter";
42
+ gel: "gel";
43
+ instillation: "instillation";
44
+ implant: "implant";
45
+ irrigation: "irrigation";
46
+ }>;
47
+ catalogCode: z.ZodString;
48
+ isActive: z.ZodDefault<z.ZodBoolean>;
49
+ }, z.core.$strip>;
50
+ declare const UpdateProductSchema: z.ZodObject<{
51
+ name: z.ZodOptional<z.ZodString>;
52
+ category: z.ZodOptional<z.ZodEnum<{
53
+ catheter: "catheter";
54
+ gel: "gel";
55
+ instillation: "instillation";
56
+ implant: "implant";
57
+ irrigation: "irrigation";
58
+ }>>;
59
+ catalogCode: z.ZodOptional<z.ZodString>;
60
+ isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
61
+ }, z.core.$strip>;
62
+
63
+ type Product = z.infer<typeof ProductSchema>;
64
+ type CreateProduct = z.infer<typeof CreateProductSchema>;
65
+ type UpdateProduct = z.infer<typeof UpdateProductSchema>;
66
+ type ProductCategory = z.infer<typeof ProductCategorySchema>;
67
+ type PaginationQuery = z.infer<typeof PaginationQuerySchema>;
68
+ type ApiError = z.infer<typeof ApiErrorSchema>;
69
+
70
+ export { type ApiError, ApiErrorSchema, type CreateProduct, CreateProductSchema, type PaginationQuery, PaginationQuerySchema, type Product, type ProductCategory, ProductCategorySchema, ProductSchema, type UpdateProduct, UpdateProductSchema, UuidSchema, registry };
@@ -0,0 +1,70 @@
1
+ import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi';
2
+ import { z } from 'zod';
3
+
4
+ declare const registry: OpenAPIRegistry;
5
+
6
+ declare const UuidSchema: z.ZodString;
7
+ declare const PaginationQuerySchema: z.ZodObject<{
8
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
9
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
10
+ }, z.core.$strip>;
11
+ declare const ApiErrorSchema: z.ZodObject<{
12
+ code: z.ZodString;
13
+ message: z.ZodString;
14
+ details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
15
+ }, z.core.$strip>;
16
+
17
+ declare const ProductCategorySchema: z.ZodEnum<{
18
+ catheter: "catheter";
19
+ gel: "gel";
20
+ instillation: "instillation";
21
+ implant: "implant";
22
+ irrigation: "irrigation";
23
+ }>;
24
+ declare const ProductSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ name: z.ZodString;
27
+ category: z.ZodEnum<{
28
+ catheter: "catheter";
29
+ gel: "gel";
30
+ instillation: "instillation";
31
+ implant: "implant";
32
+ irrigation: "irrigation";
33
+ }>;
34
+ catalogCode: z.ZodString;
35
+ isActive: z.ZodDefault<z.ZodBoolean>;
36
+ createdAt: z.ZodString;
37
+ }, z.core.$strip>;
38
+ declare const CreateProductSchema: z.ZodObject<{
39
+ name: z.ZodString;
40
+ category: z.ZodEnum<{
41
+ catheter: "catheter";
42
+ gel: "gel";
43
+ instillation: "instillation";
44
+ implant: "implant";
45
+ irrigation: "irrigation";
46
+ }>;
47
+ catalogCode: z.ZodString;
48
+ isActive: z.ZodDefault<z.ZodBoolean>;
49
+ }, z.core.$strip>;
50
+ declare const UpdateProductSchema: z.ZodObject<{
51
+ name: z.ZodOptional<z.ZodString>;
52
+ category: z.ZodOptional<z.ZodEnum<{
53
+ catheter: "catheter";
54
+ gel: "gel";
55
+ instillation: "instillation";
56
+ implant: "implant";
57
+ irrigation: "irrigation";
58
+ }>>;
59
+ catalogCode: z.ZodOptional<z.ZodString>;
60
+ isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
61
+ }, z.core.$strip>;
62
+
63
+ type Product = z.infer<typeof ProductSchema>;
64
+ type CreateProduct = z.infer<typeof CreateProductSchema>;
65
+ type UpdateProduct = z.infer<typeof UpdateProductSchema>;
66
+ type ProductCategory = z.infer<typeof ProductCategorySchema>;
67
+ type PaginationQuery = z.infer<typeof PaginationQuerySchema>;
68
+ type ApiError = z.infer<typeof ApiErrorSchema>;
69
+
70
+ export { type ApiError, ApiErrorSchema, type CreateProduct, CreateProductSchema, type PaginationQuery, PaginationQuerySchema, type Product, type ProductCategory, ProductCategorySchema, ProductSchema, type UpdateProduct, UpdateProductSchema, UuidSchema, registry };
package/dist/index.js ADDED
@@ -0,0 +1,198 @@
1
+ import { extendZodWithOpenApi, OpenAPIRegistry } from '@asteasolutions/zod-to-openapi';
2
+ import { z } from 'zod';
3
+
4
+ // src/schemas/registry.ts
5
+ extendZodWithOpenApi(z);
6
+ var registry = new OpenAPIRegistry();
7
+ var UuidSchema = registry.register(
8
+ "Uuid",
9
+ z.string().uuid().meta({ description: "UUID v4 format\u0131nda benzersiz kimlik", examples: ["123e4567-e89b-12d3-a456-426614174000"] })
10
+ );
11
+ var PaginationQuerySchema = registry.register(
12
+ "PaginationQuery",
13
+ z.object({
14
+ page: z.coerce.number().int().min(1).default(1).meta({ description: "Sayfa numaras\u0131" }),
15
+ limit: z.coerce.number().int().min(1).max(100).default(20).meta({ description: "Sayfa ba\u015F\u0131na kay\u0131t say\u0131s\u0131" })
16
+ })
17
+ );
18
+ var ApiErrorSchema = registry.register(
19
+ "ApiError",
20
+ z.object({
21
+ code: z.string().meta({ description: "Hata kodu", examples: ["VALIDATION_ERROR"] }),
22
+ message: z.string().meta({ description: "Hata mesaj\u0131" }),
23
+ details: z.record(z.string(), z.array(z.string())).optional().meta({ description: "Alan bazl\u0131 hata detaylar\u0131" })
24
+ })
25
+ );
26
+ var ProductCategorySchema = z.enum([
27
+ "catheter",
28
+ "gel",
29
+ "instillation",
30
+ "implant",
31
+ "irrigation"
32
+ ]);
33
+ var ProductSchema = registry.register(
34
+ "Product",
35
+ z.object({
36
+ id: z.string().uuid().meta({ description: "\xDCr\xFCn ID" }),
37
+ name: z.string().min(1).max(200).meta({ description: "\xDCr\xFCn ad\u0131", examples: ["LUBRAGEL"] }),
38
+ category: ProductCategorySchema.meta({ description: "\xDCr\xFCn kategorisi" }),
39
+ catalogCode: z.string().regex(/^[A-Z0-9-]+$/).meta({ description: "Katalog kodu", examples: ["LUB-006"] }),
40
+ isActive: z.boolean().default(true).meta({ description: "\xDCr\xFCn aktif mi?" }),
41
+ createdAt: z.string().datetime().meta({ description: "Olu\u015Fturulma tarihi" })
42
+ })
43
+ );
44
+ var CreateProductSchema = registry.register(
45
+ "CreateProduct",
46
+ ProductSchema.omit({ id: true, createdAt: true })
47
+ );
48
+ var UpdateProductSchema = registry.register(
49
+ "UpdateProduct",
50
+ CreateProductSchema.partial()
51
+ );
52
+ var ProductIdParam = z.object({
53
+ id: UuidSchema
54
+ });
55
+ registry.registerPath({
56
+ method: "get",
57
+ path: "/products",
58
+ tags: ["Products"],
59
+ summary: "\xDCr\xFCn listesi",
60
+ request: {
61
+ query: PaginationQuerySchema
62
+ },
63
+ responses: {
64
+ 200: {
65
+ description: "Ba\u015Far\u0131l\u0131",
66
+ content: {
67
+ "application/json": {
68
+ schema: z.object({
69
+ data: z.array(ProductSchema),
70
+ total: z.number().int(),
71
+ page: z.number().int(),
72
+ limit: z.number().int()
73
+ })
74
+ }
75
+ }
76
+ }
77
+ }
78
+ });
79
+ registry.registerPath({
80
+ method: "get",
81
+ path: "/products/{id}",
82
+ tags: ["Products"],
83
+ summary: "\xDCr\xFCn detay\u0131",
84
+ request: {
85
+ params: ProductIdParam
86
+ },
87
+ responses: {
88
+ 200: {
89
+ description: "Ba\u015Far\u0131l\u0131",
90
+ content: {
91
+ "application/json": {
92
+ schema: ProductSchema
93
+ }
94
+ }
95
+ },
96
+ 404: {
97
+ description: "\xDCr\xFCn bulunamad\u0131",
98
+ content: {
99
+ "application/json": {
100
+ schema: ApiErrorSchema
101
+ }
102
+ }
103
+ }
104
+ }
105
+ });
106
+ registry.registerPath({
107
+ method: "post",
108
+ path: "/products",
109
+ tags: ["Products"],
110
+ summary: "Yeni \xFCr\xFCn olu\u015Ftur",
111
+ request: {
112
+ body: {
113
+ content: {
114
+ "application/json": {
115
+ schema: CreateProductSchema
116
+ }
117
+ }
118
+ }
119
+ },
120
+ responses: {
121
+ 201: {
122
+ description: "Olu\u015Fturuldu",
123
+ content: {
124
+ "application/json": {
125
+ schema: ProductSchema
126
+ }
127
+ }
128
+ },
129
+ 400: {
130
+ description: "Validasyon hatas\u0131",
131
+ content: {
132
+ "application/json": {
133
+ schema: ApiErrorSchema
134
+ }
135
+ }
136
+ }
137
+ }
138
+ });
139
+ registry.registerPath({
140
+ method: "patch",
141
+ path: "/products/{id}",
142
+ tags: ["Products"],
143
+ summary: "\xDCr\xFCn g\xFCncelle",
144
+ request: {
145
+ params: ProductIdParam,
146
+ body: {
147
+ content: {
148
+ "application/json": {
149
+ schema: UpdateProductSchema
150
+ }
151
+ }
152
+ }
153
+ },
154
+ responses: {
155
+ 200: {
156
+ description: "G\xFCncellendi",
157
+ content: {
158
+ "application/json": {
159
+ schema: ProductSchema
160
+ }
161
+ }
162
+ },
163
+ 404: {
164
+ description: "\xDCr\xFCn bulunamad\u0131",
165
+ content: {
166
+ "application/json": {
167
+ schema: ApiErrorSchema
168
+ }
169
+ }
170
+ }
171
+ }
172
+ });
173
+ registry.registerPath({
174
+ method: "delete",
175
+ path: "/products/{id}",
176
+ tags: ["Products"],
177
+ summary: "\xDCr\xFCn sil",
178
+ request: {
179
+ params: ProductIdParam
180
+ },
181
+ responses: {
182
+ 204: {
183
+ description: "Silindi"
184
+ },
185
+ 404: {
186
+ description: "\xDCr\xFCn bulunamad\u0131",
187
+ content: {
188
+ "application/json": {
189
+ schema: ApiErrorSchema
190
+ }
191
+ }
192
+ }
193
+ }
194
+ });
195
+
196
+ export { ApiErrorSchema, CreateProductSchema, PaginationQuerySchema, ProductCategorySchema, ProductSchema, UpdateProductSchema, UuidSchema, registry };
197
+ //# sourceMappingURL=index.js.map
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/registry.ts","../src/schemas/common.ts","../src/schemas/product.ts","../src/schemas/product.paths.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { extendZodWithOpenApi, OpenAPIRegistry } from '@asteasolutions/zod-to-openapi';\nimport { z } from 'zod';\n\n// Zod'a .openapi() metodunu ekler — tüm schema dosyalarından önce çalışmalı\nextendZodWithOpenApi(z);\n\nexport const registry = new OpenAPIRegistry();\n","import { z } from 'zod';\nimport { registry } from './registry.js';\n\nexport const UuidSchema = registry.register(\n 'Uuid',\n z.string().uuid().meta({ description: 'UUID v4 formatında benzersiz kimlik', examples: ['123e4567-e89b-12d3-a456-426614174000'] })\n);\n\nexport const PaginationQuerySchema = registry.register(\n 'PaginationQuery',\n z.object({\n page: z.coerce.number().int().min(1).default(1).meta({ description: 'Sayfa numarası' }),\n limit: z.coerce.number().int().min(1).max(100).default(20).meta({ description: 'Sayfa başına kayıt sayısı' }),\n })\n);\n\nexport const ApiErrorSchema = registry.register(\n 'ApiError',\n z.object({\n code: z.string().meta({ description: 'Hata kodu', examples: ['VALIDATION_ERROR'] }),\n message: z.string().meta({ description: 'Hata mesajı' }),\n details: z.record(z.string(), z.array(z.string())).optional().meta({ description: 'Alan bazlı hata detayları' }),\n })\n);\n","import { z } from 'zod';\nimport { registry } from './registry.js';\n\nexport const ProductCategorySchema = z.enum([\n 'catheter',\n 'gel',\n 'instillation',\n 'implant',\n 'irrigation',\n]);\n\nexport const ProductSchema = registry.register(\n 'Product',\n z.object({\n id: z.string().uuid().meta({ description: 'Ürün ID' }),\n name: z.string().min(1).max(200).meta({ description: 'Ürün adı', examples: ['LUBRAGEL'] }),\n category: ProductCategorySchema.meta({ description: 'Ürün kategorisi' }),\n catalogCode: z.string().regex(/^[A-Z0-9-]+$/).meta({ description: 'Katalog kodu', examples: ['LUB-006'] }),\n isActive: z.boolean().default(true).meta({ description: 'Ürün aktif mi?' }),\n createdAt: z.string().datetime().meta({ description: 'Oluşturulma tarihi' }),\n })\n);\n\nexport const CreateProductSchema = registry.register(\n 'CreateProduct',\n ProductSchema.omit({ id: true, createdAt: true })\n);\n\nexport const UpdateProductSchema = registry.register(\n 'UpdateProduct',\n CreateProductSchema.partial()\n);\n","import { z } from 'zod';\nimport { registry } from './registry.js';\nimport {\n ProductSchema,\n CreateProductSchema,\n UpdateProductSchema,\n} from './product.js';\nimport { PaginationQuerySchema, ApiErrorSchema, UuidSchema } from './common.js';\n\nconst ProductIdParam = z.object({\n id: UuidSchema,\n});\n\n// GET /products\nregistry.registerPath({\n method: 'get',\n path: '/products',\n tags: ['Products'],\n summary: 'Ürün listesi',\n request: {\n query: PaginationQuerySchema,\n },\n responses: {\n 200: {\n description: 'Başarılı',\n content: {\n 'application/json': {\n schema: z.object({\n data: z.array(ProductSchema),\n total: z.number().int(),\n page: z.number().int(),\n limit: z.number().int(),\n }),\n },\n },\n },\n },\n});\n\n// GET /products/:id\nregistry.registerPath({\n method: 'get',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün detayı',\n request: {\n params: ProductIdParam,\n },\n responses: {\n 200: {\n description: 'Başarılı',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// POST /products\nregistry.registerPath({\n method: 'post',\n path: '/products',\n tags: ['Products'],\n summary: 'Yeni ürün oluştur',\n request: {\n body: {\n content: {\n 'application/json': {\n schema: CreateProductSchema,\n },\n },\n },\n },\n responses: {\n 201: {\n description: 'Oluşturuldu',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 400: {\n description: 'Validasyon hatası',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// PATCH /products/:id\nregistry.registerPath({\n method: 'patch',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün güncelle',\n request: {\n params: ProductIdParam,\n body: {\n content: {\n 'application/json': {\n schema: UpdateProductSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n description: 'Güncellendi',\n content: {\n 'application/json': {\n schema: ProductSchema,\n },\n },\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n\n// DELETE /products/:id\nregistry.registerPath({\n method: 'delete',\n path: '/products/{id}',\n tags: ['Products'],\n summary: 'Ürün sil',\n request: {\n params: ProductIdParam,\n },\n responses: {\n 204: {\n description: 'Silindi',\n },\n 404: {\n description: 'Ürün bulunamadı',\n content: {\n 'application/json': {\n schema: ApiErrorSchema,\n },\n },\n },\n },\n});\n"]}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@ssyazilim/ss-shopping-schemas",
3
+ "version": "0.1.1",
4
+ "description": "Shared Zod schemas and TypeScript types for Istem Medikal projects",
5
+ "author": "Istem Medikal A.S.",
6
+ "license": "UNLICENSED",
7
+ "publishConfig": {
8
+ "registry": "https://registry.npmjs.org",
9
+ "access": "public"
10
+ },
11
+ "type": "module",
12
+ "main": "./dist/index.cjs",
13
+ "module": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "import": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "require": {
22
+ "types": "./dist/index.d.cts",
23
+ "default": "./dist/index.cjs"
24
+ }
25
+ },
26
+ "./forms": {
27
+ "import": {
28
+ "types": "./dist/forms/index.d.ts",
29
+ "default": "./dist/forms/index.js"
30
+ },
31
+ "require": {
32
+ "types": "./dist/forms/index.d.cts",
33
+ "default": "./dist/forms/index.cjs"
34
+ }
35
+ }
36
+ },
37
+ "files": [
38
+ "dist"
39
+ ],
40
+ "scripts": {
41
+ "build": "tsup",
42
+ "build:watch": "tsup --watch",
43
+ "test": "vitest run",
44
+ "test:watch": "vitest",
45
+ "typecheck": "tsc --noEmit",
46
+ "generate:openapi": "tsx src/openapi/generate.ts"
47
+ },
48
+ "dependencies": {
49
+ "@asteasolutions/zod-to-openapi": "^8.5.0",
50
+ "zod": "^4.4.3"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^25.6.0",
54
+ "tsup": "^8.5.1",
55
+ "tsx": "^4.21.0",
56
+ "typescript": "^6.0.3",
57
+ "vitest": "^4.1.5"
58
+ }
59
+ }