@kyro-cms/core 0.9.0 → 0.9.2

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 (265) hide show
  1. package/README.md +55 -593
  2. package/dist/{WebhookService-AefJfqX0.d.cts → WebhookService-BKszZlG0.d.cts} +1 -1
  3. package/dist/{WebhookService-118ZTFis.d.ts → WebhookService-Ccf1j-IN.d.ts} +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 +33 -99
  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 +21 -97
  21. package/dist/api-handler.js.map +1 -1
  22. package/dist/{tenant-B1YB0Jy8.d.ts → base-CIuXkrH4.d.cts} +7 -15
  23. package/dist/{tenant-Cpeveji6.d.cts → base-fFo4lqER.d.ts} +7 -15
  24. package/dist/bootstrap-3PV3GJ3S.js +7 -0
  25. package/dist/{bootstrap-JCML6NFO.js.map → bootstrap-3PV3GJ3S.js.map} +1 -1
  26. package/dist/bootstrap-4CELFLJO.cjs +32 -0
  27. package/dist/{bootstrap-AKAUP6F6.cjs.map → bootstrap-4CELFLJO.cjs.map} +1 -1
  28. package/dist/{chunk-VJT6P4N6.cjs → chunk-3HR772HI.cjs} +199 -32
  29. package/dist/chunk-3HR772HI.cjs.map +1 -0
  30. package/dist/chunk-3KTWGODI.cjs +178 -0
  31. package/dist/chunk-3KTWGODI.cjs.map +1 -0
  32. package/dist/{chunk-QXIQWPAP.js → chunk-3UK5XBVJ.js} +4 -134
  33. package/dist/chunk-3UK5XBVJ.js.map +1 -0
  34. package/dist/{chunk-FXYP2HA6.js → chunk-4AO3A3JM.js} +48 -4
  35. package/dist/chunk-4AO3A3JM.js.map +1 -0
  36. package/dist/{chunk-Z6ZWNWWR.js → chunk-4CV4JOE5.js} +3 -9
  37. package/dist/{chunk-Z6ZWNWWR.js.map → chunk-4CV4JOE5.js.map} +1 -1
  38. package/dist/chunk-4M7X5HAB.cjs +173 -0
  39. package/dist/chunk-4M7X5HAB.cjs.map +1 -0
  40. package/dist/chunk-53NYVYVX.js +3243 -0
  41. package/dist/chunk-53NYVYVX.js.map +1 -0
  42. package/dist/{chunk-35U3FROB.js → chunk-5H3MWQJS.js} +714 -184
  43. package/dist/chunk-5H3MWQJS.js.map +1 -0
  44. package/dist/{chunk-YVUJBEXE.cjs → chunk-5PMQQFRE.cjs} +16 -7
  45. package/dist/chunk-5PMQQFRE.cjs.map +1 -0
  46. package/dist/{chunk-57P6MJKC.js → chunk-6UNONDW7.js} +94 -10
  47. package/dist/chunk-6UNONDW7.js.map +1 -0
  48. package/dist/{chunk-Y3N7UUDO.js → chunk-7OGPN7MP.js} +5 -2
  49. package/dist/chunk-7OGPN7MP.js.map +1 -0
  50. package/dist/{chunk-2OL4O2TH.cjs → chunk-7OS7TX2Q.cjs} +68 -62
  51. package/dist/chunk-7OS7TX2Q.cjs.map +1 -0
  52. package/dist/{chunk-3TPQ2BU6.js → chunk-BYBMTIMT.js} +2 -6
  53. package/dist/chunk-BYBMTIMT.js.map +1 -0
  54. package/dist/{chunk-ES5HNFFT.js → chunk-CF7OL6HR.js} +4 -2
  55. package/dist/chunk-CF7OL6HR.js.map +1 -0
  56. package/dist/chunk-CJONKRHJ.js +162 -0
  57. package/dist/chunk-CJONKRHJ.js.map +1 -0
  58. package/dist/{chunk-OHVB4AJ7.js → chunk-CJX74IYK.js} +24 -18
  59. package/dist/chunk-CJX74IYK.js.map +1 -0
  60. package/dist/{chunk-5KVM3WEY.cjs → chunk-CNKT4PME.cjs} +1592 -868
  61. package/dist/chunk-CNKT4PME.cjs.map +1 -0
  62. package/dist/{chunk-G7VZBCD6.cjs → chunk-CZLDE2OZ.cjs} +2 -9
  63. package/dist/{chunk-G7VZBCD6.cjs.map → chunk-CZLDE2OZ.cjs.map} +1 -1
  64. package/dist/{chunk-WQBRWOQT.cjs → chunk-DPA3KWPY.cjs} +4 -3
  65. package/dist/chunk-DPA3KWPY.cjs.map +1 -0
  66. package/dist/{chunk-LINKCEG4.cjs → chunk-E2763JUP.cjs} +726 -196
  67. package/dist/chunk-E2763JUP.cjs.map +1 -0
  68. package/dist/chunk-E5UJBLQ7.js +220 -0
  69. package/dist/chunk-E5UJBLQ7.js.map +1 -0
  70. package/dist/{chunk-DVD5P72E.cjs → chunk-EEJUFDMF.cjs} +2 -6
  71. package/dist/chunk-EEJUFDMF.cjs.map +1 -0
  72. package/dist/chunk-FSKONGCX.cjs +253 -0
  73. package/dist/chunk-FSKONGCX.cjs.map +1 -0
  74. package/dist/{chunk-Y3QQN7PN.js → chunk-GAAHG2Z4.js} +13 -4
  75. package/dist/chunk-GAAHG2Z4.js.map +1 -0
  76. package/dist/chunk-GAOXD3XT.js +175 -0
  77. package/dist/chunk-GAOXD3XT.js.map +1 -0
  78. package/dist/{chunk-SA7NSSIQ.cjs → chunk-GUUB5EAG.cjs} +13 -187
  79. package/dist/chunk-GUUB5EAG.cjs.map +1 -0
  80. package/dist/{chunk-4DA7QPLA.cjs → chunk-GXFOGU7N.cjs} +5 -2
  81. package/dist/chunk-GXFOGU7N.cjs.map +1 -0
  82. package/dist/{chunk-I7HHI6QV.cjs → chunk-IDVRRRAK.cjs} +17 -9
  83. package/dist/chunk-IDVRRRAK.cjs.map +1 -0
  84. package/dist/{chunk-HXRD4B37.js → chunk-IPTZM3VE.js} +1423 -704
  85. package/dist/chunk-IPTZM3VE.js.map +1 -0
  86. package/dist/chunk-KC2GDBLS.cjs +84 -0
  87. package/dist/chunk-KC2GDBLS.cjs.map +1 -0
  88. package/dist/{chunk-QUW2RZTM.cjs → chunk-L46ROHUS.cjs} +51 -7
  89. package/dist/chunk-L46ROHUS.cjs.map +1 -0
  90. package/dist/chunk-L4EZKIEX.js +185 -0
  91. package/dist/chunk-L4EZKIEX.js.map +1 -0
  92. package/dist/{chunk-REK7AYOC.js → chunk-L5UKKZQN.js} +199 -32
  93. package/dist/chunk-L5UKKZQN.js.map +1 -0
  94. package/dist/chunk-NKPKR5BW.cjs +188 -0
  95. package/dist/chunk-NKPKR5BW.cjs.map +1 -0
  96. package/dist/chunk-NWUEVLQT.cjs +99 -0
  97. package/dist/chunk-NWUEVLQT.cjs.map +1 -0
  98. package/dist/{chunk-3AJE4SEG.js → chunk-OHC6UHFY.js} +208 -76
  99. package/dist/chunk-OHC6UHFY.js.map +1 -0
  100. package/dist/chunk-PHJRNPHY.cjs +3291 -0
  101. package/dist/chunk-PHJRNPHY.cjs.map +1 -0
  102. package/dist/{chunk-DXHRBMGB.js → chunk-PQ72Z6WC.js} +67 -112
  103. package/dist/chunk-PQ72Z6WC.js.map +1 -0
  104. package/dist/{chunk-K7JPTH3G.cjs → chunk-PV2I2KMI.cjs} +214 -82
  105. package/dist/chunk-PV2I2KMI.cjs.map +1 -0
  106. package/dist/{chunk-PDYFVNUX.cjs → chunk-Q23GAMLE.cjs} +71 -116
  107. package/dist/chunk-Q23GAMLE.cjs.map +1 -0
  108. package/dist/{chunk-H727JIG7.js → chunk-Q72BOAPK.js} +16 -8
  109. package/dist/chunk-Q72BOAPK.js.map +1 -0
  110. package/dist/{chunk-IBG6V56E.cjs → chunk-QFLB4EIJ.cjs} +2 -139
  111. package/dist/chunk-QFLB4EIJ.cjs.map +1 -0
  112. package/dist/{chunk-2KVHZE6O.cjs → chunk-RFFSZSCL.cjs} +282 -190
  113. package/dist/chunk-RFFSZSCL.cjs.map +1 -0
  114. package/dist/{chunk-V3LKPM3O.cjs → chunk-SHTTJMLT.cjs} +4 -2
  115. package/dist/chunk-SHTTJMLT.cjs.map +1 -0
  116. package/dist/{chunk-WOWUL7ZY.js → chunk-UUDTPZX6.js} +5 -4
  117. package/dist/chunk-UUDTPZX6.js.map +1 -0
  118. package/dist/{chunk-QPPDLRNR.js → chunk-V7KZQIZ6.js} +277 -185
  119. package/dist/chunk-V7KZQIZ6.js.map +1 -0
  120. package/dist/{chunk-3ZFYL34R.js → chunk-WXVB364T.js} +12 -185
  121. package/dist/chunk-WXVB364T.js.map +1 -0
  122. package/dist/chunk-XEB7PH2E.js +81 -0
  123. package/dist/chunk-XEB7PH2E.js.map +1 -0
  124. package/dist/{chunk-IA6AU5PI.cjs → chunk-Y7AQK4R4.cjs} +94 -10
  125. package/dist/chunk-Y7AQK4R4.cjs.map +1 -0
  126. package/dist/chunk-YFAVQQTU.js +92 -0
  127. package/dist/chunk-YFAVQQTU.js.map +1 -0
  128. package/dist/cli/index.cjs +6 -6
  129. package/dist/cli/index.cjs.map +1 -1
  130. package/dist/cli/index.js +6 -6
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/client.cjs +4 -4
  133. package/dist/client.d.cts +3 -3
  134. package/dist/client.d.ts +3 -3
  135. package/dist/client.js +2 -2
  136. package/dist/drizzle/index.cjs +15 -14
  137. package/dist/drizzle/index.d.cts +10 -14
  138. package/dist/drizzle/index.d.ts +10 -14
  139. package/dist/drizzle/index.js +6 -5
  140. package/dist/fields/index.cjs +22 -38
  141. package/dist/fields/index.d.cts +2 -22
  142. package/dist/fields/index.d.ts +2 -22
  143. package/dist/fields/index.js +2 -2
  144. package/dist/graphql/index.cjs +6 -5
  145. package/dist/graphql/index.d.cts +5 -3
  146. package/dist/graphql/index.d.ts +5 -3
  147. package/dist/graphql/index.js +4 -3
  148. package/dist/index-BKta3cBH.d.cts +277 -0
  149. package/dist/index-ClOqnkTO.d.ts +277 -0
  150. package/dist/index.cjs +310 -168
  151. package/dist/index.cjs.map +1 -1
  152. package/dist/index.d.cts +130 -211
  153. package/dist/index.d.ts +130 -211
  154. package/dist/index.js +174 -35
  155. package/dist/index.js.map +1 -1
  156. package/dist/integration.cjs +3 -3
  157. package/dist/integration.js +2 -2
  158. package/dist/media-7WDX4BDJ.js +4 -0
  159. package/dist/{media-GPPTZ43E.js.map → media-7WDX4BDJ.js.map} +1 -1
  160. package/dist/{media-XNTUFJZR.cjs → media-TUSLVRQ6.cjs} +3 -3
  161. package/dist/{media-XNTUFJZR.cjs.map → media-TUSLVRQ6.cjs.map} +1 -1
  162. package/dist/mongo-auth-adapter-GT4S7SCU.cjs +17 -0
  163. package/dist/{mongo-auth-adapter-NHHUJHVH.cjs.map → mongo-auth-adapter-GT4S7SCU.cjs.map} +1 -1
  164. package/dist/mongo-auth-adapter-M7VV4LNB.js +4 -0
  165. package/dist/{mongo-auth-adapter-NJQUUCTP.js.map → mongo-auth-adapter-M7VV4LNB.js.map} +1 -1
  166. package/dist/mongodb/index.cjs +9 -8
  167. package/dist/mongodb/index.d.cts +6 -13
  168. package/dist/mongodb/index.d.ts +6 -13
  169. package/dist/mongodb/index.js +5 -4
  170. package/dist/postgres-auth-adapter-AFAPISH7.js +5 -0
  171. package/dist/{postgres-auth-adapter-3T2NKTSE.js.map → postgres-auth-adapter-AFAPISH7.js.map} +1 -1
  172. package/dist/postgres-auth-adapter-SFDTLONT.cjs +14 -0
  173. package/dist/{postgres-auth-adapter-7IEENCKQ.cjs.map → postgres-auth-adapter-SFDTLONT.cjs.map} +1 -1
  174. package/dist/redis-adapter-UQX4EE3B.cjs +13 -0
  175. package/dist/{redis-adapter-D2E2S3GB.cjs.map → redis-adapter-UQX4EE3B.cjs.map} +1 -1
  176. package/dist/redis-adapter-XALOGWY3.js +4 -0
  177. package/dist/{redis-adapter-VQXD7ESY.js.map → redis-adapter-XALOGWY3.js.map} +1 -1
  178. package/dist/rest/index.cjs +16 -15
  179. package/dist/rest/index.d.cts +4 -4
  180. package/dist/rest/index.d.ts +4 -4
  181. package/dist/rest/index.js +14 -13
  182. package/dist/{schema-37SE2F4B.cjs → schema-6QL3USNB.cjs} +15 -15
  183. package/dist/{schema-37SE2F4B.cjs.map → schema-6QL3USNB.cjs.map} +1 -1
  184. package/dist/{schema-5PHL5IVB.js → schema-FNNWEAAW.js} +4 -4
  185. package/dist/{schema-5PHL5IVB.js.map → schema-FNNWEAAW.js.map} +1 -1
  186. package/dist/sqlite-adapter-AQB5TCGV.cjs +13 -0
  187. package/dist/{sqlite-adapter-LVK5PS4T.cjs.map → sqlite-adapter-AQB5TCGV.cjs.map} +1 -1
  188. package/dist/sqlite-adapter-N5H6IM2X.js +4 -0
  189. package/dist/{sqlite-adapter-TR3U3W6Q.js.map → sqlite-adapter-N5H6IM2X.js.map} +1 -1
  190. package/dist/templates/index.cjs +134 -32
  191. package/dist/templates/index.d.cts +52 -9
  192. package/dist/templates/index.d.ts +52 -9
  193. package/dist/templates/index.js +4 -2
  194. package/dist/trpc/index.cjs +14 -13
  195. package/dist/trpc/index.d.cts +55 -49
  196. package/dist/trpc/index.d.ts +55 -49
  197. package/dist/trpc/index.js +5 -4
  198. package/dist/{types-D6ZLRGbH.d.cts → types-CpjuXbe7.d.cts} +2 -0
  199. package/dist/{types-D6ZLRGbH.d.ts → types-CpjuXbe7.d.ts} +2 -0
  200. package/dist/{types-VtjUxIMp.d.cts → types-DeSApf9T.d.cts} +36 -14
  201. package/dist/{types-VtjUxIMp.d.ts → types-DeSApf9T.d.ts} +36 -14
  202. package/dist/{types-J3R9nVsZ.d.cts → types-Dgzlftb7.d.ts} +32 -28
  203. package/dist/{types-Bs1up4yP.d.ts → types-Ds0tCA3L.d.cts} +32 -28
  204. package/dist/ws/index.cjs +6 -6
  205. package/dist/ws/index.js +2 -2
  206. package/package.json +22 -4
  207. package/dist/bootstrap-AKAUP6F6.cjs +0 -32
  208. package/dist/bootstrap-JCML6NFO.js +0 -7
  209. package/dist/chunk-2KVHZE6O.cjs.map +0 -1
  210. package/dist/chunk-2OL4O2TH.cjs.map +0 -1
  211. package/dist/chunk-35U3FROB.js.map +0 -1
  212. package/dist/chunk-3AJE4SEG.js.map +0 -1
  213. package/dist/chunk-3J4MFTI3.js +0 -3872
  214. package/dist/chunk-3J4MFTI3.js.map +0 -1
  215. package/dist/chunk-3TPQ2BU6.js.map +0 -1
  216. package/dist/chunk-3ZFYL34R.js.map +0 -1
  217. package/dist/chunk-4DA7QPLA.cjs.map +0 -1
  218. package/dist/chunk-57P6MJKC.js.map +0 -1
  219. package/dist/chunk-5KVM3WEY.cjs.map +0 -1
  220. package/dist/chunk-6IMPH6WV.cjs +0 -3897
  221. package/dist/chunk-6IMPH6WV.cjs.map +0 -1
  222. package/dist/chunk-ATBOUGQP.cjs +0 -513
  223. package/dist/chunk-ATBOUGQP.cjs.map +0 -1
  224. package/dist/chunk-DVD5P72E.cjs.map +0 -1
  225. package/dist/chunk-DXHRBMGB.js.map +0 -1
  226. package/dist/chunk-ES5HNFFT.js.map +0 -1
  227. package/dist/chunk-FXYP2HA6.js.map +0 -1
  228. package/dist/chunk-H727JIG7.js.map +0 -1
  229. package/dist/chunk-HXRD4B37.js.map +0 -1
  230. package/dist/chunk-I7HHI6QV.cjs.map +0 -1
  231. package/dist/chunk-IA6AU5PI.cjs.map +0 -1
  232. package/dist/chunk-IBG6V56E.cjs.map +0 -1
  233. package/dist/chunk-K7JPTH3G.cjs.map +0 -1
  234. package/dist/chunk-LINKCEG4.cjs.map +0 -1
  235. package/dist/chunk-OHVB4AJ7.js.map +0 -1
  236. package/dist/chunk-PDYFVNUX.cjs.map +0 -1
  237. package/dist/chunk-Q23JB3KL.js +0 -488
  238. package/dist/chunk-Q23JB3KL.js.map +0 -1
  239. package/dist/chunk-QPPDLRNR.js.map +0 -1
  240. package/dist/chunk-QUW2RZTM.cjs.map +0 -1
  241. package/dist/chunk-QXIQWPAP.js.map +0 -1
  242. package/dist/chunk-R3XIBBAW.cjs +0 -34
  243. package/dist/chunk-R3XIBBAW.cjs.map +0 -1
  244. package/dist/chunk-REK7AYOC.js.map +0 -1
  245. package/dist/chunk-SA7NSSIQ.cjs.map +0 -1
  246. package/dist/chunk-SDMNUYVU.js +0 -30
  247. package/dist/chunk-SDMNUYVU.js.map +0 -1
  248. package/dist/chunk-V3LKPM3O.cjs.map +0 -1
  249. package/dist/chunk-VJT6P4N6.cjs.map +0 -1
  250. package/dist/chunk-WOWUL7ZY.js.map +0 -1
  251. package/dist/chunk-WQBRWOQT.cjs.map +0 -1
  252. package/dist/chunk-Y3N7UUDO.js.map +0 -1
  253. package/dist/chunk-Y3QQN7PN.js.map +0 -1
  254. package/dist/chunk-YVUJBEXE.cjs.map +0 -1
  255. package/dist/index-CLp-DRKA.d.ts +0 -64
  256. package/dist/index-DfO7G4kN.d.cts +0 -64
  257. package/dist/media-GPPTZ43E.js +0 -4
  258. package/dist/mongo-auth-adapter-NHHUJHVH.cjs +0 -17
  259. package/dist/mongo-auth-adapter-NJQUUCTP.js +0 -4
  260. package/dist/postgres-auth-adapter-3T2NKTSE.js +0 -5
  261. package/dist/postgres-auth-adapter-7IEENCKQ.cjs +0 -14
  262. package/dist/redis-adapter-D2E2S3GB.cjs +0 -13
  263. package/dist/redis-adapter-VQXD7ESY.js +0 -4
  264. package/dist/sqlite-adapter-LVK5PS4T.cjs +0 -13
  265. package/dist/sqlite-adapter-TR3U3W6Q.js +0 -4
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkSA7NSSIQ_cjs = require('./chunk-SA7NSSIQ.cjs');
3
+ var chunkGUUB5EAG_cjs = require('./chunk-GUUB5EAG.cjs');
4
4
  var drizzleOrm = require('drizzle-orm');
