@kyro-cms/core 0.9.0 → 0.9.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 (248) hide show
  1. package/README.md +57 -589
  2. package/dist/{WebhookService-118ZTFis.d.ts → WebhookService-CUTb9XOy.d.ts} +1 -1
  3. package/dist/{WebhookService-AefJfqX0.d.cts → WebhookService-Yg2UEOB4.d.cts} +1 -1
  4. package/dist/api-handler-graphql.cjs +44 -0
  5. package/dist/api-handler-graphql.cjs.map +1 -0
  6. package/dist/api-handler-graphql.d.cts +6 -0
  7. package/dist/api-handler-graphql.d.ts +6 -0
  8. package/dist/api-handler-graphql.js +41 -0
  9. package/dist/api-handler-graphql.js.map +1 -0
  10. package/dist/api-handler-trpc.cjs +38 -0
  11. package/dist/api-handler-trpc.cjs.map +1 -0
  12. package/dist/api-handler-trpc.d.cts +5 -0
  13. package/dist/api-handler-trpc.d.ts +5 -0
  14. package/dist/api-handler-trpc.js +36 -0
  15. package/dist/api-handler-trpc.js.map +1 -0
  16. package/dist/api-handler.cjs +31 -97
  17. package/dist/api-handler.cjs.map +1 -1
  18. package/dist/api-handler.d.cts +2 -1
  19. package/dist/api-handler.d.ts +2 -1
  20. package/dist/api-handler.js +19 -95
  21. package/dist/api-handler.js.map +1 -1
  22. package/dist/{tenant-B1YB0Jy8.d.ts → base-B71y_EAF.d.cts} +6 -12
  23. package/dist/{tenant-Cpeveji6.d.cts → base-DaqY2GhA.d.ts} +6 -12
  24. package/dist/bootstrap-5NLASFOG.cjs +32 -0
  25. package/dist/{bootstrap-AKAUP6F6.cjs.map → bootstrap-5NLASFOG.cjs.map} +1 -1
  26. package/dist/bootstrap-T5BK77LD.js +7 -0
  27. package/dist/{bootstrap-JCML6NFO.js.map → bootstrap-T5BK77LD.js.map} +1 -1
  28. package/dist/{chunk-35U3FROB.js → chunk-22M4O4ZJ.js} +607 -63
  29. package/dist/chunk-22M4O4ZJ.js.map +1 -0
  30. package/dist/chunk-2HZRBATX.cjs +253 -0
  31. package/dist/chunk-2HZRBATX.cjs.map +1 -0
  32. package/dist/{chunk-VJT6P4N6.cjs → chunk-3HR772HI.cjs} +199 -32
  33. package/dist/chunk-3HR772HI.cjs.map +1 -0
  34. package/dist/chunk-3KTWGODI.cjs +178 -0
  35. package/dist/chunk-3KTWGODI.cjs.map +1 -0
  36. package/dist/{chunk-QXIQWPAP.js → chunk-3UK5XBVJ.js} +4 -134
  37. package/dist/chunk-3UK5XBVJ.js.map +1 -0
  38. package/dist/{chunk-FXYP2HA6.js → chunk-4AO3A3JM.js} +48 -4
  39. package/dist/chunk-4AO3A3JM.js.map +1 -0
  40. package/dist/chunk-4M7X5HAB.cjs +173 -0
  41. package/dist/chunk-4M7X5HAB.cjs.map +1 -0
  42. package/dist/chunk-5EPFQUQD.js +3243 -0
  43. package/dist/chunk-5EPFQUQD.js.map +1 -0
  44. package/dist/{chunk-Y3N7UUDO.js → chunk-7OGPN7MP.js} +5 -2
  45. package/dist/chunk-7OGPN7MP.js.map +1 -0
  46. package/dist/{chunk-WOWUL7ZY.js → chunk-AL5KX63J.js} +4 -3
  47. package/dist/chunk-AL5KX63J.js.map +1 -0
  48. package/dist/{chunk-2OL4O2TH.cjs → chunk-C36TMDTY.cjs} +66 -61
  49. package/dist/chunk-C36TMDTY.cjs.map +1 -0
  50. package/dist/{chunk-ES5HNFFT.js → chunk-CF7OL6HR.js} +4 -2
  51. package/dist/chunk-CF7OL6HR.js.map +1 -0
  52. package/dist/chunk-CJONKRHJ.js +162 -0
  53. package/dist/chunk-CJONKRHJ.js.map +1 -0
  54. package/dist/{chunk-2KVHZE6O.cjs → chunk-COIASRDK.cjs} +202 -46
  55. package/dist/chunk-COIASRDK.cjs.map +1 -0
  56. package/dist/chunk-DEVFAKCQ.cjs +3291 -0
  57. package/dist/chunk-DEVFAKCQ.cjs.map +1 -0
  58. package/dist/{chunk-3ZFYL34R.js → chunk-DYTZ6FQ7.js} +12 -185
  59. package/dist/chunk-DYTZ6FQ7.js.map +1 -0
  60. package/dist/{chunk-QPPDLRNR.js → chunk-EJN2PAOE.js} +197 -41
  61. package/dist/chunk-EJN2PAOE.js.map +1 -0
  62. package/dist/chunk-FAXU7BMP.js +220 -0
  63. package/dist/chunk-FAXU7BMP.js.map +1 -0
  64. package/dist/{chunk-OHVB4AJ7.js → chunk-FOPGUM27.js} +22 -17
  65. package/dist/chunk-FOPGUM27.js.map +1 -0
  66. package/dist/chunk-GAOXD3XT.js +175 -0
  67. package/dist/chunk-GAOXD3XT.js.map +1 -0
  68. package/dist/{chunk-4DA7QPLA.cjs → chunk-GXFOGU7N.cjs} +5 -2
  69. package/dist/chunk-GXFOGU7N.cjs.map +1 -0
  70. package/dist/{chunk-I7HHI6QV.cjs → chunk-IDVRRRAK.cjs} +17 -9
  71. package/dist/chunk-IDVRRRAK.cjs.map +1 -0
  72. package/dist/{chunk-WQBRWOQT.cjs → chunk-JOPVMWTM.cjs} +3 -2
  73. package/dist/chunk-JOPVMWTM.cjs.map +1 -0
  74. package/dist/chunk-KC2GDBLS.cjs +84 -0
  75. package/dist/chunk-KC2GDBLS.cjs.map +1 -0
  76. package/dist/{chunk-K7JPTH3G.cjs → chunk-KNRSROWB.cjs} +132 -74
  77. package/dist/chunk-KNRSROWB.cjs.map +1 -0
  78. package/dist/{chunk-3AJE4SEG.js → chunk-KPA4AN4R.js} +125 -67
  79. package/dist/chunk-KPA4AN4R.js.map +1 -0
  80. package/dist/{chunk-QUW2RZTM.cjs → chunk-L46ROHUS.cjs} +51 -7
  81. package/dist/chunk-L46ROHUS.cjs.map +1 -0
  82. package/dist/chunk-L4EZKIEX.js +185 -0
  83. package/dist/chunk-L4EZKIEX.js.map +1 -0
  84. package/dist/{chunk-REK7AYOC.js → chunk-L5UKKZQN.js} +199 -32
  85. package/dist/chunk-L5UKKZQN.js.map +1 -0
  86. package/dist/chunk-NKPKR5BW.cjs +188 -0
  87. package/dist/chunk-NKPKR5BW.cjs.map +1 -0
  88. package/dist/{chunk-Y3QQN7PN.js → chunk-P2HKJ7P5.js} +13 -4
  89. package/dist/chunk-P2HKJ7P5.js.map +1 -0
  90. package/dist/{chunk-SA7NSSIQ.cjs → chunk-PI73NNOK.cjs} +13 -187
  91. package/dist/chunk-PI73NNOK.cjs.map +1 -0
  92. package/dist/{chunk-HXRD4B37.js → chunk-PU2Z5VWF.js} +1279 -556
  93. package/dist/chunk-PU2Z5VWF.js.map +1 -0
  94. package/dist/{chunk-H727JIG7.js → chunk-Q72BOAPK.js} +16 -8
  95. package/dist/chunk-Q72BOAPK.js.map +1 -0
  96. package/dist/{chunk-IBG6V56E.cjs → chunk-QFLB4EIJ.cjs} +2 -139
  97. package/dist/chunk-QFLB4EIJ.cjs.map +1 -0
  98. package/dist/{chunk-YVUJBEXE.cjs → chunk-RAMGUDJN.cjs} +16 -7
  99. package/dist/chunk-RAMGUDJN.cjs.map +1 -0
  100. package/dist/{chunk-LINKCEG4.cjs → chunk-ROJHKAQ4.cjs} +617 -73
  101. package/dist/chunk-ROJHKAQ4.cjs.map +1 -0
  102. package/dist/{chunk-5KVM3WEY.cjs → chunk-RSF3UU7H.cjs} +1330 -602
  103. package/dist/chunk-RSF3UU7H.cjs.map +1 -0
  104. package/dist/{chunk-V3LKPM3O.cjs → chunk-SHTTJMLT.cjs} +4 -2
  105. package/dist/chunk-SHTTJMLT.cjs.map +1 -0
  106. package/dist/chunk-SPBTLUN6.js +92 -0
  107. package/dist/chunk-SPBTLUN6.js.map +1 -0
  108. package/dist/{chunk-57P6MJKC.js → chunk-TXSZFA4G.js} +3 -3
  109. package/dist/chunk-TXSZFA4G.js.map +1 -0
  110. package/dist/chunk-UERVXYVK.cjs +99 -0
  111. package/dist/chunk-UERVXYVK.cjs.map +1 -0
  112. package/dist/{chunk-PDYFVNUX.cjs → chunk-V2TVSCV5.cjs} +16 -23
  113. package/dist/chunk-V2TVSCV5.cjs.map +1 -0
  114. package/dist/{chunk-DXHRBMGB.js → chunk-VO35MNPH.js} +12 -19
  115. package/dist/chunk-VO35MNPH.js.map +1 -0
  116. package/dist/{chunk-IA6AU5PI.cjs → chunk-WNCYAKF3.cjs} +3 -3
  117. package/dist/chunk-WNCYAKF3.cjs.map +1 -0
  118. package/dist/chunk-XEB7PH2E.js +81 -0
  119. package/dist/chunk-XEB7PH2E.js.map +1 -0
  120. package/dist/cli/index.cjs +5 -5
  121. package/dist/cli/index.cjs.map +1 -1
  122. package/dist/cli/index.js +5 -5
  123. package/dist/cli/index.js.map +1 -1
  124. package/dist/client.cjs +3 -3
  125. package/dist/client.d.cts +3 -3
  126. package/dist/client.d.ts +3 -3
  127. package/dist/client.js +1 -1
  128. package/dist/drizzle/index.cjs +14 -13
  129. package/dist/drizzle/index.d.cts +9 -7
  130. package/dist/drizzle/index.d.ts +9 -7
  131. package/dist/drizzle/index.js +5 -4
  132. package/dist/fields/index.cjs +21 -37
  133. package/dist/fields/index.d.cts +2 -22
  134. package/dist/fields/index.d.ts +2 -22
  135. package/dist/fields/index.js +1 -1
  136. package/dist/graphql/index.cjs +5 -4
  137. package/dist/graphql/index.d.cts +5 -3
  138. package/dist/graphql/index.d.ts +5 -3
  139. package/dist/graphql/index.js +3 -2
  140. package/dist/index-CJXPB_ot.d.ts +276 -0
  141. package/dist/index-CaTNnLGd.d.cts +276 -0
  142. package/dist/index.cjs +304 -162
  143. package/dist/index.cjs.map +1 -1
  144. package/dist/index.d.cts +129 -205
  145. package/dist/index.d.ts +129 -205
  146. package/dist/index.js +172 -33
  147. package/dist/index.js.map +1 -1
  148. package/dist/integration.cjs +2 -2
  149. package/dist/integration.js +1 -1
  150. package/dist/mongo-auth-adapter-ISOM7FSS.cjs +17 -0
  151. package/dist/{mongo-auth-adapter-NHHUJHVH.cjs.map → mongo-auth-adapter-ISOM7FSS.cjs.map} +1 -1
  152. package/dist/mongo-auth-adapter-MO6STCV3.js +4 -0
  153. package/dist/{mongo-auth-adapter-NJQUUCTP.js.map → mongo-auth-adapter-MO6STCV3.js.map} +1 -1
  154. package/dist/mongodb/index.cjs +8 -7
  155. package/dist/mongodb/index.d.cts +5 -7
  156. package/dist/mongodb/index.d.ts +5 -7
  157. package/dist/mongodb/index.js +4 -3
  158. package/dist/postgres-auth-adapter-DWDR7P5G.js +5 -0
  159. package/dist/{postgres-auth-adapter-3T2NKTSE.js.map → postgres-auth-adapter-DWDR7P5G.js.map} +1 -1
  160. package/dist/postgres-auth-adapter-WRWSJD4E.cjs +14 -0
  161. package/dist/{postgres-auth-adapter-7IEENCKQ.cjs.map → postgres-auth-adapter-WRWSJD4E.cjs.map} +1 -1
  162. package/dist/redis-adapter-HGTPWIGV.js +4 -0
  163. package/dist/{redis-adapter-VQXD7ESY.js.map → redis-adapter-HGTPWIGV.js.map} +1 -1
  164. package/dist/redis-adapter-KJ3YOOT6.cjs +13 -0
  165. package/dist/{redis-adapter-D2E2S3GB.cjs.map → redis-adapter-KJ3YOOT6.cjs.map} +1 -1
  166. package/dist/rest/index.cjs +15 -14
  167. package/dist/rest/index.d.cts +4 -4
  168. package/dist/rest/index.d.ts +4 -4
  169. package/dist/rest/index.js +13 -12
  170. package/dist/{schema-5PHL5IVB.js → schema-6I5OFR4Z.js} +3 -3
  171. package/dist/{schema-5PHL5IVB.js.map → schema-6I5OFR4Z.js.map} +1 -1
  172. package/dist/{schema-37SE2F4B.cjs → schema-TTFE4467.cjs} +14 -14
  173. package/dist/{schema-37SE2F4B.cjs.map → schema-TTFE4467.cjs.map} +1 -1
  174. package/dist/sqlite-adapter-6GEUSVXQ.js +4 -0
  175. package/dist/{sqlite-adapter-TR3U3W6Q.js.map → sqlite-adapter-6GEUSVXQ.js.map} +1 -1
  176. package/dist/sqlite-adapter-CSIZE5SX.cjs +13 -0
  177. package/dist/{sqlite-adapter-LVK5PS4T.cjs.map → sqlite-adapter-CSIZE5SX.cjs.map} +1 -1
  178. package/dist/templates/index.cjs +133 -31
  179. package/dist/templates/index.d.cts +52 -9
  180. package/dist/templates/index.d.ts +52 -9
  181. package/dist/templates/index.js +3 -1
  182. package/dist/trpc/index.cjs +13 -12
  183. package/dist/trpc/index.d.cts +55 -49
  184. package/dist/trpc/index.d.ts +55 -49
  185. package/dist/trpc/index.js +4 -3
  186. package/dist/{types-D6ZLRGbH.d.cts → types-CpjuXbe7.d.cts} +2 -0
  187. package/dist/{types-D6ZLRGbH.d.ts → types-CpjuXbe7.d.ts} +2 -0
  188. package/dist/{types-Bs1up4yP.d.ts → types-CyCQ6SAI.d.ts} +28 -2
  189. package/dist/{types-J3R9nVsZ.d.cts → types-DJxD9394.d.cts} +28 -2
  190. package/dist/{types-VtjUxIMp.d.cts → types-Z6FBiqa2.d.cts} +35 -14
  191. package/dist/{types-VtjUxIMp.d.ts → types-Z6FBiqa2.d.ts} +35 -14
  192. package/package.json +22 -4
  193. package/dist/bootstrap-AKAUP6F6.cjs +0 -32
  194. package/dist/bootstrap-JCML6NFO.js +0 -7
  195. package/dist/chunk-2KVHZE6O.cjs.map +0 -1
  196. package/dist/chunk-2OL4O2TH.cjs.map +0 -1
  197. package/dist/chunk-35U3FROB.js.map +0 -1
  198. package/dist/chunk-3AJE4SEG.js.map +0 -1
  199. package/dist/chunk-3J4MFTI3.js +0 -3872
  200. package/dist/chunk-3J4MFTI3.js.map +0 -1
  201. package/dist/chunk-3ZFYL34R.js.map +0 -1
  202. package/dist/chunk-4DA7QPLA.cjs.map +0 -1
  203. package/dist/chunk-57P6MJKC.js.map +0 -1
  204. package/dist/chunk-5KVM3WEY.cjs.map +0 -1
  205. package/dist/chunk-6IMPH6WV.cjs +0 -3897
  206. package/dist/chunk-6IMPH6WV.cjs.map +0 -1
  207. package/dist/chunk-ATBOUGQP.cjs +0 -513
  208. package/dist/chunk-ATBOUGQP.cjs.map +0 -1
  209. package/dist/chunk-DXHRBMGB.js.map +0 -1
  210. package/dist/chunk-ES5HNFFT.js.map +0 -1
  211. package/dist/chunk-FXYP2HA6.js.map +0 -1
  212. package/dist/chunk-H727JIG7.js.map +0 -1
  213. package/dist/chunk-HXRD4B37.js.map +0 -1
  214. package/dist/chunk-I7HHI6QV.cjs.map +0 -1
  215. package/dist/chunk-IA6AU5PI.cjs.map +0 -1
  216. package/dist/chunk-IBG6V56E.cjs.map +0 -1
  217. package/dist/chunk-K7JPTH3G.cjs.map +0 -1
  218. package/dist/chunk-LINKCEG4.cjs.map +0 -1
  219. package/dist/chunk-OHVB4AJ7.js.map +0 -1
  220. package/dist/chunk-PDYFVNUX.cjs.map +0 -1
  221. package/dist/chunk-Q23JB3KL.js +0 -488
  222. package/dist/chunk-Q23JB3KL.js.map +0 -1
  223. package/dist/chunk-QPPDLRNR.js.map +0 -1
  224. package/dist/chunk-QUW2RZTM.cjs.map +0 -1
  225. package/dist/chunk-QXIQWPAP.js.map +0 -1
  226. package/dist/chunk-R3XIBBAW.cjs +0 -34
  227. package/dist/chunk-R3XIBBAW.cjs.map +0 -1
  228. package/dist/chunk-REK7AYOC.js.map +0 -1
  229. package/dist/chunk-SA7NSSIQ.cjs.map +0 -1
  230. package/dist/chunk-SDMNUYVU.js +0 -30
  231. package/dist/chunk-SDMNUYVU.js.map +0 -1
  232. package/dist/chunk-V3LKPM3O.cjs.map +0 -1
  233. package/dist/chunk-VJT6P4N6.cjs.map +0 -1
  234. package/dist/chunk-WOWUL7ZY.js.map +0 -1
  235. package/dist/chunk-WQBRWOQT.cjs.map +0 -1
  236. package/dist/chunk-Y3N7UUDO.js.map +0 -1
  237. package/dist/chunk-Y3QQN7PN.js.map +0 -1
  238. package/dist/chunk-YVUJBEXE.cjs.map +0 -1
  239. package/dist/index-CLp-DRKA.d.ts +0 -64
  240. package/dist/index-DfO7G4kN.d.cts +0 -64
  241. package/dist/mongo-auth-adapter-NHHUJHVH.cjs +0 -17
  242. package/dist/mongo-auth-adapter-NJQUUCTP.js +0 -4
  243. package/dist/postgres-auth-adapter-3T2NKTSE.js +0 -5
  244. package/dist/postgres-auth-adapter-7IEENCKQ.cjs +0 -14
  245. package/dist/redis-adapter-D2E2S3GB.cjs +0 -13
  246. package/dist/redis-adapter-VQXD7ESY.js +0 -4
  247. package/dist/sqlite-adapter-LVK5PS4T.cjs +0 -13
  248. package/dist/sqlite-adapter-TR3U3W6Q.js +0 -4
