@kyro-cms/core 0.9.1 → 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 (180) hide show
  1. package/README.md +0 -6
  2. package/dist/{WebhookService-Yg2UEOB4.d.cts → WebhookService-BKszZlG0.d.cts} +1 -1
  3. package/dist/{WebhookService-CUTb9XOy.d.ts → WebhookService-Ccf1j-IN.d.ts} +1 -1
  4. package/dist/api-handler-graphql.cjs +17 -17
  5. package/dist/api-handler-graphql.js +13 -13
  6. package/dist/api-handler-trpc.cjs +15 -15
  7. package/dist/api-handler-trpc.js +13 -13
  8. package/dist/api-handler.cjs +16 -16
  9. package/dist/api-handler.js +13 -13
  10. package/dist/{base-DaqY2GhA.d.ts → base-CIuXkrH4.d.cts} +3 -5
  11. package/dist/{base-B71y_EAF.d.cts → base-fFo4lqER.d.ts} +3 -5
  12. package/dist/bootstrap-3PV3GJ3S.js +7 -0
  13. package/dist/{bootstrap-T5BK77LD.js.map → bootstrap-3PV3GJ3S.js.map} +1 -1
  14. package/dist/bootstrap-4CELFLJO.cjs +32 -0
  15. package/dist/{bootstrap-5NLASFOG.cjs.map → bootstrap-4CELFLJO.cjs.map} +1 -1
  16. package/dist/{chunk-Z6ZWNWWR.js → chunk-4CV4JOE5.js} +3 -9
  17. package/dist/{chunk-Z6ZWNWWR.js.map → chunk-4CV4JOE5.js.map} +1 -1
  18. package/dist/{chunk-5EPFQUQD.js → chunk-53NYVYVX.js} +6 -6
  19. package/dist/chunk-53NYVYVX.js.map +1 -0
  20. package/dist/{chunk-22M4O4ZJ.js → chunk-5H3MWQJS.js} +129 -143
  21. package/dist/chunk-5H3MWQJS.js.map +1 -0
  22. package/dist/{chunk-RAMGUDJN.cjs → chunk-5PMQQFRE.cjs} +5 -5
  23. package/dist/{chunk-RAMGUDJN.cjs.map → chunk-5PMQQFRE.cjs.map} +1 -1
  24. package/dist/{chunk-TXSZFA4G.js → chunk-6UNONDW7.js} +93 -9
  25. package/dist/chunk-6UNONDW7.js.map +1 -0
  26. package/dist/{chunk-C36TMDTY.cjs → chunk-7OS7TX2Q.cjs} +49 -48
  27. package/dist/chunk-7OS7TX2Q.cjs.map +1 -0
  28. package/dist/{chunk-3TPQ2BU6.js → chunk-BYBMTIMT.js} +2 -6
  29. package/dist/chunk-BYBMTIMT.js.map +1 -0
  30. package/dist/{chunk-FOPGUM27.js → chunk-CJX74IYK.js} +5 -4
  31. package/dist/chunk-CJX74IYK.js.map +1 -0
  32. package/dist/{chunk-RSF3UU7H.cjs → chunk-CNKT4PME.cjs} +196 -200
  33. package/dist/chunk-CNKT4PME.cjs.map +1 -0
  34. package/dist/{chunk-G7VZBCD6.cjs → chunk-CZLDE2OZ.cjs} +2 -9
  35. package/dist/{chunk-G7VZBCD6.cjs.map → chunk-CZLDE2OZ.cjs.map} +1 -1
  36. package/dist/{chunk-JOPVMWTM.cjs → chunk-DPA3KWPY.cjs} +3 -3
  37. package/dist/chunk-DPA3KWPY.cjs.map +1 -0
  38. package/dist/{chunk-ROJHKAQ4.cjs → chunk-E2763JUP.cjs} +143 -157
  39. package/dist/chunk-E2763JUP.cjs.map +1 -0
  40. package/dist/{chunk-FAXU7BMP.js → chunk-E5UJBLQ7.js} +2 -2
  41. package/dist/chunk-E5UJBLQ7.js.map +1 -0
  42. package/dist/{chunk-DVD5P72E.cjs → chunk-EEJUFDMF.cjs} +2 -6
  43. package/dist/chunk-EEJUFDMF.cjs.map +1 -0
  44. package/dist/{chunk-2HZRBATX.cjs → chunk-FSKONGCX.cjs} +2 -2
  45. package/dist/chunk-FSKONGCX.cjs.map +1 -0
  46. package/dist/{chunk-P2HKJ7P5.js → chunk-GAAHG2Z4.js} +3 -3
  47. package/dist/{chunk-P2HKJ7P5.js.map → chunk-GAAHG2Z4.js.map} +1 -1
  48. package/dist/{chunk-PI73NNOK.cjs → chunk-GUUB5EAG.cjs} +2 -2
  49. package/dist/chunk-GUUB5EAG.cjs.map +1 -0
  50. package/dist/{chunk-PU2Z5VWF.js → chunk-IPTZM3VE.js} +183 -187
  51. package/dist/chunk-IPTZM3VE.js.map +1 -0
  52. package/dist/{chunk-UERVXYVK.cjs → chunk-NWUEVLQT.cjs} +13 -13
  53. package/dist/{chunk-UERVXYVK.cjs.map → chunk-NWUEVLQT.cjs.map} +1 -1
  54. package/dist/{chunk-KPA4AN4R.js → chunk-OHC6UHFY.js} +86 -12
  55. package/dist/chunk-OHC6UHFY.js.map +1 -0
  56. package/dist/{chunk-DEVFAKCQ.cjs → chunk-PHJRNPHY.cjs} +6 -6
  57. package/dist/chunk-PHJRNPHY.cjs.map +1 -0
  58. package/dist/{chunk-VO35MNPH.js → chunk-PQ72Z6WC.js} +67 -105
  59. package/dist/chunk-PQ72Z6WC.js.map +1 -0
  60. package/dist/{chunk-KNRSROWB.cjs → chunk-PV2I2KMI.cjs} +86 -12
  61. package/dist/chunk-PV2I2KMI.cjs.map +1 -0
  62. package/dist/{chunk-V2TVSCV5.cjs → chunk-Q23GAMLE.cjs} +71 -109
  63. package/dist/chunk-Q23GAMLE.cjs.map +1 -0
  64. package/dist/{chunk-COIASRDK.cjs → chunk-RFFSZSCL.cjs} +107 -171
  65. package/dist/chunk-RFFSZSCL.cjs.map +1 -0
  66. package/dist/{chunk-AL5KX63J.js → chunk-UUDTPZX6.js} +3 -3
  67. package/dist/chunk-UUDTPZX6.js.map +1 -0
  68. package/dist/{chunk-EJN2PAOE.js → chunk-V7KZQIZ6.js} +102 -166
  69. package/dist/chunk-V7KZQIZ6.js.map +1 -0
  70. package/dist/{chunk-DYTZ6FQ7.js → chunk-WXVB364T.js} +2 -2
  71. package/dist/chunk-WXVB364T.js.map +1 -0
  72. package/dist/{chunk-WNCYAKF3.cjs → chunk-Y7AQK4R4.cjs} +93 -9
  73. package/dist/chunk-Y7AQK4R4.cjs.map +1 -0
  74. package/dist/{chunk-SPBTLUN6.js → chunk-YFAVQQTU.js} +7 -7
  75. package/dist/{chunk-SPBTLUN6.js.map → chunk-YFAVQQTU.js.map} +1 -1
  76. package/dist/cli/index.cjs +5 -5
  77. package/dist/cli/index.js +5 -5
  78. package/dist/client.cjs +4 -4
  79. package/dist/client.d.cts +2 -2
  80. package/dist/client.d.ts +2 -2
  81. package/dist/client.js +2 -2
  82. package/dist/drizzle/index.cjs +14 -14
  83. package/dist/drizzle/index.d.cts +4 -10
  84. package/dist/drizzle/index.d.ts +4 -10
  85. package/dist/drizzle/index.js +5 -5
  86. package/dist/fields/index.cjs +22 -22
  87. package/dist/fields/index.d.cts +1 -1
  88. package/dist/fields/index.d.ts +1 -1
  89. package/dist/fields/index.js +2 -2
  90. package/dist/graphql/index.cjs +1 -1
  91. package/dist/graphql/index.d.cts +3 -3
  92. package/dist/graphql/index.d.ts +3 -3
  93. package/dist/graphql/index.js +1 -1
  94. package/dist/{index-CaTNnLGd.d.cts → index-BKta3cBH.d.cts} +3 -2
  95. package/dist/{index-CJXPB_ot.d.ts → index-ClOqnkTO.d.ts} +3 -2
  96. package/dist/index.cjs +117 -117
  97. package/dist/index.d.cts +10 -15
  98. package/dist/index.d.ts +10 -15
  99. package/dist/index.js +18 -18
  100. package/dist/integration.cjs +1 -1
  101. package/dist/integration.js +1 -1
  102. package/dist/media-7WDX4BDJ.js +4 -0
  103. package/dist/{media-GPPTZ43E.js.map → media-7WDX4BDJ.js.map} +1 -1
  104. package/dist/{media-XNTUFJZR.cjs → media-TUSLVRQ6.cjs} +3 -3
  105. package/dist/{media-XNTUFJZR.cjs.map → media-TUSLVRQ6.cjs.map} +1 -1
  106. package/dist/{mongo-auth-adapter-ISOM7FSS.cjs → mongo-auth-adapter-GT4S7SCU.cjs} +3 -3
  107. package/dist/{mongo-auth-adapter-ISOM7FSS.cjs.map → mongo-auth-adapter-GT4S7SCU.cjs.map} +1 -1
  108. package/dist/mongo-auth-adapter-M7VV4LNB.js +4 -0
  109. package/dist/{mongo-auth-adapter-MO6STCV3.js.map → mongo-auth-adapter-M7VV4LNB.js.map} +1 -1
  110. package/dist/mongodb/index.cjs +5 -5
  111. package/dist/mongodb/index.d.cts +4 -9
  112. package/dist/mongodb/index.d.ts +4 -9
  113. package/dist/mongodb/index.js +3 -3
  114. package/dist/postgres-auth-adapter-AFAPISH7.js +5 -0
  115. package/dist/{postgres-auth-adapter-DWDR7P5G.js.map → postgres-auth-adapter-AFAPISH7.js.map} +1 -1
  116. package/dist/postgres-auth-adapter-SFDTLONT.cjs +14 -0
  117. package/dist/{postgres-auth-adapter-WRWSJD4E.cjs.map → postgres-auth-adapter-SFDTLONT.cjs.map} +1 -1
  118. package/dist/{redis-adapter-KJ3YOOT6.cjs → redis-adapter-UQX4EE3B.cjs} +3 -3
  119. package/dist/{redis-adapter-KJ3YOOT6.cjs.map → redis-adapter-UQX4EE3B.cjs.map} +1 -1
  120. package/dist/redis-adapter-XALOGWY3.js +4 -0
  121. package/dist/{redis-adapter-HGTPWIGV.js.map → redis-adapter-XALOGWY3.js.map} +1 -1
  122. package/dist/rest/index.cjs +10 -10
  123. package/dist/rest/index.d.cts +4 -4
  124. package/dist/rest/index.d.ts +4 -4
  125. package/dist/rest/index.js +8 -8
  126. package/dist/{schema-TTFE4467.cjs → schema-6QL3USNB.cjs} +15 -15
  127. package/dist/{schema-TTFE4467.cjs.map → schema-6QL3USNB.cjs.map} +1 -1
  128. package/dist/{schema-6I5OFR4Z.js → schema-FNNWEAAW.js} +4 -4
  129. package/dist/{schema-6I5OFR4Z.js.map → schema-FNNWEAAW.js.map} +1 -1
  130. package/dist/{sqlite-adapter-CSIZE5SX.cjs → sqlite-adapter-AQB5TCGV.cjs} +3 -3
  131. package/dist/{sqlite-adapter-CSIZE5SX.cjs.map → sqlite-adapter-AQB5TCGV.cjs.map} +1 -1
  132. package/dist/sqlite-adapter-N5H6IM2X.js +4 -0
  133. package/dist/{sqlite-adapter-6GEUSVXQ.js.map → sqlite-adapter-N5H6IM2X.js.map} +1 -1
  134. package/dist/templates/index.cjs +49 -49
  135. package/dist/templates/index.d.cts +2 -2
  136. package/dist/templates/index.d.ts +2 -2
  137. package/dist/templates/index.js +2 -2
  138. package/dist/trpc/index.cjs +11 -11
  139. package/dist/trpc/index.d.cts +3 -3
  140. package/dist/trpc/index.d.ts +3 -3
  141. package/dist/trpc/index.js +2 -2
  142. package/dist/{types-Z6FBiqa2.d.cts → types-DeSApf9T.d.cts} +1 -0
  143. package/dist/{types-Z6FBiqa2.d.ts → types-DeSApf9T.d.ts} +1 -0
  144. package/dist/{types-CyCQ6SAI.d.ts → types-Dgzlftb7.d.ts} +6 -28
  145. package/dist/{types-DJxD9394.d.cts → types-Ds0tCA3L.d.cts} +6 -28
  146. package/dist/ws/index.cjs +6 -6
  147. package/dist/ws/index.js +2 -2
  148. package/package.json +1 -1
  149. package/dist/bootstrap-5NLASFOG.cjs +0 -32
  150. package/dist/bootstrap-T5BK77LD.js +0 -7
  151. package/dist/chunk-22M4O4ZJ.js.map +0 -1
  152. package/dist/chunk-2HZRBATX.cjs.map +0 -1
  153. package/dist/chunk-3TPQ2BU6.js.map +0 -1
  154. package/dist/chunk-5EPFQUQD.js.map +0 -1
  155. package/dist/chunk-AL5KX63J.js.map +0 -1
  156. package/dist/chunk-C36TMDTY.cjs.map +0 -1
  157. package/dist/chunk-COIASRDK.cjs.map +0 -1
  158. package/dist/chunk-DEVFAKCQ.cjs.map +0 -1
  159. package/dist/chunk-DVD5P72E.cjs.map +0 -1
  160. package/dist/chunk-DYTZ6FQ7.js.map +0 -1
  161. package/dist/chunk-EJN2PAOE.js.map +0 -1
  162. package/dist/chunk-FAXU7BMP.js.map +0 -1
  163. package/dist/chunk-FOPGUM27.js.map +0 -1
  164. package/dist/chunk-JOPVMWTM.cjs.map +0 -1
  165. package/dist/chunk-KNRSROWB.cjs.map +0 -1
  166. package/dist/chunk-KPA4AN4R.js.map +0 -1
  167. package/dist/chunk-PI73NNOK.cjs.map +0 -1
  168. package/dist/chunk-PU2Z5VWF.js.map +0 -1
  169. package/dist/chunk-ROJHKAQ4.cjs.map +0 -1
  170. package/dist/chunk-RSF3UU7H.cjs.map +0 -1
  171. package/dist/chunk-TXSZFA4G.js.map +0 -1
  172. package/dist/chunk-V2TVSCV5.cjs.map +0 -1
  173. package/dist/chunk-VO35MNPH.js.map +0 -1
  174. package/dist/chunk-WNCYAKF3.cjs.map +0 -1
  175. package/dist/media-GPPTZ43E.js +0 -4
  176. package/dist/mongo-auth-adapter-MO6STCV3.js +0 -4
  177. package/dist/postgres-auth-adapter-DWDR7P5G.js +0 -5
  178. package/dist/postgres-auth-adapter-WRWSJD4E.cjs +0 -14
  179. package/dist/redis-adapter-HGTPWIGV.js +0 -4
  180. package/dist/sqlite-adapter-6GEUSVXQ.js +0 -4