5
5
  var pgCore = require('drizzle-orm/pg-core');
6
6
  var sqliteCore = require('drizzle-orm/sqlite-core');
@@ -22,11 +22,13 @@ function fieldToDrizzleType(field, dialect = "postgres") {
22
22
  case "text":
23
23
  case "email":
24
24
  case "password":
25
- case "textarea":
26
25
  case "color":
26
+ return dialect === "sqlite" ? "text" : "varchar";
27
+ case "textarea":
27
28
  case "code":
28
29
  case "markdown":
29
- return dialect === "sqlite" ? "text" : "varchar";
30
+ case "secret":
31
+ return "text";
30
32
  case "number":
31
33
  return field.integer ? "integer" : "decimal";
32
34
  case "checkbox":
@@ -48,7 +50,7 @@ function fieldToDrizzleType(field, dialect = "postgres") {
48
50
  case "relationship":
49
51
  return dialect === "sqlite" ? "text" : "varchar";
50
52
  case "upload":
51
- return dialect === "sqlite" ? "text" : "varchar";
53
+ return "jsonb";
52
54
  default:
53
55
  return "jsonb";
54
56
  }
@@ -81,25 +83,17 @@ function collectionToDrizzleSchema(collection, dialect = "postgres") {
81
83
  lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);
82
84
  lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);
