@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.
Files changed (31) hide show
  1. package/dist/api-handler-graphql.cjs +8 -8
  2. package/dist/api-handler-graphql.js +4 -4
  3. package/dist/api-handler-trpc.cjs +6 -6
  4. package/dist/api-handler-trpc.js +4 -4
  5. package/dist/api-handler.cjs +7 -7
  6. package/dist/api-handler.js +4 -4
  7. package/dist/{chunk-3P5AHK2U.cjs → chunk-74YSDAWE.cjs} +11 -11
  8. package/dist/{chunk-3P5AHK2U.cjs.map → chunk-74YSDAWE.cjs.map} +1 -1
  9. package/dist/{chunk-ISKYUUP4.cjs → chunk-B6X3LN25.cjs} +7 -7
  10. package/dist/{chunk-ISKYUUP4.cjs.map → chunk-B6X3LN25.cjs.map} +1 -1
  11. package/dist/{chunk-AN2L2CJZ.js → chunk-HZOMOK5Y.js} +4 -4
  12. package/dist/{chunk-AN2L2CJZ.js.map → chunk-HZOMOK5Y.js.map} +1 -1
  13. package/dist/{chunk-GYIJ3JJM.cjs → chunk-OIRG6ZRV.cjs} +15 -11
  14. package/dist/chunk-OIRG6ZRV.cjs.map +1 -0
  15. package/dist/{chunk-354ISGA4.js → chunk-OLV7K22H.js} +3 -3
  16. package/dist/{chunk-354ISGA4.js.map → chunk-OLV7K22H.js.map} +1 -1
  17. package/dist/{chunk-526M5MOA.js → chunk-SX76DNOO.js} +4 -4
  18. package/dist/{chunk-526M5MOA.js.map → chunk-SX76DNOO.js.map} +1 -1
  19. package/dist/{chunk-XHAAAEXX.js → chunk-V5AWATUP.js} +14 -10
  20. package/dist/chunk-V5AWATUP.js.map +1 -0
  21. package/dist/{chunk-NQJJYRLP.cjs → chunk-VAXLFZCV.cjs} +7 -7
  22. package/dist/{chunk-NQJJYRLP.cjs.map → chunk-VAXLFZCV.cjs.map} +1 -1
  23. package/dist/drizzle/index.cjs +9 -9
  24. package/dist/drizzle/index.js +1 -1
  25. package/dist/index.cjs +48 -48
  26. package/dist/index.js +4 -4
  27. package/dist/rest/index.cjs +4 -4
  28. package/dist/rest/index.js +2 -2
  29. package/package.json +1 -1
  30. package/dist/chunk-GYIJ3JJM.cjs.map +0 -1
  31. 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 chunk3P5AHK2U_cjs = require('./chunk-3P5AHK2U.cjs');
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 chunkISKYUUP4_cjs = require('./chunk-ISKYUUP4.cjs');
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 chunkGYIJ3JJM_cjs = require('./chunk-GYIJ3JJM.cjs');
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 chunkISKYUUP4_cjs.AuditLogger(
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 chunkISKYUUP4_cjs.InMemoryRateLimiter({
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 chunkISKYUUP4_cjs.InMemoryAuditLogger(getEnvNum("AUDIT_LOG_RETENTION_DAYS", 30)) : void 0;
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 chunkISKYUUP4_cjs.AuthRoutes({
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
- chunkISKYUUP4_cjs.init_secret();
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 chunk3P5AHK2U_cjs.ConfigValidationError; }
1999
+ get: function () { return chunk74YSDAWE_cjs.ConfigValidationError; }
2000
2000
  });
2001
2001
  Object.defineProperty(exports, "Kyro", {
2002
2002
  enumerable: true,
2003
- get: function () { return chunk3P5AHK2U_cjs.Kyro; }
2003
+ get: function () { return chunk74YSDAWE_cjs.Kyro; }
2004
2004
  });
2005
2005
  Object.defineProperty(exports, "LocalAdapter", {
2006
2006
  enumerable: true,
2007
- get: function () { return chunk3P5AHK2U_cjs.LocalAdapter; }
2007
+ get: function () { return chunk74YSDAWE_cjs.LocalAdapter; }
2008
2008
  });
2009
2009
  Object.defineProperty(exports, "Registry", {
2010
2010
  enumerable: true,
2011
- get: function () { return chunk3P5AHK2U_cjs.Registry; }
2011
+ get: function () { return chunk74YSDAWE_cjs.Registry; }
2012
2012
  });
2013
2013
  Object.defineProperty(exports, "collectionToCreateZod", {
2014
2014
  enumerable: true,
2015
- get: function () { return chunk3P5AHK2U_cjs.collectionToCreateZod; }
2015
+ get: function () { return chunk74YSDAWE_cjs.collectionToCreateZod; }
2016
2016
  });
2017
2017
  Object.defineProperty(exports, "collectionToUpdateZod", {
2018
2018
  enumerable: true,
2019
- get: function () { return chunk3P5AHK2U_cjs.collectionToUpdateZod; }
2019
+ get: function () { return chunk74YSDAWE_cjs.collectionToUpdateZod; }
2020
2020
  });
2021
2021
  Object.defineProperty(exports, "collectionToWhereZod", {
2022
2022
  enumerable: true,
2023
- get: function () { return chunk3P5AHK2U_cjs.collectionToWhereZod; }
2023
+ get: function () { return chunk74YSDAWE_cjs.collectionToWhereZod; }
2024
2024
  });
2025
2025
  Object.defineProperty(exports, "collectionToZod", {
2026
2026
  enumerable: true,
2027
- get: function () { return chunk3P5AHK2U_cjs.collectionToZod; }
2027
+ get: function () { return chunk74YSDAWE_cjs.collectionToZod; }
2028
2028
  });
2029
2029
  Object.defineProperty(exports, "createKyro", {
2030
2030
  enumerable: true,
2031
- get: function () { return chunk3P5AHK2U_cjs.createKyro; }
2031
+ get: function () { return chunk74YSDAWE_cjs.createKyro; }
2032
2032
  });
2033
2033
  Object.defineProperty(exports, "createLocalAdapter", {
2034
2034
  enumerable: true,
2035
- get: function () { return chunk3P5AHK2U_cjs.createLocalAdapter; }
2035
+ get: function () { return chunk74YSDAWE_cjs.createLocalAdapter; }
2036
2036
  });
2037
2037
  Object.defineProperty(exports, "createRegistry", {
2038
2038
  enumerable: true,
2039
- get: function () { return chunk3P5AHK2U_cjs.createRegistry; }
2039
+ get: function () { return chunk74YSDAWE_cjs.createRegistry; }
2040
2040
  });
2041
2041
  Object.defineProperty(exports, "fieldToZod", {
2042
2042
  enumerable: true,
2043
- get: function () { return chunk3P5AHK2U_cjs.fieldToZod; }
2043
+ get: function () { return chunk74YSDAWE_cjs.fieldToZod; }
2044
2044
  });
2045
2045
  Object.defineProperty(exports, "getRegistry", {
2046
2046
  enumerable: true,
2047
- get: function () { return chunk3P5AHK2U_cjs.getRegistry; }
2047
+ get: function () { return chunk74YSDAWE_cjs.getRegistry; }
2048
2048
  });
2049
2049
  Object.defineProperty(exports, "globalToZod", {
2050
2050
  enumerable: true,
2051
- get: function () { return chunk3P5AHK2U_cjs.globalToZod; }
2051
+ get: function () { return chunk74YSDAWE_cjs.globalToZod; }
2052
2052
  });
2053
2053
  Object.defineProperty(exports, "resetRegistry", {
2054
2054
  enumerable: true,
2055
- get: function () { return chunk3P5AHK2U_cjs.resetRegistry; }
2055
+ get: function () { return chunk74YSDAWE_cjs.resetRegistry; }
2056
2056
  });
2057
2057
  Object.defineProperty(exports, "validateCollection", {
2058
2058
  enumerable: true,
2059
- get: function () { return chunk3P5AHK2U_cjs.validateCollection; }
2059
+ get: function () { return chunk74YSDAWE_cjs.validateCollection; }
2060
2060
  });
2061
2061
  Object.defineProperty(exports, "validateConfig", {
2062
2062
  enumerable: true,
2063
- get: function () { return chunk3P5AHK2U_cjs.validateConfig; }
2063
+ get: function () { return chunk74YSDAWE_cjs.validateConfig; }
2064
2064
  });
2065
2065
  Object.defineProperty(exports, "validateFields", {
2066
2066
  enumerable: true,
2067
- get: function () { return chunk3P5AHK2U_cjs.validateFields; }
2067
+ get: function () { return chunk74YSDAWE_cjs.validateFields; }
2068
2068
  });
2069
2069
  Object.defineProperty(exports, "validateGlobal", {
2070
2070
  enumerable: true,
2071
- get: function () { return chunk3P5AHK2U_cjs.validateGlobal; }
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 chunkISKYUUP4_cjs.AuditLogger; }
2243
+ get: function () { return chunkB6X3LN25_cjs.AuditLogger; }
2244
2244
  });
2245
2245
  Object.defineProperty(exports, "InMemoryAuditLogger", {
2246
2246
  enumerable: true,
2247
- get: function () { return chunkISKYUUP4_cjs.InMemoryAuditLogger; }
2247
+ get: function () { return chunkB6X3LN25_cjs.InMemoryAuditLogger; }
2248
2248
  });
2249
2249
  Object.defineProperty(exports, "InMemoryRateLimiter", {
2250
2250
  enumerable: true,
2251
- get: function () { return chunkISKYUUP4_cjs.InMemoryRateLimiter; }
2251
+ get: function () { return chunkB6X3LN25_cjs.InMemoryRateLimiter; }
2252
2252
  });
2253
2253
  Object.defineProperty(exports, "MediaService", {
2254
2254
  enumerable: true,
2255
- get: function () { return chunkISKYUUP4_cjs.MediaService; }
2255
+ get: function () { return chunkB6X3LN25_cjs.MediaService; }
2256
2256
  });
2257
2257
  Object.defineProperty(exports, "createAuditContext", {
2258
2258
  enumerable: true,
2259
- get: function () { return chunkISKYUUP4_cjs.createAuditContext; }
2259
+ get: function () { return chunkB6X3LN25_cjs.createAuditContext; }
2260
2260
  });
2261
2261
  Object.defineProperty(exports, "createHonoApp", {
2262
2262
  enumerable: true,
2263
- get: function () { return chunkISKYUUP4_cjs.createHonoApp; }
2263
+ get: function () { return chunkB6X3LN25_cjs.createHonoApp; }
2264
2264
  });
2265
2265
  Object.defineProperty(exports, "createLocalStorage", {
2266
2266
  enumerable: true,
2267
- get: function () { return chunkISKYUUP4_cjs.createLocalStorage; }
2267
+ get: function () { return chunkB6X3LN25_cjs.createLocalStorage; }
2268
2268
  });
2269
2269
  Object.defineProperty(exports, "createRESTAPI", {
2270
2270
  enumerable: true,
2271
- get: function () { return chunkISKYUUP4_cjs.createRESTAPI; }
2271
+ get: function () { return chunkB6X3LN25_cjs.createRESTAPI; }
2272
2272
  });
2273
2273
  Object.defineProperty(exports, "getAppSecret", {
2274
2274
  enumerable: true,
2275
- get: function () { return chunkISKYUUP4_cjs.getAppSecret; }
2275
+ get: function () { return chunkB6X3LN25_cjs.getAppSecret; }
2276
2276
  });
2277
2277
  Object.defineProperty(exports, "getEncryptionKey", {
2278
2278
  enumerable: true,
2279
- get: function () { return chunkISKYUUP4_cjs.getEncryptionKey; }
2279
+ get: function () { return chunkB6X3LN25_cjs.getEncryptionKey; }
2280
2280
  });
2281
2281
  Object.defineProperty(exports, "getSessionConfig", {
2282
2282
  enumerable: true,
2283
- get: function () { return chunkISKYUUP4_cjs.getSessionConfig; }
2283
+ get: function () { return chunkB6X3LN25_cjs.getSessionConfig; }
2284
2284
  });
2285
2285
  Object.defineProperty(exports, "loadSecrets", {
2286
2286
  enumerable: true,
2287
- get: function () { return chunkISKYUUP4_cjs.loadSecrets; }
2287
+ get: function () { return chunkB6X3LN25_cjs.loadSecrets; }
2288
2288
  });
2289
2289
  Object.defineProperty(exports, "resolveProvider", {
2290
2290
  enumerable: true,
2291
- get: function () { return chunkISKYUUP4_cjs.resolveProvider; }
2291
+ get: function () { return chunkB6X3LN25_cjs.resolveProvider; }
2292
2292
  });
2293
2293
  Object.defineProperty(exports, "setDbAdapter", {
2294
2294
  enumerable: true,
2295
- get: function () { return chunkISKYUUP4_cjs.setDbAdapter; }
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 chunkGYIJ3JJM_cjs.DrizzleAdapter; }
2391
+ get: function () { return chunkOIRG6ZRV_cjs.DrizzleAdapter; }
2392
2392
  });