@@ -1,4 +1,4 @@
1
- import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-3ZFYL34R.js';
1
+ import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-DYTZ6FQ7.js';
2
2
  import { sql, eq, desc, and, or, ne, inArray, like, gt, gte, lt, lte } from 'drizzle-orm';
3
3
  import { text, uuid, jsonb, timestamp, boolean, decimal, integer as integer$1, varchar, pgTable } from 'drizzle-orm/pg-core';
4
4
  import { text as text$1, integer, numeric, sqliteTable } from 'drizzle-orm/sqlite-core';
@@ -15,11 +15,13 @@ function fieldToDrizzleType(field, dialect = "postgres") {
15
15
  case "text":
16
16
  case "email":
17
17
  case "password":
18
- case "textarea":
19
18
  case "color":
19
+ return dialect === "sqlite" ? "text" : "varchar";
20
+ case "textarea":
20
21
  case "code":
21
22
  case "markdown":
22
- return dialect === "sqlite" ? "text" : "varchar";
23
+ case "secret":
24
+ return "text";
23
25
  case "number":
24
26
  return field.integer ? "integer" : "decimal";
25
27
  case "checkbox":
@@ -41,7 +43,7 @@ function fieldToDrizzleType(field, dialect = "postgres") {
41
43
  case "relationship":
42
44
  return dialect === "sqlite" ? "text" : "varchar";
43
45
  case "upload":
44
- return dialect === "sqlite" ? "text" : "varchar";
46
+ return "jsonb";
45
47
  default:
46
48
  return "jsonb";
47
49
  }
@@ -74,8 +76,8 @@ function collectionToDrizzleSchema(collection, dialect = "postgres") {
74
76
  lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);
75
77
  lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);