83
85
  }
84
- lines.push(` _status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('_status').default('published'),`);
85
- lines.push(` _has_draft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('_has_draft').default(false),`);
86
+ lines.push(` status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('status').default('draft'),`);
87
+ lines.push(` hasDraft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('hasDraft').default(false),`);
86
88
  lines.push("});");
87
89
  return lines.join("\n");
88
90
  }
89
- var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
91
+ var DrizzleAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
90
92
  client;
91
93
  schema;
92
94
  dialect;
93
95
  connectionString;
94
- draftsTableReady = false;
95
96
  versionsTableReady = false;
96
- tenantContext;
97
- setTenantContext(context) {
98
- this.tenantContext = context;
99
- }
100
- getTenantContext() {
101
- return this.tenantContext;
102
- }
103
97
  constructor(options) {
104
98
  super();
105
99
  this.schema = options.schema || {};
@@ -126,6 +120,14 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
126
120
  if (result.updatedAt && typeof result.updatedAt === "string") {
127
121
  result.updatedAt = new Date(result.updatedAt);
128
122
  }
123
+ for (const field of config.fields) {
124
+ if (field.type === "date" && field.name) {
125
+ const value = result[field.name];
126
+ if (value && typeof value === "string") {
127
+ result[field.name] = new Date(value);
128
+ }
129
+ }
130
+ }
129
131
  for (const field of config.fields) {
130
132
  const dbType = fieldToDrizzleType(field, this.dialect);
131
133
  const isJsonb = dbType === "jsonb";
@@ -154,6 +156,14 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
154
156
  }
155
157
  }