2393
2393
  Object.defineProperty(exports, "collectionToDrizzleSchema", {
2394
2394
  enumerable: true,
2395
- get: function () { return chunkGYIJ3JJM_cjs.collectionToDrizzleSchema; }
2395
+ get: function () { return chunkOIRG6ZRV_cjs.collectionToDrizzleSchema; }
2396
2396
  });
2397
2397
  Object.defineProperty(exports, "createDatabase", {
2398
2398
  enumerable: true,
2399
- get: function () { return chunkGYIJ3JJM_cjs.createDatabase; }
2399
+ get: function () { return chunkOIRG6ZRV_cjs.createDatabase; }
2400
2400
  });
2401
2401
  Object.defineProperty(exports, "createDrizzleAdapter", {
2402
2402
  enumerable: true,
2403
- get: function () { return chunkGYIJ3JJM_cjs.createDrizzleAdapter; }
2403
+ get: function () { return chunkOIRG6ZRV_cjs.createDrizzleAdapter; }
2404
2404
  });
2405
2405
  Object.defineProperty(exports, "fieldToDrizzleType", {
2406
2406
  enumerable: true,
2407
- get: function () { return chunkGYIJ3JJM_cjs.fieldToDrizzleType; }
2407
+ get: function () { return chunkOIRG6ZRV_cjs.fieldToDrizzleType; }
2408
2408
  });
