@llmops/core 0.2.11 → 0.2.12-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- const require_db = require('./db-CqDD6Ydv.cjs');
1
+ const require_db = require('./db-BOe6mM51.cjs');
2
2
  let kysely = require("kysely");
3
3
 
4
4
  //#region src/db/bun-sqlite-dialect.ts
package/dist/db/index.cjs CHANGED
@@ -1,13 +1,16 @@
1
- const require_db = require('../db-CqDD6Ydv.cjs');
1
+ const require_db = require('../db-BOe6mM51.cjs');
2
+ const require_neon_dialect = require('../neon-dialect-BQey5lUw.cjs');
2
3
 
3
4
  exports.SCHEMA_METADATA = require_db.SCHEMA_METADATA;
4
5
  exports.configVariantsSchema = require_db.configVariantsSchema;
5
6
  exports.configsSchema = require_db.configsSchema;
6
7
  exports.createDatabase = require_db.createDatabase;
7
8
  exports.createDatabaseFromConnection = require_db.createDatabaseFromConnection;
9
+ exports.createNeonDialect = require_neon_dialect.createNeonDialect;
8
10
  exports.detectDatabaseType = require_db.detectDatabaseType;
9
11
  exports.environmentSecretsSchema = require_db.environmentSecretsSchema;
10
12
  exports.environmentsSchema = require_db.environmentsSchema;
13
+ exports.executeWithSchema = require_neon_dialect.executeWithSchema;
11
14
  exports.getMigrations = require_db.getMigrations;
12
15
  exports.llmRequestsSchema = require_db.llmRequestsSchema;
13
16
  exports.matchType = require_db.matchType;
