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,92 @@
1
+ import * as z from 'zod';
2
+ declare const cmsConfigSchema: z.ZodObject<{
3
+ sectionsFolder: z.ZodOptional<z.ZodString>;
4
+ api: z.ZodOptional<z.ZodObject<{
5
+ baseUrl: z.ZodString;
6
+ }, z.core.$strip>>;
7
+ siteName: z.ZodOptional<z.ZodString>;
8
+ theme: z.ZodOptional<z.ZodString>;
9
+ files: z.ZodOptional<z.ZodObject<{
10
+ upload: z.ZodObject<{
11
+ uploadPath: z.ZodString;
12
+ keepFileExtension: z.ZodBoolean;
13
+ }, z.core.$strip>;
14
+ images: z.ZodOptional<z.ZodObject<{
15
+ thumbnail: z.ZodOptional<z.ZodObject<{
16
+ width: z.ZodNumber;
17
+ height: z.ZodNumber;
18
+ crop: z.ZodBoolean;
19
+ quality: z.ZodOptional<z.ZodNumber>;
20
+ }, z.core.$strip>>;
21
+ watermark: z.ZodOptional<z.ZodBoolean>;
22
+ }, z.core.$strip>>;
23
+ }, z.core.$strip>>;
24
+ sections: z.ZodOptional<z.ZodObject<{
25
+ category: z.ZodObject<{
26
+ allowRecursiveDelete: z.ZodBoolean;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>>;
29
+ db: z.ZodOptional<z.ZodObject<{
30
+ schemaNamingConvention: z.ZodOptional<z.ZodObject<{
31
+ tableCaseStyle: z.ZodOptional<z.ZodEnum<{
32
+ camelCase: "camelCase";
33
+ snakeCase: "snakeCase";
34
+ pascalCase: "pascalCase";
35
+ }>>;
36
+ columnCaseStyle: z.ZodOptional<z.ZodEnum<{
37
+ camelCase: "camelCase";
38
+ snakeCase: "snakeCase";
39
+ pascalCase: "pascalCase";
40
+ }>>;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>>;
43
+ debug: z.ZodOptional<z.ZodBoolean>;
44
+ strict: z.ZodOptional<z.ZodBoolean>;
45
+ }, z.core.$strip>;
46
+ export type CMSConfig = z.infer<typeof cmsConfigSchema>;
47
+ export interface ComputedCMSConfig {
48
+ sectionsFolder: string;
49
+ api: {
50
+ baseUrl: string;
51
+ };
52
+ siteName: string;
53
+ theme: string;
54
+ files: {
55
+ upload: {
56
+ uploadPath: string;
57
+ keepFileExtension: boolean;
58
+ };
59
+ images: {
60
+ thumbnail: {
61
+ width: number;
62
+ height: number;
63
+ crop: boolean;
64
+ quality: number;
65
+ };
66
+ watermark: boolean;
67
+ };
68
+ };
69
+ sections: {
70
+ category: {
71
+ allowRecursiveDelete: boolean;
72
+ };
73
+ };
74
+ db: {
75
+ schemaNamingConvention: {
76
+ tableCaseStyle: 'camelCase' | 'snakeCase' | 'pascalCase';
77
+ columnCaseStyle: 'camelCase' | 'snakeCase' | 'pascalCase';
78
+ };
79
+ };
80
+ debug: boolean;
81
+ strict: boolean;
82
+ }
83
+ /**
84
+ * Gets the CMS configuration, loading it lazily on first access.
85
+ * The configuration is cached after the first load for performance.
86
+ *
87
+ * @returns A readonly computed CMS configuration with all required fields
88
+ * @throws Error if the config file exists but is invalid
89
+ */
90
+ export declare function getCMSConfig(): Readonly<ComputedCMSConfig>;
91
+ export {};
92
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/config-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmGnB,CAAA;AAGF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAGvD,MAAM,WAAW,iBAAiB;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE;QACD,OAAO,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE;QACH,MAAM,EAAE;YACJ,UAAU,EAAE,MAAM,CAAA;YAClB,iBAAiB,EAAE,OAAO,CAAA;SAC7B,CAAA;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,KAAK,EAAE,MAAM,CAAA;gBACb,MAAM,EAAE,MAAM,CAAA;gBACd,IAAI,EAAE,OAAO,CAAA;gBACb,OAAO,EAAE,MAAM,CAAA;aAClB,CAAA;YACD,SAAS,EAAE,OAAO,CAAA;SACrB,CAAA;KACJ,CAAA;IACD,QAAQ,EAAE;QACN,QAAQ,EAAE;YACN,oBAAoB,EAAE,OAAO,CAAA;SAChC,CAAA;KACJ,CAAA;IACD,EAAE,EAAE;QACA,sBAAsB,EAAE;YACpB,cAAc,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;YACxD,eAAe,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;SAC5D,CAAA;KACJ,CAAA;IACD,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAClB;AAyHD;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAW1D"}
@@ -0,0 +1,230 @@
1
+ if (typeof window !== 'undefined') {
2
+ throw new Error('This module can only run on the server');
3
+ }
4
+ // import 'server-only'
5
+ // import chalk from 'chalk'
6
+ import * as z from 'zod';
7
+ import { loadConfigModule } from './loader';
8
+ // 1. Define config schema
9
+ const cmsConfigSchema = z.object({
10
+ /**
11
+ * The folder where the sections are located
12
+ */
13
+ sectionsFolder: z.string().optional(),
14
+ api: z
15
+ .object({
16
+ /**
17
+ * The base URL of the cms
18
+ */
19
+ baseUrl: z.string(),
20
+ })
21
+ .optional(),
22
+ /**
23
+ * The name of the site
24
+ */
25
+ siteName: z.string().optional(),
26
+ theme: z.string().optional(),
27
+ /**
28
+ * Files configuration
29
+ */
30
+ files: z
31
+ .object({
32
+ /**
33
+ * Upload configuration
34
+ */
35
+ upload: z.object({
36
+ /**
37
+ * The path where the files are uploaded
38
+ */
39
+ uploadPath: z.string(),
40
+ /**
41
+ * Whether to keep the file extension
42
+ */
43
+ keepFileExtension: z.boolean(),
44
+ }),
45
+ /**
46
+ * Images configuration
47
+ */
48
+ images: z
49
+ .object({
50
+ /**
51
+ * Global images thumbnail configuration
52
+ */
53
+ thumbnail: z
54
+ .object({
55
+ width: z.number(),
56
+ height: z.number(),
57
+ crop: z.boolean(),
58
+ quality: z.number().optional(),
59
+ })
60
+ .optional(),
61
+ /**
62
+ * Global images watermark configuration
63
+ */
64
+ watermark: z.boolean().optional(),
65
+ })
66
+ .optional(),
67
+ })
68
+ .optional(),
69
+ sections: z
70
+ .object({
71
+ category: z.object({
72
+ /**
73
+ * Whether to allow recursive deletion
74
+ */
75
+ allowRecursiveDelete: z.boolean(),
76
+ }),
77
+ })
78
+ .optional(),
79
+ /**
80
+ * Database configuration
81
+ */
82
+ db: z
83
+ .object({
84
+ schemaNamingConvention: z
85
+ .object({
86
+ /**
87
+ * The case style of the table name
88
+ */
89
+ tableCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
90
+ /**
91
+ * The case style of the column name
92
+ */
93
+ columnCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
94
+ })
95
+ .optional(),
96
+ })
97
+ .optional(),
98
+ debug: z.boolean().optional(),
99
+ /**
100
+ * Whether to enable strict mode.
101
+ * @default false
102
+ */
103
+ strict: z.boolean().optional(),
104
+ });
105
+ // Merge utility function
106
+ function mergeConfig(defaults, userConfig) {
107
+ return {
108
+ sectionsFolder: userConfig.sectionsFolder ?? defaults.sectionsFolder,
109
+ siteName: userConfig.siteName ?? defaults.siteName,
110
+ strict: userConfig.strict ?? defaults.strict,
111
+ api: {
112
+ baseUrl: userConfig.api?.baseUrl ?? defaults.api.baseUrl,
113
+ },
114
+ theme: userConfig.theme ?? defaults.theme,
115
+ files: {
116
+ upload: {
117
+ uploadPath: userConfig.files?.upload?.uploadPath ?? defaults.files.upload.uploadPath,
118
+ keepFileExtension: userConfig.files?.upload?.keepFileExtension ?? defaults.files.upload.keepFileExtension,
119
+ },
120
+ images: {
121
+ thumbnail: {
122
+ width: userConfig.files?.images?.thumbnail?.width ?? defaults.files.images.thumbnail.width,
123
+ height: userConfig.files?.images?.thumbnail?.height ?? defaults.files.images.thumbnail.height,
124
+ crop: userConfig.files?.images?.thumbnail?.crop ?? defaults.files.images.thumbnail.crop,
125
+ quality: userConfig.files?.images?.thumbnail?.quality ?? defaults.files.images.thumbnail.quality,
126
+ },
127
+ watermark: userConfig.files?.images?.watermark ?? defaults.files.images.watermark,
128
+ },
129
+ },
130
+ sections: {
131
+ category: {
132
+ allowRecursiveDelete: userConfig.sections?.category?.allowRecursiveDelete ??
133
+ defaults.sections.category.allowRecursiveDelete,
134
+ },
135
+ },
136
+ db: {
137
+ schemaNamingConvention: {
138
+ tableCaseStyle: userConfig.db?.schemaNamingConvention?.tableCaseStyle ??
139
+ defaults.db.schemaNamingConvention.tableCaseStyle,
140
+ columnCaseStyle: userConfig.db?.schemaNamingConvention?.columnCaseStyle ??
141
+ defaults.db.schemaNamingConvention.columnCaseStyle,
142
+ },
143
+ },
144
+ debug: userConfig.debug ?? defaults.debug,
145
+ };
146
+ }
147
+ // Default configuration values
148
+ const defaultConfig = {
149
+ sectionsFolder: 'sections',
150
+ siteName: 'LZ CMS Admin',
151
+ api: {
152
+ baseUrl: '/api',
153
+ },
154
+ theme: 'dark',
155
+ files: {
156
+ upload: {
157
+ uploadPath: './public/content',
158
+ keepFileExtension: true,
159
+ },
160
+ images: {
161
+ thumbnail: {
162
+ width: 200,
163
+ height: 200,
164
+ crop: false,
165
+ quality: 80,
166
+ },
167
+ watermark: false,
168
+ },
169
+ },
170
+ sections: {
171
+ category: {
172
+ allowRecursiveDelete: false,
173
+ },
174
+ },
175
+ db: {
176
+ schemaNamingConvention: {
177
+ tableCaseStyle: 'pascalCase',
178
+ columnCaseStyle: 'camelCase',
179
+ },
180
+ },
181
+ debug: false,
182
+ strict: false,
183
+ };
184
+ /*const error = (error: string, greyMsg = ''): string => {
185
+ return `${chalk.bgRed.bold(' Error ')} ${error} ${greyMsg ? chalk.grey(greyMsg) : ''}`.trim()
186
+ }*/
187
+ let cachedConfig;
188
+ /**
189
+ * Loads and parses the user configuration module.
190
+ * This is called lazily when getCMSConfig() is first invoked.
191
+ *
192
+ * @returns The parsed user configuration object, or undefined if no config file exists
193
+ * @throws Error if the config file exists but cannot be loaded or parsed
194
+ */
195
+ function loadUserConfig() {
196
+ try {
197
+ const mod = loadConfigModule();
198
+ const config = mod ? (mod.config ?? mod) : undefined;
199
+ if (!config) {
200
+ return undefined;
201
+ }
202
+ // Parse and validate the user config
203
+ return cmsConfigSchema.parse(config);
204
+ }
205
+ catch (error) {
206
+ // If config file doesn't exist, return undefined to use defaults
207
+ // Otherwise, re-throw the error as it's a real problem
208
+ if (error instanceof Error && error.message.includes('Config file not found')) {
209
+ return undefined;
210
+ }
211
+ throw error;
212
+ }
213
+ }
214
+ /**
215
+ * Gets the CMS configuration, loading it lazily on first access.
216
+ * The configuration is cached after the first load for performance.
217
+ *
218
+ * @returns A readonly computed CMS configuration with all required fields
219
+ * @throws Error if the config file exists but is invalid
220
+ */
221
+ export function getCMSConfig() {
222
+ if (cachedConfig === undefined) {
223
+ // Load user config lazily (only when this function is first called)
224
+ const userConfig = loadUserConfig();
225
+ // Merge user config with defaults
226
+ const mergedConfig = mergeConfig(defaultConfig, userConfig ?? {});
227
+ cachedConfig = mergedConfig;
228
+ }
229
+ return cachedConfig;
230
+ }
@@ -0,0 +1,3 @@
1
+ export { getCMSConfig } from './config-loader';
2
+ export type { CMSConfig } from './config-loader';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { getCMSConfig } from './config-loader';
@@ -0,0 +1,2 @@
1
+ export declare const loadConfigModule: () => unknown;
2
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,QAAO,OAwCnC,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { existsSync } from 'fs';
2
+ import { resolve, join } from 'path';
3
+ // Keep bundlers from statically analyzing these requires
4
+ const safeRequire = (id) => {
5
+ const req = eval('require');
6
+ return req(id);
7
+ };
8
+ export const loadConfigModule = () => {
9
+ const cwd = process.cwd();
10
+ const candidates = [
11
+ 'lz.config.js',
12
+ 'lz.config.cjs',
13
+ 'lz.config.mjs',
14
+ 'lz.config.json',
15
+ 'lz.config.ts',
16
+ 'lz.config.cts',
17
+ 'lz.config.mts',
18
+ ].map((f) => resolve(join(cwd, f)));
19
+ const found = candidates.find((p) => existsSync(p));
20
+ if (!found) {
21
+ throw new Error(`Config file not found. Searched: ${candidates.join(', ')}`);
22
+ }
23
+ const isTs = found.endsWith('.ts') || found.endsWith('.cts') || found.endsWith('.mts');
24
+ let unregister;
25
+ try {
26
+ if (isTs) {
27
+ try {
28
+ const { register } = safeRequire('esbuild-register/dist/node');
29
+ unregister = register({ format: 'cjs', loader: 'ts' }).unregister;
30
+ }
31
+ catch {
32
+ throw new Error(`Unable to load TypeScript config '${found}'. Install 'esbuild-register' in nextjs-cms/cms, or provide lz.config.js/json.`);
33
+ }
34
+ }
35
+ const mod = safeRequire(found);
36
+ unregister?.();
37
+ return mod.default ?? mod;
38
+ }
39
+ finally {
40
+ unregister?.();
41
+ }
42
+ };
@@ -0,0 +1,2 @@
1
+ export { MysqlTableChecker } from './table-checker';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { MysqlTableChecker } from './table-checker';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Base class for table information
3
+ */
4
+ export declare abstract class DbTableChecker {
5
+ }
6
+ //# sourceMappingURL=DbTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DbTable.d.ts","sourceRoot":"","sources":["../../../../src/core/db/table-checker/DbTable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,8BAAsB,cAAc;CAEnC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Base class for table information
3
+ */
4
+ export class DbTableChecker {
5
+ }
@@ -0,0 +1,34 @@
1
+ import { DbTableChecker } from './DbTable';
2
+ /**
3
+ * MySQL Table class
4
+ */
5
+ export declare class MysqlTableChecker extends DbTableChecker {
6
+ static getColumns(tableName: string): Promise<string[]>;
7
+ static getExistingKeys(table: string): Promise<{
8
+ primaryKeys: string[];
9
+ uniqueKeys: {
10
+ name: string;
11
+ columns: string[];
12
+ }[];
13
+ indexKeys: {
14
+ name: string;
15
+ columns: string[];
16
+ }[];
17
+ foreignKeys: any;
18
+ fullTextKeys: {
19
+ name: string;
20
+ columns: string[];
21
+ }[];
22
+ } | undefined>;
23
+ static getExistingTableStructure(table: string): Promise<{
24
+ [key: string]: {
25
+ Field: string;
26
+ Type: string;
27
+ Null: string;
28
+ Key: string;
29
+ Default: string;
30
+ Extra: string;
31
+ };
32
+ } | null>;
33
+ }
34
+ //# sourceMappingURL=MysqlTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MysqlTable.d.ts","sourceRoot":"","sources":["../../../../src/core/db/table-checker/MysqlTable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG1C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;WACpC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WAkBhD,eAAe,CAAC,KAAK,EAAE,MAAM;;;kBAIR,MAAM;qBAAW,MAAM,EAAE;;;kBAC1B,MAAM;qBAAW,MAAM,EAAE;;;;kBACtB,MAAM;qBAAW,MAAM,EAAE;;;WA2DhD,yBAAyB,CAAC,KAAK,EAAE,MAAM;;mBAU7B,MAAM;kBACP,MAAM;kBACN,MAAM;iBACP,MAAM;qBACF,MAAM;mBACR,MAAM;;;CAahC"}
@@ -0,0 +1,102 @@
1
+ import { db } from '../../../db/client';
2
+ import { sql } from 'drizzle-orm';
3
+ import { DbTableChecker } from './DbTable';
4
+ import chalk from 'chalk';
5
+ /**
6
+ * MySQL Table class
7
+ */
8
+ export class MysqlTableChecker extends DbTableChecker {
9
+ static async getColumns(tableName) {
10
+ const statement = sql `
11
+ SELECT COLUMN_NAME
12
+ FROM information_schema.COLUMNS c
13
+ inner join information_schema.TABLES t ON t.TABLE_NAME = c.TABLE_NAME
14
+ WHERE t.TABLE_NAME = ${tableName}`;
15
+ const _cols = [];
16
+ const _res = await db.execute(statement);
17
+ // @ts-ignore
18
+ const _rows = _res[0];
19
+ _rows.map((row) => {
20
+ _cols.push(row.COLUMN_NAME);
21
+ });
22
+ return _cols;
23
+ }
24
+ static async getExistingKeys(table) {
25
+ try {
26
+ const [keys] = await db.execute(sql `SHOW KEYS FROM \`${sql.raw(table)}\``);
27
+ const primaryKeys = [];
28
+ const uniqueKeys = [];
29
+ const indexKeys = [];
30
+ const fullTextKeys = [];
31
+ const _uniqueKeyMap = {};
32
+ const _indexKeyMap = {};
33
+ const _fullTextKeyMap = {};
34
+ for (const key of keys) {
35
+ if (key.Key_name === 'PRIMARY') {
36
+ primaryKeys.push(key.Column_name);
37
+ }
38
+ else if (key.Non_unique === 0) {
39
+ if (!_uniqueKeyMap[key.Key_name]) {
40
+ _uniqueKeyMap[key.Key_name] = [];
41
+ }
42
+ _uniqueKeyMap[key.Key_name].push(key.Column_name);
43
+ }
44
+ else if (key.Index_type === 'FULLTEXT') {
45
+ if (!_fullTextKeyMap[key.Key_name]) {
46
+ _fullTextKeyMap[key.Key_name] = [];
47
+ }
48
+ _fullTextKeyMap[key.Key_name].push(key.Column_name);
49
+ }
50
+ else if (key.Non_unique === 1) {
51
+ if (!_indexKeyMap[key.Key_name]) {
52
+ _indexKeyMap[key.Key_name] = [];
53
+ }
54
+ _indexKeyMap[key.Key_name].push(key.Column_name);
55
+ }
56
+ }
57
+ for (const key in _uniqueKeyMap) {
58
+ if (_uniqueKeyMap[key])
59
+ uniqueKeys.push({ name: key, columns: _uniqueKeyMap[key] });
60
+ }
61
+ for (const key in _indexKeyMap) {
62
+ if (_indexKeyMap[key])
63
+ indexKeys.push({ name: key, columns: _indexKeyMap[key] });
64
+ }
65
+ for (const key in _fullTextKeyMap) {
66
+ if (_fullTextKeyMap[key])
67
+ fullTextKeys.push({ name: key, columns: _fullTextKeyMap[key] });
68
+ }
69
+ // Foreign keys should be retrieved from information_schema
70
+ const [foreignKeys] = await db.execute(sql `
71
+ SELECT COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
72
+ FROM information_schema.KEY_COLUMN_USAGE
73
+ WHERE TABLE_NAME = ${table} AND CONSTRAINT_NAME != 'PRIMARY' AND REFERENCED_TABLE_NAME IS NOT NULL;
74
+ `);
75
+ return { primaryKeys, uniqueKeys, indexKeys, foreignKeys, fullTextKeys };
76
+ }
77
+ catch (error) {
78
+ if (error.code === 'ER_NO_SUCH_TABLE') {
79
+ return undefined;
80
+ }
81
+ else {
82
+ console.error(chalk.red(` - Error retrieving keys for table ${table}:`, error));
83
+ }
84
+ }
85
+ }
86
+ static async getExistingTableStructure(table) {
87
+ try {
88
+ /**
89
+ * Get the columns from the table except the auto-generated `created_at`, `updated_at`, `created_by`, and `updated_by` fields
90
+ */
91
+ const [rows] = await db.execute(sql `SHOW COLUMNS FROM \`${sql.raw(table)}\` WHERE Field NOT IN ('created_at', 'updated_at', 'created_by', 'updated_by')`);
92
+ const tableStructure = {};
93
+ for (const row of rows) {
94
+ tableStructure[row.Field] = row;
95
+ }
96
+ return tableStructure;
97
+ }
98
+ catch (error) {
99
+ return null;
100
+ }
101
+ }
102
+ }
@@ -0,0 +1,2 @@
1
+ export * from './MysqlTable';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/db/table-checker/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './MysqlTable';