2409
2409
  Object.defineProperty(exports, "runMigrations", {
2410
2410
  enumerable: true,
2411
- get: function () { return chunkGYIJ3JJM_cjs.runMigrations; }
2411
+ get: function () { return chunkOIRG6ZRV_cjs.runMigrations; }
2412
2412
  });
2413
2413
  Object.defineProperty(exports, "seedDefaultRoles", {
2414
2414
  enumerable: true,
2415
- get: function () { return chunkGYIJ3JJM_cjs.seedDefaultRoles; }
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-AN2L2CJZ.js';
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-354ISGA4.js';
12
- export { AuditLogger, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext, createHonoApp, createLocalStorage, createRESTAPI, getAppSecret, getEncryptionKey, getSessionConfig, loadSecrets, resolveProvider, setDbAdapter } from './chunk-354ISGA4.js';
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-XHAAAEXX.js';
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';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkISKYUUP4_cjs = require('../chunk-ISKYUUP4.cjs');
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-GYIJ3JJM.cjs');
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 chunkISKYUUP4_cjs.createHonoApp; }
24
+ get: function () { return chunkB6X3LN25_cjs.createHonoApp; }
25
25
  });
26
26
  Object.defineProperty(exports, "createRESTAPI", {
27
27
  enumerable: true,
28
- get: function () { return chunkISKYUUP4_cjs.createRESTAPI; }
28
+ get: function () { return chunkB6X3LN25_cjs.createRESTAPI; }
29
29
  });
30
30
  //# sourceMappingURL=index.cjs.map
31
31
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { createHonoApp, createRESTAPI } from '../chunk-354ISGA4.js';
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-XHAAAEXX.js';
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyro-cms/core",
3
- "version": "0.10.2",
3
+ "version": "0.10.4",
4
4
  "description": "Astro-native headless CMS with multi-database adapters, multi-protocol APIs, and multi-vendor support",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -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"]}