156
158
  }
159
+ for (const field of config.fields) {
160
+ if (field.name && result[field.name] === "") {
161
+ const dbType = fieldToDrizzleType(field, this.dialect);
162
+ if (dbType === "timestamp" || dbType === "jsonb" || dbType === "decimal" || dbType === "integer" || dbType === "numeric" || dbType === "boolean") {
163
+ result[field.name] = null;
164
+ }
165
+ }
166
+ }
157
167
  return result;
158
168
  }
159
169
  async connect() {
@@ -270,8 +280,8 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
270
280
  }
271
281
  if (!columns.createdAt) columns.createdAt = this.dialect === "sqlite" ? sqliteCore.text("created_at").default((/* @__PURE__ */ new Date()).toISOString()) : pgCore.timestamp("created_at").defaultNow();
272
282
  if (!columns.updatedAt) columns.updatedAt = this.dialect === "sqlite" ? sqliteCore.text("updated_at").default((/* @__PURE__ */ new Date()).toISOString()) : pgCore.timestamp("updated_at").defaultNow();
273
- columns._status = this.dialect === "sqlite" ? sqliteCore.text("_status").default("published") : pgCore.varchar("_status", { length: 20 }).default("published");
274
- columns._has_draft = this.dialect === "sqlite" ? sqliteCore.integer("_has_draft", { mode: "boolean" }).default(false) : pgCore.boolean("_has_draft").default(false);
283
+ columns.status = this.dialect === "sqlite" ? sqliteCore.text("status").default("draft") : pgCore.varchar("status", { length: 20 }).default("draft");
284
+ columns.hasDraft = this.dialect === "sqlite" ? sqliteCore.integer("hasDraft", { mode: "boolean" }).default(false) : pgCore.boolean("hasDraft").default(false);
275
285
  return this.dialect === "sqlite" ? sqliteCore.sqliteTable(tableName, columns) : pgCore.pgTable(tableName, columns);
276
286
  }
277
287
  async ensureCollectionTables(collections) {
@@ -290,8 +300,8 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
290
300
  ${colDefs}
291
301
  ${hasCreated ? "" : '"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
292
302
  ${hasUpdated ? "" : '"updated_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
293
- "_status" VARCHAR(20) DEFAULT 'published',
294
- "_has_draft" BOOLEAN DEFAULT false
303
+ "status" VARCHAR(20) DEFAULT 'draft',
304
+ "hasDraft" BOOLEAN DEFAULT false
295
305
  )
296
306
  `);
297
307
  } else {
@@ -302,8 +312,8 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
302
312
  ${colDefs}
303
313
  ${hasCreated ? "" : `"created_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
304
314
  ${hasUpdated ? "" : `"updated_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
305
- "_status" TEXT DEFAULT 'published',
306
- "_has_draft" INTEGER DEFAULT 0
315
+ "status" TEXT DEFAULT 'draft',
316
+ "hasDraft" INTEGER DEFAULT 0
307
317
  )
308
318
  `);
309
319
  }
@@ -317,6 +327,126 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
317
327
  }
318
328
  }
319
329
  }