76
78
  }
77
- lines.push(` _status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('_status').default('published'),`);
78
- lines.push(` _has_draft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('_has_draft').default(false),`);
79
+ lines.push(` publishStatus: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('publishStatus').default('draft'),`);
80
+ lines.push(` hasDraft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('hasDraft').default(false),`);
79
81
  lines.push("});");
80
82
  return lines.join("\n");
81
83
  }
@@ -86,13 +88,6 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
86
88
  connectionString;
87
89
  draftsTableReady = false;
88
90
  versionsTableReady = false;
89
- tenantContext;
90
- setTenantContext(context) {
91
- this.tenantContext = context;
92
- }
93
- getTenantContext() {
94
- return this.tenantContext;
95
- }
96
91
  constructor(options) {
97
92
  super();
98
93
  this.schema = options.schema || {};
@@ -119,6 +114,14 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
119
114
  if (result.updatedAt && typeof result.updatedAt === "string") {
120
115
  result.updatedAt = new Date(result.updatedAt);
121
116
  }
117
+ for (const field of config.fields) {
118
+ if (field.type === "date" && field.name) {
119
+ const value = result[field.name];
120
+ if (value && typeof value === "string") {
121
+ result[field.name] = new Date(value);
122
+ }
123
+ }
124
+ }
122
125
  for (const field of config.fields) {
123
126
  const dbType = fieldToDrizzleType(field, this.dialect);
124
127
  const isJsonb = dbType === "jsonb";
@@ -147,6 +150,14 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
147
150
  }
148
151
  }