@@ -1,4 +1,4 @@
1
- import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-DYTZ6FQ7.js';
1
+ import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-WXVB364T.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';
@@ -76,7 +76,7 @@ function collectionToDrizzleSchema(collection, dialect = "postgres") {
76
76
  lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);
77
77
  lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);
78
78
  }
79
- lines.push(` publishStatus: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('publishStatus').default('draft'),`);
79
+ lines.push(` status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('status').default('draft'),`);
80
80
  lines.push(` hasDraft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('hasDraft').default(false),`);
81
81
  lines.push("});");
82
82
  return lines.join("\n");
@@ -86,7 +86,6 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
86
86
  schema;
87
87
  dialect;
88
88
  connectionString;
89
- draftsTableReady = false;
90
89
  versionsTableReady = false;
91
90
  constructor(options) {
92
91
  super();
@@ -274,7 +273,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
274
273
  }
275
274
  if (!columns.createdAt) columns.createdAt = this.dialect === "sqlite" ? text$1("created_at").default((/* @__PURE__ */ new Date()).toISOString()) : timestamp("created_at").defaultNow();
276
275
  if (!columns.updatedAt) columns.updatedAt = this.dialect === "sqlite" ? text$1("updated_at").default((/* @__PURE__ */ new Date()).toISOString()) : timestamp("updated_at").defaultNow();
