@kyro-cms/core 0.9.1 → 0.9.4
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.
- package/README.md +0 -6
- package/dist/{WebhookService-Yg2UEOB4.d.cts → WebhookService-BKszZlG0.d.cts} +1 -1
- package/dist/{WebhookService-CUTb9XOy.d.ts → WebhookService-Ccf1j-IN.d.ts} +1 -1
- package/dist/api-handler-graphql.cjs +17 -17
- package/dist/api-handler-graphql.js +13 -13
- package/dist/api-handler-trpc.cjs +15 -15
- package/dist/api-handler-trpc.js +13 -13
- package/dist/api-handler.cjs +16 -16
- package/dist/api-handler.js +13 -13
- package/dist/{base-DaqY2GhA.d.ts → base-CIuXkrH4.d.cts} +3 -5
- package/dist/{base-B71y_EAF.d.cts → base-fFo4lqER.d.ts} +3 -5
- package/dist/bootstrap-3PV3GJ3S.js +7 -0
- package/dist/{bootstrap-T5BK77LD.js.map → bootstrap-3PV3GJ3S.js.map} +1 -1
- package/dist/bootstrap-4CELFLJO.cjs +32 -0
- package/dist/{bootstrap-5NLASFOG.cjs.map → bootstrap-4CELFLJO.cjs.map} +1 -1
- package/dist/{chunk-Z6ZWNWWR.js → chunk-4CV4JOE5.js} +3 -9
- package/dist/{chunk-Z6ZWNWWR.js.map → chunk-4CV4JOE5.js.map} +1 -1
- package/dist/{chunk-5EPFQUQD.js → chunk-53NYVYVX.js} +6 -6
- package/dist/chunk-53NYVYVX.js.map +1 -0
- package/dist/{chunk-22M4O4ZJ.js → chunk-5H3MWQJS.js} +129 -143
- package/dist/chunk-5H3MWQJS.js.map +1 -0
- package/dist/{chunk-RAMGUDJN.cjs → chunk-5PMQQFRE.cjs} +5 -5
- package/dist/{chunk-RAMGUDJN.cjs.map → chunk-5PMQQFRE.cjs.map} +1 -1
- package/dist/{chunk-TXSZFA4G.js → chunk-6UNONDW7.js} +93 -9
- package/dist/chunk-6UNONDW7.js.map +1 -0
- package/dist/{chunk-C36TMDTY.cjs → chunk-7OS7TX2Q.cjs} +49 -48
- package/dist/chunk-7OS7TX2Q.cjs.map +1 -0
- package/dist/{chunk-3TPQ2BU6.js → chunk-BYBMTIMT.js} +2 -6
- package/dist/chunk-BYBMTIMT.js.map +1 -0
- package/dist/{chunk-FOPGUM27.js → chunk-CJX74IYK.js} +5 -4
- package/dist/chunk-CJX74IYK.js.map +1 -0
- package/dist/{chunk-RSF3UU7H.cjs → chunk-CNKT4PME.cjs} +196 -200
- package/dist/chunk-CNKT4PME.cjs.map +1 -0
- package/dist/{chunk-G7VZBCD6.cjs → chunk-CZLDE2OZ.cjs} +2 -9
- package/dist/{chunk-G7VZBCD6.cjs.map → chunk-CZLDE2OZ.cjs.map} +1 -1
- package/dist/{chunk-JOPVMWTM.cjs → chunk-DPA3KWPY.cjs} +3 -3
- package/dist/chunk-DPA3KWPY.cjs.map +1 -0
- package/dist/{chunk-ROJHKAQ4.cjs → chunk-E2763JUP.cjs} +143 -157
- package/dist/chunk-E2763JUP.cjs.map +1 -0
- package/dist/{chunk-FAXU7BMP.js → chunk-E5UJBLQ7.js} +2 -2
- package/dist/chunk-E5UJBLQ7.js.map +1 -0
- package/dist/{chunk-DVD5P72E.cjs → chunk-EEJUFDMF.cjs} +2 -6
- package/dist/chunk-EEJUFDMF.cjs.map +1 -0
- package/dist/{chunk-2HZRBATX.cjs → chunk-FSKONGCX.cjs} +2 -2
- package/dist/chunk-FSKONGCX.cjs.map +1 -0
- package/dist/{chunk-P2HKJ7P5.js → chunk-GAAHG2Z4.js} +3 -3
- package/dist/{chunk-P2HKJ7P5.js.map → chunk-GAAHG2Z4.js.map} +1 -1
- package/dist/{chunk-PI73NNOK.cjs → chunk-GUUB5EAG.cjs} +2 -2
- package/dist/chunk-GUUB5EAG.cjs.map +1 -0
- package/dist/{chunk-PU2Z5VWF.js → chunk-IPTZM3VE.js} +183 -187
- package/dist/chunk-IPTZM3VE.js.map +1 -0
- package/dist/{chunk-4AO3A3JM.js → chunk-NFKRKH3P.js} +10 -2
- package/dist/chunk-NFKRKH3P.js.map +1 -0
- package/dist/{chunk-L46ROHUS.cjs → chunk-NI5D3F7H.cjs} +13 -5
- package/dist/chunk-NI5D3F7H.cjs.map +1 -0
- package/dist/{chunk-UERVXYVK.cjs → chunk-NWUEVLQT.cjs} +13 -13
- package/dist/{chunk-UERVXYVK.cjs.map → chunk-NWUEVLQT.cjs.map} +1 -1
- package/dist/{chunk-KPA4AN4R.js → chunk-OHC6UHFY.js} +86 -12
- package/dist/chunk-OHC6UHFY.js.map +1 -0
- package/dist/{chunk-DEVFAKCQ.cjs → chunk-PHJRNPHY.cjs} +6 -6
- package/dist/chunk-PHJRNPHY.cjs.map +1 -0
- package/dist/{chunk-VO35MNPH.js → chunk-PQ72Z6WC.js} +67 -105
- package/dist/chunk-PQ72Z6WC.js.map +1 -0
- package/dist/{chunk-KNRSROWB.cjs → chunk-PV2I2KMI.cjs} +86 -12
- package/dist/chunk-PV2I2KMI.cjs.map +1 -0
- package/dist/{chunk-V2TVSCV5.cjs → chunk-Q23GAMLE.cjs} +71 -109
- package/dist/chunk-Q23GAMLE.cjs.map +1 -0
- package/dist/{chunk-COIASRDK.cjs → chunk-RFFSZSCL.cjs} +107 -171
- package/dist/chunk-RFFSZSCL.cjs.map +1 -0
- package/dist/{chunk-AL5KX63J.js → chunk-UUDTPZX6.js} +3 -3
- package/dist/chunk-UUDTPZX6.js.map +1 -0
- package/dist/{chunk-EJN2PAOE.js → chunk-V7KZQIZ6.js} +102 -166
- package/dist/chunk-V7KZQIZ6.js.map +1 -0
- package/dist/{chunk-DYTZ6FQ7.js → chunk-WXVB364T.js} +2 -2
- package/dist/chunk-WXVB364T.js.map +1 -0
- package/dist/{chunk-WNCYAKF3.cjs → chunk-Y7AQK4R4.cjs} +93 -9
- package/dist/chunk-Y7AQK4R4.cjs.map +1 -0
- package/dist/{chunk-SPBTLUN6.js → chunk-YFAVQQTU.js} +7 -7
- package/dist/{chunk-SPBTLUN6.js.map → chunk-YFAVQQTU.js.map} +1 -1
- package/dist/cli/index.cjs +5 -5
- package/dist/cli/index.js +5 -5
- package/dist/client.cjs +4 -4
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +2 -2
- package/dist/drizzle/index.cjs +14 -14
- package/dist/drizzle/index.d.cts +4 -10
- package/dist/drizzle/index.d.ts +4 -10
- package/dist/drizzle/index.js +5 -5
- package/dist/fields/index.cjs +22 -22
- package/dist/fields/index.d.cts +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.js +2 -2
- package/dist/graphql/index.cjs +1 -1
- package/dist/graphql/index.d.cts +3 -3
- package/dist/graphql/index.d.ts +3 -3
- package/dist/graphql/index.js +1 -1
- package/dist/{index-CJXPB_ot.d.ts → index-BKta3cBH.d.cts} +3 -2
- package/dist/{index-CaTNnLGd.d.cts → index-ClOqnkTO.d.ts} +3 -2
- package/dist/index.cjs +119 -119
- package/dist/index.d.cts +10 -15
- package/dist/index.d.ts +10 -15
- package/dist/index.js +19 -19
- package/dist/integration.cjs +3 -3
- package/dist/integration.js +2 -2
- package/dist/media-7WDX4BDJ.js +4 -0
- package/dist/{media-GPPTZ43E.js.map → media-7WDX4BDJ.js.map} +1 -1
- package/dist/{media-XNTUFJZR.cjs → media-TUSLVRQ6.cjs} +3 -3
- package/dist/{media-XNTUFJZR.cjs.map → media-TUSLVRQ6.cjs.map} +1 -1
- package/dist/{mongo-auth-adapter-ISOM7FSS.cjs → mongo-auth-adapter-GT4S7SCU.cjs} +3 -3
- package/dist/{mongo-auth-adapter-ISOM7FSS.cjs.map → mongo-auth-adapter-GT4S7SCU.cjs.map} +1 -1
- package/dist/mongo-auth-adapter-M7VV4LNB.js +4 -0
- package/dist/{mongo-auth-adapter-MO6STCV3.js.map → mongo-auth-adapter-M7VV4LNB.js.map} +1 -1
- package/dist/mongodb/index.cjs +5 -5
- package/dist/mongodb/index.d.cts +4 -9
- package/dist/mongodb/index.d.ts +4 -9
- package/dist/mongodb/index.js +3 -3
- package/dist/postgres-auth-adapter-AFAPISH7.js +5 -0
- package/dist/{postgres-auth-adapter-DWDR7P5G.js.map → postgres-auth-adapter-AFAPISH7.js.map} +1 -1
- package/dist/postgres-auth-adapter-SFDTLONT.cjs +14 -0
- package/dist/{postgres-auth-adapter-WRWSJD4E.cjs.map → postgres-auth-adapter-SFDTLONT.cjs.map} +1 -1
- package/dist/{redis-adapter-KJ3YOOT6.cjs → redis-adapter-UQX4EE3B.cjs} +3 -3
- package/dist/{redis-adapter-KJ3YOOT6.cjs.map → redis-adapter-UQX4EE3B.cjs.map} +1 -1
- package/dist/redis-adapter-XALOGWY3.js +4 -0
- package/dist/{redis-adapter-HGTPWIGV.js.map → redis-adapter-XALOGWY3.js.map} +1 -1
- package/dist/rest/index.cjs +10 -10
- package/dist/rest/index.d.cts +4 -4
- package/dist/rest/index.d.ts +4 -4
- package/dist/rest/index.js +8 -8
- package/dist/{schema-TTFE4467.cjs → schema-6QL3USNB.cjs} +15 -15
- package/dist/{schema-TTFE4467.cjs.map → schema-6QL3USNB.cjs.map} +1 -1
- package/dist/{schema-6I5OFR4Z.js → schema-FNNWEAAW.js} +4 -4
- package/dist/{schema-6I5OFR4Z.js.map → schema-FNNWEAAW.js.map} +1 -1
- package/dist/{sqlite-adapter-CSIZE5SX.cjs → sqlite-adapter-AQB5TCGV.cjs} +3 -3
- package/dist/{sqlite-adapter-CSIZE5SX.cjs.map → sqlite-adapter-AQB5TCGV.cjs.map} +1 -1
- package/dist/sqlite-adapter-N5H6IM2X.js +4 -0
- package/dist/{sqlite-adapter-6GEUSVXQ.js.map → sqlite-adapter-N5H6IM2X.js.map} +1 -1
- package/dist/templates/index.cjs +49 -49
- package/dist/templates/index.d.cts +2 -2
- package/dist/templates/index.d.ts +2 -2
- package/dist/templates/index.js +2 -2
- package/dist/trpc/index.cjs +11 -11
- package/dist/trpc/index.d.cts +3 -3
- package/dist/trpc/index.d.ts +3 -3
- package/dist/trpc/index.js +2 -2
- package/dist/{types-Z6FBiqa2.d.cts → types-DeSApf9T.d.cts} +1 -0
- package/dist/{types-Z6FBiqa2.d.ts → types-DeSApf9T.d.ts} +1 -0
- package/dist/{types-CyCQ6SAI.d.ts → types-Dgzlftb7.d.ts} +6 -28
- package/dist/{types-DJxD9394.d.cts → types-Ds0tCA3L.d.cts} +6 -28
- package/dist/ws/index.cjs +6 -6
- package/dist/ws/index.js +2 -2
- package/package.json +1 -1
- package/dist/bootstrap-5NLASFOG.cjs +0 -32
- package/dist/bootstrap-T5BK77LD.js +0 -7
- package/dist/chunk-22M4O4ZJ.js.map +0 -1
- package/dist/chunk-2HZRBATX.cjs.map +0 -1
- package/dist/chunk-3TPQ2BU6.js.map +0 -1
- package/dist/chunk-4AO3A3JM.js.map +0 -1
- package/dist/chunk-5EPFQUQD.js.map +0 -1
- package/dist/chunk-AL5KX63J.js.map +0 -1
- package/dist/chunk-C36TMDTY.cjs.map +0 -1
- package/dist/chunk-COIASRDK.cjs.map +0 -1
- package/dist/chunk-DEVFAKCQ.cjs.map +0 -1
- package/dist/chunk-DVD5P72E.cjs.map +0 -1
- package/dist/chunk-DYTZ6FQ7.js.map +0 -1
- package/dist/chunk-EJN2PAOE.js.map +0 -1
- package/dist/chunk-FAXU7BMP.js.map +0 -1
- package/dist/chunk-FOPGUM27.js.map +0 -1
- package/dist/chunk-JOPVMWTM.cjs.map +0 -1
- package/dist/chunk-KNRSROWB.cjs.map +0 -1
- package/dist/chunk-KPA4AN4R.js.map +0 -1
- package/dist/chunk-L46ROHUS.cjs.map +0 -1
- package/dist/chunk-PI73NNOK.cjs.map +0 -1
- package/dist/chunk-PU2Z5VWF.js.map +0 -1
- package/dist/chunk-ROJHKAQ4.cjs.map +0 -1
- package/dist/chunk-RSF3UU7H.cjs.map +0 -1
- package/dist/chunk-TXSZFA4G.js.map +0 -1
- package/dist/chunk-V2TVSCV5.cjs.map +0 -1
- package/dist/chunk-VO35MNPH.js.map +0 -1
- package/dist/chunk-WNCYAKF3.cjs.map +0 -1
- package/dist/media-GPPTZ43E.js +0 -4
- package/dist/mongo-auth-adapter-MO6STCV3.js +0 -4
- package/dist/postgres-auth-adapter-DWDR7P5G.js +0 -5
- package/dist/postgres-auth-adapter-WRWSJD4E.cjs +0 -14
- package/dist/redis-adapter-HGTPWIGV.js +0 -4
- package/dist/sqlite-adapter-6GEUSVXQ.js +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-
|
|
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(`
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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["
|
|
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["
|
|
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.
|
|
521
|
-
filters.push(eq(table.
|
|
519
|
+
if (!draft && table.status) {
|
|
520
|
+
filters.push(eq(table.status, "published"));
|
|
522
521
|
}
|
|
523
522
|
const sortOption = this.parseSort(sort);
|
|
524
|
-
const
|
|
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
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
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.
|
|
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
|
|
581
|
-
const versions = await this.
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
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.
|
|
660
|
-
query = query.where(eq(table.
|
|
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
|
|
666
|
-
const versions = await this.
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
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
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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-
|
|
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-
|
|
1127
|
-
//# sourceMappingURL=chunk-
|
|
1062
|
+
//# sourceMappingURL=chunk-V7KZQIZ6.js.map
|
|
1063
|
+
//# sourceMappingURL=chunk-V7KZQIZ6.js.map
|