149
152
  }
153
+ for (const field of config.fields) {
154
+ if (field.name && result[field.name] === "") {
155
+ const dbType = fieldToDrizzleType(field, this.dialect);
156
+ if (dbType === "timestamp" || dbType === "jsonb" || dbType === "decimal" || dbType === "integer" || dbType === "numeric" || dbType === "boolean") {
157
+ result[field.name] = null;
158
+ }
159
+ }
160
+ }
150
161
  return result;
151
162
  }
152
163
  async connect() {
@@ -263,8 +274,8 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
263
274
  }
264
275
  if (!columns.createdAt) columns.createdAt = this.dialect === "sqlite" ? text$1("created_at").default((/* @__PURE__ */ new Date()).toISOString()) : timestamp("created_at").defaultNow();
265
276
  if (!columns.updatedAt) columns.updatedAt = this.dialect === "sqlite" ? text$1("updated_at").default((/* @__PURE__ */ new Date()).toISOString()) : timestamp("updated_at").defaultNow();
266
- columns._status = this.dialect === "sqlite" ? text$1("_status").default("published") : varchar("_status", { length: 20 }).default("published");
267
- columns._has_draft = this.dialect === "sqlite" ? integer("_has_draft", { mode: "boolean" }).default(false) : boolean("_has_draft").default(false);
277
+ columns.publishStatus = this.dialect === "sqlite" ? text$1("publishStatus").default("draft") : varchar("publishStatus", { length: 20 }).default("draft");
278
+ columns.hasDraft = this.dialect === "sqlite" ? integer("hasDraft", { mode: "boolean" }).default(false) : boolean("hasDraft").default(false);
268
279
  return this.dialect === "sqlite" ? sqliteTable(tableName, columns) : pgTable(tableName, columns);
