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