nextjs-cms 0.5.9 → 0.5.10

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 (258) hide show
  1. package/dist/api/axios/axiosInstance.d.ts +1 -1
  2. package/dist/api/axios/axiosInstance.js +8 -8
  3. package/dist/api/index.d.ts +855 -855
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/index.js +12 -12
  6. package/dist/api/lib/serverActions.d.ts +239 -239
  7. package/dist/api/lib/serverActions.d.ts.map +1 -1
  8. package/dist/api/lib/serverActions.js +834 -834
  9. package/dist/api/root.d.ts +828 -828
  10. package/dist/api/root.js +30 -30
  11. package/dist/api/routers/accountSettings.d.ts +60 -60
  12. package/dist/api/routers/accountSettings.js +108 -108
  13. package/dist/api/routers/admins.d.ts +105 -105
  14. package/dist/api/routers/admins.js +219 -219
  15. package/dist/api/routers/auth.d.ts +47 -47
  16. package/dist/api/routers/auth.js +25 -25
  17. package/dist/api/routers/categorySection.d.ts +103 -103
  18. package/dist/api/routers/categorySection.js +38 -38
  19. package/dist/api/routers/cmsSettings.d.ts +48 -48
  20. package/dist/api/routers/cmsSettings.js +51 -51
  21. package/dist/api/routers/cpanel.d.ts +83 -83
  22. package/dist/api/routers/cpanel.js +216 -216
  23. package/dist/api/routers/files.d.ts +47 -47
  24. package/dist/api/routers/files.js +23 -23
  25. package/dist/api/routers/gallery.d.ts +35 -35
  26. package/dist/api/routers/gallery.js +62 -62
  27. package/dist/api/routers/googleAnalytics.d.ts +30 -30
  28. package/dist/api/routers/googleAnalytics.js +7 -7
  29. package/dist/api/routers/hasItemsSection.d.ts +139 -139
  30. package/dist/api/routers/hasItemsSection.js +34 -34
  31. package/dist/api/routers/navigation.d.ts +51 -51
  32. package/dist/api/routers/navigation.js +11 -11
  33. package/dist/api/routers/simpleSection.d.ts +57 -57
  34. package/dist/api/routers/simpleSection.js +12 -12
  35. package/dist/api/trpc.d.ts +106 -106
  36. package/dist/api/trpc.js +72 -72
  37. package/dist/auth/axios/axiosInstance.d.ts +1 -1
  38. package/dist/auth/axios/axiosInstance.js +8 -8
  39. package/dist/auth/csrf.d.ts +29 -29
  40. package/dist/auth/csrf.js +76 -76
  41. package/dist/auth/hooks/index.d.ts +3 -3
  42. package/dist/auth/hooks/index.d.ts.map +1 -1
  43. package/dist/auth/hooks/index.js +3 -3
  44. package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
  45. package/dist/auth/hooks/useAxiosPrivate.js +74 -74
  46. package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
  47. package/dist/auth/hooks/useRefreshToken.js +79 -79
  48. package/dist/auth/index.d.ts +22 -22
  49. package/dist/auth/index.js +44 -44
  50. package/dist/auth/jwt.d.ts +5 -5
  51. package/dist/auth/jwt.js +25 -25
  52. package/dist/auth/lib/actions.d.ts +32 -32
  53. package/dist/auth/lib/actions.d.ts.map +1 -1
  54. package/dist/auth/lib/actions.js +209 -209
  55. package/dist/auth/lib/client.d.ts +3 -3
  56. package/dist/auth/lib/client.js +46 -46
  57. package/dist/auth/lib/index.d.ts +2 -2
  58. package/dist/auth/lib/index.d.ts.map +1 -1
  59. package/dist/auth/lib/index.js +2 -2
  60. package/dist/auth/react.d.ts +105 -105
  61. package/dist/auth/react.d.ts.map +1 -1
  62. package/dist/auth/react.js +347 -347
  63. package/dist/auth/trpc.d.ts +5 -5
  64. package/dist/auth/trpc.d.ts.map +1 -1
  65. package/dist/auth/trpc.js +81 -81
  66. package/dist/core/config/config-loader.d.ts +91 -91
  67. package/dist/core/config/config-loader.js +230 -230
  68. package/dist/core/config/index.d.ts +2 -2
  69. package/dist/core/config/index.d.ts.map +1 -1
  70. package/dist/core/config/index.js +1 -1
  71. package/dist/core/config/loader.d.ts +1 -1
  72. package/dist/core/config/loader.js +42 -42
  73. package/dist/core/db/index.d.ts +1 -1
  74. package/dist/core/db/index.d.ts.map +1 -1
  75. package/dist/core/db/index.js +1 -1
  76. package/dist/core/db/table-checker/DbTable.d.ts +5 -5
  77. package/dist/core/db/table-checker/DbTable.js +5 -5
  78. package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
  79. package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
  80. package/dist/core/db/table-checker/MysqlTable.js +94 -94
  81. package/dist/core/db/table-checker/index.d.ts +1 -1
  82. package/dist/core/db/table-checker/index.d.ts.map +1 -1
  83. package/dist/core/db/table-checker/index.js +1 -1
  84. package/dist/core/factories/FieldFactory.d.ts +123 -123
  85. package/dist/core/factories/FieldFactory.d.ts.map +1 -1
  86. package/dist/core/factories/FieldFactory.js +411 -411
  87. package/dist/core/factories/SectionFactory.d.ts +109 -109
  88. package/dist/core/factories/SectionFactory.d.ts.map +1 -1
  89. package/dist/core/factories/SectionFactory.js +415 -415
  90. package/dist/core/factories/index.d.ts +2 -2
  91. package/dist/core/factories/index.d.ts.map +1 -1
  92. package/dist/core/factories/index.js +2 -2
  93. package/dist/core/fields/checkbox.d.ts +62 -62
  94. package/dist/core/fields/checkbox.d.ts.map +1 -1
  95. package/dist/core/fields/checkbox.js +62 -62
  96. package/dist/core/fields/color.d.ts +83 -83
  97. package/dist/core/fields/color.d.ts.map +1 -1
  98. package/dist/core/fields/color.js +91 -91
  99. package/dist/core/fields/date.d.ts +99 -99
  100. package/dist/core/fields/date.d.ts.map +1 -1
  101. package/dist/core/fields/date.js +108 -108
  102. package/dist/core/fields/document.d.ts +179 -179
  103. package/dist/core/fields/document.d.ts.map +1 -1
  104. package/dist/core/fields/document.js +277 -277
  105. package/dist/core/fields/field-group.d.ts +17 -17
  106. package/dist/core/fields/field-group.d.ts.map +1 -1
  107. package/dist/core/fields/field-group.js +6 -6
  108. package/dist/core/fields/field.d.ts +125 -125
  109. package/dist/core/fields/field.d.ts.map +1 -1
  110. package/dist/core/fields/field.js +148 -148
  111. package/dist/core/fields/fileField.d.ts +14 -14
  112. package/dist/core/fields/fileField.d.ts.map +1 -1
  113. package/dist/core/fields/fileField.js +5 -5
  114. package/dist/core/fields/index.d.ts +64 -64
  115. package/dist/core/fields/index.d.ts.map +1 -1
  116. package/dist/core/fields/index.js +18 -18
  117. package/dist/core/fields/map.d.ts +166 -166
  118. package/dist/core/fields/map.d.ts.map +1 -1
  119. package/dist/core/fields/map.js +152 -152
  120. package/dist/core/fields/number.d.ts +185 -185
  121. package/dist/core/fields/number.d.ts.map +1 -1
  122. package/dist/core/fields/number.js +241 -241
  123. package/dist/core/fields/password.d.ts +108 -108
  124. package/dist/core/fields/password.d.ts.map +1 -1
  125. package/dist/core/fields/password.js +133 -133
  126. package/dist/core/fields/photo.d.ts +288 -288
  127. package/dist/core/fields/photo.d.ts.map +1 -1
  128. package/dist/core/fields/photo.js +410 -410
  129. package/dist/core/fields/richText.d.ts +294 -294
  130. package/dist/core/fields/richText.d.ts.map +1 -1
  131. package/dist/core/fields/richText.js +338 -338
  132. package/dist/core/fields/select.d.ts +365 -365
  133. package/dist/core/fields/select.d.ts.map +1 -1
  134. package/dist/core/fields/select.js +499 -499
  135. package/dist/core/fields/selectMultiple.d.ts +235 -235
  136. package/dist/core/fields/selectMultiple.d.ts.map +1 -1
  137. package/dist/core/fields/selectMultiple.js +417 -417
  138. package/dist/core/fields/tags.d.ts +130 -130
  139. package/dist/core/fields/tags.d.ts.map +1 -1
  140. package/dist/core/fields/tags.js +105 -105
  141. package/dist/core/fields/text.d.ts +135 -135
  142. package/dist/core/fields/text.d.ts.map +1 -1
  143. package/dist/core/fields/text.js +157 -157
  144. package/dist/core/fields/textArea.d.ts +106 -106
  145. package/dist/core/fields/textArea.d.ts.map +1 -1
  146. package/dist/core/fields/textArea.js +126 -126
  147. package/dist/core/fields/video.d.ts +147 -147
  148. package/dist/core/fields/video.d.ts.map +1 -1
  149. package/dist/core/fields/video.js +248 -248
  150. package/dist/core/helpers/entity.d.ts +7 -7
  151. package/dist/core/helpers/entity.js +27 -27
  152. package/dist/core/helpers/index.d.ts +4 -4
  153. package/dist/core/helpers/index.d.ts.map +1 -1
  154. package/dist/core/helpers/index.js +3 -3
  155. package/dist/core/index.d.ts +7 -7
  156. package/dist/core/index.d.ts.map +1 -1
  157. package/dist/core/index.js +7 -7
  158. package/dist/core/sections/category.d.ts +282 -282
  159. package/dist/core/sections/category.d.ts.map +1 -1
  160. package/dist/core/sections/category.js +147 -147
  161. package/dist/core/sections/hasItems.d.ts +631 -631
  162. package/dist/core/sections/hasItems.d.ts.map +1 -1
  163. package/dist/core/sections/hasItems.js +144 -144
  164. package/dist/core/sections/index.d.ts +4 -4
  165. package/dist/core/sections/index.d.ts.map +1 -1
  166. package/dist/core/sections/index.js +4 -4
  167. package/dist/core/sections/section.d.ts +225 -225
  168. package/dist/core/sections/section.d.ts.map +1 -1
  169. package/dist/core/sections/section.js +341 -341
  170. package/dist/core/sections/simple.d.ts +98 -98
  171. package/dist/core/sections/simple.d.ts.map +1 -1
  172. package/dist/core/sections/simple.js +95 -95
  173. package/dist/core/security/dom.d.ts +10 -10
  174. package/dist/core/security/dom.js +92 -92
  175. package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
  176. package/dist/core/submit/ItemEditSubmit.js +186 -186
  177. package/dist/core/submit/NewItemSubmit.d.ts +13 -13
  178. package/dist/core/submit/NewItemSubmit.js +93 -93
  179. package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
  180. package/dist/core/submit/SimpleSectionSubmit.js +93 -93
  181. package/dist/core/submit/index.d.ts +4 -4
  182. package/dist/core/submit/index.js +4 -4
  183. package/dist/core/submit/submit.d.ts +115 -115
  184. package/dist/core/submit/submit.js +479 -479
  185. package/dist/core/types/index.d.ts +279 -279
  186. package/dist/core/types/index.d.ts.map +1 -1
  187. package/dist/core/types/index.js +1 -1
  188. package/dist/db/client.d.ts +8 -8
  189. package/dist/db/client.d.ts.map +1 -1
  190. package/dist/db/client.js +19 -19
  191. package/dist/db/config.d.ts +5 -5
  192. package/dist/db/config.js +22 -22
  193. package/dist/db/drizzle.config.d.ts +5 -5
  194. package/dist/db/drizzle.config.js +18 -18
  195. package/dist/db/index.d.ts +2 -2
  196. package/dist/db/index.js +3 -3
  197. package/dist/db/schema.d.ts +638 -638
  198. package/dist/db/schema.js +73 -73
  199. package/dist/index.d.ts +7 -7
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +7 -7
  202. package/dist/translations/index.d.ts +2 -2
  203. package/dist/translations/index.js +15 -15
  204. package/dist/utils/CpanelApi.d.ts +24 -24
  205. package/dist/utils/CpanelApi.js +64 -64
  206. package/dist/utils/constants.d.ts +13 -13
  207. package/dist/utils/constants.js +61 -61
  208. package/dist/utils/index.d.ts +4 -4
  209. package/dist/utils/index.d.ts.map +1 -1
  210. package/dist/utils/index.js +4 -4
  211. package/dist/utils/utils.d.ts +59 -59
  212. package/dist/utils/utils.js +132 -132
  213. package/dist/validators/checkbox.d.ts +3 -3
  214. package/dist/validators/checkbox.d.ts.map +1 -1
  215. package/dist/validators/checkbox.js +12 -12
  216. package/dist/validators/color.d.ts +3 -3
  217. package/dist/validators/color.d.ts.map +1 -1
  218. package/dist/validators/color.js +7 -7
  219. package/dist/validators/date.d.ts +3 -3
  220. package/dist/validators/date.d.ts.map +1 -1
  221. package/dist/validators/date.js +5 -5
  222. package/dist/validators/document.d.ts +3 -3
  223. package/dist/validators/document.d.ts.map +1 -1
  224. package/dist/validators/document.js +57 -57
  225. package/dist/validators/index.d.ts +14 -14
  226. package/dist/validators/index.d.ts.map +1 -1
  227. package/dist/validators/index.js +14 -14
  228. package/dist/validators/map.d.ts +3 -3
  229. package/dist/validators/map.d.ts.map +1 -1
  230. package/dist/validators/map.js +5 -5
  231. package/dist/validators/number.d.ts +3 -3
  232. package/dist/validators/number.d.ts.map +1 -1
  233. package/dist/validators/number.js +20 -20
  234. package/dist/validators/password.d.ts +3 -3
  235. package/dist/validators/password.d.ts.map +1 -1
  236. package/dist/validators/password.js +11 -11
  237. package/dist/validators/photo.d.ts +3 -3
  238. package/dist/validators/photo.d.ts.map +1 -1
  239. package/dist/validators/photo.js +100 -100
  240. package/dist/validators/richText.d.ts +3 -3
  241. package/dist/validators/richText.d.ts.map +1 -1
  242. package/dist/validators/richText.js +8 -8
  243. package/dist/validators/select-multiple.d.ts +9 -9
  244. package/dist/validators/select-multiple.d.ts.map +1 -1
  245. package/dist/validators/select-multiple.js +20 -20
  246. package/dist/validators/select.d.ts +3 -3
  247. package/dist/validators/select.d.ts.map +1 -1
  248. package/dist/validators/select.js +5 -5
  249. package/dist/validators/text.d.ts +3 -3
  250. package/dist/validators/text.d.ts.map +1 -1
  251. package/dist/validators/text.js +7 -7
  252. package/dist/validators/textarea.d.ts +3 -3
  253. package/dist/validators/textarea.d.ts.map +1 -1
  254. package/dist/validators/textarea.js +7 -7
  255. package/dist/validators/video.d.ts +3 -3
  256. package/dist/validators/video.d.ts.map +1 -1
  257. package/dist/validators/video.js +57 -57
  258. package/package.json +2 -3
