@llmops/core 0.2.11 → 0.2.12-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{bun-sqlite-dialect-t1xHHJDz.cjs → bun-sqlite-dialect-Bxz4B97L.cjs} +1 -1
- package/dist/db/index.cjs +4 -1
- package/dist/db/index.d.cts +2 -2
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +3 -2
- package/dist/{db-CqDD6Ydv.cjs → db-BOe6mM51.cjs} +94 -57
- package/dist/{db-BGDhJROC.mjs → db-DohlAqJU.mjs} +94 -57
- package/dist/{index-BUlmWTh7.d.cts → index-BO5Rse5J.d.mts} +28 -7
- package/dist/{index-CkrtLH8W.d.mts → index-DwZhaRvQ.d.cts} +28 -7
- package/dist/index.cjs +4 -1
- package/dist/index.d.cts +493 -493
- package/dist/index.d.mts +493 -493
- package/dist/index.mjs +3 -2
- package/dist/neon-dialect-BQey5lUw.cjs +42 -0
- package/dist/neon-dialect-C0GZuGot.cjs +3 -0
- package/dist/neon-dialect-DySGBYUi.mjs +30 -0
- package/dist/neon-dialect-Hmo08nUq.mjs +3 -0
- package/dist/{node-sqlite-dialect-D4V5e49r.cjs → node-sqlite-dialect-N8j5UsT-.cjs} +1 -1
- package/package.json +7 -2
- /package/dist/{bun-sqlite-dialect-YVmcpOaa.mjs → bun-sqlite-dialect-CHpTFgAo.mjs} +0 -0
- /package/dist/{node-sqlite-dialect-rrsskSJp.mjs → node-sqlite-dialect-B5oKhOm1.mjs} +0 -0
package/dist/db/index.cjs
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
const require_db = require('../db-
|
|
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;
|
package/dist/db/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
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 };
|
package/dist/db/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as
|
|
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-BO5Rse5J.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-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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)
|
|
13682
|
-
const
|
|
13683
|
-
const
|
|
13684
|
-
|
|
13685
|
-
|
|
13686
|
-
|
|
13687
|
-
|
|
13688
|
-
|
|
13689
|
-
|
|
13690
|
-
|
|
13691
|
-
|
|
13692
|
-
|
|
13693
|
-
|
|
13694
|
-
|
|
13695
|
-
|
|
13696
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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)
|
|
13658
|
-
const
|
|
13659
|
-
const
|
|
13660
|
-
|
|
13661
|
-
|
|
13662
|
-
|
|
13663
|
-
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
|
|
13669
|
-
|
|
13670
|
-
|
|
13671
|
-
|
|
13672
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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;
|