330
+ for (const config of collections) {
331
+ const tableName = this.getTableName(config.slug);
332
+ if (tableName === "users" || tableName === "audit_logs") continue;
333
+ await this.syncTableColumns(config, tableName);
334
+ }
335
+ }
336
+ getColumnSqlDefinition(field, dialect) {
337
+ const dbType = fieldToDrizzleType(field, dialect);
338
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
339
+ const sqlType = this.columnSqlType(dbType, dialect);
340
+ return `"${sqlName}" ${sqlType} DEFAULT NULL`;
341
+ }
342
+ columnSqlType(dbType, dialect) {
343
+ if (dialect === "sqlite") {
344
+ switch (dbType) {
345
+ case "varchar":
346
+ return "TEXT";
347
+ case "text":
348
+ return "TEXT";
349
+ case "integer":
350
+ return "INTEGER";
351
+ case "decimal":
352
+ case "numeric":
353
+ return "NUMERIC";
354
+ case "boolean":
355
+ return "INTEGER";
356
+ case "timestamp":
357
+ return "TEXT";
358
+ case "jsonb":
359
+ return "TEXT";
360
+ default:
361
+ return "TEXT";
362
+ }
363
+ }
364
+ switch (dbType) {
365
+ case "varchar":
366
+ return "VARCHAR(255)";
367
+ case "text":
368
+ return "TEXT";
369
+ case "integer":
370
+ return "INTEGER";
371
+ case "decimal":
372
+ case "numeric":
373
+ return "DECIMAL";
374
+ case "boolean":
375
+ return "BOOLEAN";
376
+ case "timestamp":
377
+ return "TIMESTAMP";
378
+ case "jsonb":
379
+ return "JSONB";
380
+ default:
381
+ return "TEXT";
382
+ }
383
+ }
384
+ getExpectedColumnDefs(config, tableName) {
385
+ const defs = {};
386
+ const isGlobal = config.slug.startsWith("_globals_");
387
+ const hasCreated = config.fields.some((f) => f.name === "createdAt");
388
+ const hasUpdated = config.fields.some((f) => f.name === "updatedAt");
389
+ if (this.dialect === "postgres") {
390
+ defs["id"] = isGlobal ? '"id" TEXT PRIMARY KEY' : '"id" UUID PRIMARY KEY DEFAULT gen_random_uuid()';
391
+ if (!hasCreated) defs["created_at"] = '"created_at" TIMESTAMP DEFAULT NULL';
392
+ if (!hasUpdated) defs["updated_at"] = '"updated_at" TIMESTAMP DEFAULT NULL';
393
+ defs["status"] = '"status" VARCHAR(20) DEFAULT NULL';
394
+ defs["hasDraft"] = '"hasDraft" BOOLEAN DEFAULT NULL';
395
+ } else {
396
+ defs["id"] = '"id" TEXT PRIMARY KEY';
397
+ if (!hasCreated) defs["created_at"] = '"created_at" TEXT DEFAULT NULL';
398
+ if (!hasUpdated) defs["updated_at"] = '"updated_at" TEXT DEFAULT NULL';
399
+ defs["status"] = '"status" TEXT DEFAULT NULL';
400
+ defs["hasDraft"] = '"hasDraft" INTEGER DEFAULT NULL';
401
+ }
402
+ for (const field of config.fields) {
403
+ if (!field.name || field.name === "id") continue;
404
+ const def = this.getColumnSqlDefinition(field, this.dialect);
405
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
406
+ defs[sqlName] = def;
407
+ }
408
+ return defs;
409
+ }
410
+ async syncTableColumns(config, tableName) {
411
+ let existingCols;
412
+ try {
413
+ if (this.dialect === "postgres") {
414
+ const result = await this.client.execute(
415
+ drizzleOrm.sql`SELECT column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_name = ${tableName}`
416
+ );
417
+ existingCols = new Map(result.map((r) => [r.column_name, { type: r.data_type, maxLen: r.character_maximum_length }]));
418
+ } else {
419
+ const result = await this.client.execute(
420
+ drizzleOrm.sql`PRAGMA table_info("${drizzleOrm.sql.raw(tableName)}")`
421
+ );
422
+ existingCols = new Map(result.map((r) => [r.name, { type: r.type, maxLen: null }]));
423
+ }
424
+ } catch {
425
+ return;
426
+ }
427
+ const expected = this.getExpectedColumnDefs(config, tableName);
428
+ const missing = Object.keys(expected).filter((k) => !existingCols.has(k));
429
+ if (missing.length > 0) {
430
+ const alterStmts = missing.map((k) => `ALTER TABLE "${tableName}" ADD COLUMN ${expected[k]}`);
431
+ await this.executeRaw(drizzleOrm.sql.raw(alterStmts.join(";\n")));
432
+ }
433
+ if (this.dialect === "postgres") {
434
+ for (const field of config.fields) {
435
+ if (!field.name || field.name === "id") continue;
436
+ const expectedDbType = fieldToDrizzleType(field, this.dialect);
437
+ const sqlName = field.name.replace(/-/g, "_").replace(/([A-Z])/g, "_$1").toLowerCase();
438
+ const info = existingCols.get(sqlName);
439
+ if (!info || info.type !== "character varying") continue;
440
+ if (expectedDbType === "text") {
441
+ await this.executeRaw(drizzleOrm.sql.raw(`ALTER TABLE "${tableName}" ALTER COLUMN "${sqlName}" TYPE TEXT`));
442
+ console.log(`[DrizzleAdapter] Fixed column type: "${tableName}"."${sqlName}" VARCHAR \u2192 TEXT`);
443
+ } else if (expectedDbType === "jsonb") {
444
+ await this.executeRaw(drizzleOrm.sql.raw(`ALTER TABLE "${tableName}" ALTER COLUMN "${sqlName}" DROP DEFAULT`));
445
+ await this.executeRaw(drizzleOrm.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)`));
446
+ console.log(`[DrizzleAdapter] Fixed column type: "${tableName}"."${sqlName}" VARCHAR \u2192 JSONB`);
447
+ }
448
+ }
449
+ }
320
450
  }
321
451
  generateCreateColumns(config) {
322
452
  const cols = [];
@@ -389,15 +519,16 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
389
519
  const table = this.getTable(slug);
390
520
  let effectiveWhere = { ...where };
391
521
  if (this.tenantContext && config.tenantScoped) {
392
- const rlsQuery = chunkSA7NSSIQ_cjs.applyRLS({ where: effectiveWhere }, slug, this.tenantContext, chunkSA7NSSIQ_cjs.DEFAULT_RLS_CONFIG);
522
+ const rlsQuery = chunkGUUB5EAG_cjs.applyRLS({ where: effectiveWhere }, slug, this.tenantContext, chunkGUUB5EAG_cjs.DEFAULT_RLS_CONFIG);
393
523
  effectiveWhere = rlsQuery.where || {};
394
524
  }
395
525
  const filters = this.buildWhereClause(effectiveWhere, config, table, tenantID);
396
- if (!draft && table._status) {
397
- filters.push(drizzleOrm.eq(table._status, "published"));
526
+ if (!draft && table.status) {
527
+ filters.push(drizzleOrm.eq(table.status, "published"));
398
528
  }
399
529
  const sortOption = this.parseSort(sort);
400
- const totalDocs = await this.count({ collection: slug, where: effectiveWhere, tenantID });
530
+ const countWhere = !draft && table.status ? { ...effectiveWhere, status: "published" } : effectiveWhere;
531
+ const totalDocs = await this.count({ collection: slug, where: countWhere, tenantID });
401
532
  const offset = (page - 1) * limit;
402
533
  let results = [];
403
534
  try {
@@ -413,20 +544,21 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
413
544
  }
414
545
  let docs = results.map((doc) => this.processResult(doc, config));
415
546
  if (this.tenantContext && !this.tenantContext.isSuperAdmin) {
416
- docs = docs.filter((doc) => chunkSA7NSSIQ_cjs.canAccessDocument(doc, slug, this.tenantContext, chunkSA7NSSIQ_cjs.DEFAULT_RLS_CONFIG));
547
+ docs = docs.filter((doc) => chunkGUUB5EAG_cjs.canAccessDocument(doc, slug, this.tenantContext, chunkGUUB5EAG_cjs.DEFAULT_RLS_CONFIG));
417
548
  }
418
549
  if (draft) {
419
550
  docs = await Promise.all(docs.map(async (doc) => {
420
- if (doc._has_draft) {
421
- const versions = await this.findVersions({
422
- collection: slug,
423
- documentId: doc.id,
424
- limit: 1,
425
- sort: "-createdAt"
426
- });
427
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
428
- return { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
429
- }
551
+ const versions = await this.executeRaw(drizzleOrm.sql`
552
+ SELECT * FROM kyro_versions
553
+ WHERE collection_slug = ${slug}
554
+ AND document_id = ${doc.id}
555
+ ORDER BY created_at DESC
556
+ LIMIT 1
557
+ `);
558
+ if (versions.length > 0) {
559
+ const ver = versions[0];
560
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
561
+ return { ...doc, ...versionData, status: doc.status };
430
562
  }
431
563
  return doc;
432
564
  }));
@@ -442,26 +574,29 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
442
574
  const table = this.getTable(slug);
443
575
  if (this.tenantContext && config.tenantScoped) {
444
576
  const tempDoc = { id, tenantId: this.tenantContext.tenantId };
445
- if (!chunkSA7NSSIQ_cjs.canAccessDocument(tempDoc, slug, this.tenantContext, chunkSA7NSSIQ_cjs.DEFAULT_RLS_CONFIG)) {
577
+ if (!chunkGUUB5EAG_cjs.canAccessDocument(tempDoc, slug, this.tenantContext, chunkGUUB5EAG_cjs.DEFAULT_RLS_CONFIG)) {
446
578
  return null;
447
579
  }
448
580
  }
449
581
  const conditions = [drizzleOrm.eq(table.id, id)];
450
582
  if (tenantID && table.tenantId) conditions.push(drizzleOrm.eq(table.tenantId, tenantID));
451
- if (!draft && table._status) conditions.push(drizzleOrm.eq(table._status, "published"));
583
+ if (!draft && table.status) conditions.push(drizzleOrm.eq(table.status, "published"));
452
584
  const whereClause = conditions.length > 1 ? drizzleOrm.and(...conditions) : conditions[0];
453
585
  let allRows = await this.client.select().from(table).where(whereClause);
454
586
  if (allRows.length === 0) return null;
455
587
  let doc = this.processResult(allRows[0], config);
456
- if (draft && doc._has_draft) {
457
- const versions = await this.findVersions({
458
- collection: slug,
459
- documentId: doc.id,
460
- limit: 1,
461
- sort: "-createdAt"
462
- });
463
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
464
- doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
588
+ if (draft) {
589
+ const versions = await this.executeRaw(drizzleOrm.sql`
590
+ SELECT * FROM kyro_versions
591
+ WHERE collection_slug = ${slug}
592
+ AND document_id = ${doc.id}
593
+ ORDER BY created_at DESC
594
+ LIMIT 1
595
+ `);
596
+ if (versions.length > 0) {
597
+ const ver = versions[0];
598
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
599
+ doc = { ...doc, ...versionData, status: doc.status };
465
600
  }
466
601
  }
467
602
  return doc;
@@ -482,21 +617,27 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
482
617
  const config = this.getCollection(slug);
483
618
  const table = this.getTable(slug);
484
619
  const updateData = this.prepareData(data, config);
485
- if (tenantID) {
486
- updateData.tenantId = tenantID;
620
+ delete updateData.id;
621
+ console.log(`[DrizzleAdapter.update] CALLED for ${slug}/${id}`);
622
+ const conditions = [drizzleOrm.eq(table.id, id)];
623
+ if (tenantID && table.tenantId) {
624
+ conditions.push(drizzleOrm.eq(table.tenantId, tenantID));
625
+ }
626
+ const result = await this.client.update(table).set(updateData).where(drizzleOrm.and(...conditions)).returning();
627
+ if (result.length === 0) {
628
+ throw new Error(`Document not found: ${slug}/${id}`);
487
629
  }
488
- const result = await this.client.update(table).set(updateData).where(drizzleOrm.eq(table.id, id)).returning();
489
630
  return this.processResult(result[0], config);
490
631
  }
491
632
  async delete(args) {
492
633
  const { collection: slug, id, tenantID } = args;
493
634
  const config = this.getCollection(slug);
494
635
  const table = this.getTable(slug);
495
- let query = this.client.delete(table).where(drizzleOrm.eq(table.id, id)).returning();
636
+ const conditions = [drizzleOrm.eq(table.id, id)];
496
637
  if (tenantID && table.tenantId) {
497
- query = query.where(drizzleOrm.eq(table.tenantId, tenantID));
638
+ conditions.push(drizzleOrm.eq(table.tenantId, tenantID));
498
639
  }
499
- const result = await query;
640
+ const result = await this.client.delete(table).where(drizzleOrm.and(...conditions)).returning();
500
641
  if (result.length === 0) {
501
642
  throw new Error(`Document not found: ${slug}/${id}`);
502
643
  }
@@ -526,21 +667,24 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
526
667
  if (!globalConfig) throw new Error(`Global "${globalSlug}" not found`);
527
668
  const table = this.getTable(slug);
528
669
  let query = this.client.select().from(table);
529
- if (!draft && table._status) {
530
- query = query.where(drizzleOrm.eq(table._status, "published"));
670
+ if (!draft && table.status) {
671
+ query = query.where(drizzleOrm.eq(table.status, "published"));
531
672
  }
532
673
  const results = await query.limit(1);
533
674
  if (results.length === 0) return null;
534
675
  let doc = this.processResult(results[0], globalConfig);
535
- if (draft && doc._has_draft) {
536
- const versions = await this.findVersions({
537
- collection: slug,
538
- documentId: globalSlug,
539
- limit: 1,
540
- sort: "-createdAt"
541
- });
542
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
543
- doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };
676
+ if (draft) {
677
+ const versions = await this.executeRaw(drizzleOrm.sql`
678
+ SELECT * FROM kyro_versions
679
+ WHERE collection_slug = ${slug}
680
+ AND document_id = ${globalSlug}
681
+ ORDER BY created_at DESC
682
+ LIMIT 1
683
+ `);
684
+ if (versions.length > 0) {
685
+ const ver = versions[0];
686
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
687
+ doc = { ...doc, ...versionData, status: doc.status };
544
688
  }
545
689
  }
546
690
  return doc;
@@ -557,6 +701,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
557
701
  FROM kyro_versions
558
702
  WHERE collection_slug = ${slug}
559
703
  AND document_id = ${documentId}
704
+ AND autosave = 0
560
705
  ${tenantID ? drizzleOrm.sql`AND tenant_id = ${tenantID}` : drizzleOrm.sql``}
561
706
  `);
562
707
  const totalDocs = parseInt(countResult[0]?.count || "0");
@@ -565,6 +710,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
565
710
  FROM kyro_versions
566
711
  WHERE collection_slug = ${slug}
567
712
  AND document_id = ${documentId}
713
+ AND autosave = 0
568
714
  ${tenantID ? drizzleOrm.sql`AND tenant_id = ${tenantID}` : drizzleOrm.sql``}
569
715
  ORDER BY created_at DESC
570
716
  LIMIT ${limit}
@@ -596,28 +742,53 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
596
742
  }
597
743
  async createVersion(args) {
598
744
  await this.ensureVersionsTable();
599
- const id = Math.random().toString(36).substring(2, 15);
600
745
  const now = (/* @__PURE__ */ new Date()).toISOString();
746
+ if (args.autosave) {
747
+ const existing = await this.executeRaw(drizzleOrm.sql`
748
+ SELECT * FROM kyro_versions
749
+ WHERE collection_slug = ${args.collection}
750
+ AND document_id = ${args.documentId}
751
+ AND autosave = 1
752
+ ${args.tenantID ? drizzleOrm.sql`AND tenant_id = ${args.tenantID}` : drizzleOrm.sql``}
753
+ LIMIT 1
754
+ `);
755
+ if (existing.length > 0) {
756
+ await this.executeRaw(drizzleOrm.sql`
757
+ UPDATE kyro_versions
758
+ SET data = ${JSON.stringify(args.data)},
759
+ status = ${args.status},
760
+ updated_at = ${now}
761
+ WHERE id = ${existing[0].id}
762
+ `);
763
+ return this.findVersionByID({ collection: args.collection, versionId: existing[0].id, tenantID: args.tenantID });
764
+ }
765
+ }
766
+ const id = Math.random().toString(36).substring(2, 15);
601
767
  await this.executeRaw(drizzleOrm.sql`
602
768
  INSERT INTO kyro_versions (
603
- id, collection_slug, document_id, tenant_id, data, status, created_by, change_description, created_at, updated_at
769
+ id, collection_slug, document_id, tenant_id, data, status, autosave, created_by, change_description, created_at, updated_at
604
770
  ) VALUES (
605
771
  ${id}, ${args.collection}, ${args.documentId}, ${args.tenantID || null},
606
- ${JSON.stringify(args.data)}, ${args.status}, ${args.createdBy || null},
772
+ ${JSON.stringify(args.data)}, ${args.status}, ${args.autosave ? 1 : 0}, ${args.createdBy || null},
607
773
  ${args.changeDescription || null}, ${now}, ${now}
608
774
  )
609
775
  `);
610
- const config = this.getCollection(args.collection);
611
- if (config.versions?.maxPerDoc) {
612
- await this.deleteVersions({
613
- collection: args.collection,
614
- documentId: args.documentId,
615
- keepLatest: config.versions.maxPerDoc,
616
- tenantID: args.tenantID
617
- });
776
+ if (!args.autosave) {
777
+ const config = this.getCollection(args.collection);
778
+ if (config.versions?.maxPerDoc) {
779
+ await this.deleteVersions({
780
+ collection: args.collection,
781
+ documentId: args.documentId,
782
+ keepLatest: config.versions.maxPerDoc,
783
+ tenantID: args.tenantID
784
+ });
785
+ }
618
786
  }
619
787
  return this.findVersionByID({ collection: args.collection, versionId: id, tenantID: args.tenantID });
620
788
  }
789
+ async updateLatestVersion(args) {
790
+ return this.createVersion({ ...args, autosave: true });
791
+ }
621
792
  async deleteVersions(args) {
622
793
  await this.ensureVersionsTable();
623
794
  if (args.keepLatest) {
@@ -625,6 +796,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
625
796
  SELECT id FROM kyro_versions
626
797
  WHERE collection_slug = ${args.collection}
627
798
  AND document_id = ${args.documentId}
799
+ AND autosave = 0
628
800
  ${args.tenantID ? drizzleOrm.sql`AND tenant_id = ${args.tenantID}` : drizzleOrm.sql``}
629
801
  ORDER BY created_at DESC
630
802
  LIMIT ${args.keepLatest}
@@ -635,6 +807,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
635
807
  DELETE FROM kyro_versions
636
808
  WHERE collection_slug = ${args.collection}
637
809
  AND document_id = ${args.documentId}
810
+ AND autosave = 0
638
811
  AND id NOT IN (${drizzleOrm.sql.join(keepIds.map((id) => drizzleOrm.sql`${id}`), drizzleOrm.sql`, `)})
639
812
  `);
640
813
  }
@@ -647,65 +820,6 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
647
820
  `);
648
821
  }
649
822
  }
650
- async findDraft(args) {
651
- await this.ensureDraftsTable();
652
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
653
- const rows = await this.executeRaw(drizzleOrm.sql`
654
- SELECT *
655
- FROM kyro_drafts
656
- WHERE id = ${draftId}
657
- LIMIT 1
658
- `);
659
- const row = rows[0];
660
- return row ? this.rowToDraft(row) : null;
661
- }
662
- async upsertDraft(args) {
663
- await this.ensureDraftsTable();
664
- const now = (/* @__PURE__ */ new Date()).toISOString();
665
- const draftUpdatedAt = args.draftUpdatedAt || now;
666
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
667
- const existing = await this.findDraft(args);
668
- if (existing) {
669
- await this.executeRaw(drizzleOrm.sql`
670
- UPDATE kyro_drafts
671
- SET
672
- data = ${JSON.stringify(args.data)},
673
- base_updated_at = ${args.baseUpdatedAt ?? null},
674
- draft_updated_at = ${draftUpdatedAt},
675
- updated_at = ${now}
676
- WHERE id = ${draftId}
677
- `);
678
- } else {
679
- await this.executeRaw(drizzleOrm.sql`
680
- INSERT INTO kyro_drafts (
681
- id, collection_slug, document_id, tenant_id, data, base_updated_at, draft_updated_at, created_at, updated_at
682
- ) VALUES (
683
- ${draftId},
684
- ${args.collection},
685
- ${args.documentId},
686
- ${args.tenantID ?? null},
687
- ${JSON.stringify(args.data)},
688
- ${args.baseUpdatedAt ?? null},
689
- ${draftUpdatedAt},
690
- ${now},
691
- ${now}
692
- )
693
- `);
694
- }
695
- const saved = await this.findDraft(args);
696
- if (!saved) {
697
- throw new Error("Failed to persist draft snapshot");
698
- }
699
- return saved;
700
- }
701
- async deleteDraft(args) {
702
- await this.ensureDraftsTable();
703
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
704
- await this.executeRaw(drizzleOrm.sql`
705
- DELETE FROM kyro_drafts
706
- WHERE id = ${draftId}
707
- `);
708
- }
709
823
  // ========================================================================
710
824
  // Helper Methods
711
825
  // ========================================================================
@@ -779,6 +893,22 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
779
893
  }
780
894
  if (field.type === "tabs" && "tabs" in field && field.name) {
781
895
  if (typeof result[field.name] === "object" && result[field.name] !== null && !Array.isArray(result[field.name])) {
896
+ for (const tab of field.tabs) {
897
+ for (const tabField of tab.fields) {
898
+ if ((tabField.type === "upload" || tabField.type === "image") && tabField.name) {
899
+ const val = result[field.name][tabField.name];
900
+ if (typeof val === "string") {
901
+ try {
902
+ const parsed = JSON.parse(val);
903
+ 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 || "");
904
+ } catch {
905
+ }
906
+ } else if (val && typeof val === "object") {
907
+ 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 || "");
908
+ }
909
+ }
910
+ }
911
+ }
782
912
  continue;
783
913
  }