277
- columns.publishStatus = this.dialect === "sqlite" ? text$1("publishStatus").default("draft") : varchar("publishStatus", { length: 20 }).default("draft");
276
+ columns.status = this.dialect === "sqlite" ? text$1("status").default("draft") : varchar("status", { length: 20 }).default("draft");
278
277
  columns.hasDraft = this.dialect === "sqlite" ? integer("hasDraft", { mode: "boolean" }).default(false) : boolean("hasDraft").default(false);
279
278
  return this.dialect === "sqlite" ? sqliteTable(tableName, columns) : pgTable(tableName, columns);
280
279
  }
@@ -294,7 +293,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
294
293
  ${colDefs}
295
294
  ${hasCreated ? "" : '"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
296
295
  ${hasUpdated ? "" : '"updated_at" TIMESTAMP NOT NULL DEFAULT NOW(),'}
297
- "publishStatus" VARCHAR(20) DEFAULT 'draft',
296
+ "status" VARCHAR(20) DEFAULT 'draft',
298
297
  "hasDraft" BOOLEAN DEFAULT false
299
298
  )
300
299
  `);
@@ -306,7 +305,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
306
305
  ${colDefs}
307
306
  ${hasCreated ? "" : `"created_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
308
307
  ${hasUpdated ? "" : `"updated_at" TEXT NOT NULL DEFAULT (datetime('now')),`}