@@ -1,2 +1,2 @@
1
- import { A as SCHEMA_METADATA, B as WorkspaceSettings, C as EnvironmentSecretsTable, D as LLMRequestsTable, E as LLMRequest, F as Updateable, G as environmentsSchema, H as configVariantsSchema, I as Variant, J as schemas, K as llmRequestsSchema, L as VariantVersion, M as TableName, N as TargetingRule, O as ProviderConfig, P as TargetingRulesTable, Q as workspaceSettingsSchema, R as VariantVersionsTable, S as EnvironmentSecret, T as Insertable, U as configsSchema, V as WorkspaceSettingsTable, W as environmentSecretsSchema, X as variantVersionsSchema, Y as targetingRulesSchema, Z as variantsSchema, _ as ConfigVariant, a as createDatabaseFromConnection, b as Database, c as MigrationResult, d as runAutoMigrations, f as parsePartialTableData, g as Config, h as validateTableData, i as createDatabase, j as Selectable, k as ProviderConfigsTable, l as getMigrations, m as validatePartialTableData, n as DatabaseOptions, o as detectDatabaseType, p as parseTableData, q as providerConfigsSchema, r as DatabaseType, s as MigrationOptions, t as DatabaseConnection, u as matchType, v as ConfigVariantsTable, w as EnvironmentsTable, x as Environment, y as ConfigsTable, z as VariantsTable } from "../index-BUlmWTh7.cjs";
2
- export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, ProviderConfig, ProviderConfigsTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, detectDatabaseType, environmentSecretsSchema, environmentsSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
1
+ import { $ as variantsSchema, A as ProviderConfig, B as VariantVersionsTable, C as Environment, D as Insertable, E as EnvironmentsTable, F as TargetingRule, G as configsSchema, H as WorkspaceSettings, I as TargetingRulesTable, J as llmRequestsSchema, K as environmentSecretsSchema, L as Updateable, M as SCHEMA_METADATA, N as Selectable, O as LLMRequest, P as TableName, Q as variantVersionsSchema, R as Variant, S as Database, T as EnvironmentSecretsTable, U as WorkspaceSettingsTable, V as VariantsTable, W as configVariantsSchema, X as schemas, Y as providerConfigsSchema, Z as targetingRulesSchema, _ as validateTableData, a as createDatabaseFromConnection, b as ConfigVariantsTable, c as executeWithSchema, d as getMigrations, et as workspaceSettingsSchema, f as matchType, g as validatePartialTableData, h as parseTableData, i as createDatabase, j as ProviderConfigsTable, k as LLMRequestsTable, l as MigrationOptions, m as parsePartialTableData, n as DatabaseOptions, o as detectDatabaseType, p as runAutoMigrations, q as environmentsSchema, r as DatabaseType, s as createNeonDialect, t as DatabaseConnection, u as MigrationResult, v as Config, w as EnvironmentSecret, x as ConfigsTable, y as ConfigVariant, z as VariantVersion } from "../index-DwZhaRvQ.cjs";
2
+ export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, ProviderConfig, ProviderConfigsTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
@@ -1,2 +1,2 @@
1
- import { A as SCHEMA_METADATA, B as WorkspaceSettings, C as EnvironmentSecretsTable, D as LLMRequestsTable, E as LLMRequest, F as Updateable, G as environmentsSchema, H as configVariantsSchema, I as Variant, J as schemas, K as llmRequestsSchema, L as VariantVersion, M as TableName, N as TargetingRule, O as ProviderConfig, P as TargetingRulesTable, Q as workspaceSettingsSchema, R as VariantVersionsTable, S as EnvironmentSecret, T as Insertable, U as configsSchema, V as WorkspaceSettingsTable, W as environmentSecretsSchema, X as variantVersionsSchema, Y as targetingRulesSchema, Z as variantsSchema, _ as ConfigVariant, a as createDatabaseFromConnection, b as Database, c as MigrationResult, d as runAutoMigrations, f as parsePartialTableData, g as Config, h as validateTableData, i as createDatabase, j as Selectable, k as ProviderConfigsTable, l as getMigrations, m as validatePartialTableData, n as DatabaseOptions, o as detectDatabaseType, p as parseTableData, q as providerConfigsSchema, r as DatabaseType, s as MigrationOptions, t as DatabaseConnection, u as matchType, v as ConfigVariantsTable, w as EnvironmentsTable, x as Environment, y as ConfigsTable, z as VariantsTable } from "../index-CkrtLH8W.mjs";
2
- export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, ProviderConfig, ProviderConfigsTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, detectDatabaseType, environmentSecretsSchema, environmentsSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
1
+ import { $ as variantsSchema, A as ProviderConfig, B as VariantVersionsTable, C as Environment, D as Insertable, E as EnvironmentsTable, F as TargetingRule, G as configsSchema, H as WorkspaceSettings, I as TargetingRulesTable, J as llmRequestsSchema, K as environmentSecretsSchema, L as Updateable, M as SCHEMA_METADATA, N as Selectable, O as LLMRequest, P as TableName, Q as variantVersionsSchema, R as Variant, S as Database, T as EnvironmentSecretsTable, U as WorkspaceSettingsTable, V as VariantsTable, W as configVariantsSchema, X as schemas, Y as providerConfigsSchema, Z as targetingRulesSchema, _ as validateTableData, a as createDatabaseFromConnection, b as ConfigVariantsTable, c as executeWithSchema, d as getMigrations, et as workspaceSettingsSchema, f as matchType, g as validatePartialTableData, h as parseTableData, i as createDatabase, j as ProviderConfigsTable, k as LLMRequestsTable, l as MigrationOptions, m as parsePartialTableData, n as DatabaseOptions, o as detectDatabaseType, p as runAutoMigrations, q as environmentsSchema, r as DatabaseType, s as createNeonDialect, t as DatabaseConnection, u as MigrationResult, v as Config, w as EnvironmentSecret, x as ConfigsTable, y as ConfigVariant, z as VariantVersion } from "../index-Bj69w0EU.mjs";
2
+ export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, ProviderConfig, ProviderConfigsTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
package/dist/db/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
- import { C as variantsSchema, S as variantVersionsSchema, _ as environmentsSchema, a as matchType, b as schemas, d as validatePartialTableData, f as validateTableData, g as environmentSecretsSchema, h as configsSchema, i as getMigrations, l as parsePartialTableData, m as configVariantsSchema, n as createDatabaseFromConnection, o as runAutoMigrations, p as SCHEMA_METADATA, r as detectDatabaseType, t as createDatabase, u as parseTableData, v as llmRequestsSchema, w as workspaceSettingsSchema, x as targetingRulesSchema, y as providerConfigsSchema } from "../db-BGDhJROC.mjs";
1
+ import { C as variantsSchema, S as variantVersionsSchema, _ as environmentsSchema, a as matchType, b as schemas, d as validatePartialTableData, f as validateTableData, g as environmentSecretsSchema, h as configsSchema, i as getMigrations, l as parsePartialTableData, m as configVariantsSchema, n as createDatabaseFromConnection, o as runAutoMigrations, p as SCHEMA_METADATA, r as detectDatabaseType, t as createDatabase, u as parseTableData, v as llmRequestsSchema, w as workspaceSettingsSchema, x as targetingRulesSchema, y as providerConfigsSchema } from "../db-DohlAqJU.mjs";
2
+ import { n as executeWithSchema, t as createNeonDialect } from "../neon-dialect-DySGBYUi.mjs";
2
3
 