784
914
  if (typeof result[field.name] === "string") {
@@ -803,6 +933,9 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
803
933
  } catch {
804
934
  }
805
935
  }
936
+ if ((tabField.type === "upload" || tabField.type === "image") && value && typeof value === "object") {
937
+ 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 || "");
938
+ }
806
939
  }
807
940
  tabData[tabField.name] = value;
808
941
  delete result[tabField.name];
@@ -820,43 +953,8 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
820
953
  }
821
954
  return result;
822
955
  }
823
- async ensureDraftsTable() {
824
- if (_schemaEnsured || this.draftsTableReady) return;
825
- let createTableSQL;
826
- if (this.dialect === "sqlite") {
827
- createTableSQL = `
828
- CREATE TABLE IF NOT EXISTS kyro_drafts (
829
- id text PRIMARY KEY,
830
- collection_slug text NOT NULL,
831
- document_id text NOT NULL,
832
- tenant_id text,
833
- data text NOT NULL,
834
- base_updated_at text,
835
- draft_updated_at text NOT NULL,
836
- created_at text DEFAULT (datetime('now')),
837
- updated_at text DEFAULT (datetime('now'))
838
- )
839
- `;
840
- } else {
841
- createTableSQL = `
842
- CREATE TABLE IF NOT EXISTS kyro_drafts (
843
- id text PRIMARY KEY,
844
- collection_slug text NOT NULL,
845
- document_id text NOT NULL,
846
- tenant_id text,
847
- data text NOT NULL,
848
- base_updated_at text,
849
- draft_updated_at text NOT NULL,
850
- created_at text NOT NULL,
851
- updated_at text NOT NULL
852
- )
853
- `;
854
- }
855
- await this.executeRaw(drizzleOrm.sql.raw(createTableSQL));
856
- this.draftsTableReady = true;
857
- }
858
956
  async ensureVersionsTable() {
859
- if (_schemaEnsured || this.versionsTableReady) return;
957
+ if (this.versionsTableReady) return;
860
958
  let createTableSQL;
861
959
  if (this.dialect === "sqlite") {
862
960
  createTableSQL = `
@@ -867,6 +965,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
867
965
  tenant_id text,
868
966
  data text NOT NULL,
869
967
  status text NOT NULL DEFAULT 'draft',
968
+ autosave integer NOT NULL DEFAULT 0,
870
969
  created_by text,
871
970
  change_description text,
872
971
  created_at text DEFAULT (datetime('now')),
@@ -882,6 +981,7 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
882
981
  tenant_id text,
883
982
  data text NOT NULL,
884
983
  status text NOT NULL,
984
+ autosave integer NOT NULL DEFAULT 0,
885
985
  created_by text,
886
986
  change_description text,
887
987
  created_at text NOT NULL,
@@ -890,11 +990,16 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
890
990
  `;
891
991
  }
892
992
  await this.executeRaw(drizzleOrm.sql.raw(createTableSQL));
993
+ try {
994
+ if (this.dialect === "postgres") {
995
+ await this.executeRaw(drizzleOrm.sql.raw(`ALTER TABLE kyro_versions ADD COLUMN IF NOT EXISTS autosave integer NOT NULL DEFAULT 0`));
996
+ } else {
997
+ await this.executeRaw(drizzleOrm.sql.raw(`ALTER TABLE kyro_versions ADD COLUMN autosave integer NOT NULL DEFAULT 0`));
998
+ }
999
+ } catch {
1000
+ }
893
1001
  this.versionsTableReady = true;
894
1002
  }
