@kyro-cms/core 0.10.2 → 0.10.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/dist/api-handler-graphql.cjs +8 -8
- package/dist/api-handler-graphql.js +4 -4
- package/dist/api-handler-trpc.cjs +6 -6
- package/dist/api-handler-trpc.js +4 -4
- package/dist/api-handler.cjs +7 -7
- package/dist/api-handler.js +4 -4
- package/dist/{chunk-3P5AHK2U.cjs → chunk-74YSDAWE.cjs} +11 -11
- package/dist/{chunk-3P5AHK2U.cjs.map → chunk-74YSDAWE.cjs.map} +1 -1
- package/dist/{chunk-ISKYUUP4.cjs → chunk-B6X3LN25.cjs} +7 -7
- package/dist/{chunk-ISKYUUP4.cjs.map → chunk-B6X3LN25.cjs.map} +1 -1
- package/dist/{chunk-AN2L2CJZ.js → chunk-HZOMOK5Y.js} +4 -4
- package/dist/{chunk-AN2L2CJZ.js.map → chunk-HZOMOK5Y.js.map} +1 -1
- package/dist/{chunk-GYIJ3JJM.cjs → chunk-OIRG6ZRV.cjs} +15 -11
- package/dist/chunk-OIRG6ZRV.cjs.map +1 -0
- package/dist/{chunk-354ISGA4.js → chunk-OLV7K22H.js} +3 -3
- package/dist/{chunk-354ISGA4.js.map → chunk-OLV7K22H.js.map} +1 -1
- package/dist/{chunk-526M5MOA.js → chunk-SX76DNOO.js} +4 -4
- package/dist/{chunk-526M5MOA.js.map → chunk-SX76DNOO.js.map} +1 -1
- package/dist/{chunk-XHAAAEXX.js → chunk-V5AWATUP.js} +14 -10
- package/dist/chunk-V5AWATUP.js.map +1 -0
- package/dist/{chunk-NQJJYRLP.cjs → chunk-VAXLFZCV.cjs} +7 -7
- package/dist/{chunk-NQJJYRLP.cjs.map → chunk-VAXLFZCV.cjs.map} +1 -1
- package/dist/drizzle/index.cjs +9 -9
- package/dist/drizzle/index.js +1 -1
- package/dist/index.cjs +48 -48
- package/dist/index.js +4 -4
- package/dist/rest/index.cjs +4 -4
- package/dist/rest/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-GYIJ3JJM.cjs.map +0 -1
- package/dist/chunk-XHAAAEXX.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var chunkSHTTJMLT_cjs = require('./chunk-SHTTJMLT.cjs');
|
|
4
4
|
var chunkPHJRNPHY_cjs = require('./chunk-PHJRNPHY.cjs');
|
|
5
5
|
var chunkU3VVLYXG_cjs = require('./chunk-U3VVLYXG.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunk74YSDAWE_cjs = require('./chunk-74YSDAWE.cjs');
|
|
7
7
|
var chunk5GFQPHGT_cjs = require('./chunk-5GFQPHGT.cjs');
|
|
8
8
|
require('./chunk-3KTWGODI.cjs');
|
|
9
9
|
var chunkN4H37VN4_cjs = require('./chunk-N4H37VN4.cjs');
|
|
10
10
|
var chunkOJ2AM75W_cjs = require('./chunk-OJ2AM75W.cjs');
|
|
11
11
|
var chunkTQG7G7YI_cjs = require('./chunk-TQG7G7YI.cjs');
|
|
12
12
|
var chunkN4GN6Q3V_cjs = require('./chunk-N4GN6Q3V.cjs');
|
|
13
|
-
var
|
|
13
|
+
var chunkB6X3LN25_cjs = require('./chunk-B6X3LN25.cjs');
|
|
14
14
|
var chunkVKREAIBA_cjs = require('./chunk-VKREAIBA.cjs');
|
|
15
15
|
require('./chunk-4PWRCMTQ.cjs');
|
|
16
16
|
require('./chunk-KC2GDBLS.cjs');
|
|
@@ -20,7 +20,7 @@ var chunkLNTFRAHF_cjs = require('./chunk-LNTFRAHF.cjs');
|
|
|
20
20
|
var chunk4OCMVGEY_cjs = require('./chunk-4OCMVGEY.cjs');
|
|
21
21
|
var chunkEEJUFDMF_cjs = require('./chunk-EEJUFDMF.cjs');
|
|
22
22
|
require('./chunk-3YELQL7Z.cjs');
|
|
23
|
-
var
|
|
23
|
+
var chunkOIRG6ZRV_cjs = require('./chunk-OIRG6ZRV.cjs');
|
|
24
24
|
var chunk7OS7TX2Q_cjs = require('./chunk-7OS7TX2Q.cjs');
|
|
25
25
|
require('./chunk-DPA3KWPY.cjs');
|
|
26
26
|
require('./chunk-MTIRYI7F.cjs');
|
|
@@ -1135,7 +1135,7 @@ async function createAuthConfig(databaseType, db) {
|
|
|
1135
1135
|
max: getEnvNum("RATE_LIMIT_MAX_REQUESTS", 100)
|
|
1136
1136
|
}
|
|
1137
1137
|
});
|
|
1138
|
-
auditLogger = new
|
|
1138
|
+
auditLogger = new chunkB6X3LN25_cjs.AuditLogger(
|
|
1139
1139
|
redisClient,
|
|
1140
1140
|
getEnvNum("AUDIT_LOG_RETENTION_DAYS", 30)
|
|
1141
1141
|
);
|
|
@@ -1144,7 +1144,7 @@ async function createAuthConfig(databaseType, db) {
|
|
|
1144
1144
|
maxAttempts: getEnvNum("LOCKOUT_MAX_ATTEMPTS", 5),
|
|
1145
1145
|
lockDuration: getEnvNum("LOCKOUT_DURATION_MINUTES", 15) * 60 * 1e3
|
|
1146
1146
|
});
|
|
1147
|
-
rateLimiter = new
|
|
1147
|
+
rateLimiter = new chunkB6X3LN25_cjs.InMemoryRateLimiter({
|
|
1148
1148
|
"auth:login": {
|
|
1149
1149
|
window: getEnvNum("RATE_LIMIT_AUTH_WINDOW_MS", 9e5),
|
|
1150
1150
|
max: getEnvNum("RATE_LIMIT_AUTH_MAX_REQUESTS", 10)
|
|
@@ -1154,9 +1154,9 @@ async function createAuthConfig(databaseType, db) {
|
|
|
1154
1154
|
max: getEnvNum("RATE_LIMIT_MAX_REQUESTS", 100)
|
|
1155
1155
|
}
|
|
1156
1156
|
});
|
|
1157
|
-
auditLogger = getEnvBool("AUDIT_LOG_ENABLED", true) ? new
|
|
1157
|
+
auditLogger = getEnvBool("AUDIT_LOG_ENABLED", true) ? new chunkB6X3LN25_cjs.InMemoryAuditLogger(getEnvNum("AUDIT_LOG_RETENTION_DAYS", 30)) : void 0;
|
|
1158
1158
|
}
|
|
1159
|
-
const routes = new
|
|
1159
|
+
const routes = new chunkB6X3LN25_cjs.AuthRoutes({
|
|
1160
1160
|
redis: authAdapter,
|
|
1161
1161
|
email,
|
|
1162
1162
|
jwtSecret: getEnv("APP_SECRET", "change-me"),
|
|
@@ -1940,7 +1940,7 @@ async function createAuthStorage(config) {
|
|
|
1940
1940
|
}
|
|
1941
1941
|
|
|
1942
1942
|
// src/index.ts
|
|
1943
|
-
|
|
1943
|
+
chunkB6X3LN25_cjs.init_secret();
|
|
1944
1944
|
|
|
1945
1945
|
Object.defineProperty(exports, "RedisAuthAdapter", {
|
|
1946
1946
|
enumerable: true,
|
|
@@ -1996,79 +1996,79 @@ Object.defineProperty(exports, "kyro", {
|
|
|
1996
1996
|
});
|
|
1997
1997
|
Object.defineProperty(exports, "ConfigValidationError", {
|
|
1998
1998
|
enumerable: true,
|
|
1999
|
-
get: function () { return
|
|
1999
|
+
get: function () { return chunk74YSDAWE_cjs.ConfigValidationError; }
|
|
2000
2000
|
});
|
|
2001
2001
|
Object.defineProperty(exports, "Kyro", {
|
|
2002
2002
|
enumerable: true,
|
|
2003
|
-
get: function () { return
|
|
2003
|
+
get: function () { return chunk74YSDAWE_cjs.Kyro; }
|
|
2004
2004
|
});
|
|
2005
2005
|
Object.defineProperty(exports, "LocalAdapter", {
|
|
2006
2006
|
enumerable: true,
|
|
2007
|
-
get: function () { return
|
|
2007
|
+
get: function () { return chunk74YSDAWE_cjs.LocalAdapter; }
|
|
2008
2008
|
});
|
|
2009
2009
|
Object.defineProperty(exports, "Registry", {
|
|
2010
2010
|
enumerable: true,
|
|
2011
|
-
get: function () { return
|
|
2011
|
+
get: function () { return chunk74YSDAWE_cjs.Registry; }
|
|
2012
2012
|
});
|
|
2013
2013
|
Object.defineProperty(exports, "collectionToCreateZod", {
|
|
2014
2014
|
enumerable: true,
|
|
2015
|
-
get: function () { return
|
|
2015
|
+
get: function () { return chunk74YSDAWE_cjs.collectionToCreateZod; }
|
|
2016
2016
|
});
|
|
2017
2017
|
Object.defineProperty(exports, "collectionToUpdateZod", {
|
|
2018
2018
|
enumerable: true,
|
|
2019
|
-
get: function () { return
|
|
2019
|
+
get: function () { return chunk74YSDAWE_cjs.collectionToUpdateZod; }
|
|
2020
2020
|
});
|
|
2021
2021
|
Object.defineProperty(exports, "collectionToWhereZod", {
|
|
2022
2022
|
enumerable: true,
|
|
2023
|
-
get: function () { return
|
|
2023
|
+
get: function () { return chunk74YSDAWE_cjs.collectionToWhereZod; }
|
|
2024
2024
|
});
|
|
2025
2025
|
Object.defineProperty(exports, "collectionToZod", {
|
|
2026
2026
|
enumerable: true,
|
|
2027
|
-
get: function () { return
|
|
2027
|
+
get: function () { return chunk74YSDAWE_cjs.collectionToZod; }
|
|
2028
2028
|
});
|
|
2029
2029
|
Object.defineProperty(exports, "createKyro", {
|
|
2030
2030
|
enumerable: true,
|
|
2031
|
-
get: function () { return
|
|
2031
|
+
get: function () { return chunk74YSDAWE_cjs.createKyro; }
|
|
2032
2032
|
});
|
|
2033
2033
|
Object.defineProperty(exports, "createLocalAdapter", {
|
|
2034
2034
|
enumerable: true,
|
|
2035
|
-
get: function () { return
|
|
2035
|
+
get: function () { return chunk74YSDAWE_cjs.createLocalAdapter; }
|
|
2036
2036
|
});
|
|
2037
2037
|
Object.defineProperty(exports, "createRegistry", {
|
|
2038
2038
|
enumerable: true,
|
|
2039
|
-
get: function () { return
|
|
2039
|
+
get: function () { return chunk74YSDAWE_cjs.createRegistry; }
|
|
2040
2040
|
});
|
|
2041
2041
|
Object.defineProperty(exports, "fieldToZod", {
|
|
2042
2042
|
enumerable: true,
|
|
2043
|
-
get: function () { return
|
|
2043
|
+
get: function () { return chunk74YSDAWE_cjs.fieldToZod; }
|
|
2044
2044
|
});
|
|
2045
2045
|
Object.defineProperty(exports, "getRegistry", {
|
|
2046
2046
|
enumerable: true,
|
|
2047
|
-
get: function () { return
|
|
2047
|
+
get: function () { return chunk74YSDAWE_cjs.getRegistry; }
|
|
2048
2048
|
});
|
|
2049
2049
|
Object.defineProperty(exports, "globalToZod", {
|
|
2050
2050
|
enumerable: true,
|
|
2051
|
-
get: function () { return
|
|
2051
|
+
get: function () { return chunk74YSDAWE_cjs.globalToZod; }
|
|
2052
2052
|
});
|
|
2053
2053
|
Object.defineProperty(exports, "resetRegistry", {
|
|
2054
2054
|
enumerable: true,
|
|
2055
|
-
get: function () { return
|
|
2055
|
+
get: function () { return chunk74YSDAWE_cjs.resetRegistry; }
|
|
2056
2056
|
});
|
|
2057
2057
|
Object.defineProperty(exports, "validateCollection", {
|
|
2058
2058
|
enumerable: true,
|
|
2059
|
-
get: function () { return
|
|
2059
|
+
get: function () { return chunk74YSDAWE_cjs.validateCollection; }
|
|
2060
2060
|
});
|
|
2061
2061
|
Object.defineProperty(exports, "validateConfig", {
|
|
2062
2062
|
enumerable: true,
|
|
2063
|
-
get: function () { return
|
|
2063
|
+
get: function () { return chunk74YSDAWE_cjs.validateConfig; }
|
|
2064
2064
|
});
|
|
2065
2065
|
Object.defineProperty(exports, "validateFields", {
|
|
2066
2066
|
enumerable: true,
|
|
2067
|
-
get: function () { return
|
|
2067
|
+
get: function () { return chunk74YSDAWE_cjs.validateFields; }
|
|
2068
2068
|
});
|
|
2069
2069
|
Object.defineProperty(exports, "validateGlobal", {
|
|
2070
2070
|
enumerable: true,
|
|
2071
|
-
get: function () { return
|
|
2071
|
+
get: function () { return chunk74YSDAWE_cjs.validateGlobal; }
|
|
2072
2072
|
});
|
|
2073
2073
|
Object.defineProperty(exports, "autoBootstrap", {
|
|
2074
2074
|
enumerable: true,
|
|
@@ -2240,59 +2240,59 @@ Object.defineProperty(exports, "createGraphQLSchema", {
|
|
|
2240
2240
|
});
|
|
2241
2241
|
Object.defineProperty(exports, "AuditLogger", {
|
|
2242
2242
|
enumerable: true,
|
|
2243
|
-
get: function () { return
|
|
2243
|
+
get: function () { return chunkB6X3LN25_cjs.AuditLogger; }
|
|
2244
2244
|
});
|
|
2245
2245
|
Object.defineProperty(exports, "InMemoryAuditLogger", {
|
|
2246
2246
|
enumerable: true,
|
|
2247
|
-
get: function () { return
|
|
2247
|
+
get: function () { return chunkB6X3LN25_cjs.InMemoryAuditLogger; }
|
|
2248
2248
|
});
|
|
2249
2249
|
Object.defineProperty(exports, "InMemoryRateLimiter", {
|
|
2250
2250
|
enumerable: true,
|
|
2251
|
-
get: function () { return
|
|
2251
|
+
get: function () { return chunkB6X3LN25_cjs.InMemoryRateLimiter; }
|
|
2252
2252
|
});
|
|
2253
2253
|
Object.defineProperty(exports, "MediaService", {
|
|
2254
2254
|
enumerable: true,
|
|
2255
|
-
get: function () { return
|
|
2255
|
+
get: function () { return chunkB6X3LN25_cjs.MediaService; }
|
|
2256
2256
|
});
|
|
2257
2257
|
Object.defineProperty(exports, "createAuditContext", {
|
|
2258
2258
|
enumerable: true,
|
|
2259
|
-
get: function () { return
|
|
2259
|
+
get: function () { return chunkB6X3LN25_cjs.createAuditContext; }
|
|
2260
2260
|
});
|
|
2261
2261
|
Object.defineProperty(exports, "createHonoApp", {
|
|
2262
2262
|
enumerable: true,
|
|
2263
|
-
get: function () { return
|
|
2263
|
+
get: function () { return chunkB6X3LN25_cjs.createHonoApp; }
|
|
2264
2264
|
});
|
|
2265
2265
|
Object.defineProperty(exports, "createLocalStorage", {
|
|
2266
2266
|
enumerable: true,
|
|
2267
|
-
get: function () { return
|
|
2267
|
+
get: function () { return chunkB6X3LN25_cjs.createLocalStorage; }
|
|
2268
2268
|
});
|
|
2269
2269
|
Object.defineProperty(exports, "createRESTAPI", {
|
|
2270
2270
|
enumerable: true,
|
|
2271
|
-
get: function () { return
|
|
2271
|
+
get: function () { return chunkB6X3LN25_cjs.createRESTAPI; }
|
|
2272
2272
|
});
|
|
2273
2273
|
Object.defineProperty(exports, "getAppSecret", {
|
|
2274
2274
|
enumerable: true,
|
|
2275
|
-
get: function () { return
|
|
2275
|
+
get: function () { return chunkB6X3LN25_cjs.getAppSecret; }
|
|
2276
2276
|
});
|
|
2277
2277
|
Object.defineProperty(exports, "getEncryptionKey", {
|
|
2278
2278
|
enumerable: true,
|
|
2279
|
-
get: function () { return
|
|
2279
|
+
get: function () { return chunkB6X3LN25_cjs.getEncryptionKey; }
|
|
2280
2280
|
});
|
|
2281
2281
|
Object.defineProperty(exports, "getSessionConfig", {
|
|
2282
2282
|
enumerable: true,
|
|
2283
|
-
get: function () { return
|
|
2283
|
+
get: function () { return chunkB6X3LN25_cjs.getSessionConfig; }
|
|
2284
2284
|
});
|
|
2285
2285
|
Object.defineProperty(exports, "loadSecrets", {
|
|
2286
2286
|
enumerable: true,
|
|
2287
|
-
get: function () { return
|
|
2287
|
+
get: function () { return chunkB6X3LN25_cjs.loadSecrets; }
|
|
2288
2288
|
});
|
|
2289
2289
|
Object.defineProperty(exports, "resolveProvider", {
|
|
2290
2290
|
enumerable: true,
|
|
2291
|
-
get: function () { return
|
|
2291
|
+
get: function () { return chunkB6X3LN25_cjs.resolveProvider; }
|
|
2292
2292
|
});
|
|
2293
2293
|
Object.defineProperty(exports, "setDbAdapter", {
|
|
2294
2294
|
enumerable: true,
|
|
2295
|
-
get: function () { return
|
|
2295
|
+
get: function () { return chunkB6X3LN25_cjs.setDbAdapter; }
|
|
2296
2296
|
});
|
|
2297
2297
|
Object.defineProperty(exports, "ConfigService", {
|
|
2298
2298
|
enumerable: true,
|
|
@@ -2388,31 +2388,31 @@ Object.defineProperty(exports, "createWSServer", {
|
|
|
2388
2388
|
});
|
|
2389
2389
|
Object.defineProperty(exports, "DrizzleAdapter", {
|
|
2390
2390
|
enumerable: true,
|
|
2391
|
-
get: function () { return
|
|
2391
|
+
get: function () { return chunkOIRG6ZRV_cjs.DrizzleAdapter; }
|
|
2392
2392
|
});
|
|
2393
2393
|
Object.defineProperty(exports, "collectionToDrizzleSchema", {
|
|
2394
2394
|
enumerable: true,
|
|
2395
|
-
get: function () { return
|
|
2395
|
+
get: function () { return chunkOIRG6ZRV_cjs.collectionToDrizzleSchema; }
|
|
2396
2396
|
});
|
|
2397
2397
|
Object.defineProperty(exports, "createDatabase", {
|
|
2398
2398
|
enumerable: true,
|
|
2399
|
-
get: function () { return
|
|
2399
|
+
get: function () { return chunkOIRG6ZRV_cjs.createDatabase; }
|
|
2400
2400
|
});
|
|
2401
2401
|
Object.defineProperty(exports, "createDrizzleAdapter", {
|
|
2402
2402
|
enumerable: true,
|
|
2403
|
-
get: function () { return
|
|
2403
|
+
get: function () { return chunkOIRG6ZRV_cjs.createDrizzleAdapter; }
|
|
2404
2404
|
});
|
|
2405
2405
|
Object.defineProperty(exports, "fieldToDrizzleType", {
|
|
2406
2406
|
enumerable: true,
|
|
2407
|
-
get: function () { return
|
|
2407
|
+
get: function () { return chunkOIRG6ZRV_cjs.fieldToDrizzleType; }
|
|
2408
2408
|
});
|
|
2409
2409
|
Object.defineProperty(exports, "runMigrations", {
|
|
2410
2410
|
enumerable: true,
|
|
2411
|
-
get: function () { return
|
|
2411
|
+
get: function () { return chunkOIRG6ZRV_cjs.runMigrations; }
|
|
2412
2412
|
});
|
|
2413
2413
|
Object.defineProperty(exports, "seedDefaultRoles", {
|
|
2414
2414
|
enumerable: true,
|
|
2415
|
-
get: function () { return
|
|
2415
|
+
get: function () { return chunkOIRG6ZRV_cjs.seedDefaultRoles; }
|
|
2416
2416
|
});
|
|
2417
2417
|
Object.defineProperty(exports, "PostgresAuthAdapter", {
|
|
2418
2418
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export { RedisAuthAdapter } from './chunk-CF7OL6HR.js';
|
|
2
2
|
export { allSettingsGlobals, blogCollections, blogGlobals, coreSettingsGlobals, createTemplateConfig, ecommerceCollections, ecommerceGlobals, kitchenSinkCollections, mediaCollections, minimalCollections, templateCollections } from './chunk-53NYVYVX.js';
|
|
3
3
|
export { kyro } from './chunk-X4BPPD6K.js';
|
|
4
|
-
export { ConfigValidationError, Kyro, LocalAdapter, Registry, collectionToCreateZod, collectionToUpdateZod, collectionToWhereZod, collectionToZod, createKyro, createLocalAdapter, createRegistry, fieldToZod, getRegistry, globalToZod, resetRegistry, validateCollection, validateConfig, validateFields, validateGlobal } from './chunk-
|
|
4
|
+
export { ConfigValidationError, Kyro, LocalAdapter, Registry, collectionToCreateZod, collectionToUpdateZod, collectionToWhereZod, collectionToZod, createKyro, createLocalAdapter, createRegistry, fieldToZod, getRegistry, globalToZod, resetRegistry, validateCollection, validateConfig, validateFields, validateGlobal } from './chunk-HZOMOK5Y.js';
|
|
5
5
|
export { autoBootstrap, bootstrapAdmin, bootstrapWithRetry, getBootstrapFromEnv } from './chunk-HY6B7B5A.js';
|
|
6
6
|
import './chunk-GAOXD3XT.js';
|
|
7
7
|
export { CSSGenerator, createAdminStyling, defaultDarkTheme, defaultFieldStyling, defaultLightTheme, ecommerce2026Theme, generateCSSVariables, generateTailwindConfig } from './chunk-2HFJUUFZ.js';
|
|
8
8
|
export { ALL_FIELD_TYPES, COMPLEX_FIELD_TYPES, LAYOUT_FIELD_TYPES, PRIMITIVE_FIELD_TYPES, RELATIONAL_FIELD_TYPES, isArrayField, isBlocksField, isGroupField, isImageField, isLayoutField, isNumberField, isRelationshipField, isRichTextField, isSelectField, isTextField, isUploadField, normalizeRichTextValue, renderRichText, richTextStyles } from './chunk-FIAMXNTH.js';
|
|
9
9
|
export { createContext, createCountProcedure, createCreateProcedure, createDeleteProcedure, createDynamicRouter, createFindByIDProcedure, createFindProcedure, createKyroServer, createUpdateProcedure } from './chunk-OX6GOIPH.js';
|
|
10
10
|
export { buildGraphQLSchema, createGraphQLSchema } from './chunk-5RPRLTTN.js';
|
|
11
|
-
import { init_secret, AuditLogger, InMemoryRateLimiter, InMemoryAuditLogger, AuthRoutes } from './chunk-
|
|
12
|
-
export { AuditLogger, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext, createHonoApp, createLocalStorage, createRESTAPI, getAppSecret, getEncryptionKey, getSessionConfig, loadSecrets, resolveProvider, setDbAdapter } from './chunk-
|
|
11
|
+
import { init_secret, AuditLogger, InMemoryRateLimiter, InMemoryAuditLogger, AuthRoutes } from './chunk-OLV7K22H.js';
|
|
12
|
+
export { AuditLogger, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext, createHonoApp, createLocalStorage, createRESTAPI, getAppSecret, getEncryptionKey, getSessionConfig, loadSecrets, resolveProvider, setDbAdapter } from './chunk-OLV7K22H.js';
|
|
13
13
|
import { EmailTransport, PasswordPolicy } from './chunk-N5QSHUA6.js';
|
|
14
14
|
export { ConfigService, EmailTransport, PasswordPolicy } from './chunk-N5QSHUA6.js';
|
|
15
15
|
import './chunk-YT7HXXVN.js';
|
|
@@ -21,7 +21,7 @@ export { ALL_WEBHOOK_EVENTS, WEBHOOK_COLLECTION, WEBHOOK_DELIVERY_COLLECTION, WE
|
|
|
21
21
|
export { evaluateAccess, getWhereClause, mergeWhereClauses } from './chunk-3AKCVYDB.js';
|
|
22
22
|
export { KyroPubSub, KyroWSServer, PubSub, createWSServer } from './chunk-BYBMTIMT.js';
|
|
23
23
|
import './chunk-QU2RFFH4.js';
|
|
24
|
-
export { DrizzleAdapter, collectionToDrizzleSchema, createDatabase, createDrizzleAdapter, fieldToDrizzleType, runMigrations, seedDefaultRoles } from './chunk-
|
|
24
|
+
export { DrizzleAdapter, collectionToDrizzleSchema, createDatabase, createDrizzleAdapter, fieldToDrizzleType, runMigrations, seedDefaultRoles } from './chunk-V5AWATUP.js';
|
|
25
25
|
import { PostgresAuthAdapter } from './chunk-CJX74IYK.js';
|
|
26
26
|
export { PostgresAuthAdapter } from './chunk-CJX74IYK.js';
|
|
27
27
|
import './chunk-UUDTPZX6.js';
|
package/dist/rest/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkB6X3LN25_cjs = require('../chunk-B6X3LN25.cjs');
|
|
4
4
|
require('../chunk-VKREAIBA.cjs');
|
|
5
5
|
require('../chunk-4PWRCMTQ.cjs');
|
|
6
6
|
require('../chunk-KC2GDBLS.cjs');
|
|
@@ -8,7 +8,7 @@ require('../chunk-IDVRRRAK.cjs');
|
|
|
8
8
|
require('../chunk-ADLJSJSN.cjs');
|
|
9
9
|
require('../chunk-LNTFRAHF.cjs');
|
|
10
10
|
require('../chunk-4OCMVGEY.cjs');
|
|
11
|
-
require('../chunk-
|
|
11
|
+
require('../chunk-OIRG6ZRV.cjs');
|
|
12
12
|
require('../chunk-7OS7TX2Q.cjs');
|
|
13
13
|
require('../chunk-DPA3KWPY.cjs');
|
|
14
14
|
require('../chunk-THBQG64D.cjs');
|
|
@@ -21,11 +21,11 @@ require('../chunk-CZLDE2OZ.cjs');
|
|
|
21
21
|
|
|
22
22
|
Object.defineProperty(exports, "createHonoApp", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkB6X3LN25_cjs.createHonoApp; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "createRESTAPI", {
|
|
27
27
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkB6X3LN25_cjs.createRESTAPI; }
|
|
29
29
|
});
|
|
30
30
|
//# sourceMappingURL=index.cjs.map
|
|
31
31
|
//# sourceMappingURL=index.cjs.map
|
package/dist/rest/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createHonoApp, createRESTAPI } from '../chunk-
|
|
1
|
+
export { createHonoApp, createRESTAPI } from '../chunk-OLV7K22H.js';
|
|
2
2
|
import '../chunk-N5QSHUA6.js';
|
|
3
3
|
import '../chunk-YT7HXXVN.js';
|
|
4
4
|
import '../chunk-XEB7PH2E.js';
|
|
@@ -6,7 +6,7 @@ import '../chunk-Q72BOAPK.js';
|
|
|
6
6
|
import '../chunk-P2YW545G.js';
|
|
7
7
|
import '../chunk-WDTTHKDS.js';
|
|
8
8
|
import '../chunk-3AKCVYDB.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-V5AWATUP.js';
|
|
10
10
|
import '../chunk-CJX74IYK.js';
|
|
11
11
|
import '../chunk-UUDTPZX6.js';
|
|
12
12
|
import '../chunk-GZS4LMR7.js';
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/database/drizzle/adapter.ts","../src/database/drizzle/database.ts"],"names":["AbstractBaseAdapter","postgres","drizzle","sql","text","uuid","sqliteText","sqliteInteger","sqliteNumeric","varchar","integer","decimal","boolean","timestamp","jsonb","sqliteTable","pgTable","applyRLS","DEFAULT_RLS_CONFIG","eq","desc","and","canAccessDocument","or","ne","inArray","like","gt","gte","lt","lte","createRequire","randomBytes","resolve","mkdir","dirname","db"],"mappings":"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","file":"chunk-GYIJ3JJM.cjs","sourcesContent":["import { AbstractBaseAdapter } from '../base.js';\nimport { sql, eq, and, or, desc, ne, inArray, like, gt, gte, lt, lte } from 'drizzle-orm';\nimport {\n pgTable,\n uuid,\n varchar,\n boolean,\n timestamp,\n integer,\n text,\n jsonb,\n decimal,\n} from 'drizzle-orm/pg-core';\nimport {\n sqliteTable,\n integer as sqliteInteger,\n text as sqliteText,\n numeric as sqliteNumeric,\n} from 'drizzle-orm/sqlite-core';\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n VersionRecord,\n CreateVersionArgs,\n} from '../../registry/types.js';\nimport type { Field, RelationshipField } from '../../fields/types.js';\nimport type { TenantContext } from '../../auth/rls/tenant.js';\nimport { applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from '../../auth/rls/tenant.js';\n\nlet _schemaEnsured = false;\n\n// ============================================================================\n// Drizzle Schema Generator\n// ============================================================================\n\nexport function fieldToDrizzleType(field: Field, dialect: 'postgres' | 'sqlite' = 'postgres'): string {\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'color':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'textarea':\n case 'code':\n case 'markdown':\n case 'secret':\n return 'text';\n case 'number':\n return field.integer ? 'integer' : 'decimal';\n case 'checkbox':\n return 'boolean';\n case 'date':\n return 'timestamp';\n case 'select':\n case 'radio':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'richtext':\n case 'json':\n case 'array':\n case 'group':\n case 'blocks':\n case 'row':\n case 'collapsible':\n case 'tabs':\n return 'jsonb';\n case 'relationship':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'upload':\n return 'jsonb';\n default:\n return 'jsonb';\n }\n}\n\nexport function collectionToDrizzleSchema(\n collection: CollectionConfig,\n dialect: 'postgres' | 'sqlite' = 'postgres'\n): string {\n const tableName = collection.slug.replace(/-/g, '_');\n const lines: string[] = [];\n \n lines.push(`export const ${tableName} = pgTable('${tableName}', {`);\n \n // Add id field\n lines.push(` id: uuid('id').primaryKey().defaultRandom(),`);\n \n // Process fields\n for (const field of collection.fields) {\n if (field.name === 'id') continue;\n \n const dbType = fieldToDrizzleType(field, dialect);\n const isRequired = field.required;\n \n let fieldDef = ` ${field.name}: pg.${dbType}('${field.name}')`;\n \n // Add constraints\n if (field.unique) fieldDef += '.unique()';\n if (!isRequired) fieldDef += '.nullable()';\n \n // Add default value\n if (field.defaultValue !== undefined) {\n if (typeof field.defaultValue === 'string') {\n fieldDef += `.default('${field.defaultValue}')`;\n } else if (typeof field.defaultValue === 'boolean') {\n fieldDef += `.default(${field.defaultValue})`;\n } else {\n fieldDef += `.default(sql\\`${JSON.stringify(field.defaultValue)}\\`)`;\n }\n }\n \n fieldDef += ',';\n lines.push(fieldDef);\n }\n \n // Add timestamps\n if (collection.timestamps) {\n lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);\n lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);\n }\n \n // Add status field\n lines.push(` status: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.varchar('status').default('draft'),`);\n lines.push(` hasDraft: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.boolean('hasDraft').default(false),`);\n \n lines.push('});');\n \n return lines.join('\\n');\n}\n\n// ============================================================================\n// Drizzle Adapter\n// ============================================================================\n\nexport class DrizzleAdapter extends AbstractBaseAdapter {\n public client: any;\n private schema: any;\n public dialect: 'postgres' | 'sqlite';\n private connectionString?: string;\n private versionsTableReady = false;\n \n constructor(options: {\n type?: 'postgres' | 'sqlite';\n client?: any;\n schema?: any;\n connectionString?: string;\n }) {\n super();\n this.schema = options.schema || {};\n \n if (options.connectionString) {\n this.connectionString = options.connectionString;\n const connStr = options.connectionString.toLowerCase();\n if (connStr.startsWith('postgres://') || connStr.startsWith('postgresql://')) {\n this.dialect = 'postgres';\n } else if (connStr.includes('.db') || connStr.includes('sqlite') || connStr.includes('file:')) {\n this.dialect = 'sqlite';\n } else {\n this.dialect = options.type || 'postgres';\n }\n } else {\n this.client = options.client;\n this.dialect = options.type || 'sqlite';\n }\n }\n\n protected prepareData(data: Record<string, any>, config: CollectionConfig): Record<string, any> {\n const result = super.prepareData(data, config);\n\n // Convert ISO date strings to Date objects for Drizzle timestamp columns\n if (result.createdAt && typeof result.createdAt === \"string\") {\n result.createdAt = new Date(result.createdAt);\n }\n if (result.updatedAt && typeof result.updatedAt === \"string\") {\n result.updatedAt = new Date(result.updatedAt);\n }\n\n // Convert date-type field values to Date objects for Drizzle timestamp columns\n for (const field of config.fields) {\n if (field.type === 'date' && field.name) {\n const value = result[field.name];\n if (value && typeof value === \"string\") {\n result[field.name] = new Date(value);\n }\n }\n }\n\n // Process complex fields — Drizzle ORM handles JSONB serialization natively,\n // so we only stringify for non-jsonb types and keep objects for jsonb columns.\n for (const field of config.fields) {\n const dbType = fieldToDrizzleType(field, this.dialect);\n const isJsonb = dbType === \"jsonb\";\n\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n const tabData = data[field.name];\n if (tabData && typeof tabData === 'object') {\n const processedTabData: any = {};\n for (const [key, value] of Object.entries(tabData)) {\n const tabField = field.tabs.flatMap((t: any) => t.fields).find((f: any) => f.name === key);\n const needsStringify = (tabField?.type === 'upload' || tabField?.type === 'image' || tabField?.type === 'list' || tabField?.type === 'relationship-block') && value;\n if (needsStringify) {\n processedTabData[key] = Array.isArray(value) ? JSON.stringify(value) : typeof value === 'object' ? JSON.stringify(value) : value;\n } else {\n processedTabData[key] = value;\n }\n }\n result[field.name] = isJsonb ? processedTabData : JSON.stringify(processedTabData);\n }\n }\n\n if ((field as any).type === 'upload' || (field as any).type === 'image' || (field as any).type === 'list' || (field as any).type === 'relationship-block') {\n if (field.name) {\n const value = data[field.name];\n if (value) {\n result[field.name] = isJsonb ? value : (Array.isArray(value) ? JSON.stringify(value) : typeof value === 'object' ? JSON.stringify(value) : value);\n }\n }\n }\n }\n\n // Convert empty strings to null for field types that reject them in PostgreSQL\n for (const field of config.fields) {\n if (field.name && result[field.name] === \"\") {\n const dbType = fieldToDrizzleType(field, this.dialect);\n if (dbType === \"timestamp\" || dbType === \"jsonb\" || dbType === \"decimal\" || dbType === \"integer\" || dbType === \"numeric\" || dbType === \"boolean\") {\n result[field.name] = null;\n }\n }\n }\n \n return result;\n }\n\n async connect(): Promise<void> {\n if (this.connectionString && !this.client) {\n if (this.dialect === 'postgres') {\n const { default: postgres } = await import('postgres');\n const { drizzle } = await import('drizzle-orm/postgres-js');\n const sql = postgres(this.connectionString, { onnotice: () => {} });\n this.client = drizzle(sql, { schema: this.schema });\n } else if (this.dialect === 'sqlite') {\n const { default: betterSqlite3 } = await import('better-sqlite3');\n const { drizzle } = await import('drizzle-orm/better-sqlite3');\n const db = new betterSqlite3(this.connectionString.replace('file:', ''));\n this.client = drizzle(db, { schema: this.schema });\n }\n }\n this.connected = true;\n\n }\n\n async init(collections: CollectionConfig[], globals: GlobalConfig[] = []): Promise<void> {\n await super.init(collections, globals);\n\n if (this.connectionString && !this.client) {\n await this.connect();\n }\n\n if (this.client && !_schemaEnsured) {\n for (const config of collections) {\n const tableName = this.getTableName(config.slug);\n if (!this.schema[tableName]) {\n this.schema[tableName] = this.createTableFromConfig(config);\n }\n }\n await this.ensureCollectionTables(collections);\n\n // Create tables for globals (stored as _globals_{slug})\n const globalCollections: CollectionConfig[] = globals.map((g) => ({\n slug: `_globals_${g.slug}`,\n fields: g.fields,\n label: g.label,\n }));\n for (const gc of globalCollections) {\n const tableName = this.getTableName(gc.slug);\n if (!this.schema[tableName]) {\n this.schema[tableName] = this.createTableFromConfig(gc, true);\n }\n // Register in collections so CRUD methods can find them\n if (!this.collections.has(gc.slug)) {\n this.collections.set(gc.slug, gc as CollectionConfig);\n }\n }\n await this.ensureCollectionTables(globalCollections);\n _schemaEnsured = true;\n }\n }\n\n private createTableFromConfig(config: CollectionConfig, useTextId = false): any {\n const tableName = this.getTableName(config.slug);\n const columns: Record<string, any> = {\n id: useTextId ? text(\"id\").primaryKey() : uuid(\"id\").primaryKey().defaultRandom(),\n };\n\n for (const field of config.fields) {\n if (!field.name || field.name === \"id\") continue;\n const dbType = fieldToDrizzleType(field, this.dialect);\n const propName = field.name.replace(/-/g, \"_\");\n const sqlName = propName.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n\n let col: any;\n if (this.dialect === 'sqlite') {\n switch (dbType) {\n case \"varchar\":\n case \"text\":\n col = sqliteText(sqlName);\n break;\n case \"integer\":\n col = sqliteInteger(sqlName);\n break;\n case \"decimal\":\n case \"numeric\":\n col = sqliteNumeric(sqlName);\n break;\n case \"boolean\":\n col = sqliteInteger(sqlName, { mode: 'boolean' });\n break;\n case \"timestamp\":\n col = sqliteText(sqlName);\n break;\n case \"jsonb\":\n col = sqliteText(sqlName);\n break;\n default:\n col = sqliteText(sqlName);\n }\n } else {\n switch (dbType) {\n case \"varchar\":\n col = varchar(sqlName, { length: 255 });\n break;\n case \"integer\":\n col = integer(sqlName);\n break;\n case \"decimal\":\n col = decimal(sqlName);\n break;\n case \"boolean\":\n col = boolean(sqlName);\n break;\n case \"timestamp\":\n col = timestamp(sqlName);\n break;\n case \"jsonb\":\n col = jsonb(sqlName);\n break;\n default:\n col = text(sqlName);\n }\n }\n if (!field.required) col = col.default(null);\n columns[propName] = col;\n }\n\n if (!columns.createdAt) columns.createdAt = this.dialect === 'sqlite' ? sqliteText(\"created_at\").default(new Date().toISOString()) : timestamp(\"created_at\").defaultNow();\n if (!columns.updatedAt) columns.updatedAt = this.dialect === 'sqlite' ? sqliteText(\"updated_at\").default(new Date().toISOString()) : timestamp(\"updated_at\").defaultNow();\n columns.status = this.dialect === 'sqlite' ? sqliteText(\"status\").default(\"draft\") : varchar(\"status\", { length: 20 }).default(\"draft\");\n columns.hasDraft = this.dialect === 'sqlite' ? sqliteInteger(\"hasDraft\", { mode: 'boolean' }).default(false) : boolean(\"hasDraft\").default(false);\n\n return this.dialect === 'sqlite'\n ? sqliteTable(tableName, columns)\n : pgTable(tableName, columns);\n }\n\n private async ensureCollectionTables(collections: CollectionConfig[]): Promise<void> {\n const statements: string[] = [];\n for (const config of collections) {\n const isGlobal = config.slug.startsWith(\"_globals_\");\n const tableName = this.getTableName(config.slug);\n const colDefs = this.generateCreateColumns(config);\n const hasCreated = config.fields.some((f) => f.name === \"createdAt\");\n const hasUpdated = config.fields.some((f) => f.name === \"updatedAt\");\n \n if (this.dialect === 'postgres') {\n const idCol = isGlobal ? '\"id\" TEXT PRIMARY KEY' : '\"id\" UUID PRIMARY KEY DEFAULT gen_random_uuid()';\n statements.push(`\n CREATE TABLE IF NOT EXISTS \"${tableName}\" (\n ${idCol},\n ${colDefs}\n ${hasCreated ? \"\" : '\"created_at\" TIMESTAMP NOT NULL DEFAULT NOW(),'}\n ${hasUpdated ? \"\" : '\"updated_at\" TIMESTAMP NOT NULL DEFAULT NOW(),'}\n \"status\" VARCHAR(20) DEFAULT 'draft',\n \"hasDraft\" BOOLEAN DEFAULT false\n )\n `);\n } else {\n const idCol = isGlobal ? '\"id\" TEXT PRIMARY KEY' : '\"id\" TEXT PRIMARY KEY';\n statements.push(`\n CREATE TABLE IF NOT EXISTS \"${tableName}\" (\n ${idCol},\n ${colDefs}\n ${hasCreated ? \"\" : '\"created_at\" TEXT NOT NULL DEFAULT (datetime(\\'now\\')),'}\n ${hasUpdated ? \"\" : '\"updated_at\" TEXT NOT NULL DEFAULT (datetime(\\'now\\')),'}\n \"status\" TEXT DEFAULT 'draft',\n \"hasDraft\" INTEGER DEFAULT 0\n )\n `);\n }\n }\n if (statements.length > 0) {\n if (this.dialect === 'postgres') {\n await this.client.execute(sql.raw(statements.join(\";\\n\")));\n } else {\n for (const stmt of statements) {\n await this.client.execute(sql.raw(stmt));\n }\n }\n }\n // Sync missing columns for each table (handles schema drift from config changes)\n for (const config of collections) {\n const tableName = this.getTableName(config.slug);\n // Skip auth-managed tables — their schema is managed by the auth adapter,\n // and altering columns (e.g. users.avatar VARCHAR→jsonb) breaks auth queries.\n if (tableName === \"users\" || tableName === \"audit_logs\") continue;\n await this.syncTableColumns(config, tableName);\n }\n }\n\n private getColumnSqlDefinition(field: Field, dialect: \"postgres\" | \"sqlite\"): string {\n const dbType = fieldToDrizzleType(field, dialect);\n const sqlName = field.name!\n .replace(/-/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n const sqlType = this.columnSqlType(dbType, dialect);\n return `\"${sqlName}\" ${sqlType} DEFAULT NULL`;\n }\n\n private columnSqlType(dbType: string, dialect: string): string {\n if (dialect === 'sqlite') {\n switch (dbType) {\n case \"varchar\": return \"TEXT\";\n case \"text\": return \"TEXT\";\n case \"integer\": return \"INTEGER\";\n case \"decimal\": case \"numeric\": return \"NUMERIC\";\n case \"boolean\": return \"INTEGER\";\n case \"timestamp\": return \"TEXT\";\n case \"jsonb\": return \"TEXT\";\n default: return \"TEXT\";\n }\n }\n switch (dbType) {\n case \"varchar\": return \"VARCHAR(255)\";\n case \"text\": return \"TEXT\";\n case \"integer\": return \"INTEGER\";\n case \"decimal\": case \"numeric\": return \"DECIMAL\";\n case \"boolean\": return \"BOOLEAN\";\n case \"timestamp\": return \"TIMESTAMP\";\n case \"jsonb\": return \"JSONB\";\n default: return \"TEXT\";\n }\n }\n\n private getExpectedColumnDefs(config: CollectionConfig, tableName: string): Record<string, string> {\n const defs: Record<string, string> = {};\n const isGlobal = config.slug.startsWith(\"_globals_\");\n const hasCreated = config.fields.some((f) => f.name === \"createdAt\");\n const hasUpdated = config.fields.some((f) => f.name === \"updatedAt\");\n\n if (this.dialect === 'postgres') {\n defs[\"id\"] = isGlobal ? '\"id\" TEXT PRIMARY KEY' : '\"id\" UUID PRIMARY KEY DEFAULT gen_random_uuid()';\n if (!hasCreated) defs[\"created_at\"] = '\"created_at\" TIMESTAMP DEFAULT NULL';\n if (!hasUpdated) defs[\"updated_at\"] = '\"updated_at\" TIMESTAMP DEFAULT NULL';\n defs[\"status\"] = '\"status\" VARCHAR(20) DEFAULT NULL';\n defs[\"hasDraft\"] = '\"hasDraft\" BOOLEAN DEFAULT NULL';\n } else {\n defs[\"id\"] = '\"id\" TEXT PRIMARY KEY';\n if (!hasCreated) defs[\"created_at\"] = '\"created_at\" TEXT DEFAULT NULL';\n if (!hasUpdated) defs[\"updated_at\"] = '\"updated_at\" TEXT DEFAULT NULL';\n defs[\"status\"] = '\"status\" TEXT DEFAULT NULL';\n defs[\"hasDraft\"] = '\"hasDraft\" INTEGER DEFAULT NULL';\n }\n\n for (const field of config.fields) {\n if (!field.name || field.name === \"id\") continue;\n const def = this.getColumnSqlDefinition(field, this.dialect);\n const sqlName = field.name\n .replace(/-/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n defs[sqlName] = def;\n }\n return defs;\n }\n\n private async syncTableColumns(config: CollectionConfig, tableName: string): Promise<void> {\n let existingCols: Map<string, { type: string; maxLen: number | null }>;\n try {\n if (this.dialect === 'postgres') {\n const result = await this.client.execute(\n sql`SELECT column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_name = ${tableName}`\n );\n existingCols = new Map(result.map((r: any) => [r.column_name, { type: r.data_type, maxLen: r.character_maximum_length }]));\n } else {\n const result = await this.client.execute(\n sql`PRAGMA table_info(\"${sql.raw(tableName)}\")`\n );\n existingCols = new Map(result.map((r: any) => [r.name, { type: r.type, maxLen: null }]));\n }\n } catch {\n return;\n }\n\n const expected = this.getExpectedColumnDefs(config, tableName);\n\n // Add missing columns\n const missing = Object.keys(expected).filter(k => !existingCols.has(k));\n if (missing.length > 0) {\n const alterStmts = missing.map(k => `ALTER TABLE \"${tableName}\" ADD COLUMN ${expected[k]}`);\n await this.executeRaw(sql.raw(alterStmts.join(\";\\n\")));\n }\n\n // Fix column type mismatches: VARCHAR → correct type where field config changed\n if (this.dialect === 'postgres') {\n for (const field of config.fields) {\n if (!field.name || field.name === \"id\") continue;\n const expectedDbType = fieldToDrizzleType(field, this.dialect);\n const sqlName = field.name\n .replace(/-/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n\n const info = existingCols.get(sqlName);\n if (!info || info.type !== 'character varying') continue;\n\n if (expectedDbType === 'text') {\n await this.executeRaw(sql.raw(`ALTER TABLE \"${tableName}\" ALTER COLUMN \"${sqlName}\" TYPE TEXT`));\n\n } else if (expectedDbType === 'jsonb') {\n await this.executeRaw(sql.raw(`ALTER TABLE \"${tableName}\" ALTER COLUMN \"${sqlName}\" DROP DEFAULT`));\n 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)`));\n\n }\n }\n }\n }\n\n private generateCreateColumns(config: CollectionConfig): string {\n const cols: string[] = [];\n for (const field of config.fields) {\n if (!field.name || field.name === \"id\") continue;\n const dbType = fieldToDrizzleType(field, this.dialect);\n const sqlName = field.name\n .replace(/-/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase();\n const nullable = field.required ? \"NOT NULL\" : \"DEFAULT NULL\";\n\n let sqlType: string;\n if (this.dialect === 'sqlite') {\n switch (dbType) {\n case \"varchar\":\n case \"text\":\n sqlType = `TEXT ${nullable}`;\n break;\n case \"integer\":\n sqlType = `INTEGER ${nullable}`;\n break;\n case \"decimal\":\n case \"numeric\":\n sqlType = `NUMERIC ${nullable}`;\n break;\n case \"boolean\":\n sqlType = `INTEGER ${nullable}`;\n break;\n case \"timestamp\":\n sqlType = `TEXT ${nullable}`;\n break;\n case \"jsonb\":\n sqlType = `TEXT ${nullable}`;\n break;\n default:\n sqlType = `TEXT ${nullable}`;\n }\n } else {\n switch (dbType) {\n case \"varchar\":\n sqlType = `VARCHAR(255) ${nullable}`;\n break;\n case \"integer\":\n sqlType = `INTEGER ${nullable}`;\n break;\n case \"decimal\":\n sqlType = `DECIMAL ${nullable}`;\n break;\n case \"boolean\":\n sqlType = `BOOLEAN ${nullable}`;\n break;\n case \"timestamp\":\n sqlType = `TIMESTAMP ${nullable}`;\n break;\n case \"jsonb\":\n sqlType = `JSONB ${nullable}`;\n break;\n default:\n sqlType = `TEXT ${nullable}`;\n }\n }\n cols.push(`\"${sqlName}\" ${sqlType}`);\n }\n return cols.join(\",\\n \") + (cols.length > 0 ? \",\" : \"\");\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let effectiveWhere = { ...where };\n if (this.tenantContext && config.tenantScoped) {\n const rlsQuery = applyRLS({ where: effectiveWhere }, slug, this.tenantContext, DEFAULT_RLS_CONFIG);\n effectiveWhere = rlsQuery.where || {};\n }\n\n // Build query\n const filters = this.buildWhereClause(effectiveWhere, config, table, tenantID);\n \n // Default filter for non-draft requests: only show published\n if (!draft && table.status) {\n filters.push(eq(table.status, 'published'));\n }\n\n const sortOption = this.parseSort(sort);\n\n // Get total count (include status filter for non-draft requests)\n const countWhere = !draft && table.status ? { ...effectiveWhere, status: 'published' } : effectiveWhere;\n const totalDocs = await this.count({ collection: slug, where: countWhere, tenantID });\n\n // Execute query\n const offset = (page - 1) * limit;\n \n let results = [];\n try {\n const sortCol = table[sortOption.field] || table.createdAt || table.id;\n const sorted = sortOption.direction === 'asc' ? sortCol : desc(sortCol);\n let query = this.client.select().from(table);\n \n if (filters.length > 0) {\n query = query.where(and(...filters));\n }\n \n results = await query.orderBy(sorted).limit(limit).offset(offset);\n } catch (error) {\n console.error(`[DrizzleAdapter] Query error:`, error);\n }\n\n let docs: T[] = results.map((doc: any) => this.processResult(doc, config));\n\n if (this.tenantContext && !this.tenantContext.isSuperAdmin) {\n docs = docs.filter((doc: any) => canAccessDocument(doc, slug, this.tenantContext!, DEFAULT_RLS_CONFIG)) as T[];\n }\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (draft) {\n docs = await Promise.all(docs.map(async (doc: any) => {\n const versions = await this.executeRaw<any>(sql`\n SELECT * FROM kyro_versions\n WHERE collection_slug = ${slug}\n AND document_id = ${doc.id}\n ORDER BY created_at DESC\n LIMIT 1\n `);\n if (versions.length > 0) {\n const ver = versions[0];\n const versionData = typeof ver.data === 'string' ? JSON.parse(ver.data) : ver.data;\n return { ...doc, ...versionData, status: doc.status };\n }\n return doc;\n }));\n }\n\n return {\n docs,\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n if (this.tenantContext && config.tenantScoped) {\n const tempDoc = { id, tenantId: this.tenantContext.tenantId };\n if (!canAccessDocument(tempDoc, slug, this.tenantContext, DEFAULT_RLS_CONFIG)) {\n return null;\n }\n }\n\n const conditions = [eq(table.id, id)];\n if (tenantID && table.tenantId) conditions.push(eq(table.tenantId, tenantID));\n if (!draft && table.status) conditions.push(eq(table.status, \"published\"));\n const whereClause = conditions.length > 1 ? and(...conditions) : conditions[0];\n let allRows = await this.client.select().from(table).where(whereClause);\n if (allRows.length === 0) return null;\n let doc = this.processResult(allRows[0], config) as T;\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (draft) {\n const versions = await this.executeRaw<any>(sql`\n SELECT * FROM kyro_versions\n WHERE collection_slug = ${slug}\n AND document_id = ${(doc as any).id}\n ORDER BY created_at DESC\n LIMIT 1\n `);\n if (versions.length > 0) {\n const ver = versions[0];\n const versionData = typeof ver.data === 'string' ? JSON.parse(ver.data) : ver.data;\n doc = { ...doc, ...versionData, status: (doc as any).status };\n }\n }\n\n return doc;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const insertData = this.prepareData(data, config);\n if (tenantID) {\n insertData.tenantId = tenantID;\n }\n\n const result = await this.client\n .insert(table)\n .values(insertData)\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const updateData = this.prepareData(data, config);\n\n // Never include id in the SET clause\n delete updateData.id;\n\n\n\n const conditions: any[] = [eq(table.id, id)];\n if (tenantID && table.tenantId) {\n conditions.push(eq(table.tenantId, tenantID));\n }\n\n const result = await this.client\n .update(table)\n .set(updateData)\n .where(and(...conditions))\n .returning();\n\n if (result.length === 0) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result[0], config) as T;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const conditions: any[] = [eq(table.id, id)];\n if (tenantID && table.tenantId) {\n conditions.push(eq(table.tenantId, tenantID));\n }\n\n const result = await this.client\n .delete(table)\n .where(and(...conditions))\n .returning();\n\n if (result.length === 0) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result[0], config) as T;\n }\n\n async count(args: { collection: string; where?: Record<string, any>; tenantID?: string }): Promise<number> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const filters = this.buildWhereClause(where, config, table, tenantID);\n\n try {\n let query = this.client.select({ count: sql<number>`count(*)` }).from(table);\n \n if (filters.length > 0) {\n query = query.where(and(...filters));\n }\n\n const result = await query;\n return Number(result[0]?.count || 0);\n } catch {\n return 0;\n }\n }\n\n async findOne(args: { collection: string; where: Record<string, any>; tenantID?: string; draft?: boolean }): Promise<any> {\n const { collection: slug, where = {}, tenantID, draft } = args;\n \n // Check if it's a Global\n if (slug.startsWith('_globals_')) {\n const globalSlug = slug.replace('_globals_', '');\n const globalConfig = this.globals.get(globalSlug);\n if (!globalConfig) throw new Error(`Global \"${globalSlug}\" not found`);\n \n const table = this.getTable(slug);\n let query = this.client.select().from(table);\n \n if (!draft && table.status) {\n query = query.where(eq(table.status, 'published'));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n let doc = this.processResult(results[0], globalConfig as any);\n\n // If draft: true, merge the latest version (autosave or manual) into the response\n if (draft) {\n const versions = await this.executeRaw<any>(sql`\n SELECT * FROM kyro_versions\n WHERE collection_slug = ${slug}\n AND document_id = ${globalSlug}\n ORDER BY created_at DESC\n LIMIT 1\n `);\n if (versions.length > 0) {\n const ver = versions[0];\n const versionData = typeof ver.data === 'string' ? JSON.parse(ver.data) : ver.data;\n doc = { ...doc, ...versionData, status: (doc as any).status };\n }\n }\n return doc;\n }\n\n const result = await this.find({ ...args, limit: 1 });\n return result.docs[0] || null;\n }\n\n async findVersions(args: any): Promise<FindResult<any>> {\n await this.ensureVersionsTable();\n const { collection: slug, documentId, limit = 10, page = 1, tenantID } = args;\n\n const offset = (page - 1) * limit;\n \n const countResult = await this.executeRaw(sql`\n SELECT count(*) as count \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n AND autosave = 0\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n `);\n const totalDocs = parseInt(countResult[0]?.count || '0');\n\n const results = await this.executeRaw(sql`\n SELECT * \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n AND autosave = 0\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${limit}\n OFFSET ${offset}\n `);\n\n return {\n docs: results.map(row => ({\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n })),\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findVersionByID(args: { collection: string; versionId: string; tenantID?: string }): Promise<any> {\n await this.ensureVersionsTable();\n const results = await this.executeRaw(sql`\n SELECT * FROM kyro_versions \n WHERE id = ${args.versionId} \n AND collection_slug = ${args.collection}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n LIMIT 1\n `);\n \n if (results.length === 0) return null;\n const row = results[0];\n return {\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n };\n }\n\n async createVersion(args: any): Promise<any> {\n await this.ensureVersionsTable();\n const now = new Date().toISOString();\n\n // Autosave: reuse existing autosave slot instead of creating a new row\n if (args.autosave) {\n const existing = await this.executeRaw(sql`\n SELECT * FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n AND autosave = 1\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n LIMIT 1\n `);\n if (existing.length > 0) {\n await this.executeRaw(sql`\n UPDATE kyro_versions\n SET data = ${JSON.stringify(args.data)},\n status = ${args.status},\n updated_at = ${now}\n WHERE id = ${existing[0].id}\n `);\n return this.findVersionByID({ collection: args.collection, versionId: existing[0].id, tenantID: args.tenantID });\n }\n }\n\n const id = Math.random().toString(36).substring(2, 15);\n \n await this.executeRaw(sql`\n INSERT INTO kyro_versions (\n id, collection_slug, document_id, tenant_id, data, status, autosave, created_by, change_description, created_at, updated_at\n ) VALUES (\n ${id}, ${args.collection}, ${args.documentId}, ${args.tenantID || null}, \n ${JSON.stringify(args.data)}, ${args.status}, ${args.autosave ? 1 : 0}, ${args.createdBy || null}, \n ${args.changeDescription || null}, ${now}, ${now}\n )\n `);\n\n // Pruning logic — skip for autosave versions (only one per doc, not counted toward limit)\n if (!args.autosave) {\n const config = this.getCollection(args.collection);\n if (config.versions?.maxPerDoc) {\n await this.deleteVersions({\n collection: args.collection,\n documentId: args.documentId,\n keepLatest: config.versions.maxPerDoc,\n tenantID: args.tenantID,\n });\n }\n }\n\n return this.findVersionByID({ collection: args.collection, versionId: id, tenantID: args.tenantID });\n }\n\n async updateLatestVersion(args: any): Promise<any> {\n return this.createVersion({ ...args, autosave: true });\n }\n\n async deleteVersions(args: { collection: string; documentId: string; keepLatest?: number; tenantID?: string }): Promise<void> {\n await this.ensureVersionsTable();\n \n if (args.keepLatest) {\n // Exclude autosave versions from pruning\n const toKeep = await this.executeRaw(sql`\n SELECT id FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n AND autosave = 0\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${args.keepLatest}\n `);\n \n const keepIds = toKeep.map(r => r.id);\n if (keepIds.length > 0) {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n AND autosave = 0\n AND id NOT IN (${sql.join(keepIds.map(id => sql`${id}`), sql`, `)})\n `);\n }\n } else {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n `);\n }\n }\n\n\n // ========================================================================\n // Helper Methods\n // ========================================================================\n\n private getTable(slug: string): any {\n const tableName = this.getTableName(slug);\n const table = this.schema[tableName];\n if (!table) {\n throw new Error(`Table \"${tableName}\" not found in schema`);\n }\n return table;\n }\n\n private buildWhereClause(\n where: Record<string, any>,\n config: CollectionConfig,\n table: any,\n tenantID?: string\n ): any[] {\n const conditions: any[] = [];\n\n if (tenantID && config.tenantScoped && table.tenantId) {\n conditions.push(eq(table.tenantId, tenantID));\n }\n\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND' && Array.isArray(value)) {\n const andConditions = value\n .map((sub: any) => this.buildWhereClause(sub, config, table))\n .flat()\n .filter(Boolean);\n if (andConditions.length > 0) {\n conditions.push(and(...andConditions));\n }\n } else if (key === 'OR' && Array.isArray(value)) {\n const orConditions = value\n .map((sub: any) => this.buildWhereClause(sub, config, table))\n .flat()\n .filter(Boolean);\n if (orConditions.length > 0) {\n conditions.push(or(...orConditions));\n }\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const col = table[key];\n if (!col) continue;\n\n if (value.equals !== undefined) conditions.push(eq(col, value.equals));\n if (value.not_equals !== undefined) conditions.push(ne(col, value.not_equals));\n if (value.in && Array.isArray(value.in)) conditions.push(inArray(col, value.in));\n if (value.like !== undefined) conditions.push(like(col, value.like));\n if (value.contains !== undefined) conditions.push(like(col, `%${value.contains}%`));\n if (value.greater_than !== undefined) conditions.push(gt(col, value.greater_than));\n if (value.greater_than_equal !== undefined) conditions.push(gte(col, value.greater_than_equal));\n if (value.less_than !== undefined) conditions.push(lt(col, value.less_than));\n if (value.less_than_equal !== undefined) conditions.push(lte(col, value.less_than_equal));\n } else {\n const col = table[key];\n if (col) conditions.push(eq(col, value));\n }\n }\n\n return conditions;\n }\n\n private processResult(data: any, config: CollectionConfig): any {\n if (!data) return null;\n\n const result = { ...data };\n\n // Convert id field\n if (data.id) {\n result.id = String(data.id);\n }\n\n // Map snake_case SQL column names to camelCase field names\n // (createTableFromConfig converts field names like featuredImage → featured_image in SQL)\n for (const field of config.fields) {\n if (!field.name) continue;\n const sqlKey = field.name.replace(/-/g, \"_\").replace(/([A-Z])/g, \"_$1\").toLowerCase();\n if (sqlKey !== field.name && result[sqlKey] !== undefined && result[field.name] === undefined) {\n result[field.name] = result[sqlKey];\n delete result[sqlKey];\n }\n }\n\n // Parse JSON fields and upload/image fields\n for (const field of config.fields) {\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((field as any).type)) {\n const f = field as any;\n if (result[f.name] && typeof result[f.name] === 'string') {\n try {\n const parsed = JSON.parse(result[f.name]);\n result[f.name] = parsed;\n } catch {\n // Keep original value\n }\n }\n }\n \n // Handle nested tab fields - build nested structure\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n // If the tabs column already has an object (from JSONB or parsed above), parse nested upload/image fields\n if (typeof result[field.name] === 'object' && result[field.name] !== null && !Array.isArray(result[field.name])) {\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if ((tabField.type === 'upload' || tabField.type === 'image') && tabField.name) {\n const val = result[field.name][tabField.name];\n if (typeof val === 'string') {\n try { \n const parsed = JSON.parse(val);\n result[field.name][tabField.name] = Array.isArray(parsed)\n ? parsed.map((item: any) => item && typeof item === 'object' && typeof item.id === 'string' ? item.id : String(item || ''))\n : typeof parsed.id === 'string' ? parsed.id : String(parsed.id || '');\n } catch {}\n } else if (val && typeof val === 'object') {\n result[field.name][tabField.name] = Array.isArray(val)\n ? val.map((item: any) => item && typeof item === 'object' && typeof item.id === 'string' ? item.id : String(item || ''))\n : typeof val.id === 'string' ? val.id : String(val.id || '');\n }\n }\n }\n }\n continue;\n }\n // If the tabs column is a JSON string, parse it\n if (typeof result[field.name] === 'string') {\n try {\n const parsed = JSON.parse(result[field.name]);\n if (typeof parsed === 'object' && parsed !== null) {\n result[field.name] = parsed;\n continue;\n }\n } catch { /* fall through to flat rebuild */ }\n }\n const tabData: any = {};\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name && result[tabField.name] !== undefined) {\n let value = result[tabField.name];\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((tabField as any).type)) {\n if (value && typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch {\n // Keep original value\n }\n }\n // Normalize upload/image to ID string\n if ((tabField.type === 'upload' || tabField.type === 'image') && value && typeof value === 'object') {\n value = Array.isArray(value)\n ? (value as any[]).map((item: any) => item && typeof item === 'object' && typeof item.id === 'string' ? item.id : String(item || ''))\n : typeof value.id === 'string' ? value.id : String(value.id || '');\n }\n }\n tabData[tabField.name] = value;\n delete result[tabField.name];\n }\n }\n }\n result[field.name] = tabData;\n }\n }\n\n // Convert timestamps to ISO strings\n if (result.createdAt) {\n result.createdAt = new Date(result.createdAt).toISOString();\n }\n if (result.updatedAt) {\n result.updatedAt = new Date(result.updatedAt).toISOString();\n }\n\n return result;\n }\n\n private async ensureVersionsTable(): Promise<void> {\n if (this.versionsTableReady) return;\n\n let createTableSQL: string;\n if (this.dialect === 'sqlite') {\n createTableSQL = `\n CREATE TABLE IF NOT EXISTS kyro_versions (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n status text NOT NULL DEFAULT 'draft',\n autosave integer NOT NULL DEFAULT 0,\n created_by text,\n change_description text,\n created_at text DEFAULT (datetime('now')),\n updated_at text DEFAULT (datetime('now'))\n )\n `;\n } else {\n createTableSQL = `\n CREATE TABLE IF NOT EXISTS kyro_versions (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n status text NOT NULL,\n autosave integer NOT NULL DEFAULT 0,\n created_by text,\n change_description text,\n created_at text NOT NULL,\n updated_at text NOT NULL\n )\n `;\n }\n\n await this.executeRaw(sql.raw(createTableSQL));\n\n // Migration: add autosave column to existing tables\n try {\n if (this.dialect === 'postgres') {\n await this.executeRaw(sql.raw(`ALTER TABLE kyro_versions ADD COLUMN IF NOT EXISTS autosave integer NOT NULL DEFAULT 0`));\n } else {\n // SQLite does not support IF NOT EXISTS for ALTER TABLE\n await this.executeRaw(sql.raw(`ALTER TABLE kyro_versions ADD COLUMN autosave integer NOT NULL DEFAULT 0`));\n }\n } catch {\n // Column already exists — safe to ignore\n }\n\n this.versionsTableReady = true;\n }\n\n private async executeRaw<T = any>(query: any): Promise<T[]> {\n const result = await this.client.execute(query);\n if (Array.isArray(result)) {\n return result as T[];\n }\n if (Array.isArray(result?.rows)) {\n return result.rows as T[];\n }\n if (Array.isArray(result?.[0])) {\n return result[0] as T[];\n }\n return [];\n }\n\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport function createDrizzleAdapter(options: {\n type?: 'postgres' | 'sqlite';\n client?: any;\n schema?: any;\n connectionString?: string;\n}): DrizzleAdapter {\n return new DrizzleAdapter(options);\n}\n","import { drizzle } from \"drizzle-orm/postgres-js\";\nimport postgres from \"postgres\";\nimport { randomBytes } from \"crypto\";\nimport { mkdir } from \"fs/promises\";\nimport { dirname, resolve } from \"path\";\nimport { createRequire } from \"module\";\nconst _require = createRequire(import.meta.url);\nconst modPath = \"node:\" + \"sqlite\";\nconst { DatabaseSync } = _require(modPath) as typeof import(\"node:sqlite\");\n\nexport type Dialect = \"sqlite\" | \"postgres\";\n\nfunction getDialect(): Dialect {\n const val = process.env.DB_TYPE as Dialect | undefined;\n if (val === \"postgres\") return \"postgres\";\n return \"sqlite\";\n}\n\nexport function genId(): string {\n return randomBytes(16).toString(\"hex\");\n}\n\nexport interface DatabaseResult {\n db: any;\n dialect: Dialect;\n genId: () => string;\n}\n\nexport async function createDatabase(): Promise<DatabaseResult> {\n const dialect = getDialect();\n\n if (dialect === \"sqlite\") {\n const dbPath = resolve(process.cwd(), \"data\", \"kyro.db\");\n await mkdir(dirname(dbPath), { recursive: true });\n const db = new DatabaseSync(dbPath);\n db.exec(\"PRAGMA journal_mode = WAL\");\n return { db, dialect, genId };\n }\n\n const databaseUrl =\n process.env.DATABASE_URL ||\n \"postgresql://postgres:postgres@localhost:5432/kyro_cms\";\n const maxConnections = parseInt(process.env.DB_POOL_MAX || \"10\", 10);\n const ssl = process.env.DB_SSL === \"true\";\n const client = postgres(databaseUrl, {\n max: maxConnections,\n ssl: ssl ? \"require\" : false,\n onnotice: () => {},\n });\n const db = drizzle(client);\n return { db, dialect, genId };\n}\n\nexport async function runMigrations(\n _db: any,\n _dialect?: Dialect,\n): Promise<void> {\n\n}\n\nexport async function seedDefaultRoles(db: any): Promise<void> {\n const { roles } = await import(\"./schema/index.js\");\n await db\n .insert(roles)\n .values({\n name: \"super_admin\",\n level: 100,\n inherits: [],\n description: \"Full system access across all tenants\",\n isSystem: true,\n })\n .onConflictDoNothing();\n}\n"]}
|