3
- export { SCHEMA_METADATA, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, detectDatabaseType, environmentSecretsSchema, environmentsSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
4
+ export { SCHEMA_METADATA, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, providerConfigsSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
@@ -13458,36 +13458,38 @@ const getAuthClientOptions = (options) => {
13458
13458
 
13459
13459
  //#endregion
13460
13460
  //#region src/db/migrations.ts
13461
+ const postgresMap = {
13462
+ uuid: [
13463
+ "character varying",
13464
+ "varchar",
13465
+ "text",
13466
+ "uuid"
13467
+ ],
13468
+ text: [
13469
+ "character varying",
13470
+ "varchar",
13471
+ "text"
13472
+ ],
13473
+ timestamp: [
13474
+ "timestamptz",
13475
+ "timestamp",
13476
+ "date"
13477
+ ],
13478
+ jsonb: ["json", "jsonb"],
13479
+ integer: [
13480
+ "integer",
13481
+ "int4",
13482
+ "int",
13483
+ "smallint",
13484
+ "bigint",
13485
+ "int2",
13486
+ "int8"
13487
+ ],
13488
+ boolean: ["boolean", "bool"]
13489
+ };
13461
13490
  const typeMap = {
13462
- postgres: {
13463
- uuid: [
13464
- "character varying",
13465
- "varchar",
13466
- "text",
13467
- "uuid"
13468
- ],
13469
- text: [
13470
- "character varying",
13471
- "varchar",
13472
- "text"
13473
- ],
13474
- timestamp: [
13475
- "timestamptz",
13476
- "timestamp",
13477
- "date"
13478
- ],
13479
- jsonb: ["json", "jsonb"],
13480
- integer: [
13481
- "integer",
13482
- "int4",
13483
- "int",
13484
- "smallint",
13485
- "bigint",
13486
- "int2",
13487
- "int8"
13488
- ],
13489
- boolean: ["boolean", "bool"]
13490
- },
13491
+ postgres: postgresMap,
13492
+ neon: postgresMap,
13491
13493
  mysql: {
13492
13494
  text: ["varchar", "text"],
13493
13495
  timestamp: [
@@ -13551,18 +13553,17 @@ async function ensurePostgresSchemaExists(db, schema) {
13551
13553
  ) as exists
13552
13554
  `.execute(db)).rows[0]?.exists) {
13553
13555
  logger.info(`Creating PostgreSQL schema: ${schema}`);
13554
- await kysely.sql`CREATE SCHEMA IF NOT EXISTS ${kysely.sql.ref(schema)}`.execute(db);
13556
+ await kysely.sql`CREATE SCHEMA IF NOT EXISTS ${kysely.sql.id(schema)}`.execute(db);
13557
+ await kysely.sql`GRANT USAGE ON SCHEMA ${kysely.sql.id(schema)} TO PUBLIC`.execute(db);
13558
+ await kysely.sql`GRANT CREATE ON SCHEMA ${kysely.sql.id(schema)} TO PUBLIC`.execute(db);
13555
13559
  }
13556
13560
  } catch (error$47) {
13557
- logger.warn(`Could not ensure schema exists: ${error$47}`);
13558
- try {
13559
- await kysely.sql`CREATE SCHEMA IF NOT EXISTS ${kysely.sql.ref(schema)}`.execute(db);
13560
- } catch {}
13561
+ logger.warn({ error: error$47 }, "Failed to ensure PostgreSQL schema exists");
13561
13562
  }
13562
13563
  }
13563
13564
  async function getMigrations(db, dbType, options) {
13564
13565
  let currentSchema = "public";
13565
- if (dbType === "postgres") {
13566
+ if (dbType === "postgres" || dbType === "neon") {
13566
13567
  if (options?.schema) {
13567
13568
  await ensurePostgresSchemaExists(db, options.schema);
13568
13569
  currentSchema = options.schema;
@@ -13571,7 +13572,7 @@ async function getMigrations(db, dbType, options) {
13571
13572
  }
13572
13573
  const allTableMetadata = await db.introspection.getTables();
13573
13574
  let tableMetadata = allTableMetadata;
13574
- if (dbType === "postgres") try {
13575
+ if (dbType === "postgres" || dbType === "neon") try {
13575
13576
  const tablesInSchema = await kysely.sql`
13576
13577
  SELECT table_name
13577
13578
  FROM information_schema.tables
@@ -13620,36 +13621,42 @@ async function getMigrations(db, dbType, options) {
13620
13621
  return {
13621
13622
  uuid: {
13622
13623
  postgres: "uuid",
13624
+ neon: "uuid",
13623
13625
  mysql: "varchar(36)",
13624
13626
  sqlite: "text",
13625
13627
  mssql: "varchar(36)"
13626
13628
  },
13627
13629
  text: {
13628
13630
  postgres: "text",
13631
+ neon: "text",
13629
13632
  mysql: fieldConfig.unique ? "varchar(255)" : "text",
13630
13633
  sqlite: "text",
13631
13634
  mssql: fieldConfig.unique ? "varchar(255)" : "varchar(8000)"
13632
13635
  },
13633
13636
  timestamp: {
13634
13637
  postgres: "timestamptz",
13638
+ neon: "timestamptz",
13635
13639
  mysql: "timestamp(3)",
13636
13640
  sqlite: "date",
13637
13641
  mssql: kysely.sql`datetime2(3)`
13638
13642
  },
13639
13643
  jsonb: {
13640
13644
  postgres: "jsonb",
13645
+ neon: "jsonb",
13641
13646
  mysql: "json",
13642
13647
  sqlite: "text",
13643
13648
  mssql: "varchar(8000)"
13644
13649
  },
13645
13650
  boolean: {
13646
13651
  postgres: "boolean",
13652
+ neon: "boolean",
13647
13653
  mysql: "boolean",
13648
13654
  sqlite: "integer",
13649
13655
  mssql: kysely.sql`bit`
13650
13656
  },
13651
13657
  integer: {
13652
13658
  postgres: "integer",
13659
+ neon: "integer",
13653
13660
  mysql: "integer",
13654
13661
  sqlite: "integer",
13655
13662
  mssql: "integer"
@@ -13657,7 +13664,8 @@ async function getMigrations(db, dbType, options) {
13657
13664
  }[type]?.[dbType] || "text";
13658
13665
  }
13659
13666
  for (const table of toBeCreated) {
13660
- let builder = db.schema.createTable(table.table);
13667
+ const qualifiedTableName = (dbType === "postgres" || dbType === "neon") && options?.schema ? `${options.schema}.${table.table}` : table.table;
13668
+ let builder = db.schema.createTable(qualifiedTableName);
13661
13669
  for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13662
13670
  const type = getColumnType(fieldConfig, fieldName);
13663
13671
  builder = builder.addColumn(fieldName, type, (col) => {
@@ -13678,24 +13686,35 @@ async function getMigrations(db, dbType, options) {
13678
13686
  }
13679
13687
  migrations.push(builder);
13680
13688
  }
13681
- for (const table of toBeAdded) for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13682
- const type = getColumnType(fieldConfig, fieldName);
13683
- const builder = db.schema.alterTable(table.table).addColumn(fieldName, type, (col) => {
13684
- let c = col;
13685
- if (!fieldConfig.nullable) c = c.notNull();
13686
- if (fieldConfig.references) {
13687
- const refTable = fieldConfig.references.table;
13688
- const refColumn = fieldConfig.references.column;
13689
- c = c.references(`${refTable}.${refColumn}`).onDelete("cascade");
13690
- }
13691
- if (fieldConfig.unique) c = c.unique();
13692
- if (fieldConfig.default === "now()" && dbType !== "sqlite") if (dbType === "mysql") c = c.defaultTo(kysely.sql`CURRENT_TIMESTAMP(3)`);
13693
- else c = c.defaultTo(kysely.sql`CURRENT_TIMESTAMP`);
13694
- return c;
13695
- });
13696
- migrations.push(builder);
13689
+ for (const table of toBeAdded) {
13690
+ const qualifiedTableName = (dbType === "postgres" || dbType === "neon") && options?.schema ? `${options.schema}.${table.table}` : table.table;
13691
+ for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13692
+ const type = getColumnType(fieldConfig, fieldName);
13693
+ const builder = db.schema.alterTable(qualifiedTableName).addColumn(fieldName, type, (col) => {
13694
+ let c = col;
13695
+ if (!fieldConfig.nullable) c = c.notNull();
13696
+ if (fieldConfig.references) {
13697
+ const refTable = fieldConfig.references.table;
13698
+ const refColumn = fieldConfig.references.column;
13699
+ c = c.references(`${refTable}.${refColumn}`).onDelete("cascade");
13700
+ }
13701
+ if (fieldConfig.unique) c = c.unique();
13702
+ if (fieldConfig.default === "now()" && dbType !== "sqlite") if (dbType === "mysql") c = c.defaultTo(kysely.sql`CURRENT_TIMESTAMP(3)`);
13703
+ else c = c.defaultTo(kysely.sql`CURRENT_TIMESTAMP`);
13704
+ return c;
13705
+ });
13706
+ migrations.push(builder);
13707
+ }
13697
13708
  }
13698
- const { toBeAdded: authChangesToBeAdded, toBeCreated: authChangesToBeCreated, runMigrations: runAuthMigrations } = await (0, better_auth_db.getMigrations)(getAuthClientOptions({ database: options?.rawConnection }));
13709
+ if (dbType === "postgres") try {
13710
+ await kysely.sql`SET search_path TO "${options?.schema ?? "llmops"}"`.execute(db);
13711
+ } catch (error$47) {
13712
+ logger.warn({ error: error$47 }, "Failed to set search_path for Better Auth migrations");
13713
+ }
13714
+ const { toBeAdded: authChangesToBeAdded, toBeCreated: authChangesToBeCreated, runMigrations: runAuthMigrations } = await (0, better_auth_db.getMigrations)(getAuthClientOptions({ database: {
13715
+ db,
13716
+ type: dbType === "neon" ? "postgres" : dbType
13717
+ } }));
13699
13718
  async function runMigrations() {
13700
13719
  for (const migration of migrations) await migration.execute();
13701
13720
  await runAuthMigrations();
@@ -13800,13 +13819,14 @@ function createDatabase(connection) {
13800
13819
  * Auto-detect database type from connection object
13801
13820
  */
13802
13821
  function detectDatabaseType(db) {
13803
- if (!db || typeof db !== "object") return null;
13822
+ if (!db || typeof db !== "object" && typeof db !== "function") return null;
13804
13823
  if ("createDriver" in db) {
13805
13824
  if (db instanceof kysely.SqliteDialect) return "sqlite";
13806
13825
  if (db instanceof kysely.MysqlDialect) return "mysql";
13807
13826
  if (db instanceof kysely.PostgresDialect) return "postgres";
13808
13827
  if (db instanceof kysely.MssqlDialect) return "mssql";
13809
13828
  }
13829
+ if (typeof db === "function" && db.name === "templateFn") return "neon";
13810
13830
  if ("aggregate" in db) return "sqlite";
13811
13831
  if ("getConnection" in db) return "mysql";
13812
13832
  if ("connect" in db) return "postgres";
@@ -13829,12 +13849,12 @@ async function createDatabaseFromConnection(rawConnection, options) {
13829
13849
  case "sqlite":
13830
13850
  if ("aggregate" in rawConnection && !("createSession" in rawConnection)) dialect = new kysely.SqliteDialect({ database: rawConnection });
13831
13851
  else if ("fileControl" in rawConnection) {
13832
- const { BunSqliteDialect } = await Promise.resolve().then(() => require("./bun-sqlite-dialect-t1xHHJDz.cjs"));
13852
+ const { BunSqliteDialect } = await Promise.resolve().then(() => require("./bun-sqlite-dialect-Bxz4B97L.cjs"));
13833
13853
  dialect = new BunSqliteDialect({ database: rawConnection });
13834
13854
  } else if ("createSession" in rawConnection && typeof window === "undefined") try {
13835
13855
  const { DatabaseSync } = await import("node:sqlite");
13836
13856
  if (rawConnection instanceof DatabaseSync) {
13837
- const { NodeSqliteDialect } = await Promise.resolve().then(() => require("./node-sqlite-dialect-D4V5e49r.cjs"));
13857
+ const { NodeSqliteDialect } = await Promise.resolve().then(() => require("./node-sqlite-dialect-N8j5UsT-.cjs"));
13838
13858
  dialect = new NodeSqliteDialect({ database: rawConnection });
13839
13859
  }
13840
13860
  } catch {}
@@ -13850,6 +13870,23 @@ async function createDatabaseFromConnection(rawConnection, options) {
13850
13870
  }
13851
13871
  });
13852
13872
  break;
13873
+ case "neon":
13874
+ if (schema && schema !== "public") {
13875
+ const { Pool, neonConfig } = await import("@neondatabase/serverless");
13876
+ const { default: ws } = await import("ws");
13877
+ neonConfig.webSocketConstructor = ws;
13878
+ const connectionString = typeof rawConnection === "string" ? rawConnection : process.env.NEON_PG_URL || "";
13879
+ dialect = new kysely.PostgresDialect({
13880
+ pool: new Pool({ connectionString: connectionString.includes("currentSchema") ? connectionString.split("currentSchema=")[1].split("&")[0] === "public" ? connectionString.replace(/currentSchema=[^&]*&?/, "") : connectionString : connectionString }),
13881
+ onCreateConnection: async (connection) => {
13882
+ await connection.executeQuery(kysely.CompiledQuery.raw(`SET search_path TO "${schema}"`));
13883
+ }
13884
+ });
13885
+ } else {
13886
+ const { createNeonDialect } = await Promise.resolve().then(() => require("./neon-dialect-C0GZuGot.cjs"));
13887
+ dialect = createNeonDialect(rawConnection);
13888
+ }
13889
+ break;
13853
13890
  case "mssql":
13854
13891
  if ("createDriver" in rawConnection) dialect = rawConnection;
13855
13892
  break;
@@ -13434,36 +13434,38 @@ const getAuthClientOptions = (options) => {
13434
13434
 
13435
13435
  //#endregion
13436
13436
  //#region src/db/migrations.ts
13437
+ const postgresMap = {
13438
+ uuid: [
13439
+ "character varying",
13440
+ "varchar",
13441
+ "text",
13442
+ "uuid"
13443
+ ],
13444
+ text: [
13445
+ "character varying",
13446
+ "varchar",
13447
+ "text"
13448
+ ],
13449
+ timestamp: [
13450
+ "timestamptz",
13451
+ "timestamp",
13452
+ "date"
13453
+ ],
13454
+ jsonb: ["json", "jsonb"],
13455
+ integer: [
13456
+ "integer",
13457
+ "int4",
13458
+ "int",
13459
+ "smallint",
13460
+ "bigint",
13461
+ "int2",
13462
+ "int8"
13463
+ ],
13464
+ boolean: ["boolean", "bool"]
13465
+ };
13437
13466
  const typeMap = {
13438
- postgres: {
13439
- uuid: [
13440
- "character varying",
13441
- "varchar",
13442
- "text",
13443
- "uuid"
13444
- ],
13445
- text: [
13446
- "character varying",
13447
- "varchar",
13448
- "text"
13449
- ],
13450
- timestamp: [
13451
- "timestamptz",
13452
- "timestamp",
13453
- "date"
13454
- ],
13455
- jsonb: ["json", "jsonb"],
13456
- integer: [
13457
- "integer",
13458
- "int4",
13459
- "int",
13460
- "smallint",
13461
- "bigint",
13462
- "int2",
13463
- "int8"
13464
- ],
13465
- boolean: ["boolean", "bool"]
13466
- },
13467
+ postgres: postgresMap,
13468
+ neon: postgresMap,
13467
13469
  mysql: {
13468
13470
  text: ["varchar", "text"],
13469
13471
  timestamp: [
@@ -13527,18 +13529,17 @@ async function ensurePostgresSchemaExists(db, schema) {
13527
13529
  ) as exists
13528
13530
  `.execute(db)).rows[0]?.exists) {
13529
13531
  logger.info(`Creating PostgreSQL schema: ${schema}`);
13530
- await sql`CREATE SCHEMA IF NOT EXISTS ${sql.ref(schema)}`.execute(db);
13532
+ await sql`CREATE SCHEMA IF NOT EXISTS ${sql.id(schema)}`.execute(db);
13533
+ await sql`GRANT USAGE ON SCHEMA ${sql.id(schema)} TO PUBLIC`.execute(db);
13534
+ await sql`GRANT CREATE ON SCHEMA ${sql.id(schema)} TO PUBLIC`.execute(db);
13531
13535
  }
13532
13536
  } catch (error$47) {
13533
- logger.warn(`Could not ensure schema exists: ${error$47}`);
13534
- try {
13535
- await sql`CREATE SCHEMA IF NOT EXISTS ${sql.ref(schema)}`.execute(db);
13536
- } catch {}
13537
+ logger.warn({ error: error$47 }, "Failed to ensure PostgreSQL schema exists");
13537
13538
  }
13538
13539
  }
13539
13540
  async function getMigrations$1(db, dbType, options) {
13540
13541
  let currentSchema = "public";
13541
- if (dbType === "postgres") {
13542
+ if (dbType === "postgres" || dbType === "neon") {
13542
13543
  if (options?.schema) {
13543
13544
  await ensurePostgresSchemaExists(db, options.schema);
13544
13545
  currentSchema = options.schema;
@@ -13547,7 +13548,7 @@ async function getMigrations$1(db, dbType, options) {
13547
13548
  }
13548
13549
  const allTableMetadata = await db.introspection.getTables();
13549
13550
  let tableMetadata = allTableMetadata;
13550
- if (dbType === "postgres") try {
13551
+ if (dbType === "postgres" || dbType === "neon") try {
13551
13552
  const tablesInSchema = await sql`
13552
13553
  SELECT table_name
13553
13554
  FROM information_schema.tables
@@ -13596,36 +13597,42 @@ async function getMigrations$1(db, dbType, options) {
13596
13597
  return {
13597
13598
  uuid: {
13598
13599
  postgres: "uuid",
13600
+ neon: "uuid",
13599
13601
  mysql: "varchar(36)",
13600
13602
  sqlite: "text",
13601
13603
  mssql: "varchar(36)"
13602
13604
  },
13603
13605
  text: {
13604
13606
  postgres: "text",
13607
+ neon: "text",
13605
13608
  mysql: fieldConfig.unique ? "varchar(255)" : "text",
13606
13609
  sqlite: "text",
13607
13610
  mssql: fieldConfig.unique ? "varchar(255)" : "varchar(8000)"
13608
13611
  },
13609
13612
  timestamp: {
13610
13613
  postgres: "timestamptz",
13614
+ neon: "timestamptz",
13611
13615
  mysql: "timestamp(3)",
13612
13616
  sqlite: "date",
13613
13617
  mssql: sql`datetime2(3)`
13614
13618
  },
13615
13619
  jsonb: {
13616
13620
  postgres: "jsonb",
13621
+ neon: "jsonb",
13617
13622
  mysql: "json",
13618
13623
  sqlite: "text",
13619
13624
  mssql: "varchar(8000)"
13620
13625
  },
13621
13626
  boolean: {
13622
13627
  postgres: "boolean",
13628
+ neon: "boolean",
13623
13629
  mysql: "boolean",
13624
13630
  sqlite: "integer",
13625
13631
  mssql: sql`bit`
13626
13632
  },
13627
13633
  integer: {
13628
13634
  postgres: "integer",
13635
+ neon: "integer",
13629
13636
  mysql: "integer",
13630
13637
  sqlite: "integer",
13631
13638
  mssql: "integer"
@@ -13633,7 +13640,8 @@ async function getMigrations$1(db, dbType, options) {
13633
13640
  }[type]?.[dbType] || "text";
13634
13641
  }
13635
13642
  for (const table of toBeCreated) {
13636
- let builder = db.schema.createTable(table.table);
13643
+ const qualifiedTableName = (dbType === "postgres" || dbType === "neon") && options?.schema ? `${options.schema}.${table.table}` : table.table;
13644
+ let builder = db.schema.createTable(qualifiedTableName);
13637
13645
  for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13638
13646
  const type = getColumnType(fieldConfig, fieldName);
13639
13647
  builder = builder.addColumn(fieldName, type, (col) => {
@@ -13654,24 +13662,35 @@ async function getMigrations$1(db, dbType, options) {
13654
13662
  }
13655
13663
  migrations.push(builder);
13656
13664
  }
13657
- for (const table of toBeAdded) for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13658
- const type = getColumnType(fieldConfig, fieldName);
13659
- const builder = db.schema.alterTable(table.table).addColumn(fieldName, type, (col) => {
13660
- let c = col;
13661
- if (!fieldConfig.nullable) c = c.notNull();
13662
- if (fieldConfig.references) {
13663
- const refTable = fieldConfig.references.table;
13664
- const refColumn = fieldConfig.references.column;
13665
- c = c.references(`${refTable}.${refColumn}`).onDelete("cascade");
13666
- }
13667
- if (fieldConfig.unique) c = c.unique();
13668
- if (fieldConfig.default === "now()" && dbType !== "sqlite") if (dbType === "mysql") c = c.defaultTo(sql`CURRENT_TIMESTAMP(3)`);
13669
- else c = c.defaultTo(sql`CURRENT_TIMESTAMP`);
13670
- return c;
13671
- });
13672
- migrations.push(builder);
13665
+ for (const table of toBeAdded) {
13666
+ const qualifiedTableName = (dbType === "postgres" || dbType === "neon") && options?.schema ? `${options.schema}.${table.table}` : table.table;
13667
+ for (const [fieldName, fieldConfig] of Object.entries(table.fields)) {
13668
+ const type = getColumnType(fieldConfig, fieldName);
13669
+ const builder = db.schema.alterTable(qualifiedTableName).addColumn(fieldName, type, (col) => {
13670
+ let c = col;
13671
+ if (!fieldConfig.nullable) c = c.notNull();
13672
+ if (fieldConfig.references) {
13673
+ const refTable = fieldConfig.references.table;
13674
+ const refColumn = fieldConfig.references.column;
13675
+ c = c.references(`${refTable}.${refColumn}`).onDelete("cascade");
13676
+ }
13677
+ if (fieldConfig.unique) c = c.unique();
13678
+ if (fieldConfig.default === "now()" && dbType !== "sqlite") if (dbType === "mysql") c = c.defaultTo(sql`CURRENT_TIMESTAMP(3)`);
13679
+ else c = c.defaultTo(sql`CURRENT_TIMESTAMP`);
13680
+ return c;
13681
+ });
13682
+ migrations.push(builder);
13683
+ }
13673
13684
  }
13674
- const { toBeAdded: authChangesToBeAdded, toBeCreated: authChangesToBeCreated, runMigrations: runAuthMigrations } = await getMigrations(getAuthClientOptions({ database: options?.rawConnection }));
13685
+ if (dbType === "postgres") try {
13686
+ await sql`SET search_path TO "${options?.schema ?? "llmops"}"`.execute(db);
13687
+ } catch (error$47) {
13688
+ logger.warn({ error: error$47 }, "Failed to set search_path for Better Auth migrations");
13689
+ }
13690
+ const { toBeAdded: authChangesToBeAdded, toBeCreated: authChangesToBeCreated, runMigrations: runAuthMigrations } = await getMigrations(getAuthClientOptions({ database: {
13691
+ db,
13692
+ type: dbType === "neon" ? "postgres" : dbType
13693
+ } }));
13675
13694
  async function runMigrations() {
13676
13695
  for (const migration of migrations) await migration.execute();
13677
13696
  await runAuthMigrations();
@@ -13776,13 +13795,14 @@ function createDatabase(connection) {
13776
13795
  * Auto-detect database type from connection object
13777
13796
  */
13778
13797
  function detectDatabaseType(db) {
13779
- if (!db || typeof db !== "object") return null;
13798
+ if (!db || typeof db !== "object" && typeof db !== "function") return null;
13780
13799
  if ("createDriver" in db) {
13781
13800
  if (db instanceof SqliteDialect) return "sqlite";
13782
13801
  if (db instanceof MysqlDialect) return "mysql";
13783
13802
  if (db instanceof PostgresDialect) return "postgres";
13784
13803
  if (db instanceof MssqlDialect) return "mssql";
13785
13804
  }
13805
+ if (typeof db === "function" && db.name === "templateFn") return "neon";
13786
13806
  if ("aggregate" in db) return "sqlite";
13787
13807
  if ("getConnection" in db) return "mysql";
13788
13808
  if ("connect" in db) return "postgres";
@@ -13805,12 +13825,12 @@ async function createDatabaseFromConnection(rawConnection, options) {
13805
13825
  case "sqlite":
13806
13826
  if ("aggregate" in rawConnection && !("createSession" in rawConnection)) dialect = new SqliteDialect({ database: rawConnection });
13807
13827
  else if ("fileControl" in rawConnection) {
13808
- const { BunSqliteDialect } = await import("./bun-sqlite-dialect-YVmcpOaa.mjs");
13828
+ const { BunSqliteDialect } = await import("./bun-sqlite-dialect-CHpTFgAo.mjs");
13809
13829
  dialect = new BunSqliteDialect({ database: rawConnection });
13810
13830
  } else if ("createSession" in rawConnection && typeof window === "undefined") try {
13811
13831
  const { DatabaseSync } = await import("node:sqlite");
13812
13832
  if (rawConnection instanceof DatabaseSync) {
13813
- const { NodeSqliteDialect } = await import("./node-sqlite-dialect-rrsskSJp.mjs");
13833
+ const { NodeSqliteDialect } = await import("./node-sqlite-dialect-B5oKhOm1.mjs");
13814
13834
  dialect = new NodeSqliteDialect({ database: rawConnection });
13815
13835
  }
13816
13836
  } catch {}
@@ -13826,6 +13846,23 @@ async function createDatabaseFromConnection(rawConnection, options) {
13826
13846
  }
13827
13847
  });
13828
13848
  break;
13849
+ case "neon":
13850
+ if (schema && schema !== "public") {
13851
+ const { Pool, neonConfig } = await import("@neondatabase/serverless");
13852
+ const { default: ws } = await import("ws");
13853
+ neonConfig.webSocketConstructor = ws;
13854
+ const connectionString = typeof rawConnection === "string" ? rawConnection : process.env.NEON_PG_URL || "";
13855
+ dialect = new PostgresDialect({
13856
+ pool: new Pool({ connectionString: connectionString.includes("currentSchema") ? connectionString.split("currentSchema=")[1].split("&")[0] === "public" ? connectionString.replace(/currentSchema=[^&]*&?/, "") : connectionString : connectionString }),
13857
+ onCreateConnection: async (connection) => {
13858
+ await connection.executeQuery(CompiledQuery.raw(`SET search_path TO "${schema}"`));
13859
+ }
13860
+ });
13861
+ } else {
13862
+ const { createNeonDialect } = await import("./neon-dialect-Hmo08nUq.mjs");
13863
+ dialect = createNeonDialect(rawConnection);
13864
+ }
13865
+ break;
13829
13866
  case "mssql":
13830
13867
  if ("createDriver" in rawConnection) dialect = rawConnection;
13831
13868
  break;