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,147 +1,147 @@
1
- import { Section, baseHelperFunctionOptionsSchema, FieldGroupConfigSchema, fieldConfigSchema } from "./section.js";
2
- import { entityKind } from "../helpers.js";
3
- import { numberField, textField } from "../fields.js";
4
- import * as z from 'zod';
5
- const configSchema = z.strictObject({
6
- headingField: z
7
- .custom()
8
- .describe('Heading field must be a config - will be resolved during instantiation'),
9
- title: z
10
- .strictObject({
11
- section: z.string().describe('The section title'),
12
- singular: z.string().describe('The singular form of the title'),
13
- plural: z.string().describe('The plural form of the title'),
14
- })
15
- .describe('The title configuration for the category section'),
16
- /**
17
- * The depth of the category section is the number of nested levels of categories that can be created.
18
- * For example, if the depth is 2, each category can have one subcategory.
19
- * Default value is 1. (No subcategories)
20
- */
21
- depth: z.number().positive().optional().describe('The depth of the category section'),
22
- /**
23
- * Allow recursive delete of categories children (depth > 1) when deleting the parent category.
24
- * If true, all children categories will be deleted when the parent category is deleted.
25
- * For this to take effect, `allowRecursiveDelete` in lz.config.ts must also be set to true.
26
- * @default false
27
- */
28
- allowRecursiveDelete: z.boolean().optional().describe('Allow recursive delete of categories children'),
29
- // requirePublishPermission?: boolean
30
- });
31
- export class CategorySection extends Section {
32
- static [entityKind] = 'CategorySection';
33
- type = 'category';
34
- title;
35
- headingField;
36
- depth = 1;
37
- allowRecursiveDelete;
38
- // private requirePublishPermission: boolean
39
- constructor(config) {
40
- super(config);
41
- this.title = config.title;
42
- this.depth = config.depth ?? 1;
43
- this.headingField = config.headingField;
44
- this.allowRecursiveDelete = config.allowRecursiveDelete ?? false;
45
- // this.requirePublishPermission = config.requirePublishPermission
46
- /**
47
- * Add the parentId and level fields to the fields if the depth is greater than 1
48
- * Make sure to match the identifier field type
49
- */
50
- if (this.depth > 1) {
51
- const levelConfig = numberField({
52
- name: 'level',
53
- label: 'Level',
54
- required: false,
55
- order: 0,
56
- });
57
- if (this.db.identifier.type === 'number') {
58
- this._fieldConfigs?.push(numberField({
59
- name: 'parent_id',
60
- label: 'Parent ID',
61
- required: false,
62
- order: 0,
63
- }), levelConfig);
64
- }
65
- else if (this.db.identifier.type === 'text') {
66
- this._fieldConfigs?.push(textField({
67
- name: 'parent_id',
68
- label: 'Parent ID',
69
- required: false,
70
- order: 0,
71
- }), levelConfig);
72
- }
73
- }
74
- }
75
- }
76
- const optionsSchema = z.strictObject({
77
- ...baseHelperFunctionOptionsSchema.shape,
78
- ...configSchema.shape,
79
- });
80
- const compiledOptionsSchema = z.strictObject({
81
- ...optionsSchema.shape,
82
- fieldGroups: z.array(FieldGroupConfigSchema).optional().describe('The field groups of the section if provided'),
83
- });
84
- export const categorySectionConfigSchema = z.strictObject({
85
- ...compiledOptionsSchema.shape,
86
- type: z.literal('category').describe('The type of the section'),
87
- fields: z.array(fieldConfigSchema).describe('The fields of the section'),
88
- build: z
89
- .function()
90
- .output(z.instanceof(CategorySection))
91
- .describe('Build a CategorySection instance from this config'),
92
- });
93
- /**
94
- * Helper function to create a category section configuration
95
- * Returns a config object with a build() method that can be serialized and used anywhere
96
- *
97
- * @example
98
- * ```typescript
99
- * const sectionConfig = categorySection({ name: 'categories', ... })
100
- * const sectionInstance = sectionConfig.build()
101
- * ```
102
- *
103
- * @param section
104
- */
105
- export function categorySection(section) {
106
- /**
107
- * Validate the section config
108
- */
109
- const result = optionsSchema.safeParse(section);
110
- if (!result.success) {
111
- throw new Error(`[Section: ${section.name}]: ${z.prettifyError(result.error)}`);
112
- }
113
- /**
114
- * Resolve fields and fieldGroups
115
- */
116
- let fields = [];
117
- let fieldGroups = [];
118
- if (section.fields && section.fields.length > 0) {
119
- const firstInput = section.fields[0];
120
- /**
121
- * Check if the first item is a field group.
122
- * We don't need to check every item,
123
- * because zod already validated the fields array.
124
- */
125
- if (firstInput && 'fields' in firstInput) {
126
- fieldGroups = section.fields;
127
- fields = fieldGroups.flatMap((group) => group.fields);
128
- }
129
- else {
130
- fields = section.fields;
131
- }
132
- }
133
- const config = {
134
- ...section,
135
- fields,
136
- fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
137
- type: 'category',
138
- build() {
139
- return new CategorySection({
140
- ...section,
141
- fields,
142
- fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
143
- });
144
- },
145
- };
146
- return config;
147
- }
1
+ import { Section, baseHelperFunctionOptionsSchema, FieldGroupConfigSchema, fieldConfigSchema } from './section.js';
2
+ import { entityKind } from '../helpers/index.js';
3
+ import { numberField, textField } from '../fields/index.js';
4
+ import * as z from 'zod';
5
+ const configSchema = z.strictObject({
6
+ headingField: z
7
+ .custom()
8
+ .describe('Heading field must be a config - will be resolved during instantiation'),
9
+ title: z
10
+ .strictObject({
11
+ section: z.string().describe('The section title'),
12
+ singular: z.string().describe('The singular form of the title'),
13
+ plural: z.string().describe('The plural form of the title'),
14
+ })
15
+ .describe('The title configuration for the category section'),
16
+ /**
17
+ * The depth of the category section is the number of nested levels of categories that can be created.
18
+ * For example, if the depth is 2, each category can have one subcategory.
19
+ * Default value is 1. (No subcategories)
20
+ */
21
+ depth: z.number().positive().optional().describe('The depth of the category section'),
22
+ /**
23
+ * Allow recursive delete of categories children (depth > 1) when deleting the parent category.
24
+ * If true, all children categories will be deleted when the parent category is deleted.
25
+ * For this to take effect, `allowRecursiveDelete` in lz.config.ts must also be set to true.
26
+ * @default false
27
+ */
28
+ allowRecursiveDelete: z.boolean().optional().describe('Allow recursive delete of categories children'),
29
+ // requirePublishPermission?: boolean
30
+ });
31
+ export class CategorySection extends Section {
32
+ static [entityKind] = 'CategorySection';
33
+ type = 'category';
34
+ title;
35
+ headingField;
36
+ depth = 1;
37
+ allowRecursiveDelete;
38
+ // private requirePublishPermission: boolean
39
+ constructor(config) {
40
+ super(config);
41
+ this.title = config.title;
42
+ this.depth = config.depth ?? 1;
43
+ this.headingField = config.headingField;
44
+ this.allowRecursiveDelete = config.allowRecursiveDelete ?? false;
45
+ // this.requirePublishPermission = config.requirePublishPermission
46
+ /**
47
+ * Add the parentId and level fields to the fields if the depth is greater than 1
48
+ * Make sure to match the identifier field type
49
+ */
50
+ if (this.depth > 1) {
51
+ const levelConfig = numberField({
52
+ name: 'level',
53
+ label: 'Level',
54
+ required: false,
55
+ order: 0,
56
+ });
57
+ if (this.db.identifier.type === 'number') {
58
+ this._fieldConfigs?.push(numberField({
59
+ name: 'parent_id',
60
+ label: 'Parent ID',
61
+ required: false,
62
+ order: 0,
63
+ }), levelConfig);
64
+ }
65
+ else if (this.db.identifier.type === 'text') {
66
+ this._fieldConfigs?.push(textField({
67
+ name: 'parent_id',
68
+ label: 'Parent ID',
69
+ required: false,
70
+ order: 0,
71
+ }), levelConfig);
72
+ }
73
+ }
74
+ }
75
+ }
76
+ const optionsSchema = z.strictObject({
77
+ ...baseHelperFunctionOptionsSchema.shape,
78
+ ...configSchema.shape,
79
+ });
80
+ const compiledOptionsSchema = z.strictObject({
81
+ ...optionsSchema.shape,
82
+ fieldGroups: z.array(FieldGroupConfigSchema).optional().describe('The field groups of the section if provided'),
83
+ });
84
+ export const categorySectionConfigSchema = z.strictObject({
85
+ ...compiledOptionsSchema.shape,
86
+ type: z.literal('category').describe('The type of the section'),
87
+ fields: z.array(fieldConfigSchema).describe('The fields of the section'),
88
+ build: z
89
+ .function()
90
+ .output(z.instanceof(CategorySection))
91
+ .describe('Build a CategorySection instance from this config'),
92
+ });
93
+ /**
94
+ * Helper function to create a category section configuration
95
+ * Returns a config object with a build() method that can be serialized and used anywhere
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const sectionConfig = categorySection({ name: 'categories', ... })
100
+ * const sectionInstance = sectionConfig.build()
101
+ * ```
102
+ *
103
+ * @param section
104
+ */
105
+ export function categorySection(section) {
106
+ /**
107
+ * Validate the section config
108
+ */
109
+ const result = optionsSchema.safeParse(section);
110
+ if (!result.success) {
111
+ throw new Error(`[Section: ${section.name}]: ${z.prettifyError(result.error)}`);
112
+ }
113
+ /**
114
+ * Resolve fields and fieldGroups
115
+ */
116
+ let fields = [];
117
+ let fieldGroups = [];
118
+ if (section.fields && section.fields.length > 0) {
119
+ const firstInput = section.fields[0];
120
+ /**
121
+ * Check if the first item is a field group.
122
+ * We don't need to check every item,
123
+ * because zod already validated the fields array.
124
+ */
125
+ if (firstInput && 'fields' in firstInput) {
126
+ fieldGroups = section.fields;
127
+ fields = fieldGroups.flatMap((group) => group.fields);
128
+ }
129
+ else {
130
+ fields = section.fields;
131
+ }
132
+ }
133
+ const config = {
134
+ ...section,
135
+ fields,
136
+ fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
137
+ type: 'category',
138
+ build() {
139
+ return new CategorySection({
140
+ ...section,
141
+ fields,
142
+ fieldGroups: fieldGroups.length > 0 ? fieldGroups : undefined,
143
+ });
144
+ },
145
+ };
146
+ return config;
147
+ }