309
- "publishStatus" TEXT DEFAULT 'draft',
308
+ "status" TEXT DEFAULT 'draft',
310
309
  "hasDraft" INTEGER DEFAULT 0
311
310
  )
312
311
  `);
@@ -384,13 +383,13 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
384
383
  defs["id"] = isGlobal ? '"id" TEXT PRIMARY KEY' : '"id" UUID PRIMARY KEY DEFAULT gen_random_uuid()';
385
384
  if (!hasCreated) defs["created_at"] = '"created_at" TIMESTAMP DEFAULT NULL';
386
385
  if (!hasUpdated) defs["updated_at"] = '"updated_at" TIMESTAMP DEFAULT NULL';
387
- defs["publishStatus"] = '"publishStatus" VARCHAR(20) DEFAULT NULL';
386
+ defs["status"] = '"status" VARCHAR(20) DEFAULT NULL';
388
387
  defs["hasDraft"] = '"hasDraft" BOOLEAN DEFAULT NULL';
389
388
  } else {
390
389
  defs["id"] = '"id" TEXT PRIMARY KEY';
391
390
  if (!hasCreated) defs["created_at"] = '"created_at" TEXT DEFAULT NULL';
392
391
  if (!hasUpdated) defs["updated_at"] = '"updated_at" TEXT DEFAULT NULL';
393
- defs["publishStatus"] = '"publishStatus" TEXT DEFAULT NULL';
392
+ defs["status"] = '"status" TEXT DEFAULT NULL';
394
393
  defs["hasDraft"] = '"hasDraft" INTEGER DEFAULT NULL';
395
394
  }
396
395
  for (const field of config.fields) {
@@ -517,11 +516,12 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
517
516
  effectiveWhere = rlsQuery.where || {};
518
517
  }
519
518
  const filters = this.buildWhereClause(effectiveWhere, config, table, tenantID);
520
- if (!draft && table.publishStatus) {
521
- filters.push(eq(table.publishStatus, "published"));
519
+ if (!draft && table.status) {
520
+ filters.push(eq(table.status, "published"));
522
521
  }
523
522
  const sortOption = this.parseSort(sort);
524
- const totalDocs = await this.count({ collection: slug, where: effectiveWhere, tenantID });
523
+ const countWhere = !draft && table.status ? { ...effectiveWhere, status: "published" } : effectiveWhere;
524
+ const totalDocs = await this.count({ collection: slug, where: countWhere, tenantID });
525
525
  const offset = (page - 1) * limit;
526
526
  let results = [];
527
527
  try {
@@ -541,16 +541,17 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
541
541
  }
542
542
  if (draft) {
543
543
  docs = await Promise.all(docs.map(async (doc) => {
544
- if (doc.hasDraft) {
545
- const versions = await this.findVersions({
546
- collection: slug,
547
- documentId: doc.id,
548
- limit: 1,
549
- sort: "-createdAt"
550
- });
551
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
552
- return { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
553
- }
544
+ const versions = await this.executeRaw(sql`
545
+ SELECT * FROM kyro_versions
546
+ WHERE collection_slug = ${slug}
547
+ AND document_id = ${doc.id}
548
+ ORDER BY created_at DESC
549
+ LIMIT 1
550
+ `);
551
+ if (versions.length > 0) {
552
+ const ver = versions[0];
553
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
554
+ return { ...doc, ...versionData, status: doc.status };
554
555
  }
555
556
  return doc;
556
557
  }));
@@ -572,20 +573,23 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
572
573
  }
573
574
  const conditions = [eq(table.id, id)];
574
575
  if (tenantID && table.tenantId) conditions.push(eq(table.tenantId, tenantID));
575
- if (!draft && table.publishStatus) conditions.push(eq(table.publishStatus, "published"));
576
+ if (!draft && table.status) conditions.push(eq(table.status, "published"));
576
577
  const whereClause = conditions.length > 1 ? and(...conditions) : conditions[0];
577
578
  let allRows = await this.client.select().from(table).where(whereClause);
578
579
  if (allRows.length === 0) return null;
579
580
  let doc = this.processResult(allRows[0], config);
580
- if (draft && doc.hasDraft) {
581
- const versions = await this.findVersions({
582
- collection: slug,
583
- documentId: doc.id,
584
- limit: 1,
585
- sort: "-createdAt"
586
- });
587
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
588
- doc = { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
581
+ if (draft) {
582
+ const versions = await this.executeRaw(sql`
583
+ SELECT * FROM kyro_versions
584
+ WHERE collection_slug = ${slug}
585
+ AND document_id = ${doc.id}
586
+ ORDER BY created_at DESC
587
+ LIMIT 1
588
+ `);
589
+ if (versions.length > 0) {
590
+ const ver = versions[0];
591
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
592
+ doc = { ...doc, ...versionData, status: doc.status };
589
593
  }
590
594
  }
591
595
  return doc;
@@ -656,21 +660,24 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
656
660
  if (!globalConfig) throw new Error(`Global "${globalSlug}" not found`);
657
661
  const table = this.getTable(slug);
658
662
  let query = this.client.select().from(table);
659
- if (!draft && table.publishStatus) {
660
- query = query.where(eq(table.publishStatus, "published"));
663
+ if (!draft && table.status) {
664
+ query = query.where(eq(table.status, "published"));
661
665
  }
662
666
  const results = await query.limit(1);
663
667
  if (results.length === 0) return null;
664
668
  let doc = this.processResult(results[0], globalConfig);
665
- if (draft && doc.hasDraft) {
666
- const versions = await this.findVersions({
667
- collection: slug,
668
- documentId: globalSlug,
669
- limit: 1,
670
- sort: "-createdAt"
671
- });
672
- if (versions.docs.length > 0 && versions.docs[0].status === "draft") {
673
- doc = { ...doc, ...versions.docs[0].data, hasDraft: true, publishStatus: doc.publishStatus };
669
+ if (draft) {
670
+ const versions = await this.executeRaw(sql`
671
+ SELECT * FROM kyro_versions
672
+ WHERE collection_slug = ${slug}
673
+ AND document_id = ${globalSlug}
674
+ ORDER BY created_at DESC
675
+ LIMIT 1
676
+ `);
677
+ if (versions.length > 0) {
678
+ const ver = versions[0];
679
+ const versionData = typeof ver.data === "string" ? JSON.parse(ver.data) : ver.data;
680
+ doc = { ...doc, ...versionData, status: doc.status };
674
681
  }
675
682
  }
676
683
  return doc;
@@ -687,6 +694,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
687
694
  FROM kyro_versions
688
695
  WHERE collection_slug = ${slug}
689
696
  AND document_id = ${documentId}
697
+ AND autosave = 0
690
698
  ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}
691
699
  `);