269
280
  }
270
281
  async ensureCollectionTables(collections) {
@@ -283,8 +294,8 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
283
294
  ${colDefs}
284
295
  ${hasCreated ? "" : '"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
285
296
  ${hasUpdated ? "" : '"updated_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
286
- "_status" VARCHAR(20) DEFAULT 'published',
287
- "_has_draft" BOOLEAN DEFAULT false
297
+ "publishStatus" VARCHAR(20) DEFAULT 'draft',
298
+ "hasDraft" BOOLEAN DEFAULT false
288
299
  )
289
300
  `);
290
301
  } else {
@@ -295,8 +306,8 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
295
306
  ${colDefs}
296
307
  ${hasCreated ? "" : `"created_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
297
308
  ${hasUpdated ? "" : `"updated_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
298
- "_status" TEXT DEFAULT 'published',
299
- "_has_draft" INTEGER DEFAULT 0
309
+ "publishStatus" TEXT DEFAULT 'draft',
310
+ "hasDraft" INTEGER DEFAULT 0
300
311
  )
301
312
  `);
302
313
  }
@@ -310,6 +321,126 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
310
321
  }
311
322
  }
312
323
  }
324
+ for (const config of collections) {
325
+ const tableName = this.getTableName(config.slug);
326
+ if (tableName === "users" || tableName === "audit_logs") continue;
327
+ await this.syncTableColumns(config, tableName);
328
+ }
329
+ }
330
+ getColumnSqlDefinition(field, dialect) {
331
+ const dbType = fieldToDrizzleType(field, dialect);
332
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
333
+ const sqlType = this.columnSqlType(dbType, dialect);
334
+ return `"${sqlName}" ${sqlType} DEFAULT NULL`;
335
+ }
336
+ columnSqlType(dbType, dialect) {
337
+ if (dialect === "sqlite") {
338
+ switch (dbType) {
339
+ case "varchar":
340
+ return "TEXT";
341
+ case "text":
342
+ return "TEXT";
343
+ case "integer":
344
+ return "INTEGER";
345
+ case "decimal":
346
+ case "numeric":
347
+ return "NUMERIC";
348
+ case "boolean":
349
+ return "INTEGER";
350
+ case "timestamp":
351
+ return "TEXT";
352
+ case "jsonb":
353
+ return "TEXT";
354
+ default:
355
+ return "TEXT";
356
+ }
357
+ }
358
+ switch (dbType) {
359
+ case "varchar":
360
+ return "VARCHAR(255)";
361
+ case "text":
362
+ return "TEXT";
363
+ case "integer":
364
+ return "INTEGER";
365
+ case "decimal":
366
+ case "numeric":
367
+ return "DECIMAL";
368
+ case "boolean":
369
+ return "BOOLEAN";
370
+ case "timestamp":
371
+ return "TIMESTAMP";
372
+ case "jsonb":
373
+ return "JSONB";
374
+ default:
375
+ return "TEXT";
376
+ }
377
+ }
378
+ getExpectedColumnDefs(config, tableName) {
379
+ const defs = {};
380
+ const isGlobal = config.slug.startsWith("_globals_");
381
+ const hasCreated = config.fields.some((f) => f.name === "createdAt");
382
+ const hasUpdated = config.fields.some((f) => f.name === "updatedAt");
383
+ if (this.dialect === "postgres") {
384
+ defs["id"] = isGlobal ? '"id" TEXT PRIMARY KEY' : '"id" UUID PRIMARY KEY DEFAULT gen_random_uuid()';
385
+ if (!hasCreated) defs["created_at"] = '"created_at" TIMESTAMP DEFAULT NULL';
386
+ if (!hasUpdated) defs["updated_at"] = '"updated_at" TIMESTAMP DEFAULT NULL';
387
+ defs["publishStatus"] = '"publishStatus" VARCHAR(20) DEFAULT NULL';
388
+ defs["hasDraft"] = '"hasDraft" BOOLEAN DEFAULT NULL';
389
+ } else {
390
+ defs["id"] = '"id" TEXT PRIMARY KEY';
391
+ if (!hasCreated) defs["created_at"] = '"created_at" TEXT DEFAULT NULL';
392
+ if (!hasUpdated) defs["updated_at"] = '"updated_at" TEXT DEFAULT NULL';
393
+ defs["publishStatus"] = '"publishStatus" TEXT DEFAULT NULL';
394
+ defs["hasDraft"] = '"hasDraft" INTEGER DEFAULT NULL';
395
+ }
396
+ for (const field of config.fields) {
397
+ if (!field.name || field.name === "id") continue;
398
+ const def = this.getColumnSqlDefinition(field, this.dialect);
399
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
400
+ defs[sqlName] = def;
401
+ }
402
+ return defs;
403
+ }
404
+ async syncTableColumns(config, tableName) {
405
+ let existingCols;
406
+ try {
407
+ if (this.dialect === "postgres") {
408
+ const result = await this.client.execute(
409
+ sql`SELECT column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_name = ${tableName}`
410
+ );
411
+ existingCols = new Map(result.map((r) => [r.column_name, { type: r.data_type, maxLen: r.character_maximum_length }]));
412
+ } else {
413
+ const result = await this.client.execute(
414
+ sql`PRAGMA table_info("${sql.raw(tableName)}")`
415
+ );
416
+ existingCols = new Map(result.map((r) => [r.name, { type: r.type, maxLen: null }]));
417
+ }
418
+ } catch {
419
+ return;
420
+ }
421
+ const expected = this.getExpectedColumnDefs(config, tableName);
422
+ const missing = Object.keys(expected).filter((k) => !existingCols.has(k));
423
+ if (missing.length > 0) {
424
+ const alterStmts = missing.map((k) => `ALTER TABLE "${tableName}" ADD COLUMN ${expected[k]}`);
425
+ await this.executeRaw(sql.raw(alterStmts.join(";\n")));
426
+ }
427
+ if (this.dialect === "postgres") {
428
+ for (const field of config.fields) {
429
+ if (!field.name || field.name === "id") continue;
430
+ const expectedDbType = fieldToDrizzleType(field, this.dialect);
431
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
432
+ const info = existingCols.get(sqlName);
433
+ if (!info || info.type !== "character varying") continue;
434
+ if (expectedDbType === "text") {
435
+ await this.executeRaw(sql.raw(`ALTER TABLE "${tableName}" ALTER COLUMN "${sqlName}" TYPE TEXT`));
436
+ console.log(`[DrizzleAdapter] Fixed column type: "${tableName}"."${sqlName}" VARCHAR \u2192 TEXT`);
437
+ } else if (expectedDbType === "jsonb") {
438
+ await this.executeRaw(sql.raw(`ALTER TABLE "${tableName}" ALTER COLUMN "${sqlName}" DROP DEFAULT`));
439
+ await this.executeRaw(sql.raw(`ALTER TABLE "${tableName}" ALTER COLUMN "${sqlName}" TYPE JSONB USING (CASE WHEN "${sqlName}" IS NULL THEN NULL WHEN "${sqlName}"::text ~ '^\\s*\\{' THEN "${sqlName}"::jsonb ELSE jsonb_build_object('id', "${sqlName}"::text) END)`));
440
+ console.log(`[DrizzleAdapter] Fixed column type: "${tableName}"."${sqlName}" VARCHAR \u2192 JSONB`);
441
+ }
442
+ }
443
+ }
313
444
  }
