nextjs-cms 0.0.1 → 0.5.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.
Files changed (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -0
  3. package/dist/api/axios/axiosInstance.d.ts +2 -0
  4. package/dist/api/axios/axiosInstance.d.ts.map +1 -0
  5. package/dist/api/axios/axiosInstance.js +8 -0
  6. package/dist/api/index.d.ts +856 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js +12 -0
  9. package/dist/api/lib/serverActions.d.ts +240 -0
  10. package/dist/api/lib/serverActions.d.ts.map +1 -0
  11. package/dist/api/lib/serverActions.js +834 -0
  12. package/dist/api/root.d.ts +829 -0
  13. package/dist/api/root.d.ts.map +1 -0
  14. package/dist/api/root.js +30 -0
  15. package/dist/api/routers/accountSettings.d.ts +61 -0
  16. package/dist/api/routers/accountSettings.d.ts.map +1 -0
  17. package/dist/api/routers/accountSettings.js +108 -0
  18. package/dist/api/routers/admins.d.ts +106 -0
  19. package/dist/api/routers/admins.d.ts.map +1 -0
  20. package/dist/api/routers/admins.js +219 -0
  21. package/dist/api/routers/auth.d.ts +48 -0
  22. package/dist/api/routers/auth.d.ts.map +1 -0
  23. package/dist/api/routers/auth.js +25 -0
  24. package/dist/api/routers/categorySection.d.ts +104 -0
  25. package/dist/api/routers/categorySection.d.ts.map +1 -0
  26. package/dist/api/routers/categorySection.js +38 -0
  27. package/dist/api/routers/cmsSettings.d.ts +49 -0
  28. package/dist/api/routers/cmsSettings.d.ts.map +1 -0
  29. package/dist/api/routers/cmsSettings.js +51 -0
  30. package/dist/api/routers/cpanel.d.ts +84 -0
  31. package/dist/api/routers/cpanel.d.ts.map +1 -0
  32. package/dist/api/routers/cpanel.js +216 -0
  33. package/dist/api/routers/files.d.ts +48 -0
  34. package/dist/api/routers/files.d.ts.map +1 -0
  35. package/dist/api/routers/files.js +23 -0
  36. package/dist/api/routers/gallery.d.ts +36 -0
  37. package/dist/api/routers/gallery.d.ts.map +1 -0
  38. package/dist/api/routers/gallery.js +62 -0
  39. package/dist/api/routers/googleAnalytics.d.ts +31 -0
  40. package/dist/api/routers/googleAnalytics.d.ts.map +1 -0
  41. package/dist/api/routers/googleAnalytics.js +7 -0
  42. package/dist/api/routers/hasItemsSection.d.ts +140 -0
  43. package/dist/api/routers/hasItemsSection.d.ts.map +1 -0
  44. package/dist/api/routers/hasItemsSection.js +34 -0
  45. package/dist/api/routers/navigation.d.ts +52 -0
  46. package/dist/api/routers/navigation.d.ts.map +1 -0
  47. package/dist/api/routers/navigation.js +11 -0
  48. package/dist/api/routers/simpleSection.d.ts +58 -0
  49. package/dist/api/routers/simpleSection.d.ts.map +1 -0
  50. package/dist/api/routers/simpleSection.js +12 -0
  51. package/dist/api/trpc.d.ts +107 -0
  52. package/dist/api/trpc.d.ts.map +1 -0
  53. package/dist/api/trpc.js +72 -0
  54. package/dist/auth/axios/axiosInstance.d.ts +2 -0
  55. package/dist/auth/axios/axiosInstance.d.ts.map +1 -0
  56. package/dist/auth/axios/axiosInstance.js +8 -0
  57. package/dist/auth/csrf.d.ts +30 -0
  58. package/dist/auth/csrf.d.ts.map +1 -0
  59. package/dist/auth/csrf.js +76 -0
  60. package/dist/auth/hooks/index.d.ts +4 -0
  61. package/dist/auth/hooks/index.d.ts.map +1 -0
  62. package/dist/auth/hooks/index.js +3 -0
  63. package/dist/auth/hooks/useAxiosPrivate.d.ts +5 -0
  64. package/dist/auth/hooks/useAxiosPrivate.d.ts.map +1 -0
  65. package/dist/auth/hooks/useAxiosPrivate.js +74 -0
  66. package/dist/auth/hooks/useRefreshToken.d.ts +7 -0
  67. package/dist/auth/hooks/useRefreshToken.d.ts.map +1 -0
  68. package/dist/auth/hooks/useRefreshToken.js +79 -0
  69. package/dist/auth/index.d.ts +23 -0
  70. package/dist/auth/index.d.ts.map +1 -0
  71. package/dist/auth/index.js +44 -0
  72. package/dist/auth/jwt.d.ts +6 -0
  73. package/dist/auth/jwt.d.ts.map +1 -0
  74. package/dist/auth/jwt.js +25 -0
  75. package/dist/auth/lib/actions.d.ts +33 -0
  76. package/dist/auth/lib/actions.d.ts.map +1 -0
  77. package/dist/auth/lib/actions.js +209 -0
  78. package/dist/auth/lib/client.d.ts +4 -0
  79. package/dist/auth/lib/client.d.ts.map +1 -0
  80. package/dist/auth/lib/client.js +46 -0
  81. package/dist/auth/lib/index.d.ts +3 -0
  82. package/dist/auth/lib/index.d.ts.map +1 -0
  83. package/dist/auth/lib/index.js +2 -0
  84. package/dist/auth/react.d.ts +106 -0
  85. package/dist/auth/react.d.ts.map +1 -0
  86. package/dist/auth/react.js +347 -0
  87. package/dist/auth/trpc.d.ts +6 -0
  88. package/dist/auth/trpc.d.ts.map +1 -0
  89. package/dist/auth/trpc.js +81 -0
  90. package/dist/core/config/config-loader.d.ts +92 -0
  91. package/dist/core/config/config-loader.d.ts.map +1 -0
  92. package/dist/core/config/config-loader.js +230 -0
  93. package/dist/core/config/index.d.ts +3 -0
  94. package/dist/core/config/index.d.ts.map +1 -0
  95. package/dist/core/config/index.js +1 -0
  96. package/dist/core/config/loader.d.ts +2 -0
  97. package/dist/core/config/loader.d.ts.map +1 -0
  98. package/dist/core/config/loader.js +42 -0
  99. package/dist/core/db/index.d.ts +2 -0
  100. package/dist/core/db/index.d.ts.map +1 -0
  101. package/dist/core/db/index.js +1 -0
  102. package/dist/core/db/table-checker/DbTable.d.ts +6 -0
  103. package/dist/core/db/table-checker/DbTable.d.ts.map +1 -0
  104. package/dist/core/db/table-checker/DbTable.js +5 -0
  105. package/dist/core/db/table-checker/MysqlTable.d.ts +34 -0
  106. package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -0
  107. package/dist/core/db/table-checker/MysqlTable.js +102 -0
  108. package/dist/core/db/table-checker/index.d.ts +2 -0
  109. package/dist/core/db/table-checker/index.d.ts.map +1 -0
  110. package/dist/core/db/table-checker/index.js +1 -0
  111. package/dist/core/factories/FieldFactory.d.ts +124 -0
  112. package/dist/core/factories/FieldFactory.d.ts.map +1 -0
  113. package/dist/core/factories/FieldFactory.js +411 -0
  114. package/dist/core/factories/SectionFactory.d.ts +110 -0
  115. package/dist/core/factories/SectionFactory.d.ts.map +1 -0
  116. package/dist/core/factories/SectionFactory.js +415 -0
  117. package/dist/core/factories/index.d.ts +3 -0
  118. package/dist/core/factories/index.d.ts.map +1 -0
  119. package/dist/core/factories/index.js +2 -0
  120. package/dist/core/fields/checkbox.d.ts +63 -0
  121. package/dist/core/fields/checkbox.d.ts.map +1 -0
  122. package/dist/core/fields/checkbox.js +62 -0
  123. package/dist/core/fields/color.d.ts +84 -0
  124. package/dist/core/fields/color.d.ts.map +1 -0
  125. package/dist/core/fields/color.js +91 -0
  126. package/dist/core/fields/date.d.ts +100 -0
  127. package/dist/core/fields/date.d.ts.map +1 -0
  128. package/dist/core/fields/date.js +108 -0
  129. package/dist/core/fields/document.d.ts +180 -0
  130. package/dist/core/fields/document.d.ts.map +1 -0
  131. package/dist/core/fields/document.js +277 -0
  132. package/dist/core/fields/field-group.d.ts +18 -0
  133. package/dist/core/fields/field-group.d.ts.map +1 -0
  134. package/dist/core/fields/field-group.js +6 -0
  135. package/dist/core/fields/field.d.ts +126 -0
  136. package/dist/core/fields/field.d.ts.map +1 -0
  137. package/dist/core/fields/field.js +148 -0
  138. package/dist/core/fields/fileField.d.ts +15 -0
  139. package/dist/core/fields/fileField.d.ts.map +1 -0
  140. package/dist/core/fields/fileField.js +5 -0
  141. package/dist/core/fields/index.d.ts +65 -0
  142. package/dist/core/fields/index.d.ts.map +1 -0
  143. package/dist/core/fields/index.js +18 -0
  144. package/dist/core/fields/map.d.ts +167 -0
  145. package/dist/core/fields/map.d.ts.map +1 -0
  146. package/dist/core/fields/map.js +152 -0
  147. package/dist/core/fields/number.d.ts +186 -0
  148. package/dist/core/fields/number.d.ts.map +1 -0
  149. package/dist/core/fields/number.js +241 -0
  150. package/dist/core/fields/password.d.ts +109 -0
  151. package/dist/core/fields/password.d.ts.map +1 -0
  152. package/dist/core/fields/password.js +133 -0
  153. package/dist/core/fields/photo.d.ts +289 -0
  154. package/dist/core/fields/photo.d.ts.map +1 -0
  155. package/dist/core/fields/photo.js +410 -0
  156. package/dist/core/fields/richText.d.ts +295 -0
  157. package/dist/core/fields/richText.d.ts.map +1 -0
  158. package/dist/core/fields/richText.js +338 -0
  159. package/dist/core/fields/select.d.ts +366 -0
  160. package/dist/core/fields/select.d.ts.map +1 -0
  161. package/dist/core/fields/select.js +499 -0
  162. package/dist/core/fields/selectMultiple.d.ts +236 -0
  163. package/dist/core/fields/selectMultiple.d.ts.map +1 -0
  164. package/dist/core/fields/selectMultiple.js +417 -0
  165. package/dist/core/fields/tags.d.ts +131 -0
  166. package/dist/core/fields/tags.d.ts.map +1 -0
  167. package/dist/core/fields/tags.js +105 -0
  168. package/dist/core/fields/text.d.ts +136 -0
  169. package/dist/core/fields/text.d.ts.map +1 -0
  170. package/dist/core/fields/text.js +157 -0
  171. package/dist/core/fields/textArea.d.ts +107 -0
  172. package/dist/core/fields/textArea.d.ts.map +1 -0
  173. package/dist/core/fields/textArea.js +126 -0
  174. package/dist/core/fields/video.d.ts +148 -0
  175. package/dist/core/fields/video.d.ts.map +1 -0
  176. package/dist/core/fields/video.js +248 -0
  177. package/dist/core/helpers/entity.d.ts +8 -0
  178. package/dist/core/helpers/entity.d.ts.map +1 -0
  179. package/dist/core/helpers/entity.js +27 -0
  180. package/dist/core/helpers/index.d.ts +5 -0
  181. package/dist/core/helpers/index.d.ts.map +1 -0
  182. package/dist/core/helpers/index.js +3 -0
  183. package/dist/core/index.d.ts +8 -0
  184. package/dist/core/index.d.ts.map +1 -0
  185. package/dist/core/index.js +7 -0
  186. package/dist/core/sections/category.d.ts +283 -0
  187. package/dist/core/sections/category.d.ts.map +1 -0
  188. package/dist/core/sections/category.js +147 -0
  189. package/dist/core/sections/hasItems.d.ts +632 -0
  190. package/dist/core/sections/hasItems.d.ts.map +1 -0
  191. package/dist/core/sections/hasItems.js +144 -0
  192. package/dist/core/sections/index.d.ts +5 -0
  193. package/dist/core/sections/index.d.ts.map +1 -0
  194. package/dist/core/sections/index.js +4 -0
  195. package/dist/core/sections/section.d.ts +226 -0
  196. package/dist/core/sections/section.d.ts.map +1 -0
  197. package/dist/core/sections/section.js +341 -0
  198. package/dist/core/sections/simple.d.ts +99 -0
  199. package/dist/core/sections/simple.d.ts.map +1 -0
  200. package/dist/core/sections/simple.js +95 -0
  201. package/dist/core/security/dom.d.ts +11 -0
  202. package/dist/core/security/dom.d.ts.map +1 -0
  203. package/dist/core/security/dom.js +92 -0
  204. package/dist/core/submit/ItemEditSubmit.d.ts +76 -0
  205. package/dist/core/submit/ItemEditSubmit.d.ts.map +1 -0
  206. package/dist/core/submit/ItemEditSubmit.js +186 -0
  207. package/dist/core/submit/NewItemSubmit.d.ts +14 -0
  208. package/dist/core/submit/NewItemSubmit.d.ts.map +1 -0
  209. package/dist/core/submit/NewItemSubmit.js +93 -0
  210. package/dist/core/submit/SimpleSectionSubmit.d.ts +13 -0
  211. package/dist/core/submit/SimpleSectionSubmit.d.ts.map +1 -0
  212. package/dist/core/submit/SimpleSectionSubmit.js +93 -0
  213. package/dist/core/submit/index.d.ts +5 -0
  214. package/dist/core/submit/index.d.ts.map +1 -0
  215. package/dist/core/submit/index.js +4 -0
  216. package/dist/core/submit/submit.d.ts +116 -0
  217. package/dist/core/submit/submit.d.ts.map +1 -0
  218. package/dist/core/submit/submit.js +479 -0
  219. package/dist/core/types/index.d.ts +280 -0
  220. package/dist/core/types/index.d.ts.map +1 -0
  221. package/dist/core/types/index.js +1 -0
  222. package/dist/db/client.d.ts +9 -0
  223. package/dist/db/client.d.ts.map +1 -0
  224. package/dist/db/client.js +19 -0
  225. package/dist/db/config.d.ts +6 -0
  226. package/dist/db/config.d.ts.map +1 -0
  227. package/dist/db/config.js +22 -0
  228. package/dist/db/drizzle.config.d.ts +6 -0
  229. package/dist/db/drizzle.config.d.ts.map +1 -0
  230. package/dist/db/drizzle.config.js +18 -0
  231. package/dist/db/index.d.ts +3 -0
  232. package/dist/db/index.d.ts.map +1 -0
  233. package/dist/db/index.js +3 -0
  234. package/dist/db/schema.d.ts +639 -0
  235. package/dist/db/schema.d.ts.map +1 -0
  236. package/dist/db/schema.js +73 -0
  237. package/dist/index.d.ts +7 -1
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +7 -1
  240. package/dist/translations/dictionaries/ar.json +279 -0
  241. package/dist/translations/dictionaries/en.json +279 -0
  242. package/dist/translations/index.d.ts +3 -0
  243. package/dist/translations/index.d.ts.map +1 -0
  244. package/dist/translations/index.js +15 -0
  245. package/dist/utils/CpanelApi.d.ts +25 -0
  246. package/dist/utils/CpanelApi.d.ts.map +1 -0
  247. package/dist/utils/CpanelApi.js +64 -0
  248. package/dist/utils/constants.d.ts +14 -0
  249. package/dist/utils/constants.d.ts.map +1 -0
  250. package/dist/utils/constants.js +61 -0
  251. package/dist/utils/index.d.ts +5 -0
  252. package/dist/utils/index.d.ts.map +1 -0
  253. package/dist/utils/index.js +4 -0
  254. package/dist/utils/utils.d.ts +60 -0
  255. package/dist/utils/utils.d.ts.map +1 -0
  256. package/dist/utils/utils.js +132 -0
  257. package/dist/validators/checkbox.d.ts +4 -0
  258. package/dist/validators/checkbox.d.ts.map +1 -0
  259. package/dist/validators/checkbox.js +12 -0
  260. package/dist/validators/color.d.ts +4 -0
  261. package/dist/validators/color.d.ts.map +1 -0
  262. package/dist/validators/color.js +7 -0
  263. package/dist/validators/date.d.ts +4 -0
  264. package/dist/validators/date.d.ts.map +1 -0
  265. package/dist/validators/date.js +5 -0
  266. package/dist/validators/document.d.ts +4 -0
  267. package/dist/validators/document.d.ts.map +1 -0
  268. package/dist/validators/document.js +57 -0
  269. package/dist/validators/index.d.ts +15 -0
  270. package/dist/validators/index.d.ts.map +1 -0
  271. package/dist/validators/index.js +14 -0
  272. package/dist/validators/map.d.ts +4 -0
  273. package/dist/validators/map.d.ts.map +1 -0
  274. package/dist/validators/map.js +5 -0
  275. package/dist/validators/number.d.ts +4 -0
  276. package/dist/validators/number.d.ts.map +1 -0
  277. package/dist/validators/number.js +20 -0
  278. package/dist/validators/password.d.ts +4 -0
  279. package/dist/validators/password.d.ts.map +1 -0
  280. package/dist/validators/password.js +11 -0
  281. package/dist/validators/photo.d.ts +4 -0
  282. package/dist/validators/photo.d.ts.map +1 -0
  283. package/dist/validators/photo.js +100 -0
  284. package/dist/validators/richText.d.ts +4 -0
  285. package/dist/validators/richText.d.ts.map +1 -0
  286. package/dist/validators/richText.js +8 -0
  287. package/dist/validators/select-multiple.d.ts +10 -0
  288. package/dist/validators/select-multiple.d.ts.map +1 -0
  289. package/dist/validators/select-multiple.js +20 -0
  290. package/dist/validators/select.d.ts +4 -0
  291. package/dist/validators/select.d.ts.map +1 -0
  292. package/dist/validators/select.js +5 -0
  293. package/dist/validators/text.d.ts +4 -0
  294. package/dist/validators/text.d.ts.map +1 -0
  295. package/dist/validators/text.js +7 -0
  296. package/dist/validators/textarea.d.ts +4 -0
  297. package/dist/validators/textarea.d.ts.map +1 -0
  298. package/dist/validators/textarea.js +7 -0
  299. package/dist/validators/video.d.ts +4 -0
  300. package/dist/validators/video.d.ts.map +1 -0
  301. package/dist/validators/video.js +57 -0
  302. package/package.json +150 -6
@@ -0,0 +1,132 @@
1
+ import { arabicMonths, arabicWeekDays } from './constants';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ /**
5
+ * Function to merge Tailwind CSS classes
6
+ * @param inputs
7
+ */
8
+ export function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ /**
12
+ * Function to sanitize folder names
13
+ * @param string
14
+ */
15
+ export const sanitizeFolderOrFileName = (string) => {
16
+ // Replace any character that is not a letter, number, hyphen, or underscore with an empty string
17
+ return string.replace(/[^a-zA-Z0-9-_]/g, '');
18
+ };
19
+ /**
20
+ * Function to sanitize file names
21
+ * @param string
22
+ */
23
+ export const sanitizeFileName = (string) => {
24
+ // Replace any character that is not a letter, number, hyphen, underscore or a dot with an empty string
25
+ return string.replace(/[^a-zA-Z0-9-_.]/g, '');
26
+ };
27
+ /**
28
+ * Function to format a number with commas
29
+ * @param number
30
+ */
31
+ export const formatNumber = (number) => {
32
+ return Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(number);
33
+ };
34
+ // Nice approach too!
35
+ /*export const b64toBlob = (base64: string, contentType = 'application/octet-stream') =>
36
+ fetch(`data:${contentType};base64,${base64}`).then((res) => res.blob())*/
37
+ /**
38
+ * Function to convert a base64 string to a Blob
39
+ * @param base64
40
+ * @param contentType
41
+ * @param stripHeader
42
+ */
43
+ export function base64ToBlob({ base64, contentType, stripHeader, }) {
44
+ if (stripHeader) {
45
+ // remove data:image/*;base64 at the beginning of the string
46
+ base64 = base64.split(',')[1] || base64;
47
+ }
48
+ try {
49
+ const binaryString = atob(base64);
50
+ const len = binaryString.length;
51
+ const bytes = new Uint8Array(len);
52
+ for (let i = 0; i < len; i++) {
53
+ bytes[i] = binaryString.charCodeAt(i);
54
+ }
55
+ return new Blob([bytes], { type: contentType });
56
+ }
57
+ catch (e) {
58
+ return new Blob();
59
+ }
60
+ }
61
+ /**
62
+ * Function to display a date in a human-readable format from a string
63
+ * @param string
64
+ * @param lang
65
+ * @param displayWeekday
66
+ * @param separator
67
+ */
68
+ export const displayDateFromString = (string, lang, displayWeekday, separator) => {
69
+ const date = new Date(string);
70
+ return displayDateFromDate(date, lang, displayWeekday, separator);
71
+ };
72
+ /**
73
+ * Function to display a date in a human-readable format from a Date object
74
+ * @param date
75
+ * @param lang
76
+ * @param displayWeekday
77
+ * @param separator
78
+ */
79
+ export const displayDateFromDate = (date, lang, displayWeekday, separator) => {
80
+ const month = date.toLocaleString('en-US', { month: 'short' });
81
+ const weekDay = date.toLocaleString('en-US', { weekday: 'short' });
82
+ const day = date.toLocaleString('en-US', { day: '2-digit' });
83
+ const year = date.getFullYear();
84
+ let result = '';
85
+ if (separator === ',') {
86
+ result = `${lang === 'ar' ? arabicMonths[month] : month} ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day}, ${year}`;
87
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
88
+ }
89
+ else if (separator === '/') {
90
+ result = `${lang === 'ar' ? arabicMonths[month] : month} / ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day} / ${year}`;
91
+ }
92
+ return result;
93
+ };
94
+ /**
95
+ * Function to capitalize the first letter of a string or all words
96
+ * @param input
97
+ * @param allWords
98
+ */
99
+ export function capitalizeWords(input, allWords = true) {
100
+ if (allWords) {
101
+ // Capitalize all words
102
+ return input
103
+ .split(' ')
104
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
105
+ .join(' ');
106
+ }
107
+ else {
108
+ // Capitalize only the first word
109
+ return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();
110
+ }
111
+ }
112
+ /**
113
+ * Function to display a file size in a human-readable format
114
+ * @param sizeInBytes
115
+ */
116
+ export function humanReadableFileSize(sizeInBytes, decimals = 2) {
117
+ const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
118
+ let index = 0;
119
+ // Scale down the size until it's less than 1024
120
+ while (sizeInBytes >= 1024 && index < units.length - 1) {
121
+ sizeInBytes /= 1024;
122
+ index++;
123
+ }
124
+ // Handle zero case
125
+ if (sizeInBytes === 0) {
126
+ return `0 ${units[index]}`;
127
+ }
128
+ // Round to specified decimal places and remove trailing zeros
129
+ const formatted = sizeInBytes.toFixed(decimals);
130
+ const withoutTrailingZeros = parseFloat(formatted).toString();
131
+ return `${withoutTrailingZeros} ${units[index]}`;
132
+ }
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { CheckboxFieldClientConfig } from '../core/fields';
3
+ export declare const checkboxFieldSchema: (field: CheckboxFieldClientConfig) => z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodBoolean>>;
4
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/validators/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,oFASnE,CAAA"}
@@ -0,0 +1,12 @@
1
+ import * as z from 'zod';
2
+ export const checkboxFieldSchema = (field) => {
3
+ // Normalize typical form values
4
+ const normalized = z.preprocess((v) => {
5
+ if (v === 'on')
6
+ return true; // HTML checked checkbox
7
+ if (v === '' || v === null)
8
+ return undefined; // treat as missing
9
+ return v;
10
+ }, z.boolean().optional());
11
+ return field.required ? normalized.refine((v) => v === true, { message: 'Checkbox is required' }) : normalized; // allows undefined (unchecked) or a boolean if sent explicitly
12
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { ColorFieldClientConfig } from '../core/fields';
3
+ export declare const colorFieldSchema: (field: ColorFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/validators/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE5D,eAAO,MAAM,gBAAgB,GAAI,OAAO,sBAAsB,sFAM7D,CAAA"}
@@ -0,0 +1,7 @@
1
+ import * as z from 'zod';
2
+ export const colorFieldSchema = (field) => {
3
+ const base = z.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, {
4
+ message: 'Invalid color format, must be in hex format (#xxxxxx or #xxx)',
5
+ });
6
+ return field.required ? base : z.union([z.literal(''), base]).optional();
7
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { DateFieldClientConfig } from '../core/fields';
3
+ export declare const dateFieldSchema: (field: DateFieldClientConfig) => z.ZodDate | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodDate]>>;
4
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,eAAO,MAAM,eAAe,GAAI,OAAO,qBAAqB,kFAI3D,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as z from 'zod';
2
+ export const dateFieldSchema = (field) => {
3
+ const base = z.date();
4
+ return field.required ? base : z.union([z.literal(''), base]).optional();
5
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { DocumentFieldClientConfig } from '../core/fields';
3
+ export declare const documentFieldSchema: (field: DocumentFieldClientConfig) => z.ZodCustom<File, File> | z.ZodOptional<z.ZodUnion<readonly [z.ZodNull, z.ZodUndefined, z.ZodCustom<File, File>]>>;
4
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/validators/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,uHA4DnE,CAAA"}
@@ -0,0 +1,57 @@
1
+ import * as z from 'zod';
2
+ export const documentFieldSchema = (field) => {
3
+ /**
4
+ * Construct a custom schema for the photo field
5
+ */
6
+ const base = z.instanceof(File).superRefine(async (file, ctx) => {
7
+ if (!file) {
8
+ // If empty but the field is required, add an issue
9
+ if (field.required) {
10
+ ctx.addIssue({
11
+ code: z.ZodIssueCode.custom,
12
+ message: 'No file selected',
13
+ });
14
+ }
15
+ return; // If it's not required, do nothing (no issue).
16
+ }
17
+ /**
18
+ * File extension
19
+ */
20
+ if (!field.extensions.includes(file.name.split('.').pop())) {
21
+ ctx.addIssue({
22
+ code: z.ZodIssueCode.custom,
23
+ message: `Invalid file extension. Supported extensions are: ${field.extensions.join(', ')}`,
24
+ });
25
+ }
26
+ /**
27
+ * File size
28
+ * SECURITY: We read the actual blob size instead of relying on file.size
29
+ * property, which can be overridden using Object.defineProperty()
30
+ */
31
+ const actualSize = await file.arrayBuffer().then((buf) => buf.byteLength);
32
+ const maxSizeBytes = field.maxFileSize.size * (field.maxFileSize.unit === 'kb' ? 1024 : 1024 * 1024);
33
+ if (actualSize > maxSizeBytes) {
34
+ ctx.addIssue({
35
+ code: 'too_big',
36
+ maximum: maxSizeBytes,
37
+ origin: 'number',
38
+ inclusive: true,
39
+ type: 'number',
40
+ message: `File size should not exceed the maximum allowed size of ${field.maxFileSize.size} ${field.maxFileSize.unit}`,
41
+ });
42
+ }
43
+ /**
44
+ * Mime types
45
+ */
46
+ if (!field.mimeType.includes(file.type)) {
47
+ ctx.addIssue({
48
+ code: 'custom',
49
+ message: `Invalid file type. Supported types are: ${field.mimeType.join(', ')}`,
50
+ });
51
+ }
52
+ });
53
+ /**
54
+ * If not required, allow `undefined` (meaning "no file was provided at all").
55
+ */
56
+ return field.required ? base : z.union([z.null(), z.undefined(), base]).optional();
57
+ };
@@ -0,0 +1,15 @@
1
+ export * from './checkbox';
2
+ export * from './color';
3
+ export * from './date';
4
+ export * from './document';
5
+ export * from './map';
6
+ export * from './number';
7
+ export * from './password';
8
+ export * from './photo';
9
+ export * from './richText';
10
+ export * from './select';
11
+ export * from './select-multiple';
12
+ export * from './text';
13
+ export * from './textarea';
14
+ export * from './video';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
@@ -0,0 +1,14 @@
1
+ export * from './checkbox';
2
+ export * from './color';
3
+ export * from './date';
4
+ export * from './document';
5
+ export * from './map';
6
+ export * from './number';
7
+ export * from './password';
8
+ export * from './photo';
9
+ export * from './richText';
10
+ export * from './select';
11
+ export * from './select-multiple';
12
+ export * from './text';
13
+ export * from './textarea';
14
+ export * from './video';
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { MapFieldClientConfig } from '../core/fields';
3
+ export declare const mapFieldSchema: (field: MapFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/validators/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAE1D,eAAO,MAAM,cAAc,GAAI,OAAO,oBAAoB,sFAIzD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as z from 'zod';
2
+ export const mapFieldSchema = (field) => {
3
+ const base = z.string().regex(/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/);
4
+ return field.required ? base : z.union([z.literal(''), base]).optional();
5
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { NumberFieldClientConfig } from '../core/fields';
3
+ export declare const numberFieldSchema: (field: NumberFieldClientConfig) => z.ZodNumber | z.ZodOptional<z.ZodUnion<readonly [z.ZodUndefined, z.ZodNull, z.ZodLiteral<"">, z.ZodNumber]>>;
4
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/validators/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAE7D,eAAO,MAAM,iBAAiB,GAAI,OAAO,uBAAuB,iHAqB/D,CAAA"}
@@ -0,0 +1,20 @@
1
+ import * as z from 'zod';
2
+ export const numberFieldSchema = (field) => {
3
+ let base = z
4
+ .number()
5
+ .min(field.minValue ?? -Infinity)
6
+ .max(field.maxValue ?? Infinity);
7
+ if (field.maxLength) {
8
+ // @ts-ignore
9
+ base = base.refine((val) => val.toString().length <= field.maxLength, {
10
+ message: `Number can't be longer than ${field.maxLength} characters`,
11
+ });
12
+ }
13
+ if (field.minLength) {
14
+ // @ts-ignore
15
+ base = base.refine((val) => val.toString().length >= field.minLength, {
16
+ message: `Number can't be shorter than ${field.minLength} characters`,
17
+ });
18
+ }
19
+ return field.required ? base : z.union([z.undefined(), z.null(), z.literal(''), base]).optional();
20
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { PasswordFieldClientConfig } from '../core/fields';
3
+ export declare const passwordFieldSchema: (field: PasswordFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/validators/password.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,sFAWnE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import * as z from 'zod';
2
+ export const passwordFieldSchema = (field) => {
3
+ let base = z
4
+ .string()
5
+ .min(field.minLength ?? 1)
6
+ .max(field.maxLength ?? Infinity);
7
+ if (field.validation) {
8
+ base = base.regex(field.validation.regex, field.validation.message);
9
+ }
10
+ return field.required ? base : z.union([z.literal(''), base]).optional();
11
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { PhotoFieldClientConfig } from '../core/fields';
3
+ export declare const photoFieldSchema: (field: PhotoFieldClientConfig) => z.ZodCustom<File, File> | z.ZodOptional<z.ZodUnion<readonly [z.ZodNull, z.ZodUndefined, z.ZodCustom<File, File>]>>;
4
+ //# sourceMappingURL=photo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"photo.d.ts","sourceRoot":"","sources":["../../src/validators/photo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AA4B5D,eAAO,MAAM,gBAAgB,GAAI,OAAO,sBAAsB,uHAkF7D,CAAA"}
@@ -0,0 +1,100 @@
1
+ import * as z from 'zod';
2
+ /**
3
+ * Helper function to read a File object and return image dimensions.
4
+ */
5
+ function getImageDimensions(file) {
6
+ return new Promise((resolve, reject) => {
7
+ const reader = new FileReader();
8
+ reader.onload = (e) => {
9
+ const img = new Image();
10
+ img.onload = () => {
11
+ resolve({ width: img.width, height: img.height });
12
+ };
13
+ img.onerror = () => {
14
+ reject(new Error('Unable to load image.'));
15
+ };
16
+ img.src = e.target?.result;
17
+ };
18
+ reader.onerror = () => {
19
+ reject(new Error('Unable to read file.'));
20
+ };
21
+ reader.readAsDataURL(file);
22
+ });
23
+ }
24
+ export const photoFieldSchema = (field) => {
25
+ /**
26
+ * Construct a custom schema for the photo field
27
+ */
28
+ const base = z.instanceof(File).superRefine(async (file, ctx) => {
29
+ if (!file) {
30
+ // If empty but the field is required, add an issue
31
+ if (field.required) {
32
+ ctx.addIssue({
33
+ code: 'custom',
34
+ message: 'No file selected',
35
+ });
36
+ }
37
+ return; // If it's not required, do nothing (no issue).
38
+ }
39
+ /**
40
+ * File extension
41
+ */
42
+ if (!field.extensions.includes(file.name.split('.').pop())) {
43
+ ctx.addIssue({
44
+ code: 'custom',
45
+ message: `Invalid image file extension. Supported extensions are: ${field.extensions.join(', ')}`,
46
+ });
47
+ }
48
+ /**
49
+ * File size
50
+ * SECURITY: We read the actual blob size instead of relying on file.size
51
+ * property, which can be overridden using Object.defineProperty()
52
+ */
53
+ const actualSize = await file.arrayBuffer().then((buf) => buf.byteLength);
54
+ const maxSizeBytes = field.maxFileSize.size * (field.maxFileSize.unit === 'kb' ? 1024 : 1024 * 1024);
55
+ if (actualSize > maxSizeBytes) {
56
+ ctx.addIssue({
57
+ code: 'too_big',
58
+ maximum: maxSizeBytes,
59
+ inclusive: true,
60
+ type: 'number',
61
+ origin: 'number',
62
+ message: `File size should not exceed the maximum allowed size of ${field.maxFileSize.size} ${field.maxFileSize.unit}`,
63
+ });
64
+ }
65
+ /**
66
+ * Mime types
67
+ */
68
+ if (!field.mimeType.includes(file.type)) {
69
+ ctx.addIssue({
70
+ code: 'custom',
71
+ message: `Invalid image file type. Supported types are: ${field.mimeType.join(', ')}`,
72
+ });
73
+ }
74
+ /**
75
+ * Image dimensions
76
+ */
77
+ if (field.size && !field.size.crop) {
78
+ try {
79
+ const { width, height } = await getImageDimensions(file);
80
+ const { width: requiredW, height: requiredH } = field.size;
81
+ if (width !== requiredW || height !== requiredH) {
82
+ ctx.addIssue({
83
+ code: 'custom',
84
+ message: `Uploaded image size (${width}x${height}) does not match the required ${requiredW}x${requiredH} pixels.`,
85
+ });
86
+ }
87
+ }
88
+ catch (err) {
89
+ ctx.addIssue({
90
+ code: 'custom',
91
+ message: err.message || 'Could not verify image dimensions. Please try again.',
92
+ });
93
+ }
94
+ }
95
+ });
96
+ /**
97
+ * If not required, allow `undefined` (meaning "no file was provided at all").
98
+ */
99
+ return field.required ? base : z.union([z.null(), z.undefined(), base]).optional();
100
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { RichTextFieldClientConfig } from '../core/fields';
3
+ export declare const richTextFieldSchema: (field: RichTextFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=richText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richText.d.ts","sourceRoot":"","sources":["../../src/validators/richText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,sFAOnE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import * as z from 'zod';
2
+ export const richTextFieldSchema = (field) => {
3
+ const base = z
4
+ .string()
5
+ .min(field.minLength ?? 1)
6
+ .max(field.maxLength ?? Infinity);
7
+ return field.required ? base : z.union([z.literal(''), base]).optional();
8
+ };
@@ -0,0 +1,10 @@
1
+ import * as z from 'zod';
2
+ import type { SelectMultipleFieldClientConfig } from '../core/fields';
3
+ export declare const selectMultipleFieldSchema: (field: SelectMultipleFieldClientConfig) => z.ZodArray<z.ZodObject<{
4
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
5
+ label: z.ZodString;
6
+ }, z.core.$strip>> | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodArray<z.ZodObject<{
7
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
8
+ label: z.ZodString;
9
+ }, z.core.$strip>>]>>;
10
+ //# sourceMappingURL=select-multiple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-multiple.d.ts","sourceRoot":"","sources":["../../src/validators/select-multiple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAErE,eAAO,MAAM,yBAAyB,GAAI,OAAO,+BAA+B;;;;;;qBAqB/E,CAAA"}
@@ -0,0 +1,20 @@
1
+ import * as z from 'zod';
2
+ export const selectMultipleFieldSchema = (field) => {
3
+ const base = z
4
+ .array(z.object({
5
+ value: z.union([z.string(), z.number()]),
6
+ label: z.string(),
7
+ }))
8
+ .superRefine((value, ctx) => {
9
+ /**
10
+ * If the decoded value is an array, set the value as the decoded value
11
+ */
12
+ if (field.required && value.length === 0) {
13
+ ctx.addIssue({
14
+ code: 'custom',
15
+ message: 'At least one value is required',
16
+ });
17
+ }
18
+ });
19
+ return field.required ? base : z.union([z.literal(''), base]).optional();
20
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { SelectFieldClientConfig } from '../core/fields';
3
+ export declare const selectFieldSchema: (field: SelectFieldClientConfig) => z.ZodUnion<[z.ZodString, z.ZodNumber]> | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodUnion<[z.ZodString, z.ZodNumber]>]>>;
4
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/validators/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAE7D,eAAO,MAAM,iBAAiB,GAAI,OAAO,uBAAuB,4IAI/D,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as z from 'zod';
2
+ export const selectFieldSchema = (field) => {
3
+ const base = z.string().min(1).or(z.number());
4
+ return field.required ? base : z.union([z.literal(''), base]).optional();
5
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { TextFieldClientConfig } from '../core/fields';
3
+ export declare const textFieldSchema: (field: TextFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/validators/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,eAAO,MAAM,eAAe,GAAI,OAAO,qBAAqB,sFAO3D,CAAA"}
@@ -0,0 +1,7 @@
1
+ import * as z from 'zod';
2
+ export const textFieldSchema = (field) => {
3
+ const minLength = field.minLength ?? 1;
4
+ const maxLength = field.maxLength ?? Infinity;
5
+ const base = z.string().trim().min(minLength).max(maxLength);
6
+ return field.required ? base : z.union([z.literal(''), base]).optional();
7
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { TextAreaFieldClientConfig } from '../core/fields';
3
+ export declare const textareaFieldSchema: (field: TextAreaFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/validators/textarea.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,sFAOnE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import * as z from 'zod';
2
+ export const textareaFieldSchema = (field) => {
3
+ const minLength = field.minLength ?? 1;
4
+ const maxLength = field.maxLength ?? Infinity;
5
+ const base = z.string().trim().min(minLength).max(maxLength);
6
+ return field.required ? base : z.union([z.literal(''), base]).optional();
7
+ };
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ import type { VideoFieldClientConfig } from '../core/fields';
3
+ export declare const videoFieldSchema: (field: VideoFieldClientConfig) => z.ZodCustom<File, File> | z.ZodOptional<z.ZodUnion<readonly [z.ZodNull, z.ZodUndefined, z.ZodCustom<File, File>]>>;
4
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/validators/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE5D,eAAO,MAAM,gBAAgB,GAAI,OAAO,sBAAsB,uHA4D7D,CAAA"}