@llmops/core 0.4.8-beta.8 → 0.5.0-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.
- package/dist/{bun-sqlite-dialect-CZ9G39Hw.cjs → bun-sqlite-dialect-gGK75m-T.cjs} +1 -1
- package/dist/db/index.cjs +2 -5
- package/dist/db/index.d.cts +2 -2
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +2 -2
- package/dist/{db-Bsofxq5N.cjs → db-B6s2Fj5e.cjs} +18 -286
- package/dist/{db-BFaJfeYI.mjs → db-DdV835WT.mjs} +17 -267
- package/dist/{index-BvU4Gv3C.d.mts → index-BtZBaB4H.d.cts} +3 -39
- package/dist/{index-BYhMgUES.d.cts → index-DkZvY6Q3.d.mts} +3 -39
- package/dist/index.cjs +21 -8
- package/dist/index.d.cts +97 -46
- package/dist/index.d.mts +97 -46
- package/dist/index.mjs +21 -5
- package/dist/{neon-dialect-C0wJAG1X.cjs → neon-dialect-aLfG_zN7.cjs} +1 -1
- package/dist/{neon-dialect-E2P4iCXQ.cjs → neon-dialect-fjqFddrY.cjs} +1 -1
- package/dist/{node-sqlite-dialect-eD-MKapr.cjs → node-sqlite-dialect-DR6hDh7D.cjs} +1 -1
- package/package.json +2 -3
package/dist/db/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_db = require('../db-
|
|
2
|
-
const require_neon_dialect = require('../neon-dialect-
|
|
1
|
+
const require_db = require('../db-B6s2Fj5e.cjs');
|
|
2
|
+
const require_neon_dialect = require('../neon-dialect-fjqFddrY.cjs');
|
|
3
3
|
|
|
4
4
|
exports.SCHEMA_METADATA = require_db.SCHEMA_METADATA;
|
|
5
5
|
exports.configVariantsSchema = require_db.configVariantsSchema;
|
|
@@ -7,7 +7,6 @@ exports.configsSchema = require_db.configsSchema;
|
|
|
7
7
|
exports.createDatabase = require_db.createDatabase;
|
|
8
8
|
exports.createDatabaseFromConnection = require_db.createDatabaseFromConnection;
|
|
9
9
|
exports.createNeonDialect = require_neon_dialect.createNeonDialect;
|
|
10
|
-
exports.createNeonSqlFunction = require_db.createNeonSqlFunction;
|
|
11
10
|
exports.datasetRecordsSchema = require_db.datasetRecordsSchema;
|
|
12
11
|
exports.datasetVersionRecordsSchema = require_db.datasetVersionRecordsSchema;
|
|
13
12
|
exports.datasetVersionsSchema = require_db.datasetVersionsSchema;
|
|
@@ -16,7 +15,6 @@ exports.detectDatabaseType = require_db.detectDatabaseType;
|
|
|
16
15
|
exports.environmentSecretsSchema = require_db.environmentSecretsSchema;
|
|
17
16
|
exports.environmentsSchema = require_db.environmentsSchema;
|
|
18
17
|
exports.executeWithSchema = require_neon_dialect.executeWithSchema;
|
|
19
|
-
exports.generatePostgresSchemaSQL = require_db.generatePostgresSchemaSQL;
|
|
20
18
|
exports.getMigrations = require_db.getMigrations;
|
|
21
19
|
exports.guardrailConfigsSchema = require_db.guardrailConfigsSchema;
|
|
22
20
|
exports.llmRequestsSchema = require_db.llmRequestsSchema;
|
|
@@ -30,7 +28,6 @@ exports.playgroundsSchema = require_db.playgroundsSchema;
|
|
|
30
28
|
exports.providerConfigsSchema = require_db.providerConfigsSchema;
|
|
31
29
|
exports.providerGuardrailOverridesSchema = require_db.providerGuardrailOverridesSchema;
|
|
32
30
|
exports.runAutoMigrations = require_db.runAutoMigrations;
|
|
33
|
-
exports.runSchemaSQL = require_db.runSchemaSQL;
|
|
34
31
|
exports.schemas = require_db.schemas;
|
|
35
32
|
exports.targetingRulesSchema = require_db.targetingRulesSchema;
|
|
36
33
|
exports.validatePartialTableData = require_db.validatePartialTableData;
|
package/dist/db/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Dataset, DatasetRecord, DatasetRecordsTable, DatasetVersion, DatasetVersionRecord, DatasetVersionRecordsTable, DatasetVersionsTable, DatasetsTable, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, GuardrailConfig, GuardrailConfigsTable, GuardrailResult, GuardrailResults, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, Playground, PlaygroundColumn, PlaygroundResult, PlaygroundResultsTable, PlaygroundRun, PlaygroundRunsTable, PlaygroundsTable, ProviderConfig, ProviderConfigsTable, ProviderGuardrailOverride, ProviderGuardrailOverridesTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect,
|
|
1
|
+
import { $ as SCHEMA_METADATA, A as DatasetsTable, At as variantsSchema, B as LLMRequest, C as Dataset, Ct as playgroundRunsSchema, D as DatasetVersionRecord, Dt as schemas, E as DatasetVersion, Et as providerGuardrailOverridesSchema, F as GuardrailConfig, G as PlaygroundResultsTable, H as Playground, I as GuardrailConfigsTable, J as PlaygroundsTable, K as PlaygroundRun, L as GuardrailResult, M as EnvironmentSecret, N as EnvironmentSecretsTable, O as DatasetVersionRecordsTable, Ot as targetingRulesSchema, P as EnvironmentsTable, Q as ProviderGuardrailOverridesTable, R as GuardrailResults, S as Database, St as playgroundResultsSchema, T as DatasetRecordsTable, Tt as providerConfigsSchema, U as PlaygroundColumn, V as LLMRequestsTable, W as PlaygroundResult, X as ProviderConfigsTable, Y as ProviderConfig, Z as ProviderGuardrailOverride, _ as validateTableData, _t as environmentSecretsSchema, a as createDatabaseFromConnection, at as Variant, b as ConfigVariantsTable, bt as llmRequestsSchema, c as executeWithSchema, ct as VariantsTable, d as getMigrations, dt as configVariantsSchema, et as Selectable, f as matchType, ft as configsSchema, g as validatePartialTableData, gt as datasetsSchema, h as parseTableData, ht as datasetVersionsSchema, i as createDatabase, it as Updateable, j as Environment, jt as workspaceSettingsSchema, k as DatasetVersionsTable, kt as variantVersionsSchema, l as MigrationOptions, lt as WorkspaceSettings, m as parsePartialTableData, mt as datasetVersionRecordsSchema, n as DatabaseOptions, nt as TargetingRule, o as detectDatabaseType, ot as VariantVersion, p as runAutoMigrations, pt as datasetRecordsSchema, q as PlaygroundRunsTable, r as DatabaseType, rt as TargetingRulesTable, s as createNeonDialect, st as VariantVersionsTable, t as DatabaseConnection, tt as TableName, u as MigrationResult, ut as WorkspaceSettingsTable, v as Config, vt as environmentsSchema, w as DatasetRecord, wt as playgroundsSchema, x as ConfigsTable, xt as playgroundColumnSchema, y as ConfigVariant, yt as guardrailConfigsSchema, z as Insertable } from "../index-BtZBaB4H.cjs";
|
|
2
|
+
export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Dataset, DatasetRecord, DatasetRecordsTable, DatasetVersion, DatasetVersionRecord, DatasetVersionRecordsTable, DatasetVersionsTable, DatasetsTable, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, GuardrailConfig, GuardrailConfigsTable, GuardrailResult, GuardrailResults, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, Playground, PlaygroundColumn, PlaygroundResult, PlaygroundResultsTable, PlaygroundRun, PlaygroundRunsTable, PlaygroundsTable, ProviderConfig, ProviderConfigsTable, ProviderGuardrailOverride, ProviderGuardrailOverridesTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, datasetRecordsSchema, datasetVersionRecordsSchema, datasetVersionsSchema, datasetsSchema, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, guardrailConfigsSchema, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, playgroundColumnSchema, playgroundResultsSchema, playgroundRunsSchema, playgroundsSchema, providerConfigsSchema, providerGuardrailOverridesSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
|
package/dist/db/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Dataset, DatasetRecord, DatasetRecordsTable, DatasetVersion, DatasetVersionRecord, DatasetVersionRecordsTable, DatasetVersionsTable, DatasetsTable, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, GuardrailConfig, GuardrailConfigsTable, GuardrailResult, GuardrailResults, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, Playground, PlaygroundColumn, PlaygroundResult, PlaygroundResultsTable, PlaygroundRun, PlaygroundRunsTable, PlaygroundsTable, ProviderConfig, ProviderConfigsTable, ProviderGuardrailOverride, ProviderGuardrailOverridesTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect,
|
|
1
|
+
import { $ as SCHEMA_METADATA, A as DatasetsTable, At as variantsSchema, B as LLMRequest, C as Dataset, Ct as playgroundRunsSchema, D as DatasetVersionRecord, Dt as schemas, E as DatasetVersion, Et as providerGuardrailOverridesSchema, F as GuardrailConfig, G as PlaygroundResultsTable, H as Playground, I as GuardrailConfigsTable, J as PlaygroundsTable, K as PlaygroundRun, L as GuardrailResult, M as EnvironmentSecret, N as EnvironmentSecretsTable, O as DatasetVersionRecordsTable, Ot as targetingRulesSchema, P as EnvironmentsTable, Q as ProviderGuardrailOverridesTable, R as GuardrailResults, S as Database, St as playgroundResultsSchema, T as DatasetRecordsTable, Tt as providerConfigsSchema, U as PlaygroundColumn, V as LLMRequestsTable, W as PlaygroundResult, X as ProviderConfigsTable, Y as ProviderConfig, Z as ProviderGuardrailOverride, _ as validateTableData, _t as environmentSecretsSchema, a as createDatabaseFromConnection, at as Variant, b as ConfigVariantsTable, bt as llmRequestsSchema, c as executeWithSchema, ct as VariantsTable, d as getMigrations, dt as configVariantsSchema, et as Selectable, f as matchType, ft as configsSchema, g as validatePartialTableData, gt as datasetsSchema, h as parseTableData, ht as datasetVersionsSchema, i as createDatabase, it as Updateable, j as Environment, jt as workspaceSettingsSchema, k as DatasetVersionsTable, kt as variantVersionsSchema, l as MigrationOptions, lt as WorkspaceSettings, m as parsePartialTableData, mt as datasetVersionRecordsSchema, n as DatabaseOptions, nt as TargetingRule, o as detectDatabaseType, ot as VariantVersion, p as runAutoMigrations, pt as datasetRecordsSchema, q as PlaygroundRunsTable, r as DatabaseType, rt as TargetingRulesTable, s as createNeonDialect, st as VariantVersionsTable, t as DatabaseConnection, tt as TableName, u as MigrationResult, ut as WorkspaceSettingsTable, v as Config, vt as environmentsSchema, w as DatasetRecord, wt as playgroundsSchema, x as ConfigsTable, xt as playgroundColumnSchema, y as ConfigVariant, yt as guardrailConfigsSchema, z as Insertable } from "../index-DkZvY6Q3.mjs";
|
|
2
|
+
export { Config, ConfigVariant, ConfigVariantsTable, ConfigsTable, Database, DatabaseConnection, DatabaseOptions, DatabaseType, Dataset, DatasetRecord, DatasetRecordsTable, DatasetVersion, DatasetVersionRecord, DatasetVersionRecordsTable, DatasetVersionsTable, DatasetsTable, Environment, EnvironmentSecret, EnvironmentSecretsTable, EnvironmentsTable, GuardrailConfig, GuardrailConfigsTable, GuardrailResult, GuardrailResults, Insertable, LLMRequest, LLMRequestsTable, MigrationOptions, MigrationResult, Playground, PlaygroundColumn, PlaygroundResult, PlaygroundResultsTable, PlaygroundRun, PlaygroundRunsTable, PlaygroundsTable, ProviderConfig, ProviderConfigsTable, ProviderGuardrailOverride, ProviderGuardrailOverridesTable, SCHEMA_METADATA, Selectable, TableName, TargetingRule, TargetingRulesTable, Updateable, Variant, VariantVersion, VariantVersionsTable, VariantsTable, WorkspaceSettings, WorkspaceSettingsTable, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, datasetRecordsSchema, datasetVersionRecordsSchema, datasetVersionsSchema, datasetsSchema, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, guardrailConfigsSchema, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, playgroundColumnSchema, playgroundResultsSchema, playgroundRunsSchema, playgroundsSchema, providerConfigsSchema, providerGuardrailOverridesSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
|
package/dist/db/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as schemas, C as llmRequestsSchema, D as playgroundsSchema, E as playgroundRunsSchema, M as variantVersionsSchema, N as variantsSchema, O as providerConfigsSchema, P as workspaceSettingsSchema, S as guardrailConfigsSchema, T as playgroundResultsSchema, _ as datasetVersionRecordsSchema, a as matchType, b as environmentSecretsSchema, d as validatePartialTableData, f as validateTableData, g as datasetRecordsSchema, h as configsSchema, i as getMigrations, j as targetingRulesSchema, k as providerGuardrailOverridesSchema, 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 datasetVersionsSchema, w as playgroundColumnSchema, x as environmentsSchema, y as datasetsSchema } from "../db-DdV835WT.mjs";
|
|
2
2
|
import { n as executeWithSchema, t as createNeonDialect } from "../neon-dialect-DySGBYUi.mjs";
|
|
3
3
|
|
|
4
|
-
export { SCHEMA_METADATA, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect,
|
|
4
|
+
export { SCHEMA_METADATA, configVariantsSchema, configsSchema, createDatabase, createDatabaseFromConnection, createNeonDialect, datasetRecordsSchema, datasetVersionRecordsSchema, datasetVersionsSchema, datasetsSchema, detectDatabaseType, environmentSecretsSchema, environmentsSchema, executeWithSchema, getMigrations, guardrailConfigsSchema, llmRequestsSchema, matchType, parsePartialTableData, parseTableData, playgroundColumnSchema, playgroundResultsSchema, playgroundRunsSchema, playgroundsSchema, providerConfigsSchema, providerGuardrailOverridesSchema, runAutoMigrations, schemas, targetingRulesSchema, validatePartialTableData, validateTableData, variantVersionsSchema, variantsSchema, workspaceSettingsSchema };
|
|
@@ -13939,247 +13939,6 @@ const schemas = {
|
|
|
13939
13939
|
llm_requests: llmRequestsSchema
|
|
13940
13940
|
};
|
|
13941
13941
|
|
|
13942
|
-
//#endregion
|
|
13943
|
-
//#region src/db/schema-sql.ts
|
|
13944
|
-
/**
|
|
13945
|
-
* Idempotent SQL Schema Generator
|
|
13946
|
-
*
|
|
13947
|
-
* Generates fully idempotent PostgreSQL schema SQL that can be run on every
|
|
13948
|
-
* server restart. Works in edge environments (no file system access needed).
|
|
13949
|
-
*
|
|
13950
|
-
* This is the programmatic version of the generate-schema-sql.ts script.
|
|
13951
|
-
*/
|
|
13952
|
-
function toSnakeCase(str) {
|
|
13953
|
-
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
13954
|
-
}
|
|
13955
|
-
function getDefaultValue(fieldType, defaultValue) {
|
|
13956
|
-
if (defaultValue === void 0) return null;
|
|
13957
|
-
if (defaultValue === "now()") return "NOW()";
|
|
13958
|
-
if (typeof defaultValue === "boolean") return defaultValue ? "TRUE" : "FALSE";
|
|
13959
|
-
if (typeof defaultValue === "number") return String(defaultValue);
|
|
13960
|
-
if (typeof defaultValue === "string") {
|
|
13961
|
-
if (defaultValue === "{}") return "'{}'::jsonb";
|
|
13962
|
-
return `'${defaultValue}'`;
|
|
13963
|
-
}
|
|
13964
|
-
return null;
|
|
13965
|
-
}
|
|
13966
|
-
const TYPE_MAPPINGS = {
|
|
13967
|
-
uuid: "UUID",
|
|
13968
|
-
text: "TEXT",
|
|
13969
|
-
integer: "INTEGER",
|
|
13970
|
-
boolean: "BOOLEAN",
|
|
13971
|
-
timestamp: "TIMESTAMP WITH TIME ZONE",
|
|
13972
|
-
jsonb: "JSONB"
|
|
13973
|
-
};
|
|
13974
|
-
/**
|
|
13975
|
-
* Generate idempotent PostgreSQL schema SQL
|
|
13976
|
-
*
|
|
13977
|
-
* @param schemaName - Optional PostgreSQL schema name (e.g., 'llmops').
|
|
13978
|
-
* If not provided, tables are created in the current search_path.
|
|
13979
|
-
* @returns SQL string that can be executed to create/update the schema
|
|
13980
|
-
*/
|
|
13981
|
-
function generatePostgresSchemaSQL(schemaName) {
|
|
13982
|
-
const lines = [];
|
|
13983
|
-
const schemaPrefix = schemaName ? `"${schemaName}".` : "";
|
|
13984
|
-
lines.push(`-- LLMOps Database Schema (PostgreSQL)`);
|
|
13985
|
-
lines.push(`-- This SQL is fully idempotent and safe to run on every server restart.`);
|
|
13986
|
-
lines.push("");
|
|
13987
|
-
if (schemaName) {
|
|
13988
|
-
lines.push(`-- Create schema if not exists`);
|
|
13989
|
-
lines.push(`CREATE SCHEMA IF NOT EXISTS "${schemaName}";`);
|
|
13990
|
-
lines.push("");
|
|
13991
|
-
}
|
|
13992
|
-
lines.push(`-- Enable UUID extension`);
|
|
13993
|
-
lines.push(`CREATE EXTENSION IF NOT EXISTS "pgcrypto" SCHEMA public;`);
|
|
13994
|
-
lines.push("");
|
|
13995
|
-
const sortedTables = Object.entries(SCHEMA_METADATA.tables).map(([name, meta$2]) => ({
|
|
13996
|
-
name,
|
|
13997
|
-
meta: meta$2
|
|
13998
|
-
})).sort((a, b) => a.meta.order - b.meta.order);
|
|
13999
|
-
lines.push(`-- STEP 1: Create tables (if not exist)`);
|
|
14000
|
-
for (const { name, meta: meta$2 } of sortedTables) {
|
|
14001
|
-
const fullTableName = schemaPrefix + toSnakeCase(name);
|
|
14002
|
-
if (!Object.entries(meta$2.fields).find(([_, f]) => f.primaryKey)) continue;
|
|
14003
|
-
lines.push(`CREATE TABLE IF NOT EXISTS ${fullTableName} (`);
|
|
14004
|
-
lines.push(` id UUID PRIMARY KEY DEFAULT gen_random_uuid()`);
|
|
14005
|
-
lines.push(`);`);
|
|
14006
|
-
}
|
|
14007
|
-
lines.push("");
|
|
14008
|
-
lines.push(`-- STEP 2: Add columns (if not exist)`);
|
|
14009
|
-
for (const { name, meta: meta$2 } of sortedTables) {
|
|
14010
|
-
const fullTableName = schemaPrefix + toSnakeCase(name);
|
|
14011
|
-
for (const [columnName, field] of Object.entries(meta$2.fields)) {
|
|
14012
|
-
if (field.primaryKey) continue;
|
|
14013
|
-
const snakeColumn = toSnakeCase(columnName);
|
|
14014
|
-
const sqlType = TYPE_MAPPINGS[field.type] || "TEXT";
|
|
14015
|
-
const defaultVal = getDefaultValue(field.type, field.default);
|
|
14016
|
-
let colDef = `${snakeColumn} ${sqlType}`;
|
|
14017
|
-
if (defaultVal) colDef += ` DEFAULT ${defaultVal}`;
|
|
14018
|
-
lines.push(`ALTER TABLE ${fullTableName} ADD COLUMN IF NOT EXISTS ${colDef};`);
|
|
14019
|
-
}
|
|
14020
|
-
}
|
|
14021
|
-
lines.push("");
|
|
14022
|
-
lines.push(`-- STEP 3: Add unique constraints (if not exist)`);
|
|
14023
|
-
for (const { name, meta: meta$2 } of sortedTables) {
|
|
14024
|
-
const snakeTable = toSnakeCase(name);
|
|
14025
|
-
const fullTableName = schemaPrefix + snakeTable;
|
|
14026
|
-
for (const [columnName, field] of Object.entries(meta$2.fields)) if (field.unique) {
|
|
14027
|
-
const snakeColumn = toSnakeCase(columnName);
|
|
14028
|
-
const constraintName = `uq_${snakeTable}_${snakeColumn}`;
|
|
14029
|
-
lines.push(`DO $$`);
|
|
14030
|
-
lines.push(`BEGIN`);
|
|
14031
|
-
lines.push(` IF NOT EXISTS (`);
|
|
14032
|
-
lines.push(` SELECT 1 FROM pg_constraint WHERE conname = '${constraintName}'`);
|
|
14033
|
-
lines.push(` ) THEN`);
|
|
14034
|
-
lines.push(` ALTER TABLE ${fullTableName} ADD CONSTRAINT ${constraintName} UNIQUE (${snakeColumn});`);
|
|
14035
|
-
lines.push(` END IF;`);
|
|
14036
|
-
lines.push(`END $$;`);
|
|
14037
|
-
}
|
|
14038
|
-
if (meta$2.uniqueConstraints) for (const constraint of meta$2.uniqueConstraints) {
|
|
14039
|
-
const cols = constraint.columns.map(toSnakeCase).join(", ");
|
|
14040
|
-
const constraintName = `uq_${snakeTable}_${constraint.columns.map(toSnakeCase).join("_")}`;
|
|
14041
|
-
lines.push(`DO $$`);
|
|
14042
|
-
lines.push(`BEGIN`);
|
|
14043
|
-
lines.push(` IF NOT EXISTS (`);
|
|
14044
|
-
lines.push(` SELECT 1 FROM pg_constraint WHERE conname = '${constraintName}'`);
|
|
14045
|
-
lines.push(` ) THEN`);
|
|
14046
|
-
lines.push(` ALTER TABLE ${fullTableName} ADD CONSTRAINT ${constraintName} UNIQUE (${cols});`);
|
|
14047
|
-
lines.push(` END IF;`);
|
|
14048
|
-
lines.push(`END $$;`);
|
|
14049
|
-
}
|
|
14050
|
-
}
|
|
14051
|
-
lines.push("");
|
|
14052
|
-
lines.push(`-- STEP 4: Add foreign keys (if not exist)`);
|
|
14053
|
-
for (const { name, meta: meta$2 } of sortedTables) {
|
|
14054
|
-
const snakeTable = toSnakeCase(name);
|
|
14055
|
-
const fullTableName = schemaPrefix + snakeTable;
|
|
14056
|
-
for (const [columnName, field] of Object.entries(meta$2.fields)) if (field.references) {
|
|
14057
|
-
const snakeColumn = toSnakeCase(columnName);
|
|
14058
|
-
const refTable = schemaPrefix + toSnakeCase(field.references.table);
|
|
14059
|
-
const refColumn = toSnakeCase(field.references.column);
|
|
14060
|
-
const constraintName = `fk_${snakeTable}_${snakeColumn}`;
|
|
14061
|
-
lines.push(`DO $$`);
|
|
14062
|
-
lines.push(`BEGIN`);
|
|
14063
|
-
lines.push(` IF NOT EXISTS (`);
|
|
14064
|
-
lines.push(` SELECT 1 FROM pg_constraint WHERE conname = '${constraintName}'`);
|
|
14065
|
-
lines.push(` ) THEN`);
|
|
14066
|
-
lines.push(` ALTER TABLE ${fullTableName} ADD CONSTRAINT ${constraintName}`);
|
|
14067
|
-
lines.push(` FOREIGN KEY (${snakeColumn}) REFERENCES ${refTable}(${refColumn}) ON DELETE CASCADE;`);
|
|
14068
|
-
lines.push(` END IF;`);
|
|
14069
|
-
lines.push(`END $$;`);
|
|
14070
|
-
}
|
|
14071
|
-
}
|
|
14072
|
-
lines.push("");
|
|
14073
|
-
lines.push(`-- STEP 5: Create indexes (if not exist)`);
|
|
14074
|
-
for (const { name, meta: meta$2 } of sortedTables) {
|
|
14075
|
-
const snakeTable = toSnakeCase(name);
|
|
14076
|
-
const fullTableName = schemaPrefix + snakeTable;
|
|
14077
|
-
for (const [columnName, field] of Object.entries(meta$2.fields)) if (field.references) {
|
|
14078
|
-
const snakeColumn = toSnakeCase(columnName);
|
|
14079
|
-
lines.push(`CREATE INDEX IF NOT EXISTS idx_${snakeTable}_${snakeColumn} ON ${fullTableName}(${snakeColumn});`);
|
|
14080
|
-
}
|
|
14081
|
-
}
|
|
14082
|
-
lines.push("");
|
|
14083
|
-
lines.push(`-- STEP 6: Create updated_at triggers`);
|
|
14084
|
-
const functionName = `${schemaName ? `"${schemaName}".` : "public."}update_updated_at_column`;
|
|
14085
|
-
lines.push(`CREATE OR REPLACE FUNCTION ${functionName}()`);
|
|
14086
|
-
lines.push(`RETURNS TRIGGER AS $$`);
|
|
14087
|
-
lines.push(`BEGIN`);
|
|
14088
|
-
lines.push(` NEW.updated_at = NOW();`);
|
|
14089
|
-
lines.push(` RETURN NEW;`);
|
|
14090
|
-
lines.push(`END;`);
|
|
14091
|
-
lines.push(`$$ language 'plpgsql';`);
|
|
14092
|
-
for (const { name } of sortedTables) {
|
|
14093
|
-
const snakeTable = toSnakeCase(name);
|
|
14094
|
-
const fullTableName = schemaPrefix + snakeTable;
|
|
14095
|
-
lines.push(`DROP TRIGGER IF EXISTS update_${snakeTable}_updated_at ON ${fullTableName};`);
|
|
14096
|
-
lines.push(`CREATE TRIGGER update_${snakeTable}_updated_at BEFORE UPDATE ON ${fullTableName} FOR EACH ROW EXECUTE FUNCTION ${functionName}();`);
|
|
14097
|
-
}
|
|
14098
|
-
lines.push("");
|
|
14099
|
-
return lines.join("\n");
|
|
14100
|
-
}
|
|
14101
|
-
/**
|
|
14102
|
-
* Execute the schema SQL using a Neon SQL function
|
|
14103
|
-
*
|
|
14104
|
-
* @param sql - Neon sql function (from `neon()` or passed connection)
|
|
14105
|
-
* @param schemaName - Optional PostgreSQL schema name
|
|
14106
|
-
*/
|
|
14107
|
-
async function runSchemaSQL(sql$1, schemaName) {
|
|
14108
|
-
const statements = splitSQLStatements(generatePostgresSchemaSQL(schemaName));
|
|
14109
|
-
for (let i = 0; i < statements.length; i++) {
|
|
14110
|
-
const trimmed = statements[i].trim();
|
|
14111
|
-
if (trimmed && !trimmed.startsWith("--")) try {
|
|
14112
|
-
await sql$1(trimmed);
|
|
14113
|
-
} catch (error$47) {
|
|
14114
|
-
console.error(`[Schema] Failed at statement ${i + 1}/${statements.length}:`);
|
|
14115
|
-
console.error(`[Schema] Statement preview: ${trimmed.slice(0, 100)}...`);
|
|
14116
|
-
throw error$47;
|
|
14117
|
-
}
|
|
14118
|
-
}
|
|
14119
|
-
}
|
|
14120
|
-
/**
|
|
14121
|
-
* Split SQL into individual statements, keeping $$ blocks together
|
|
14122
|
-
* Handles both DO $$ blocks and CREATE FUNCTION ... AS $$ blocks
|
|
14123
|
-
*/
|
|
14124
|
-
function splitSQLStatements(sql$1) {
|
|
14125
|
-
const statements = [];
|
|
14126
|
-
let current = "";
|
|
14127
|
-
let inDollarBlock = false;
|
|
14128
|
-
const lines = sql$1.split("\n");
|
|
14129
|
-
for (const line of lines) {
|
|
14130
|
-
const trimmed = line.trim();
|
|
14131
|
-
if (!trimmed || trimmed.startsWith("--")) continue;
|
|
14132
|
-
if (!inDollarBlock && (trimmed === "DO $$" || trimmed.endsWith("AS $$"))) {
|
|
14133
|
-
inDollarBlock = true;
|
|
14134
|
-
current += line + "\n";
|
|
14135
|
-
continue;
|
|
14136
|
-
}
|
|
14137
|
-
if (inDollarBlock) {
|
|
14138
|
-
current += line + "\n";
|
|
14139
|
-
if (trimmed.startsWith("$$") && trimmed.endsWith(";")) {
|
|
14140
|
-
statements.push(current.trim());
|
|
14141
|
-
current = "";
|
|
14142
|
-
inDollarBlock = false;
|
|
14143
|
-
}
|
|
14144
|
-
continue;
|
|
14145
|
-
}
|
|
14146
|
-
current += line + "\n";
|
|
14147
|
-
if (trimmed.endsWith(";")) {
|
|
14148
|
-
statements.push(current.trim());
|
|
14149
|
-
current = "";
|
|
14150
|
-
}
|
|
14151
|
-
}
|
|
14152
|
-
if (current.trim()) statements.push(current.trim());
|
|
14153
|
-
return statements;
|
|
14154
|
-
}
|
|
14155
|
-
/**
|
|
14156
|
-
* Create a Neon SQL function from various connection types
|
|
14157
|
-
*
|
|
14158
|
-
* The Neon serverless library returns a tagged template function from neon(),
|
|
14159
|
-
* but for conventional string queries we need to use sql.query() instead.
|
|
14160
|
-
* This helper wraps the neon instance to provide a simple query function.
|
|
14161
|
-
*
|
|
14162
|
-
* @param rawConnection - neon() function, connection string, or undefined (uses env vars)
|
|
14163
|
-
* @returns SQL function that can be used with runSchemaSQL, or null if unable to create
|
|
14164
|
-
*/
|
|
14165
|
-
async function createNeonSqlFunction(rawConnection) {
|
|
14166
|
-
const wrapNeonSql = (sql$1) => {
|
|
14167
|
-
return (query) => sql$1.query(query);
|
|
14168
|
-
};
|
|
14169
|
-
if (typeof rawConnection === "function") {
|
|
14170
|
-
if ("query" in rawConnection && typeof rawConnection.query === "function") return wrapNeonSql(rawConnection);
|
|
14171
|
-
return rawConnection;
|
|
14172
|
-
}
|
|
14173
|
-
if (typeof rawConnection === "string" && rawConnection) {
|
|
14174
|
-
const { neon: neon$1 } = await import("@neondatabase/serverless");
|
|
14175
|
-
return wrapNeonSql(neon$1(rawConnection));
|
|
14176
|
-
}
|
|
14177
|
-
const connectionString = process.env.NEON_CONNECTION_STRING || process.env.NEON_PG_URL || process.env.DATABASE_URL || process.env.POSTGRES_URL || "";
|
|
14178
|
-
if (!connectionString) return null;
|
|
14179
|
-
const { neon } = await import("@neondatabase/serverless");
|
|
14180
|
-
return wrapNeonSql(neon(connectionString));
|
|
14181
|
-
}
|
|
14182
|
-
|
|
14183
13942
|
//#endregion
|
|
14184
13943
|
//#region src/db/validation.ts
|
|
14185
13944
|
/**
|
|
@@ -14593,21 +14352,9 @@ function createDatabase(connection) {
|
|
|
14593
14352
|
return new kysely.Kysely({ dialect: connection.dialect });
|
|
14594
14353
|
}
|
|
14595
14354
|
/**
|
|
14596
|
-
*
|
|
14597
|
-
*/
|
|
14598
|
-
function isNeonConnectionString(str) {
|
|
14599
|
-
return str.includes(".neon.tech") || str.includes("neon.tech") || str.includes("@neon-");
|
|
14600
|
-
}
|
|
14601
|
-
/**
|
|
14602
|
-
* Auto-detect database type from connection object or string
|
|
14355
|
+
* Auto-detect database type from connection object
|
|
14603
14356
|
*/
|
|
14604
14357
|
function detectDatabaseType(db) {
|
|
14605
|
-
if (typeof db === "string") {
|
|
14606
|
-
if (isNeonConnectionString(db)) return "neon";
|
|
14607
|
-
if (db.startsWith("postgres://") || db.startsWith("postgresql://")) return "postgres";
|
|
14608
|
-
if (db.startsWith("mysql://")) return "mysql";
|
|
14609
|
-
return null;
|
|
14610
|
-
}
|
|
14611
14358
|
if (!db || typeof db !== "object" && typeof db !== "function") return null;
|
|
14612
14359
|
if ("createDriver" in db) {
|
|
14613
14360
|
if (db instanceof kysely.SqliteDialect) return "sqlite";
|
|
@@ -14638,12 +14385,12 @@ async function createDatabaseFromConnection(rawConnection, options) {
|
|
|
14638
14385
|
case "sqlite":
|
|
14639
14386
|
if ("aggregate" in rawConnection && !("createSession" in rawConnection)) dialect = new kysely.SqliteDialect({ database: rawConnection });
|
|
14640
14387
|
else if ("fileControl" in rawConnection) {
|
|
14641
|
-
const { BunSqliteDialect } = await Promise.resolve().then(() => require("./bun-sqlite-dialect-
|
|
14388
|
+
const { BunSqliteDialect } = await Promise.resolve().then(() => require("./bun-sqlite-dialect-gGK75m-T.cjs"));
|
|
14642
14389
|
dialect = new BunSqliteDialect({ database: rawConnection });
|
|
14643
14390
|
} else if ("createSession" in rawConnection && typeof window === "undefined") try {
|
|
14644
14391
|
const { DatabaseSync } = await import("node:sqlite");
|
|
14645
14392
|
if (rawConnection instanceof DatabaseSync) {
|
|
14646
|
-
const { NodeSqliteDialect } = await Promise.resolve().then(() => require("./node-sqlite-dialect-
|
|
14393
|
+
const { NodeSqliteDialect } = await Promise.resolve().then(() => require("./node-sqlite-dialect-DR6hDh7D.cjs"));
|
|
14647
14394
|
dialect = new NodeSqliteDialect({ database: rawConnection });
|
|
14648
14395
|
}
|
|
14649
14396
|
} catch {}
|
|
@@ -14659,20 +14406,23 @@ async function createDatabaseFromConnection(rawConnection, options) {
|
|
|
14659
14406
|
}
|
|
14660
14407
|
});
|
|
14661
14408
|
break;
|
|
14662
|
-
case "neon":
|
|
14663
|
-
if (
|
|
14664
|
-
const {
|
|
14665
|
-
|
|
14666
|
-
|
|
14409
|
+
case "neon":
|
|
14410
|
+
if (schema && schema !== "public") {
|
|
14411
|
+
const { Pool, neonConfig } = await import("@neondatabase/serverless");
|
|
14412
|
+
const { default: ws } = await import("ws");
|
|
14413
|
+
neonConfig.webSocketConstructor = ws;
|
|
14414
|
+
const connectionString = typeof rawConnection === "string" ? rawConnection : process.env.NEON_PG_URL || "";
|
|
14415
|
+
dialect = new kysely.PostgresDialect({
|
|
14416
|
+
pool: new Pool({ connectionString: connectionString.includes("currentSchema") ? connectionString.split("currentSchema=")[1].split("&")[0] === "public" ? connectionString.replace(/currentSchema=[^&]*&?/, "") : connectionString : connectionString }),
|
|
14417
|
+
onCreateConnection: async (connection) => {
|
|
14418
|
+
await connection.executeQuery(kysely.CompiledQuery.raw(`SET search_path TO "${schema}"`));
|
|
14419
|
+
}
|
|
14420
|
+
});
|
|
14421
|
+
} else {
|
|
14422
|
+
const { createNeonDialect } = await Promise.resolve().then(() => require("./neon-dialect-aLfG_zN7.cjs"));
|
|
14423
|
+
dialect = createNeonDialect(rawConnection);
|
|
14667
14424
|
}
|
|
14668
|
-
const connectionString = typeof rawConnection === "string" && rawConnection || process.env.NEON_CONNECTION_STRING || process.env.NEON_PG_URL || process.env.DATABASE_URL || process.env.POSTGRES_URL || "";
|
|
14669
|
-
if (!connectionString) throw new Error("Neon connection string is required. Pass it directly as the database option or set one of: NEON_CONNECTION_STRING, NEON_PG_URL, DATABASE_URL, POSTGRES_URL");
|
|
14670
|
-
const { neon } = await import("@neondatabase/serverless");
|
|
14671
|
-
const sql$1 = neon(connectionString);
|
|
14672
|
-
const { createNeonDialect } = await Promise.resolve().then(() => require("./neon-dialect-C0wJAG1X.cjs"));
|
|
14673
|
-
dialect = createNeonDialect(sql$1);
|
|
14674
14425
|
break;
|
|
14675
|
-
}
|
|
14676
14426
|
case "mssql":
|
|
14677
14427
|
if ("createDriver" in rawConnection) dialect = rawConnection;
|
|
14678
14428
|
break;
|
|
@@ -14741,12 +14491,6 @@ Object.defineProperty(exports, 'createDatabaseFromConnection', {
|
|
|
14741
14491
|
return createDatabaseFromConnection;
|
|
14742
14492
|
}
|
|
14743
14493
|
});
|
|
14744
|
-
Object.defineProperty(exports, 'createNeonSqlFunction', {
|
|
14745
|
-
enumerable: true,
|
|
14746
|
-
get: function () {
|
|
14747
|
-
return createNeonSqlFunction;
|
|
14748
|
-
}
|
|
14749
|
-
});
|
|
14750
14494
|
Object.defineProperty(exports, 'datasetRecordsSchema', {
|
|
14751
14495
|
enumerable: true,
|
|
14752
14496
|
get: function () {
|
|
@@ -14789,12 +14533,6 @@ Object.defineProperty(exports, 'environmentsSchema', {
|
|
|
14789
14533
|
return environmentsSchema;
|
|
14790
14534
|
}
|
|
14791
14535
|
});
|
|
14792
|
-
Object.defineProperty(exports, 'generatePostgresSchemaSQL', {
|
|
14793
|
-
enumerable: true,
|
|
14794
|
-
get: function () {
|
|
14795
|
-
return generatePostgresSchemaSQL;
|
|
14796
|
-
}
|
|
14797
|
-
});
|
|
14798
14536
|
Object.defineProperty(exports, 'getAuthClientOptions', {
|
|
14799
14537
|
enumerable: true,
|
|
14800
14538
|
get: function () {
|
|
@@ -14909,12 +14647,6 @@ Object.defineProperty(exports, 'runAutoMigrations', {
|
|
|
14909
14647
|
return runAutoMigrations;
|
|
14910
14648
|
}
|
|
14911
14649
|
});
|
|
14912
|
-
Object.defineProperty(exports, 'runSchemaSQL', {
|
|
14913
|
-
enumerable: true,
|
|
14914
|
-
get: function () {
|
|
14915
|
-
return runSchemaSQL;
|
|
14916
|
-
}
|
|
14917
|
-
});
|
|
14918
14650
|
Object.defineProperty(exports, 'schemas', {
|
|
14919
14651
|
enumerable: true,
|
|
14920
14652
|
get: function () {
|