314
445
  generateCreateColumns(config) {
315
446
  const cols = [];
@@ -386,8 +517,8 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
386
517
  effectiveWhere = rlsQuery.where || {};
387
518
  }
388
519
  const filters = this.buildWhereClause(effectiveWhere, config, table, tenantID);
389
- if (!draft && table._status) {
390
- filters.push(eq(table._status, "published"));
520
+ if (!draft && table.publishStatus) {
521
+ filters.push(eq(table.publishStatus, "published"));
391
522
  }
392
523
  const sortOption = this.parseSort(sort);
393
524
  const totalDocs = await this.count({ collection: slug, where: effectiveWhere, tenantID });
@@ -410,7 +541,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
410
541
  }
411
542
  if (draft) {
412
543
  docs = await Promise.all(docs.map(async (doc) => {
413
- if (doc._has_draft) {
544
+ if (doc.hasDraft) {
414
545
  const versions = await this.findVersions({
415
546
  collection: slug,
416
547
  documentId: doc.id,
@@ -418,7 +549,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
418
549
  sort: "-createdAt"
419
550
  });
420
551
  if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
421
- return { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
552
+ return { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
422
553
  }
423
554
  }
424
555
  return doc;
@@ -441,12 +572,12 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
441
572
  }
442
573
  const conditions = [eq(table.id, id)];
443
574
  if (tenantID && table.tenantId) conditions.push(eq(table.tenantId, tenantID));
444
- if (!draft && table._status) conditions.push(eq(table._status, "published"));
575
+ if (!draft && table.publishStatus) conditions.push(eq(table.publishStatus, "published"));
445
576
  const whereClause = conditions.length > 1 ? and(...conditions) : conditions[0];
446
577
  let allRows = await this.client.select().from(table).where(whereClause);
447
578
  if (allRows.length === 0) return null;
448
579
  let doc = this.processResult(allRows[0], config);
449
- if (draft && doc._has_draft) {
580
+ if (draft && doc.hasDraft) {
450
581
  const versions = await this.findVersions({
451
582
  collection: slug,
452
583
  documentId: doc.id,
@@ -454,7 +585,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
454
585
  sort: "-createdAt"
455
586
  });
456
587
  if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
457
- doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
588
+ doc = { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
458
589
  }
459
590
  }
460
591
  return doc;
@@ -475,21 +606,27 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
475
606
  const config = this.getCollection(slug);
476
607
  const table = this.getTable(slug);
477
608
  const updateData = this.prepareData(data, config);
478
- if (tenantID) {
479
- updateData.tenantId = tenantID;
609
+ delete updateData.id;
610
+ console.log(`[DrizzleAdapter.update] CALLED for ${slug}/${id}`);
611
+ const conditions = [eq(table.id, id)];
612
+ if (tenantID && table.tenantId) {
613
+ conditions.push(eq(table.tenantId, tenantID));
614
+ }
615
+ const result = await this.client.update(table).set(updateData).where(and(...conditions)).returning();
616
+ if (result.length === 0) {
617
+ throw new Error(`Document not found: ${slug}/${id}`);
480
618
  }
481
- const result = await this.client.update(table).set(updateData).where(eq(table.id, id)).returning();
482
619
  return this.processResult(result[0], config);
483
620
  }
484
621
  async delete(args) {
485
622
  const { collection: slug, id, tenantID } = args;
486
623
  const config = this.getCollection(slug);
487
624
  const table = this.getTable(slug);
488
- let query = this.client.delete(table).where(eq(table.id, id)).returning();
625
+ const conditions = [eq(table.id, id)];
489
626
  if (tenantID && table.tenantId) {
490
- query = query.where(eq(table.tenantId, tenantID));
627
+ conditions.push(eq(table.tenantId, tenantID));
491
628
  }
492
- const result = await query;
629
+ const result = await this.client.delete(table).where(and(...conditions)).returning();
493
630
  if (result.length === 0) {
494
631
  throw new Error(`Document not found: ${slug}/${id}`);
495
632
  }
@@ -519,13 +656,13 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
519
656
  if (!globalConfig) throw new Error(`Global "${globalSlug}" not found`);
520
657
  const table = this.getTable(slug);
521
658
  let query = this.client.select().from(table);
522
- if (!draft && table._status) {
523
- query = query.where(eq(table._status, "published"));
659
+ if (!draft && table.publishStatus) {
660
+ query = query.where(eq(table.publishStatus, "published"));
524
661
  }
525
662
  const results = await query.limit(1);
526
663
  if (results.length === 0) return null;
527
664
  let doc = this.processResult(results[0], globalConfig);
528
- if (draft && doc._has_draft) {
665
+ if (draft && doc.hasDraft) {
529
666
  const versions = await this.findVersions({
530
667
  collection: slug,
531
668
  documentId: globalSlug,
@@ -533,7 +670,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
533
670
  sort: "-createdAt"
534
671
  });
535
672
  if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
536
- doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
673
+ doc = { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
537
674
  }
538
675
  }
539
676
  return doc;
@@ -772,6 +909,22 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
772
909
  }
773
910
  if (field.type === "tabs" && "tabs" in field && field.name) {
774
911
  if (typeof result[field.name] === "object" && result[field.name] !== null && !Array.isArray(result[field.name])) {
912
+ for (const tab of field.tabs) {
913
+ for (const tabField of tab.fields) {
914
+ if ((tabField.type === "upload" || tabField.type === "image") && tabField.name) {
915
+ const val = result[field.name][tabField.name];
916
+ if (typeof val === "string") {
917
+ try {
918
+ const parsed = JSON.parse(val);
919
+ result[field.name][tabField.name] = Array.isArray(parsed) ? parsed.map((item) => item && typeof item === "object" && typeof item.id === "string" ? item.id : String(item || "")) : typeof parsed.id === "string" ? parsed.id : String(parsed.id || "");
920
+ } catch {
921
+ }
922
+ } else if (val && typeof val === "object") {
923
+ result[field.name][tabField.name] = Array.isArray(val) ? val.map((item) => item && typeof item === "object" && typeof item.id === "string" ? item.id : String(item || "")) : typeof val.id === "string" ? val.id : String(val.id || "");
924
+ }
925
+ }
926
+ }
927
+ }
775
928
  continue;
776
929
  }
777
930
  if (typeof result[field.name] === "string") {
@@ -796,6 +949,9 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
796
949
  } catch {
797
950
  }
798
951
  }
952
+ if ((tabField.type === "upload" || tabField.type === "image") && value && typeof value === "object") {
953
+ value = Array.isArray(value) ? value.map((item) => item && typeof item === "object" && typeof item.id === "string" ? item.id : String(item || "")) : typeof value.id === "string" ? value.id : String(value.id || "");
954
+ }
799
955
  }
800
956
  tabData[tabField.name] = value;
801
957
  delete result[tabField.name];
@@ -814,7 +970,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
814
970
  return result;
815
971
  }
816
972
  async ensureDraftsTable() {
817
- if (_schemaEnsured || this.draftsTableReady) return;
973
+ if (this.draftsTableReady) return;
818
974
  let createTableSQL;
819
975
  if (this.dialect === "sqlite") {
820
976
  createTableSQL = `
@@ -849,7 +1005,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
849
1005
  this.draftsTableReady = true;
850
1006
  }
851
1007
  async ensureVersionsTable() {
852
- if (_schemaEnsured || this.versionsTableReady) return;
1008
+ if (this.versionsTableReady) return;
853
1009
  let createTableSQL;
854
1010
  if (this.dialect === "sqlite") {
855
1011
  createTableSQL = `
@@ -956,7 +1112,7 @@ async function runMigrations(_db, _dialect) {
956
1112
  );
957
1113
  }
958
1114
  async function seedDefaultRoles(db) {
959
- const { roles } = await import('./schema-5PHL5IVB.js');
1115
+ const { roles } = await import('./schema-6I5OFR4Z.js');
960
1116
  await db.insert(roles).values({
961
1117
  name: "super_admin",
962
1118
  level: 100,
@@ -967,5 +1123,5 @@ async function seedDefaultRoles(db) {
967
1123
  }
968
1124
 
969
1125
  export { DrizzleAdapter, collectionToDrizzleSchema, createDatabase, createDrizzleAdapter, fieldToDrizzleType, genId, runMigrations, seedDefaultRoles };
970
- //# sourceMappingURL=chunk-QPPDLRNR.js.map
971
- //# sourceMappingURL=chunk-QPPDLRNR.js.map
1126
+ //# sourceMappingURL=chunk-EJN2PAOE.js.map
1127
+ //# sourceMappingURL=chunk-EJN2PAOE.js.map