692
700
  const totalDocs = parseInt(countResult[0]?.count || "0");
@@ -695,6 +703,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
695
703
  FROM kyro_versions
696
704
  WHERE collection_slug = ${slug}
697
705
  AND document_id = ${documentId}
706
+ AND autosave = 0
698
707
  ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}
699
708
  ORDER BY created_at DESC
700
709
  LIMIT ${limit}
@@ -726,28 +735,53 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
726
735
  }
727
736
  async createVersion(args) {
728
737
  await this.ensureVersionsTable();
729
- const id = Math.random().toString(36).substring(2, 15);
730
738
  const now = (/* @__PURE__ */ new Date()).toISOString();
739
+ if (args.autosave) {
740
+ const existing = await this.executeRaw(sql`
741
+ SELECT * FROM kyro_versions
742
+ WHERE collection_slug = ${args.collection}
743
+ AND document_id = ${args.documentId}
744
+ AND autosave = 1
745
+ ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}
746
+ LIMIT 1
747
+ `);
748
+ if (existing.length > 0) {
749
+ await this.executeRaw(sql`
750
+ UPDATE kyro_versions
751
+ SET data = ${JSON.stringify(args.data)},
752
+ status = ${args.status},
753
+ updated_at = ${now}
754
+ WHERE id = ${existing[0].id}
755
+ `);
756
+ return this.findVersionByID({ collection: args.collection, versionId: existing[0].id, tenantID: args.tenantID });
757
+ }
758
+ }
759
+ const id = Math.random().toString(36).substring(2, 15);
731
760
  await this.executeRaw(sql`
732
761
  INSERT INTO kyro_versions (
733
- id, collection_slug, document_id, tenant_id, data, status, created_by, change_description, created_at, updated_at
762
+ id, collection_slug, document_id, tenant_id, data, status, autosave, created_by, change_description, created_at, updated_at
734
763
  ) VALUES (
735
764
  ${id}, ${args.collection}, ${args.documentId}, ${args.tenantID || null},
736
- ${JSON.stringify(args.data)}, ${args.status}, ${args.createdBy || null},
765
+ ${JSON.stringify(args.data)}, ${args.status}, ${args.autosave ? 1 : 0}, ${args.createdBy || null},
737
766
  ${args.changeDescription || null}, ${now}, ${now}
738
767
  )
739
768
  `);
740
- const config = this.getCollection(args.collection);
741
- if (config.versions?.maxPerDoc) {
742
- await this.deleteVersions({
743
- collection: args.collection,
744
- documentId: args.documentId,
745
- keepLatest: config.versions.maxPerDoc,
746
- tenantID: args.tenantID
747
- });
769
+ if (!args.autosave) {
770
+ const config = this.getCollection(args.collection);
771
+ if (config.versions?.maxPerDoc) {
772
+ await this.deleteVersions({
773
+ collection: args.collection,
774
+ documentId: args.documentId,
775
+ keepLatest: config.versions.maxPerDoc,
776
+ tenantID: args.tenantID
777
+ });
778
+ }
748
779
  }
749
780
  return this.findVersionByID({ collection: args.collection, versionId: id, tenantID: args.tenantID });
750
781
  }
782
+ async updateLatestVersion(args) {
783
+ return this.createVersion({ ...args, autosave: true });
784
+ }
751
785
  async deleteVersions(args) {
752
786
  await this.ensureVersionsTable();
753
787
  if (args.keepLatest) {
@@ -755,6 +789,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
755
789
  SELECT id FROM kyro_versions
756
790
  WHERE collection_slug = ${args.collection}
757
791
  AND document_id = ${args.documentId}
792
+ AND autosave = 0
758
793
  ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}
759
794
  ORDER BY created_at DESC
760
795
  LIMIT ${args.keepLatest}
@@ -765,6 +800,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
765
800
  DELETE FROM kyro_versions
766
801
  WHERE collection_slug = ${args.collection}
767
802
  AND document_id = ${args.documentId}
803
+ AND autosave = 0
768
804
  AND id NOT IN (${sql.join(keepIds.map((id) => sql`${id}`), sql`, `)})
769
805
  `);
770
806
  }
@@ -777,65 +813,6 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
777
813
  `);
778
814
  }