895
- getDraftId(collection, documentId, tenantID) {
896
- return `${collection}::${documentId}::${tenantID || "global"}`;
897
- }
898
1003
  async executeRaw(query) {
899
1004
  const result = await this.client.execute(query);
900
1005
  if (Array.isArray(result)) {
@@ -908,24 +1013,11 @@ var DrizzleAdapter = class extends chunkSA7NSSIQ_cjs.AbstractBaseAdapter {
908
1013
  }
909
1014
  return [];
910
1015
  }
911
- rowToDraft(row) {
912
- return {
913
- id: String(row.id),
914
- collection: row.collection_slug,
915
- documentId: row.document_id,
916
- tenantID: row.tenant_id ?? void 0,
917
- data: row.data ? JSON.parse(row.data) : {},
918
- baseUpdatedAt: row.base_updated_at ?? null,
919
- draftUpdatedAt: row.draft_updated_at,
920
- createdAt: row.created_at,
921
- updatedAt: row.updated_at
922
- };
923
- }
924
1016
  };
925
1017
  function createDrizzleAdapter(options) {
926
1018
  return new DrizzleAdapter(options);
927
1019
  }
928
- var _require = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-2KVHZE6O.cjs', document.baseURI).href)));
1020
+ var _require = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-RFFSZSCL.cjs', document.baseURI).href)));
929
1021
  var modPath = "node:sqlite";
930
1022
  var { DatabaseSync } = _require(modPath);
931
1023
  function getDialect() {
@@ -963,7 +1055,7 @@ async function runMigrations(_db, _dialect) {
963
1055
  );
964
1056
  }
965
1057
  async function seedDefaultRoles(db) {
966
- const { roles } = await import('./schema-37SE2F4B.cjs');
1058
+ const { roles } = await import('./schema-6QL3USNB.cjs');
967
1059
  await db.insert(roles).values({
968
1060
  name: "super_admin",
969
1061
  level: 100,
@@ -981,5 +1073,5 @@ exports.fieldToDrizzleType = fieldToDrizzleType;
981
1073
  exports.genId = genId;
982
1074
  exports.runMigrations = runMigrations;
983
1075
  exports.seedDefaultRoles = seedDefaultRoles;
984
- //# sourceMappingURL=chunk-2KVHZE6O.cjs.map
985
- //# sourceMappingURL=chunk-2KVHZE6O.cjs.map
1076
+ //# sourceMappingURL=chunk-RFFSZSCL.cjs.map
1077
+ //# sourceMappingURL=chunk-RFFSZSCL.cjs.map