@@ -1,152 +1,152 @@
1
- import { Field, baseFieldConfigSchema } from "./field.js";
2
- import { entityKind } from "../helpers.js";
3
- import * as z from 'zod';
4
- const configSchema = z.strictObject({
5
- center: z
6
- .strictObject({
7
- lat: z.number().describe('The latitude'),
8
- lng: z.number().describe('The longitude'),
9
- })
10
- .optional()
11
- .describe('The center coordinates of the map'),
12
- /**
13
- * The default value of the field.
14
- * If set, the field will be pre-populated with this value when the form is loaded.
15
- * If `adminGenerated` is not true, the field will be included when submitting the form with this value.
16
- */
17
- defaultValue: z
18
- .strictObject({
19
- lat: z.number().describe('The default latitude'),
20
- lng: z.number().describe('The default longitude'),
21
- })
22
- .optional()
23
- .describe('The default value of the field'),
24
- zoom: z.number().optional().describe('The zoom level of the map'),
25
- minZoom: z.number().optional().describe('The minimum zoom level of the map'),
26
- latLngBounds: z
27
- .strictObject({
28
- north: z.number().describe('The northern boundary'),
29
- south: z.number().describe('The southern boundary'),
30
- west: z.number().describe('The western boundary'),
31
- east: z.number().describe('The eastern boundary'),
32
- })
33
- .optional()
34
- .describe('The latitude/longitude bounds of the map'),
35
- });
36
- export class MapField extends Field {
37
- static [entityKind] = 'MapField';
38
- /**
39
- * The value of the map field is an object with `lat` and `lng` properties
40
- */
41
- value;
42
- _defaultValue;
43
- zoom;
44
- minZoom;
45
- latLngBounds;
46
- center;
47
- constructor(config) {
48
- super(config, 'map');
49
- this.zoom = config.zoom || 3;
50
- this.minZoom = config.minZoom || 1;
51
- this.center = config.center || {
52
- // Defaults to center of the world
53
- lat: 39.8283,
54
- lng: 34.2716,
55
- };
56
- this.latLngBounds = config.latLngBounds || {
57
- // Defaults to the whole world bounds
58
- north: 85,
59
- south: -85,
60
- west: -180,
61
- east: 180,
62
- };
63
- this.value = config.defaultValue;
64
- this._defaultValue = config.defaultValue;
65
- }
66
- /**
67
- * Get the value of the field as a string
68
- */
69
- getValue() {
70
- return `${this.value?.lat},${this.value?.lng}`;
71
- }
72
- exportForClient() {
73
- return {
74
- ...super.exportForClient(),
75
- zoom: this.zoom,
76
- minZoom: this.minZoom,
77
- center: this.center,
78
- latLngBounds: this.latLngBounds,
79
- value: this.value,
80
- };
81
- }
82
- /**
83
- * Set the value of the field from a string
84
- * @param value
85
- */
86
- setValue(value) {
87
- if (value) {
88
- value = value.replace(/\s+/g, '');
89
- const [lat, lng] = value.split(',').map(Number);
90
- this.value = lat && lng ? { lat, lng } : undefined;
91
- }
92
- }
93
- checkRequired() {
94
- /**
95
- * Check if the field is required
96
- */
97
- if (this.required) {
98
- if (!this.value) {
99
- throw new Error(`${this.label}: field is required`);
100
- }
101
- }
102
- }
103
- hasSqlNameAndValue() {
104
- /**
105
- * Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
106
- */
107
- return this.adminGenerated === true || this._defaultValue !== undefined;
108
- }
109
- /**
110
- * Prepare the field for submission
111
- */
112
- async prepareForSubmission() {
113
- /**
114
- * Check if the value if well formatted as `lat,lng` string
115
- */
116
- if (!/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/.test(`${this.value?.lat},${this.value?.lng}`)) {
117
- throw new Error(`${this.label}: value is not well formatted, it should be of format: "number,number"`);
118
- }
119
- }
120
- }
121
- const optionsSchema = z.strictObject({
122
- ...baseFieldConfigSchema.shape,
123
- ...configSchema.shape,
124
- });
125
- const mapFieldConfigSchema = z.strictObject({
126
- ...optionsSchema.shape,
127
- type: z.literal('map').describe('The type of the field'),
128
- build: z.function().output(z.instanceof(MapField)).describe('Build a MapField instance from this config'),
129
- });
130
- /**
131
- * Helper function to create a map field configuration
132
- * Returns a config object with a build() method that can be serialized and used anywhere
133
- * @param field
134
- */
135
- export function mapField(field) {
136
- /**
137
- * Validate the field config
138
- */
139
- const result = optionsSchema.safeParse(field);
140
- if (!result.success) {
141
- throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
142
- }
143
- const config = {
144
- ...field,
145
- type: 'map',
146
- build() {
147
- // Use the original field config directly (it doesn't have build() method)
148
- return new MapField(field);
149
- },
150
- };
151
- return config;
152
- }
1
+ import { Field, baseFieldConfigSchema } from './field.js';
2
+ import { entityKind } from '../helpers/index.js';
3
+ import * as z from 'zod';
4
+ const configSchema = z.strictObject({
5
+ center: z
6
+ .strictObject({
7
+ lat: z.number().describe('The latitude'),
8
+ lng: z.number().describe('The longitude'),
9
+ })
10
+ .optional()
11
+ .describe('The center coordinates of the map'),
12
+ /**
13
+ * The default value of the field.
14
+ * If set, the field will be pre-populated with this value when the form is loaded.
15
+ * If `adminGenerated` is not true, the field will be included when submitting the form with this value.
16
+ */
17
+ defaultValue: z
18
+ .strictObject({
19
+ lat: z.number().describe('The default latitude'),
20
+ lng: z.number().describe('The default longitude'),
21
+ })
22
+ .optional()
23
+ .describe('The default value of the field'),
24
+ zoom: z.number().optional().describe('The zoom level of the map'),
25
+ minZoom: z.number().optional().describe('The minimum zoom level of the map'),
26
+ latLngBounds: z
27
+ .strictObject({
28
+ north: z.number().describe('The northern boundary'),
29
+ south: z.number().describe('The southern boundary'),
30
+ west: z.number().describe('The western boundary'),
31
+ east: z.number().describe('The eastern boundary'),
32
+ })
33
+ .optional()
34
+ .describe('The latitude/longitude bounds of the map'),
35
+ });
36
+ export class MapField extends Field {
37
+ static [entityKind] = 'MapField';
38
+ /**
39
+ * The value of the map field is an object with `lat` and `lng` properties
40
+ */
41
+ value;
42
+ _defaultValue;
43
+ zoom;
44
+ minZoom;
45
+ latLngBounds;
46
+ center;
47
+ constructor(config) {
48
+ super(config, 'map');
49
+ this.zoom = config.zoom || 3;
50
+ this.minZoom = config.minZoom || 1;
51
+ this.center = config.center || {
52
+ // Defaults to center of the world
53
+ lat: 39.8283,
54
+ lng: 34.2716,
55
+ };
56
+ this.latLngBounds = config.latLngBounds || {
57
+ // Defaults to the whole world bounds
58
+ north: 85,
59
+ south: -85,
60
+ west: -180,
61
+ east: 180,
62
+ };
63
+ this.value = config.defaultValue;
64
+ this._defaultValue = config.defaultValue;
65
+ }
66
+ /**
67
+ * Get the value of the field as a string
68
+ */
69
+ getValue() {
70
+ return `${this.value?.lat},${this.value?.lng}`;
71
+ }
72
+ exportForClient() {
73
+ return {
74
+ ...super.exportForClient(),
75
+ zoom: this.zoom,
76
+ minZoom: this.minZoom,
77
+ center: this.center,
78
+ latLngBounds: this.latLngBounds,
79
+ value: this.value,
80
+ };
81
+ }
82
+ /**
83
+ * Set the value of the field from a string
84
+ * @param value
85
+ */
86
+ setValue(value) {
87
+ if (value) {
88
+ value = value.replace(/\s+/g, '');
89
+ const [lat, lng] = value.split(',').map(Number);
90
+ this.value = lat && lng ? { lat, lng } : undefined;
91
+ }
92
+ }
93
+ checkRequired() {
94
+ /**
95
+ * Check if the field is required
96
+ */
97
+ if (this.required) {
98
+ if (!this.value) {
99
+ throw new Error(`${this.label}: field is required`);
100
+ }
101
+ }
102
+ }
103
+ hasSqlNameAndValue() {
104
+ /**
105
+ * Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
106
+ */
107
+ return this.adminGenerated === true || this._defaultValue !== undefined;
108
+ }
109
+ /**
110
+ * Prepare the field for submission
111
+ */
112
+ async prepareForSubmission() {
113
+ /**
114
+ * Check if the value if well formatted as `lat,lng` string
115
+ */
116
+ if (!/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/.test(`${this.value?.lat},${this.value?.lng}`)) {
117
+ throw new Error(`${this.label}: value is not well formatted, it should be of format: "number,number"`);
118
+ }
119
+ }
120
+ }
121
+ const optionsSchema = z.strictObject({
122
+ ...baseFieldConfigSchema.shape,
123
+ ...configSchema.shape,
124
+ });
125
+ const mapFieldConfigSchema = z.strictObject({
126
+ ...optionsSchema.shape,
127
+ type: z.literal('map').describe('The type of the field'),
128
+ build: z.function().output(z.instanceof(MapField)).describe('Build a MapField instance from this config'),
129
+ });
130
+ /**
131
+ * Helper function to create a map field configuration
132
+ * Returns a config object with a build() method that can be serialized and used anywhere
133
+ * @param field
134
+ */
135
+ export function mapField(field) {
136
+ /**
137
+ * Validate the field config
138
+ */
139
+ const result = optionsSchema.safeParse(field);
140
+ if (!result.success) {
141
+ throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
142
+ }
143
+ const config = {
144
+ ...field,
145
+ type: 'map',
146
+ build() {
147
+ // Use the original field config directly (it doesn't have build() method)
148
+ return new MapField(field);
149
+ },
150
+ };
151
+ return config;
152
+ }