779
815
  }
780
- async findDraft(args) {
781
- await this.ensureDraftsTable();
782
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
783
- const rows = await this.executeRaw(sql`
784
- SELECT *
785
- FROM kyro_drafts
786
- WHERE id = ${draftId}
787
- LIMIT 1
788
- `);
789
- const row = rows[0];
790
- return row ? this.rowToDraft(row) : null;
791
- }
792
- async upsertDraft(args) {
793
- await this.ensureDraftsTable();
794
- const now = (/* @__PURE__ */ new Date()).toISOString();
795
- const draftUpdatedAt = args.draftUpdatedAt || now;
796
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
797
- const existing = await this.findDraft(args);
798
- if (existing) {
799
- await this.executeRaw(sql`
800
- UPDATE kyro_drafts
801
- SET
802
- data = ${JSON.stringify(args.data)},
803
- base_updated_at = ${args.baseUpdatedAt ?? null},
804
- draft_updated_at = ${draftUpdatedAt},
805
- updated_at = ${now}
806
- WHERE id = ${draftId}
807
- `);
808
- } else {
809
- await this.executeRaw(sql`
810
- INSERT INTO kyro_drafts (
811
- id, collection_slug, document_id, tenant_id, data, base_updated_at, draft_updated_at, created_at, updated_at
812
- ) VALUES (
813
- ${draftId},
814
- ${args.collection},
815
- ${args.documentId},
816
- ${args.tenantID ?? null},
817
- ${JSON.stringify(args.data)},
818
- ${args.baseUpdatedAt ?? null},
819
- ${draftUpdatedAt},
820
- ${now},
821
- ${now}
822
- )
823
- `);
824
- }
825
- const saved = await this.findDraft(args);
826
- if (!saved) {
827
- throw new Error("Failed to persist draft snapshot");
828
- }
829
- return saved;
830
- }
831
- async deleteDraft(args) {
832
- await this.ensureDraftsTable();
833
- const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);
834
- await this.executeRaw(sql`
835
- DELETE FROM kyro_drafts
836
- WHERE id = ${draftId}
837
- `);
838
- }
839
816
  // ========================================================================
840
817
  // Helper Methods
841
818
  // ========================================================================
@@ -969,41 +946,6 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
969
946
  }
970
947
  return result;
971
948
  }
972
- async ensureDraftsTable() {
973
- if (this.draftsTableReady) return;
974
- let createTableSQL;
975
- if (this.dialect === "sqlite") {
976
- createTableSQL = `
977
- CREATE TABLE IF NOT EXISTS kyro_drafts (
978
- id text PRIMARY KEY,
979
- collection_slug text NOT NULL,
980
- document_id text NOT NULL,
981
- tenant_id text,
982
- data text NOT NULL,
983
- base_updated_at text,
984
- draft_updated_at text NOT NULL,
985
- created_at text DEFAULT (datetime('now')),
986
- updated_at text DEFAULT (datetime('now'))
987
- )
988
- `;
989
- } else {
990
- createTableSQL = `
991
- CREATE TABLE IF NOT EXISTS kyro_drafts (
992
- id text PRIMARY KEY,
993
- collection_slug text NOT NULL,
994
- document_id text NOT NULL,
995
- tenant_id text,
996
- data text NOT NULL,
997
- base_updated_at text,
998
- draft_updated_at text NOT NULL,
999
- created_at text NOT NULL,
1000
- updated_at text NOT NULL
1001
- )
1002
- `;
1003
- }
1004
- await this.executeRaw(sql.raw(createTableSQL));
1005
- this.draftsTableReady = true;
1006
- }
1007
949
  async ensureVersionsTable() {
1008
950
  if (this.versionsTableReady) return;
1009
951
  let createTableSQL;
@@ -1016,6 +958,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
1016
958
  tenant_id text,
1017
959
  data text NOT NULL,
1018
960
  status text NOT NULL DEFAULT 'draft',
961
+ autosave integer NOT NULL DEFAULT 0,
1019
962
  created_by text,
1020
963
  change_description text,
1021
964
  created_at text DEFAULT (datetime('now')),
@@ -1031,6 +974,7 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
1031
974
  tenant_id text,
1032
975
  data text NOT NULL,
1033
976
  status text NOT NULL,
977
+ autosave integer NOT NULL DEFAULT 0,
1034
978
  created_by text,
1035
979
  change_description text,
1036
980
  created_at text NOT NULL,
@@ -1039,11 +983,16 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
1039
983
  `;
1040
984
  }
1041
985
  await this.executeRaw(sql.raw(createTableSQL));
986
+ try {
987
+ if (this.dialect === "postgres") {
988
+ await this.executeRaw(sql.raw(`ALTER TABLE kyro_versions ADD COLUMN IF NOT EXISTS autosave integer NOT NULL DEFAULT 0`));
989
+ } else {
990
+ await this.executeRaw(sql.raw(`ALTER TABLE kyro_versions ADD COLUMN autosave integer NOT NULL DEFAULT 0`));
991
+ }
992
+ } catch {
993
+ }
1042
994
  this.versionsTableReady = true;
1043
995
  }
1044
- getDraftId(collection, documentId, tenantID) {
1045
- return `${collection}::${documentId}::${tenantID || "global"}`;
1046
- }
1047
996
  async executeRaw(query) {
1048
997
  const result = await this.client.execute(query);
1049
998
  if (Array.isArray(result)) {
@@ -1057,19 +1006,6 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
1057
1006
  }
1058
1007
  return [];
1059
1008
  }
1060
- rowToDraft(row) {
1061
- return {
1062
- id: String(row.id),
1063
- collection: row.collection_slug,
1064
- documentId: row.document_id,
1065
- tenantID: row.tenant_id ?? void 0,
1066
- data: row.data ? JSON.parse(row.data) : {},
1067
- baseUpdatedAt: row.base_updated_at ?? null,
1068
- draftUpdatedAt: row.draft_updated_at,
1069
- createdAt: row.created_at,
1070
- updatedAt: row.updated_at
1071
- };
1072
- }
1073
1009
  };
1074
1010
  function createDrizzleAdapter(options) {
1075
1011
  return new DrizzleAdapter(options);
@@ -1112,7 +1048,7 @@ async function runMigrations(_db, _dialect) {
1112
1048
  );
1113
1049
  }
1114
1050
  async function seedDefaultRoles(db) {
1115
- const { roles } = await import('./schema-6I5OFR4Z.js');
1051
+ const { roles } = await import('./schema-FNNWEAAW.js');
1116
1052
  await db.insert(roles).values({
1117
1053
  name: "super_admin",
1118
1054
  level: 100,
@@ -1123,5 +1059,5 @@ async function seedDefaultRoles(db) {
1123
1059
  }
1124
1060
 
1125
1061
  export { DrizzleAdapter, collectionToDrizzleSchema, createDatabase, createDrizzleAdapter, fieldToDrizzleType, genId, runMigrations, seedDefaultRoles };
1126
- //# sourceMappingURL=chunk-EJN2PAOE.js.map
1127
- //# sourceMappingURL=chunk-EJN2PAOE.js.map
1062
+ //# sourceMappingURL=chunk-V7KZQIZ6.js.map
1063
+ //# sourceMappingURL=chunk-V7KZQIZ6.js.map