@uql/core 3.3.0 → 3.4.0
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/CHANGELOG.md +5 -2
- package/README.md +14 -12
- package/dist/browser/uql-browser.min.js +83 -94
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/d1/d1Querier.d.ts +49 -0
- package/dist/d1/d1Querier.d.ts.map +1 -0
- package/dist/d1/d1Querier.js +40 -0
- package/dist/d1/d1Querier.js.map +1 -0
- package/dist/d1/d1QuerierPool.d.ts +10 -0
- package/dist/d1/d1QuerierPool.d.ts.map +1 -0
- package/dist/d1/d1QuerierPool.js +16 -0
- package/dist/d1/d1QuerierPool.js.map +1 -0
- package/dist/d1/index.d.ts +3 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +3 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/libsql/index.d.ts +3 -0
- package/dist/libsql/index.d.ts.map +1 -0
- package/dist/libsql/index.js +3 -0
- package/dist/libsql/index.js.map +1 -0
- package/dist/libsql/libsqlQuerier.d.ts +21 -0
- package/dist/libsql/libsqlQuerier.d.ts.map +1 -0
- package/dist/libsql/libsqlQuerier.js +81 -0
- package/dist/libsql/libsqlQuerier.js.map +1 -0
- package/dist/libsql/libsqlQuerierPool.d.ts +12 -0
- package/dist/libsql/libsqlQuerierPool.d.ts.map +1 -0
- package/dist/libsql/libsqlQuerierPool.js +19 -0
- package/dist/libsql/libsqlQuerierPool.js.map +1 -0
- package/dist/neon/index.d.ts +3 -0
- package/dist/neon/index.d.ts.map +1 -0
- package/dist/neon/index.js +3 -0
- package/dist/neon/index.js.map +1 -0
- package/dist/neon/neonQuerier.d.ts +18 -0
- package/dist/neon/neonQuerier.d.ts.map +1 -0
- package/dist/neon/neonQuerier.js +40 -0
- package/dist/neon/neonQuerier.js.map +1 -0
- package/dist/neon/neonQuerierPool.d.ts +11 -0
- package/dist/neon/neonQuerierPool.d.ts.map +1 -0
- package/dist/neon/neonQuerierPool.js +17 -0
- package/dist/neon/neonQuerierPool.js.map +1 -0
- package/package.json +16 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uql-browser.min.js","sources":["../../src/sqlite/sqliteDialect.ts","../../src/sqlite/sqliteQuerier.ts","../../src/sqlite/sqliteQuerierPool.ts"],"sourcesContent":["import sqlstring from 'sqlstring-sqlite';\nimport { AbstractSqlDialect } from '../dialect/index.js';\nimport { getMeta } from '../entity/index.js';\nimport type {\n FieldKey,\n NamingStrategy,\n QueryComparisonOptions,\n QueryConflictPaths,\n QueryContext,\n QueryTextSearchOptions,\n QueryWhereFieldOperatorMap,\n QueryWhereMap,\n Type,\n} from '../type/index.js';\n\nexport class SqliteDialect extends AbstractSqlDialect {\n constructor(namingStrategy?: NamingStrategy) {\n super(namingStrategy, '`', 'BEGIN TRANSACTION');\n }\n\n override addValue(values: unknown[], value: unknown): string {\n if (value instanceof Date) {\n value = value.getTime();\n } else if (typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n return super.addValue(values, value);\n }\n\n override compare<E, K extends keyof QueryWhereMap<E>>(\n ctx: QueryContext,\n entity: Type<E>,\n key: K,\n val: QueryWhereMap<E>[K],\n opts?: QueryComparisonOptions,\n ): void {\n if (key === '$text') {\n const meta = getMeta(entity);\n const search = val as QueryTextSearchOptions<E>;\n const fields = search.$fields.map((fKey) => {\n const field = meta.fields[fKey];\n const columnName = this.resolveColumnName(fKey as string, field);\n return this.escapeId(columnName);\n });\n const tableName = this.resolveTableName(entity, meta);\n ctx.append(`${this.escapeId(tableName)} MATCH {${fields.join(' ')}} : `);\n ctx.addValue(search.$value);\n return;\n }\n super.compare(ctx, entity, key, val, opts);\n }\n\n override compareFieldOperator<E, K extends keyof QueryWhereFieldOperatorMap<E>>(\n ctx: QueryContext,\n entity: Type<E>,\n key: FieldKey<E>,\n op: K,\n val: QueryWhereFieldOperatorMap<E>[K],\n opts: QueryComparisonOptions = {},\n ): void {\n super.compareFieldOperator(ctx, entity, key, op, val, opts);\n }\n\n override upsert<E>(ctx: QueryContext, entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E): void {\n const meta = getMeta(entity);\n const update = this.getUpsertUpdateAssignments(ctx, meta, conflictPaths, payload, (name) => `EXCLUDED.${name}`);\n const keysStr = this.getUpsertConflictPathsStr(meta, conflictPaths);\n const onConflict = update ? `DO UPDATE SET ${update}` : 'DO NOTHING';\n this.insert(ctx, entity, payload);\n ctx.append(` ON CONFLICT (${keysStr}) ${onConflict}`);\n }\n\n override escape(value: unknown): string {\n return sqlstring.escape(value);\n }\n}\n","import type { Database } from 'better-sqlite3';\nimport { AbstractSqlQuerier } from '../querier/index.js';\nimport type { ExtraOptions, QueryUpdateResult } from '../type/index.js';\nimport { SqliteDialect } from './sqliteDialect.js';\n\nexport class SqliteQuerier extends AbstractSqlQuerier {\n constructor(\n readonly db: Database,\n readonly extra?: ExtraOptions,\n ) {\n super(new SqliteDialect(extra?.namingStrategy));\n }\n\n override async internalAll<T>(query: string, values?: unknown[]) {\n this.extra?.logger?.(query, values);\n return this.db.prepare(query).all(values || []) as T[];\n }\n\n override async internalRun(query: string, values?: unknown[]) {\n this.extra?.logger?.(query, values);\n const { changes, lastInsertRowid } = this.db.prepare(query).run(values || []);\n const firstId = lastInsertRowid ? Number(lastInsertRowid) - (changes - 1) : undefined;\n const ids = firstId\n ? Array(changes)\n .fill(firstId)\n .map((i, index) => i + index)\n : [];\n return { changes, ids, firstId } satisfies QueryUpdateResult;\n }\n\n override async internalRelease() {\n if (this.hasOpenTransaction) {\n throw TypeError('pending transaction');\n }\n // no-op\n }\n}\n","import type { Options } from 'better-sqlite3';\nimport { AbstractQuerierPool } from '../querier/index.js';\nimport type { ExtraOptions } from '../type/index.js';\nimport { SqliteQuerier } from './sqliteQuerier.js';\n\nexport class Sqlite3QuerierPool extends AbstractQuerierPool<SqliteQuerier> {\n private querier: SqliteQuerier;\n\n constructor(\n readonly filename?: string | Buffer,\n readonly opts?: Options,\n extra?: ExtraOptions,\n ) {\n super('sqlite', extra);\n }\n\n async getQuerier() {\n if (!this.querier) {\n let db: any;\n if (typeof Bun !== 'undefined') {\n const { Database } = await import('bun:sqlite');\n db = new Database(this.filename as string, this.opts as any);\n db.run('PRAGMA journal_mode = WAL');\n } else {\n const { default: Database } = await import('better-sqlite3');\n db = new Database(this.filename, this.opts);\n db.pragma('journal_mode = WAL');\n }\n this.querier = new SqliteQuerier(db, this.extra);\n }\n return this.querier;\n }\n\n async end() {\n await this.querier.db.close();\n delete this.querier;\n }\n}\n"],"names":["SqliteDialect","AbstractSqlDialect","namingStrategy","addValue","values","value","Date","getTime","compare","ctx","entity","key","val","opts","meta","getMeta","search","fields","$fields","map","fKey","field","columnName","resolveColumnName","escapeId","tableName","resolveTableName","append","join","$value","compareFieldOperator","op","upsert","conflictPaths","payload","update","getUpsertUpdateAssignments","name","keysStr","getUpsertConflictPathsStr","onConflict","insert","escape","sqlstring","SqliteQuerier","AbstractSqlQuerier","extra","db","internalAll","query","logger","prepare","all","internalRun","changes","lastInsertRowid","run","firstId","Number","undefined","ids","Array","fill","i","index","internalRelease","hasOpenTransaction","TypeError","Sqlite3QuerierPool","AbstractQuerierPool","filename","getQuerier","querier","Bun","Database","default","pragma","end","close"],"mappings":"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"}cimal', field) : 'BIGINT';\n }\n\n if (type === String || type === 'string') {\n const length = field.length ?? 255;\n return `VARCHAR(${length})`;\n }\n\n if (type === Boolean || type === 'boolean') {\n return this.getBooleanType();\n }\n\n if (type === Date || type === 'date') {\n return 'TIMESTAMP';\n }\n\n if (type === BigInt || type === 'bigint') {\n return 'BIGINT';\n }\n\n // Default to VARCHAR\n return `VARCHAR(${field.length ?? 255})`;\n }\n\n /**\n * Map uql column type to database-specific SQL type\n */\n public abstract mapColumnType(columnType: ColumnType, field: FieldOptions): string;\n\n /**\n * Get the boolean type for this database\n */\n public abstract getBooleanType(): string;\n\n /**\n * Generate ALTER COLUMN statements (database-specific)\n */\n public abstract generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[];\n\n /**\n * Get table options (e.g., ENGINE for MySQL)\n */\n getTableOptions<E>(meta: EntityMeta<E>): string {\n return '';\n }\n\n /**\n * Generate column comment clause (if supported)\n */\n public abstract generateColumnComment(tableName: string, columnName: string, comment: string): string;\n\n /**\n * Format a default value for SQL\n */\n public formatDefaultValue(value: unknown): string {\n if (value === null) {\n return 'NULL';\n }\n if (typeof value === 'string') {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n if (typeof value === 'boolean') {\n return value ? 'TRUE' : 'FALSE';\n }\n if (typeof value === 'number' || typeof value === 'bigint') {\n return String(value);\n }\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n return String(value);\n }\n\n /**\n * Compare two schemas and return the differences\n */\n diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n\n if (!currentSchema) {\n // Table doesn't exist, need to create\n return {\n tableName: this.resolveTableName(entity, meta),\n type: 'create',\n };\n }\n\n const columnsToAdd: ColumnSchema[] = [];\n const columnsToAlter: { from: ColumnSchema; to: ColumnSchema }[] = [];\n const columnsToDrop: string[] = [];\n\n const currentColumns = new Map(currentSchema.columns.map((c: any) => [c.name, c]));\n const fieldKeys = getKeys(meta.fields) as FieldKey<E>[];\n\n // Check for new or altered columns\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (field?.virtual) continue;\n\n const columnName = this.resolveColumnName(key as string, field);\n const currentColumn = currentColumns.get(columnName);\n\n if (!currentColumn) {\n // Column needs to be added\n columnsToAdd.push(this.fieldToColumnSchema(key as string, field, meta));\n } else {\n // Check if column needs alteration\n const desiredColumn = this.fieldToColumnSchema(key as string, field, meta);\n if (this.columnsNeedAlteration(currentColumn, desiredColumn)) {\n columnsToAlter.push({ from: currentColumn, to: desiredColumn });\n }\n }\n currentColumns.delete(columnName);\n }\n\n // Remaining columns in currentColumns should be dropped\n for (const [name] of currentColumns) {\n columnsToDrop.push(name);\n }\n\n if (columnsToAdd.length === 0 && columnsToAlter.length === 0 && columnsToDrop.length === 0) {\n return undefined; // No changes needed\n }\n\n return {\n tableName: this.resolveTableName(entity, meta),\n type: 'alter',\n columnsToAdd: columnsToAdd.length > 0 ? columnsToAdd : undefined,\n columnsToAlter: columnsToAlter.length > 0 ? columnsToAlter : undefined,\n columnsToDrop: columnsToDrop.length > 0 ? columnsToDrop : undefined,\n };\n }\n\n /**\n * Convert field options to ColumnSchema\n */\n protected fieldToColumnSchema<E>(fieldKey: string, field: FieldOptions, meta: EntityMeta<E>): ColumnSchema {\n const isId = field.isId === true;\n const isPrimaryKey = isId && meta.id === fieldKey;\n\n return {\n name: this.resolveColumnName(fieldKey, field),\n type: this.getSqlType(field, field.type),\n nullable: field.nullable ?? !isPrimaryKey,\n defaultValue: field.defaultValue,\n isPrimaryKey,\n isAutoIncrement: isPrimaryKey && field.autoIncrement !== false && !field.onInsert,\n isUnique: field.unique ?? false,\n length: field.length,\n precision: field.precision,\n scale: field.scale,\n comment: field.comment,\n };\n }\n\n /**\n * Check if two columns differ enough to require alteration\n */\n protected columnsNeedAlteration(current: ColumnSchema, desired: ColumnSchema): boolean {\n // Compare relevant properties\n return (\n current.type.toLowerCase() !== desired.type.toLowerCase() ||\n current.nullable !== desired.nullable ||\n current.isUnique !== desired.isUnique ||\n JSON.stringify(current.defaultValue) !== JSON.stringify(desired.defaultValue)\n );\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * MySQL/MariaDB-specific schema generator\n */\nexport class MysqlSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'INT AUTO_INCREMENT PRIMARY KEY';\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n switch (columnType) {\n case 'int':\n return 'INT';\n case 'smallint':\n return 'SMALLINT';\n case 'bigint':\n return 'BIGINT';\n case 'float':\n return 'FLOAT';\n case 'double':\n case 'real':\n return 'DOUBLE';\n case 'decimal':\n case 'numeric':\n if (field.precision !== undefined) {\n if (field.scale !== undefined) {\n return `DECIMAL(${field.precision}, ${field.scale})`;\n }\n return `DECIMAL(${field.precision})`;\n }\n return 'DECIMAL(10, 2)';\n case 'boolean':\n return 'TINYINT(1)';\n case 'char':\n return `CHAR(${field.length ?? 1})`;\n case 'varchar':\n return `VARCHAR(${field.length ?? 255})`;\n case 'text':\n return 'TEXT';\n case 'uuid':\n return 'CHAR(36)';\n case 'date':\n return 'DATE';\n case 'time':\n return 'TIME';\n case 'timestamp':\n case 'timestamptz':\n return 'TIMESTAMP';\n case 'json':\n case 'jsonb':\n return 'JSON';\n case 'blob':\n case 'bytea':\n return 'BLOB';\n case 'vector':\n // MySQL doesn't have native vector support, use JSON\n return 'JSON';\n case 'serial':\n return 'INT AUTO_INCREMENT';\n case 'bigserial':\n return 'BIGINT AUTO_INCREMENT';\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'TINYINT(1)';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n return [`ALTER TABLE ${this.escapeId(tableName)} MODIFY COLUMN ${newDefinition};`];\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n const escapedComment = comment.replace(/'/g, \"''\");\n return ` COMMENT '${escapedComment}'`;\n }\n\n override getTableOptions<E>(): string {\n return ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n // MySQL requires table name in DROP INDEX\n return `DROP INDEX ${this.escapeId(indexName)} ON ${this.escapeId(tableName)};`;\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions, NamingStrategy } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * PostgreSQL-specific schema generator\n */\nexport class PostgresSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'SERIAL PRIMARY KEY';\n\n constructor(namingStrategy?: NamingStrategy) {\n super(namingStrategy, '\"');\n }\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n switch (columnType) {\n case 'int':\n return 'INTEGER';\n case 'smallint':\n return 'SMALLINT';\n case 'bigint':\n return 'BIGINT';\n case 'float':\n case 'double':\n case 'real':\n return 'DOUBLE PRECISION';\n case 'decimal':\n case 'numeric':\n if (field.precision !== undefined) {\n if (field.scale !== undefined) {\n return `NUMERIC(${field.precision}, ${field.scale})`;\n }\n return `NUMERIC(${field.precision})`;\n }\n return 'NUMERIC';\n case 'boolean':\n return 'BOOLEAN';\n case 'char':\n return `CHAR(${field.length ?? 1})`;\n case 'varchar':\n return `VARCHAR(${field.length ?? 255})`;\n case 'text':\n return 'TEXT';\n case 'uuid':\n return 'UUID';\n case 'date':\n return 'DATE';\n case 'time':\n return 'TIME';\n case 'timestamp':\n return 'TIMESTAMP';\n case 'timestamptz':\n return 'TIMESTAMPTZ';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSONB';\n case 'blob':\n case 'bytea':\n return 'BYTEA';\n case 'vector':\n if (field.length) {\n return `VECTOR(${field.length})`;\n }\n return 'VECTOR';\n case 'serial':\n return 'SERIAL';\n case 'bigserial':\n return 'BIGSERIAL';\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'BOOLEAN';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n const statements: string[] = [];\n const escapedTableName = this.escapeId(tableName);\n const escapedColumnName = this.escapeId(column.name);\n\n // PostgreSQL uses separate ALTER COLUMN clauses for different changes\n // 1. Change type\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} TYPE ${column.type};`);\n\n // 2. Change nullability\n if (column.nullable) {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} DROP NOT NULL;`);\n } else {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} SET NOT NULL;`);\n }\n\n // 3. Change default value\n if (column.defaultValue !== undefined) {\n statements.push(\n `ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} SET DEFAULT ${this.formatDefaultValue(column.defaultValue)};`,\n );\n } else {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} DROP DEFAULT;`);\n }\n\n return statements;\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n // PostgreSQL handles comments separately via COMMENT ON COLUMN\n return '';\n }\n\n /**\n * Generate COMMENT ON COLUMN statement for PostgreSQL\n */\n generateColumnCommentStatement(tableName: string, columnName: string, comment: string): string {\n const escapedComment = comment.replace(/'/g, \"''\");\n return `COMMENT ON COLUMN ${this.escapeId(tableName)}.${this.escapeId(columnName)} IS '${escapedComment}';`;\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n // PostgreSQL doesn't require table name in DROP INDEX\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * SQLite-specific schema generator\n */\nexport class SqliteSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'INTEGER PRIMARY KEY AUTOINCREMENT';\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n // SQLite has dynamic typing, but we use type affinity\n switch (columnType) {\n case 'int':\n case 'smallint':\n case 'bigint':\n case 'serial':\n case 'bigserial':\n return 'INTEGER';\n case 'float':\n case 'double':\n case 'real':\n case 'decimal':\n case 'numeric':\n return 'REAL';\n case 'boolean':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'char':\n case 'varchar':\n case 'text':\n case 'uuid':\n return 'TEXT';\n case 'date':\n case 'time':\n case 'timestamp':\n case 'timestamptz':\n return 'TEXT'; // SQLite stores dates as TEXT or INTEGER\n case 'json':\n case 'jsonb':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'blob':\n case 'bytea':\n return 'BLOB';\n case 'vector':\n return 'TEXT'; // Store as JSON array\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'INTEGER';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n // SQLite has very limited ALTER TABLE support\n // Column type changes require recreating the table\n throw new Error(\n `SQLite does not support altering column '${column.name}' in table '${tableName}'. ` +\n 'You need to recreate the table to change column types.',\n );\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n return '';\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n\n override formatDefaultValue(value: unknown): string {\n if (typeof value === 'boolean') {\n return value ? '1' : '0';\n }\n return super.formatDefaultValue(value);\n }\n}\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * MySQL/MariaDB schema introspector.\n * Works with both MySQL and MariaDB as they share the same information_schema structure.\n */\nexport class MysqlSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = `\n SELECT TABLE_NAME as table_name\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_TYPE = 'BASE TABLE'\n ORDER BY TABLE_NAME\n `;\n\n const results = await querier.all<{ table_name: string }>(sql);\n return results.map((r: any) => r.table_name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = `\n SELECT COUNT(*) as count\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n `;\n\n const results = await querier.all<{ count: number }>(sql, [tableName]);\n return (results[0]?.count ?? 0) > 0;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('MysqlSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n const sql = `\n SELECT\n COLUMN_NAME as column_name,\n DATA_TYPE as data_type,\n COLUMN_TYPE as column_type,\n IS_NULLABLE as is_nullable,\n COLUMN_DEFAULT as column_default,\n CHARACTER_MAXIMUM_LENGTH as character_maximum_length,\n NUMERIC_PRECISION as numeric_precision,\n NUMERIC_SCALE as numeric_scale,\n COLUMN_KEY as column_key,\n EXTRA as extra,\n COLUMN_COMMENT as column_comment\n FROM information_schema.COLUMNS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n ORDER BY ORDINAL_POSITION\n `;\n\n const results = await querier.all<{\n column_name: string;\n data_type: string;\n column_type: string;\n is_nullable: string;\n column_default: string | null;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n column_key: string;\n extra: string;\n column_comment: string | null;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.column_name,\n type: row.data_type.toUpperCase(),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.column_key === 'PRI',\n isAutoIncrement: row.extra.toLowerCase().includes('auto_increment'),\n isUnique: row.column_key === 'UNI',\n length: row.character_maximum_length ?? undefined,\n precision: row.numeric_precision ?? undefined,\n scale: row.numeric_scale ?? undefined,\n comment: row.column_comment || undefined,\n }));\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = `\n SELECT\n INDEX_NAME as index_name,\n GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as columns,\n NOT NON_UNIQUE as is_unique\n FROM information_schema.STATISTICS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND INDEX_NAME != 'PRIMARY'\n GROUP BY INDEX_NAME, NON_UNIQUE\n ORDER BY INDEX_NAME\n `;\n\n const results = await querier.all<{\n index_name: string;\n columns: string;\n is_unique: number;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.index_name,\n columns: row.columns.split(','),\n unique: Boolean(row.is_unique),\n }));\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = `\n SELECT\n kcu.CONSTRAINT_NAME as constraint_name,\n GROUP_CONCAT(kcu.COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as columns,\n kcu.REFERENCED_TABLE_NAME as referenced_table,\n GROUP_CONCAT(kcu.REFERENCED_COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as referenced_columns,\n rc.DELETE_RULE as delete_rule,\n rc.UPDATE_RULE as update_rule\n FROM information_schema.KEY_COLUMN_USAGE kcu\n JOIN information_schema.REFERENTIAL_CONSTRAINTS rc\n ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME\n AND kcu.TABLE_SCHEMA = rc.CONSTRAINT_SCHEMA\n WHERE kcu.TABLE_SCHEMA = DATABASE()\n AND kcu.TABLE_NAME = ?\n AND kcu.REFERENCED_TABLE_NAME IS NOT NULL\n GROUP BY kcu.CONSTRAINT_NAME, kcu.REFERENCED_TABLE_NAME, rc.DELETE_RULE, rc.UPDATE_RULE\n ORDER BY kcu.CONSTRAINT_NAME\n `;\n\n const results = await querier.all<{\n constraint_name: string;\n columns: string;\n referenced_table: string;\n referenced_columns: string;\n delete_rule: string;\n update_rule: string;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.constraint_name,\n columns: row.columns.split(','),\n referencedTable: row.referenced_table,\n referencedColumns: row.referenced_columns.split(','),\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = `\n SELECT COLUMN_NAME as column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND CONSTRAINT_NAME = 'PRIMARY'\n ORDER BY ORDINAL_POSITION\n `;\n\n const results = await querier.all<{ column_name: string }>(sql, [tableName]);\n\n if (results.length === 0) {\n return undefined;\n }\n\n return results.map((r: any) => r.column_name);\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n\n // Check for common patterns\n if (defaultValue === 'NULL') {\n return null;\n }\n if (defaultValue === 'CURRENT_TIMESTAMP') {\n return defaultValue;\n }\n if (/^'.*'$/.test(defaultValue)) {\n return defaultValue.slice(1, -1);\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n return defaultValue;\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n\n/**\n * Alias for MysqlSchemaIntrospector.\n * MariaDB uses the same information_schema structure as MySQL.\n */\nexport const MariadbSchemaIntrospector = MysqlSchemaIntrospector;\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * PostgreSQL schema introspector\n */\nexport class PostgresSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = `\n SELECT table_name\n FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_type = 'BASE TABLE'\n ORDER BY table_name\n `;\n\n const results = await querier.all<{ table_name: string }>(sql);\n return results.map((r: any) => r.table_name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = `\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = $1\n ) AS exists\n `;\n\n const results = await querier.all<{ exists: boolean }>(sql, [tableName]);\n return results[0]?.exists ?? false;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('PostgresSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n const sql = /*sql*/ `\n SELECT\n c.column_name,\n c.data_type,\n c.udt_name,\n c.is_nullable,\n c.column_default,\n c.character_maximum_length,\n c.numeric_precision,\n c.numeric_scale,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'PRIMARY KEY'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_primary_key,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'UNIQUE'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_unique,\n pg_catalog.col_description(\n (SELECT oid FROM pg_catalog.pg_class WHERE relname = c.table_name),\n c.ordinal_position\n ) AS column_comment\n FROM information_schema.columns c\n WHERE c.table_schema = 'public'\n AND c.table_name = $1\n ORDER BY c.ordinal_position\n `;\n\n const results = await querier.all<{\n column_name: string;\n data_type: string;\n udt_name: string;\n is_nullable: string;\n column_default: string | null;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n is_primary_key: boolean;\n is_unique: boolean;\n column_comment: string | null;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.column_name,\n type: this.normalizeType(row.data_type, row.udt_name),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.is_primary_key,\n isAutoIncrement: this.isAutoIncrement(row.column_default),\n isUnique: row.is_unique,\n length: row.character_maximum_length ?? undefined,\n precision: row.numeric_precision ?? undefined,\n scale: row.numeric_scale ?? undefined,\n comment: row.column_comment ?? undefined,\n }));\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = /*sql*/ `\n SELECT\n i.relname AS index_name,\n array_agg(a.attname ORDER BY k.n) AS columns,\n ix.indisunique AS is_unique\n FROM pg_class t\n JOIN pg_index ix ON t.oid = ix.indrelid\n JOIN pg_class i ON i.oid = ix.indexrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n)\n JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum\n WHERE t.relname = $1\n AND n.nspname = 'public'\n AND NOT ix.indisprimary\n GROUP BY i.relname, ix.indisunique\n ORDER BY i.relname\n `;\n\n const results = await querier.all<{\n index_name: string;\n columns: string[];\n is_unique: boolean;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.index_name,\n columns: row.columns,\n unique: row.is_unique,\n }));\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = /*sql*/ `\n SELECT\n tc.constraint_name,\n array_agg(kcu.column_name ORDER BY kcu.ordinal_position) AS columns,\n ccu.table_name AS referenced_table,\n array_agg(ccu.column_name ORDER BY kcu.ordinal_position) AS referenced_columns,\n rc.delete_rule,\n rc.update_rule\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n JOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n JOIN information_schema.referential_constraints rc\n ON rc.constraint_name = tc.constraint_name\n AND rc.constraint_schema = tc.table_schema\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n GROUP BY tc.constraint_name, ccu.table_name, rc.delete_rule, rc.update_rule\n ORDER BY tc.constraint_name\n `;\n\n const results = await querier.all<{\n constraint_name: string;\n columns: string[];\n referenced_table: string;\n referenced_columns: string[];\n delete_rule: string;\n update_rule: string;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.constraint_name,\n columns: row.columns,\n referencedTable: row.referenced_table,\n referencedColumns: row.referenced_columns,\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = /*sql*/ `\n SELECT kcu.column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n ORDER BY kcu.ordinal_position\n `;\n\n const results = await querier.all<{ column_name: string }>(sql, [tableName]);\n\n if (results.length === 0) {\n return undefined;\n }\n\n return results.map((r: any) => r.column_name);\n }\n\n private normalizeType(dataType: string, udtName: string): string {\n // Handle user-defined types and arrays\n if (dataType === 'USER-DEFINED') {\n return udtName.toUpperCase();\n }\n if (dataType === 'ARRAY') {\n return `${udtName.replace(/^_/, '')}[]`;\n }\n return dataType.toUpperCase();\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (!defaultValue) {\n return undefined;\n }\n\n // Remove type casting\n const cleaned = defaultValue.replace(/::[a-z_]+(\\[\\])?/gi, '').trim();\n\n // Check for common patterns\n if (cleaned.startsWith(\"'\") && cleaned.endsWith(\"'\")) {\n return cleaned.slice(1, -1);\n }\n if (cleaned === 'true' || cleaned === 'false') {\n return cleaned === 'true';\n }\n if (cleaned === 'NULL') {\n return null;\n }\n if (/^-?\\d+$/.test(cleaned)) {\n return Number.parseInt(cleaned, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(cleaned)) {\n return Number.parseFloat(cleaned);\n }\n\n // Return as-is for functions like CURRENT_TIMESTAMP, nextval(), etc.\n return defaultValue;\n }\n\n private isAutoIncrement(defaultValue: string | null): boolean {\n if (!defaultValue) {\n return false;\n }\n return defaultValue.includes('nextval(');\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * SQLite schema introspector\n */\nexport class SqliteSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = /*sql*/ `\n SELECT name\n FROM sqlite_master\n WHERE type = 'table'\n AND name NOT LIKE 'sqlite_%'\n ORDER BY name\n `;\n\n const results = await querier.all<{ name: string }>(sql);\n return results.map((r: any) => r.name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = /*sql*/ `\n SELECT COUNT(*) as count\n FROM sqlite_master\n WHERE type = 'table'\n AND name = ?\n `;\n\n const results = await querier.all<{ count: number }>(sql, [tableName]);\n return (results[0]?.count ?? 0) > 0;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('SqliteSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n // SQLite uses PRAGMA for table info\n const sql = `PRAGMA table_info(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n cid: number;\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n }>(sql);\n\n // Get unique columns from indexes\n const uniqueColumns = await this.getUniqueColumns(querier, tableName);\n\n return results.map((row: any) => ({\n name: row.name,\n type: this.normalizeType(row.type),\n nullable: row.notnull === 0,\n defaultValue: this.parseDefaultValue(row.dflt_value),\n isPrimaryKey: row.pk > 0,\n isAutoIncrement: row.pk > 0 && row.type.toUpperCase() === 'INTEGER',\n isUnique: uniqueColumns.has(row.name),\n length: this.extractLength(row.type),\n precision: undefined,\n scale: undefined,\n comment: undefined, // SQLite doesn't support column comments\n }));\n }\n\n private async getUniqueColumns(querier: SqlQuerier, tableName: string): Promise<Set<string>> {\n const sql = `PRAGMA index_list(${this.escapeId(tableName)})`;\n\n const indexes = await querier.all<{\n seq: number;\n name: string;\n unique: number;\n origin: string;\n partial: number;\n }>(sql);\n\n const uniqueColumns = new Set<string>();\n\n for (const index of indexes) {\n if (index.unique && index.origin === 'u') {\n const indexInfo = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n // Only single-column unique constraints\n if (indexInfo.length === 1) {\n uniqueColumns.add(indexInfo[0].name);\n }\n }\n }\n\n return uniqueColumns;\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = `PRAGMA index_list(${this.escapeId(tableName)})`;\n\n const indexes = await querier.all<{\n seq: number;\n name: string;\n unique: number;\n origin: string;\n partial: number;\n }>(sql);\n\n const result: IndexSchema[] = [];\n\n for (const index of indexes) {\n // Skip auto-generated indexes (primary key, unique constraints)\n if (index.origin !== 'c') {\n continue;\n }\n\n const columns = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n\n result.push({\n name: index.name,\n columns: columns.map((c: any) => c.name),\n unique: Boolean(index.unique),\n });\n }\n\n return result;\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = `PRAGMA foreign_key_list(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n match: string;\n }>(sql);\n\n // Group by id to handle composite foreign keys\n const grouped = new Map<number, typeof results>();\n for (const row of results) {\n const existing = grouped.get(row.id) ?? [];\n existing.push(row);\n grouped.set(row.id, existing);\n }\n\n return Array.from(grouped.entries()).map(([id, rows]) => {\n const first = rows[0];\n return {\n name: `fk_${tableName}_${id}`,\n columns: rows.map((r: any) => r.from),\n referencedTable: first.table,\n referencedColumns: rows.map((r: any) => r.to),\n onDelete: this.normalizeReferentialAction(first.on_delete),\n onUpdate: this.normalizeReferentialAction(first.on_update),\n };\n });\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = `PRAGMA table_info(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n cid: number;\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n }>(sql);\n\n const pkColumns = results.filter((r: any) => r.pk > 0).sort((a: any, b: any) => a.pk - b.pk);\n\n if (pkColumns.length === 0) {\n return undefined;\n }\n\n return pkColumns.map((r: any) => r.name);\n }\n\n private escapeId(identifier: string): string {\n return `\\`${identifier.replace(/`/g, '``')}\\``;\n }\n\n private normalizeType(type: string): string {\n // Extract base type without length/precision\n const match = type.match(/^([A-Za-z]+)/);\n return match ? match[1].toUpperCase() : type.toUpperCase();\n }\n\n private extractLength(type: string): number | undefined {\n const match = type.match(/\\((\\d+)\\)/);\n return match ? Number.parseInt(match[1], 10) : undefined;\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n\n // Check for common patterns\n if (defaultValue === 'NULL') {\n return null;\n }\n if (defaultValue === 'CURRENT_TIMESTAMP' || defaultValue === 'CURRENT_DATE' || defaultValue === 'CURRENT_TIME') {\n return defaultValue;\n }\n if (/^'.*'$/.test(defaultValue)) {\n return defaultValue.slice(1, -1);\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n return defaultValue;\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n","import { AbstractDialect } from '../../dialect/index.js';\nimport { getMeta } from '../../entity/index.js';\nimport type { IndexSchema, SchemaDiff, SchemaGenerator, TableSchema, Type } from '../../type/index.js';\n\nexport class MongoSchemaGenerator extends AbstractDialect implements SchemaGenerator {\n generateCreateTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n const indexes: IndexSchema[] = [];\n\n for (const key in meta.fields) {\n const field = meta.fields[key];\n if (field.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n indexes.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n\n return JSON.stringify({ action: 'createCollection', name: collectionName, indexes });\n }\n\n generateDropTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n return JSON.stringify({ action: 'dropCollection', name: collectionName });\n }\n\n generateAlterTable(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateCreateIndex(diff.tableName, index));\n }\n }\n return statements;\n }\n\n generateAlterTableDown(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateDropIndex(diff.tableName, index.name));\n }\n }\n return statements;\n }\n\n generateCreateIndex(tableName: string, index: IndexSchema): string {\n const key: Record<string, number> = {};\n for (const col of index.columns) {\n key[col] = 1;\n }\n return JSON.stringify({\n action: 'createIndex',\n collection: tableName,\n name: index.name,\n key,\n options: { unique: index.unique, name: index.name },\n });\n }\n\n generateDropIndex(tableName: string, indexName: string): string {\n return JSON.stringify({\n action: 'dropIndex',\n collection: tableName,\n name: indexName,\n });\n }\n\n getSqlType(): string {\n return '';\n }\n\n diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n\n if (!currentSchema) {\n return { tableName: collectionName, type: 'create' };\n }\n\n const indexesToAdd: IndexSchema[] = [];\n const existingIndexes = new Set(currentSchema.indexes?.map((i: IndexSchema) => i.name) ?? []);\n\n for (const key in meta.fields) {\n const field = meta.fields[key];\n if (field.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n if (!existingIndexes.has(indexName)) {\n indexesToAdd.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n }\n\n if (indexesToAdd.length === 0) {\n return undefined;\n }\n\n return {\n tableName: collectionName,\n type: 'alter',\n indexesToAdd,\n };\n }\n}\n","import type { MongoQuerier, QuerierPool, SchemaIntrospector, TableSchema } from '../../type/index.js';\n\nexport class MongoSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections({ name: tableName }).toArray();\n if (collections.length === 0) {\n return undefined;\n }\n\n // MongoDB doesn't have a fixed schema, but we can look at the indexes\n const indexes = await db.collection(tableName).indexes();\n\n return {\n name: tableName,\n columns: [], // We don't have columns in Mongo\n indexes: indexes.map((idx: any) => ({\n name: idx.name,\n columns: Object.keys(idx.key),\n unique: !!idx.unique,\n })),\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections().toArray();\n return collections.map((c: any) => c.name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const names = await this.getTableNames();\n return names.includes(tableName);\n }\n}\n","import type { MigrationStorage, QuerierPool, SqlQuerier } from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * Migration metadata stored in the database\n */\ninterface MigrationRecord {\n name: string;\n executed_at: Date | number;\n}\n\n/**\n * Stores migration state in a database table.\n * Uses the querier's dialect for escaping and placeholders.\n */\nexport class DatabaseMigrationStorage implements MigrationStorage {\n private readonly tableName: string;\n private storageInitialized = false;\n\n constructor(\n private readonly pool: QuerierPool,\n options: {\n tableName?: string;\n } = {},\n ) {\n this.tableName = options.tableName ?? 'uql_migrations';\n }\n\n async ensureStorage(): Promise<void> {\n if (this.storageInitialized) {\n return;\n }\n\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n await this.createTableIfNotExists(querier);\n this.storageInitialized = true;\n } finally {\n await querier.release();\n }\n }\n\n private async createTableIfNotExists(querier: SqlQuerier): Promise<void> {\n const { escapeId } = querier.dialect;\n const sql = `\n CREATE TABLE IF NOT EXISTS ${escapeId(this.tableName)} (\n ${escapeId('name')} VARCHAR(255) PRIMARY KEY,\n ${escapeId('executed_at')} TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )\n `;\n\n await querier.run(sql);\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n const { escapeId } = querier.dialect;\n const sql = `SELECT ${escapeId('name')} FROM ${escapeId(this.tableName)} ORDER BY ${escapeId('name')} ASC`;\n const results = await querier.all<MigrationRecord>(sql);\n return results.map((r: any) => r.name);\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Log a migration as executed - uses provided querier (within transaction)\n */\n async logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { escapeId, placeholder } = querier.dialect;\n const sql = `INSERT INTO ${escapeId(this.tableName)} (${escapeId('name')}) VALUES (${placeholder(1)})`;\n await querier.run(sql, [migrationName]);\n }\n\n /**\n * Unlog a migration - uses provided querier (within transaction)\n */\n async unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { escapeId, placeholder } = querier.dialect;\n const sql = `DELETE FROM ${escapeId(this.tableName)} WHERE ${escapeId('name')} = ${placeholder(1)}`;\n await querier.run(sql, [migrationName]);\n }\n}\n","import { readdir } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { getEntities, getMeta } from '../entity/index.js';\nimport type {\n Dialect,\n Migration,\n MigrationDefinition,\n MigrationResult,\n MigrationStorage,\n MigratorOptions,\n MongoQuerier,\n NamingStrategy,\n Querier,\n QuerierPool,\n SchemaDiff,\n SchemaGenerator,\n SchemaIntrospector,\n Type,\n} from '../type/index.js';\nimport { isSqlQuerier } from '../type/index.js';\nimport {\n MariadbSchemaGenerator,\n MongoSchemaGenerator,\n MysqlSchemaGenerator,\n PostgresSchemaGenerator,\n SqliteSchemaGenerator,\n} from './generator/index.js';\nimport {\n MariadbSchemaIntrospector,\n MongoSchemaIntrospector,\n MysqlSchemaIntrospector,\n PostgresSchemaIntrospector,\n SqliteSchemaIntrospector,\n} from './introspection/index.js';\nimport { DatabaseMigrationStorage } from './storage/databaseStorage.js';\n\n/**\n * Main class for managing database migrations\n */\nexport class Migrator {\n private readonly storage: MigrationStorage;\n private readonly migrationsPath: string;\n private readonly logger: (message: string) => void;\n private readonly entities: Type<unknown>[];\n private readonly dialect: Dialect;\n private schemaGenerator?: SchemaGenerator;\n public schemaIntrospector?: SchemaIntrospector;\n\n constructor(\n private readonly pool: QuerierPool,\n options: MigratorOptions = {},\n ) {\n this.dialect = options.dialect ?? pool.dialect ?? 'postgres';\n this.storage =\n options.storage ??\n new DatabaseMigrationStorage(pool, {\n tableName: options.tableName,\n });\n this.migrationsPath = options.migrationsPath ?? './migrations';\n this.logger = options.logger ?? (() => {});\n this.entities = options.entities ?? [];\n this.schemaIntrospector = this.createIntrospector();\n this.schemaGenerator = options.schemaGenerator ?? this.createGenerator(options.namingStrategy);\n }\n\n /**\n * Set the schema generator for DDL operations\n */\n setSchemaGenerator(generator: SchemaGenerator): void {\n this.schemaGenerator = generator;\n }\n\n private createIntrospector(): SchemaIntrospector | undefined {\n switch (this.dialect) {\n case 'postgres':\n return new PostgresSchemaIntrospector(this.pool);\n case 'mysql':\n return new MysqlSchemaIntrospector(this.pool);\n case 'mariadb':\n return new MariadbSchemaIntrospector(this.pool);\n case 'sqlite':\n return new SqliteSchemaIntrospector(this.pool);\n case 'mongodb':\n return new MongoSchemaIntrospector(this.pool);\n default:\n return undefined;\n }\n }\n\n private createGenerator(namingStrategy?: NamingStrategy): SchemaGenerator | undefined {\n switch (this.dialect) {\n case 'postgres':\n return new PostgresSchemaGenerator(namingStrategy);\n case 'mysql':\n return new MysqlSchemaGenerator(namingStrategy);\n case 'mariadb':\n return new MariadbSchemaGenerator(namingStrategy);\n case 'sqlite':\n return new SqliteSchemaGenerator(namingStrategy);\n case 'mongodb':\n return new MongoSchemaGenerator(namingStrategy);\n default:\n return undefined;\n }\n }\n\n /**\n * Get the SQL dialect\n */\n getDialect(): Dialect {\n return this.dialect;\n }\n\n /**\n * Get all discovered migrations from the migrations directory\n */\n async getMigrations(): Promise<Migration[]> {\n const files = await this.getMigrationFiles();\n const migrations: Migration[] = [];\n\n for (const file of files) {\n const migration = await this.loadMigration(file);\n if (migration) {\n migrations.push(migration);\n }\n }\n\n // Sort by name (which typically includes timestamp)\n return migrations.sort((a: any, b: any) => a.name.localeCompare(b.name));\n }\n\n /**\n * Get list of pending migrations (not yet executed)\n */\n async pending(): Promise<Migration[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n return migrations.filter((m: any) => !executedSet.has(m.name));\n }\n\n /**\n * Get list of executed migrations\n */\n async executed(): Promise<string[]> {\n return this.storage.executed();\n }\n\n /**\n * Run all pending migrations\n */\n async up(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const pendingMigrations = await this.pending();\n const results: MigrationResult[] = [];\n\n let migrationsToRun = pendingMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'up');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Rollback migrations\n */\n async down(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n const executedMigrations = migrations.filter((m: any) => executedSet.has(m.name)).reverse(); // Rollback in reverse order\n\n const results: MigrationResult[] = [];\n let migrationsToRun = executedMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'down');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Run a single migration within a transaction\n */\n private async runMigration(migration: Migration, direction: 'up' | 'down'): Promise<MigrationResult> {\n const startTime = Date.now();\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n this.logger(`${direction === 'up' ? 'Running' : 'Reverting'} migration: ${migration.name}`);\n\n await querier.beginTransaction();\n\n if (direction === 'up') {\n await migration.up(querier);\n // Log within the same transaction\n await this.storage.logWithQuerier(querier, migration.name);\n } else {\n await migration.down(querier);\n // Unlog within the same transaction\n await this.storage.unlogWithQuerier(querier, migration.name);\n }\n\n await querier.commitTransaction();\n\n const duration = Date.now() - startTime;\n this.logger(`Migration ${migration.name} ${direction === 'up' ? 'applied' : 'reverted'} in ${duration}ms`);\n\n return {\n name: migration.name,\n direction,\n duration,\n success: true,\n };\n } catch (error) {\n await querier.rollbackTransaction();\n\n const duration = Date.now() - startTime;\n this.logger(`Migration ${migration.name} failed: ${(error as Error).message}`);\n\n return {\n name: migration.name,\n direction,\n duration,\n success: false,\n error: error as Error,\n };\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Generate a new migration file\n */\n async generate(name: string): Promise<string> {\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const content = this.generateMigrationContent(name);\n\n const { writeFile, mkdir } = await import('node:fs/promises');\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger(`Created migration: ${filePath}`);\n return filePath;\n }\n\n /**\n * Generate a migration based on entity schema differences\n */\n async generateFromEntities(name: string): Promise<string> {\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const diffs = await this.getDiffs();\n const upStatements: string[] = [];\n const downStatements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = this.findEntityForTable(diff.tableName);\n if (entity) {\n upStatements.push(this.schemaGenerator.generateCreateTable(entity));\n downStatements.push(this.schemaGenerator.generateDropTable(entity));\n }\n } else if (diff.type === 'alter') {\n const alterStatements = this.schemaGenerator.generateAlterTable(diff);\n upStatements.push(...alterStatements);\n\n const alterDownStatements = this.schemaGenerator.generateAlterTableDown(diff);\n downStatements.push(...alterDownStatements);\n }\n }\n\n if (upStatements.length === 0) {\n this.logger('No schema changes detected.');\n return '';\n }\n\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const content = this.generateMigrationContentWithStatements(name, upStatements, downStatements.reverse());\n\n const { writeFile, mkdir } = await import('node:fs/promises');\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger(`Created migration from entities: ${filePath}`);\n return filePath;\n }\n\n /**\n * Get all schema differences between entities and database\n */\n async getDiffs(): Promise<SchemaDiff[]> {\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n const diffs: SchemaDiff[] = [];\n\n for (const entity of entities) {\n const meta = getMeta(entity);\n const tableName = this.schemaGenerator.resolveTableName(entity, meta);\n const currentSchema = await this.schemaIntrospector.getTableSchema(tableName);\n const diff = this.schemaGenerator.diffSchema(entity, currentSchema);\n if (diff) {\n diffs.push(diff);\n }\n }\n\n return diffs;\n }\n\n private findEntityForTable(tableName: string): Type<unknown> | undefined {\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n for (const entity of entities) {\n const meta = getMeta(entity);\n const name = this.schemaGenerator.resolveTableName(entity, meta);\n if (name === tableName) {\n return entity;\n }\n }\n return undefined;\n }\n\n /**\n * Sync schema directly (for development only - not for production!)\n */\n async sync(options: { force?: boolean } = {}): Promise<void> {\n if (options.force) {\n return this.syncForce();\n }\n return this.autoSync({ safe: true });\n }\n\n /**\n * Drops and recreates all tables (Development only!)\n */\n public async syncForce(): Promise<void> {\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n await querier.beginTransaction();\n\n // Drop all tables first (in reverse order for foreign keys)\n for (const entity of [...entities].reverse()) {\n const dropSql = this.schemaGenerator.generateDropTable(entity);\n this.logger(`Executing: ${dropSql}`);\n await querier.run(dropSql);\n }\n\n // Create all tables\n for (const entity of entities) {\n const createSql = this.schemaGenerator.generateCreateTable(entity);\n this.logger(`Executing: ${createSql}`);\n await querier.run(createSql);\n }\n\n await querier.commitTransaction();\n this.logger('Schema sync (force) completed');\n } catch (error) {\n await querier.rollbackTransaction();\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Safely synchronizes the schema by only adding missing tables and columns.\n */\n async autoSync(options: { safe?: boolean; drop?: boolean; logging?: boolean } = {}): Promise<void> {\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const diffs = await this.getDiffs();\n const statements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = this.findEntityForTable(diff.tableName);\n if (entity) {\n statements.push(this.schemaGenerator.generateCreateTable(entity));\n }\n } else if (diff.type === 'alter') {\n const filteredDiff = this.filterDiff(diff, options);\n const alterStatements = this.schemaGenerator.generateAlterTable(filteredDiff);\n statements.push(...alterStatements);\n }\n }\n\n if (statements.length === 0) {\n if (options.logging) this.logger('Schema is already in sync.');\n return;\n }\n\n await this.executeSyncStatements(statements, options);\n }\n\n private filterDiff(diff: SchemaDiff, options: { safe?: boolean; drop?: boolean }): SchemaDiff {\n const filteredDiff = { ...diff } as { -readonly [K in keyof SchemaDiff]: SchemaDiff[K] };\n if (options.safe !== false) {\n // In safe mode, we only allow additions\n delete filteredDiff.columnsToDrop;\n delete filteredDiff.indexesToDrop;\n delete filteredDiff.foreignKeysToDrop;\n }\n if (!options.drop) {\n delete filteredDiff.columnsToDrop;\n }\n return filteredDiff;\n }\n\n private async executeSyncStatements(statements: string[], options: { logging?: boolean }): Promise<void> {\n const querier = await this.pool.getQuerier();\n try {\n if (this.dialect === 'mongodb') {\n await this.executeMongoSyncStatements(statements, options, querier as MongoQuerier);\n } else {\n await this.executeSqlSyncStatements(statements, options, querier);\n }\n if (options.logging) this.logger('Schema synchronization completed');\n } catch (error) {\n if (this.dialect !== 'mongodb' && isSqlQuerier(querier)) {\n await querier.rollbackTransaction();\n }\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n private async executeMongoSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: MongoQuerier,\n ): Promise<void> {\n const db = querier.db;\n for (const stmt of statements) {\n const cmd = JSON.parse(stmt) as {\n action: string;\n name?: string;\n collection?: string;\n indexes?: { name: string; columns: string[]; unique?: boolean }[];\n key?: Record<string, number>;\n options?: any;\n };\n if (options.logging) this.logger(`Executing MongoDB: ${stmt}`);\n\n const collectionName = cmd.name || cmd.collection;\n if (!collectionName) {\n throw new Error(`MongoDB command missing collection name: ${stmt}`);\n }\n const collection = db.collection(collectionName);\n\n if (cmd.action === 'createCollection') {\n await db.createCollection(cmd.name);\n if (cmd.indexes?.length) {\n for (const idx of cmd.indexes) {\n const key = Object.fromEntries(idx.columns.map((c: string) => [c, 1]));\n await collection.createIndex(key, { unique: idx.unique, name: idx.name });\n }\n }\n } else if (cmd.action === 'dropCollection') {\n await collection.drop();\n } else if (cmd.action === 'createIndex') {\n await collection.createIndex(cmd.key, cmd.options);\n } else if (cmd.action === 'dropIndex') {\n await collection.dropIndex(cmd.name);\n }\n }\n }\n\n private async executeSqlSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: Querier,\n ): Promise<void> {\n if (!isSqlQuerier(querier)) {\n throw new Error('Migrator requires a SQL-based querier for this dialect');\n }\n await querier.beginTransaction();\n for (const sql of statements) {\n if (options.logging) this.logger(`Executing: ${sql}`);\n await querier.run(sql);\n }\n await querier.commitTransaction();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<{ pending: string[]; executed: string[] }> {\n const [pending, executed] = await Promise.all([this.pending().then((m) => m.map((x) => x.name)), this.executed()]);\n\n return { pending, executed };\n }\n\n /**\n * Get migration files from the migrations directory\n */\n private async getMigrationFiles(): Promise<string[]> {\n try {\n const files = await readdir(this.migrationsPath);\n return files\n .filter((f) => /\\.(ts|js|mjs)$/.test(f))\n .filter((f) => !f.endsWith('.d.ts'))\n .sort();\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n }\n\n /**\n * Load a migration from a file\n */\n private async loadMigration(fileName: string): Promise<Migration | undefined> {\n const filePath = join(this.migrationsPath, fileName);\n const fileUrl = pathToFileURL(filePath).href;\n\n try {\n const module = await import(fileUrl);\n const migration = module.default ?? module;\n\n if (this.isMigration(migration)) {\n return {\n name: this.getMigrationName(fileName),\n up: migration.up.bind(migration),\n down: migration.down.bind(migration),\n };\n }\n\n this.logger(`Warning: ${fileName} is not a valid migration`);\n return undefined;\n } catch (error) {\n this.logger(`Error loading migration ${fileName}: ${(error as Error).message}`);\n return undefined;\n }\n }\n\n /**\n * Check if an object is a valid migration\n */\n private isMigration(obj: unknown): obj is MigrationDefinition {\n return (\n typeof obj === 'object' &&\n obj !== undefined &&\n obj !== null &&\n typeof (obj as MigrationDefinition).up === 'function' &&\n typeof (obj as MigrationDefinition).down === 'function'\n );\n }\n\n /**\n * Extract migration name from filename\n */\n private getMigrationName(fileName: string): string {\n return basename(fileName, extname(fileName));\n }\n\n /**\n * Generate timestamp string for migration names\n */\n private getTimestamp(): string {\n const now = new Date();\n return [\n now.getFullYear(),\n String(now.getMonth() + 1).padStart(2, '0'),\n String(now.getDate()).padStart(2, '0'),\n String(now.getHours()).padStart(2, '0'),\n String(now.getMinutes()).padStart(2, '0'),\n String(now.getSeconds()).padStart(2, '0'),\n ].join('');\n }\n\n /**\n * Convert a string to a slug for filenames\n */\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '');\n }\n\n /**\n * Generate migration file content\n */\n private generateMigrationContent(name: string): string {\n return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';\n\n/**\n * Migration: ${name}\n * Created: ${new Date().toISOString()}\n */\nexport default {\n async up(querier: SqlQuerier): Promise<void> {\n // Add your migration logic here\n // Example:\n // await querier.run(\\`\n // CREATE TABLE \"users\" (\n // \"id\" SERIAL PRIMARY KEY,\n // \"name\" VARCHAR(255) NOT NULL,\n // \"email\" VARCHAR(255) UNIQUE NOT NULL,\n // \"createdAt\" TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n // )\n // \\`);\n },\n\n async down(querier: SqlQuerier): Promise<void> {\n // Add your rollback logic here\n // Example:\n // await querier.run(\\`DROP TABLE IF EXISTS \"users\"\\`);\n },\n};\n`;\n }\n\n /**\n * Generate migration file content with SQL statements\n */\n private generateMigrationContentWithStatements(\n name: string,\n upStatements: string[],\n downStatements: string[],\n ): string {\n const upSql = upStatements.map((s) => /*ts*/ ` await querier.run(\\`${s}\\`);`).join('\\n');\n const downSql = downStatements.map((s) => /*ts*/ ` await querier.run(\\`${s}\\`);`).join('\\n');\n\n return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';\n\n/**\n * Migration: ${name}\n * Created: ${new Date().toISOString()}\n * Generated from entity definitions\n */\nexport default {\n async up(querier: SqlQuerier): Promise<void> {\n${upSql}\n },\n\n async down(querier: SqlQuerier): Promise<void> {\n${downSql}\n },\n};\n`;\n }\n}\n\n/**\n * Helper function to define a migration with proper typing\n */\nexport function defineMigration(migration: MigrationDefinition): MigrationDefinition {\n return migration;\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { MigrationStorage, SqlQuerier } from '../../type/index.js';\n\n/**\n * Stores migration state in a JSON file (useful for development/testing)\n */\nexport class JsonMigrationStorage implements MigrationStorage {\n private readonly filePath: string;\n private cache: string[] | null = null;\n\n constructor(filePath = './migrations/.uql-migrations.json') {\n this.filePath = filePath;\n }\n\n async ensureStorage(): Promise<void> {\n try {\n await this.load();\n } catch {\n // File doesn't exist, create it\n await this.save([]);\n }\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n return this.cache ?? [];\n }\n\n async logWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n const executed = await this.executed();\n if (!executed.includes(migrationName)) {\n executed.push(migrationName);\n executed.sort();\n await this.save(executed);\n }\n }\n\n async unlogWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n const executed = await this.executed();\n const index = executed.indexOf(migrationName);\n if (index !== -1) {\n executed.splice(index, 1);\n await this.save(executed);\n }\n }\n\n private async load(): Promise<void> {\n const content = await readFile(this.filePath, 'utf-8');\n this.cache = JSON.parse(content);\n }\n\n private async save(migrations: string[]): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(migrations, null, 2), 'utf-8');\n this.cache = migrations;\n }\n}\n"],"names":["AbstractSchemaGenerator","AbstractDialect","namingStrategy","escapeIdChar","escapeId","identifier","escapeSqlId","generateCreateTable","entity","options","meta","getMeta","tableName","resolveTableName","columns","generateColumnDefinitions","constraints","generateTableConstraints","ifNotExists","sql","map","col","join","length","c","getTableOptions","generateDropTable","generateAlterTable","diff","statements","columnsToAdd","column","colDef","generateColumnDefinitionFromSchema","push","columnsToAlter","to","colStatements","generateAlterColumnStatements","columnsToDrop","columnName","indexesToAdd","index","generateCreateIndex","indexesToDrop","indexName","generateDropIndex","generateAlterTableDown","name","unique","fieldKeys","getKeys","fields","key","field","virtual","generateColumnDefinition","fieldKey","resolveColumnName","isId","isPrimaryKey","id","sqlType","autoIncrement","onInsert","serialPrimaryKeyType","getSqlType","type","definition","includes","nullable","defaultValue","undefined","formatDefaultValue","comment","generateColumnComment","precision","scale","isUnique","reference","refEntity","refMeta","refIdField","refTableName","refColumnName","fkName","fieldType","columnType","mapColumnType","Number","String","Boolean","getBooleanType","Date","BigInt","value","replace","toISOString","diffSchema","currentSchema","currentColumns","Map","currentColumn","get","fieldToColumnSchema","desiredColumn","columnsNeedAlteration","from","delete","isAutoIncrement","current","desired","toLowerCase","JSON","stringify","MysqlSchemaGenerator","newDefinition","escapedComment","PostgresSchemaGenerator","escapedTableName","escapedColumnName","generateColumnCommentStatement","SqliteSchemaGenerator","Error","MysqlSchemaIntrospector","pool","getTableSchema","querier","getQuerier","exists","tableExistsInternal","indexes","foreignKeys","primaryKey","Promise","all","getColumns","getIndexes","getForeignKeys","getPrimaryKey","release","getTableNames","results","r","table_name","tableExists","count","isSqlQuerier","row","column_name","data_type","toUpperCase","is_nullable","parseDefaultValue","column_default","column_key","extra","character_maximum_length","numeric_precision","numeric_scale","column_comment","index_name","split","is_unique","constraint_name","referencedTable","referenced_table","referencedColumns","referenced_columns","onDelete","normalizeReferentialAction","delete_rule","onUpdate","update_rule","test","slice","parseInt","parseFloat","action","MariadbSchemaIntrospector","PostgresSchemaIntrospector","normalizeType","udt_name","is_primary_key","dataType","udtName","cleaned","trim","startsWith","endsWith","SqliteSchemaIntrospector","uniqueColumns","getUniqueColumns","notnull","dflt_value","pk","has","extractLength","Set","origin","indexInfo","add","result","grouped","existing","set","Array","entries","rows","first","table","on_delete","on_update","pkColumns","filter","sort","a","b","match","MongoSchemaGenerator","collectionName","collection","existingIndexes","i","MongoSchemaIntrospector","db","collections","listCollections","toArray","idx","Object","keys","names","DatabaseMigrationStorage","storageInitialized","ensureStorage","createTableIfNotExists","dialect","run","executed","logWithQuerier","migrationName","placeholder","unlogWithQuerier","Migrator","storage","migrationsPath","logger","entities","schemaIntrospector","createIntrospector","schemaGenerator","createGenerator","setSchemaGenerator","generator","MariadbSchemaGenerator","getDialect","getMigrations","files","getMigrationFiles","migrations","file","migration","loadMigration","localeCompare","pending","executedSet","m","up","pendingMigrations","migrationsToRun","toIndex","findIndex","step","runMigration","success","down","executedMigrations","reverse","direction","startTime","now","beginTransaction","commitTransaction","duration","error","rollbackTransaction","message","generate","timestamp","getTimestamp","fileName","slugify","filePath","content","generateMigrationContent","writeFile","mkdir","recursive","generateFromEntities","diffs","getDiffs","upStatements","downStatements","findEntityForTable","alterStatements","alterDownStatements","generateMigrationContentWithStatements","getEntities","sync","force","syncForce","autoSync","safe","dropSql","createSql","filteredDiff","filterDiff","logging","executeSyncStatements","foreignKeysToDrop","drop","executeMongoSyncStatements","executeSqlSyncStatements","stmt","cmd","parse","createCollection","fromEntries","createIndex","dropIndex","status","then","x","readdir","f","code","fileUrl","pathToFileURL","href","module","default","isMigration","getMigrationName","bind","obj","basename","extname","getFullYear","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","text","upSql","s","downSql","defineMigration","JsonMigrationStorage","cache","load","save","_querier","indexOf","splice","readFile","dirname"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uql-browser.min.js","sources":["../../src/migrate/schemaGenerator.ts","../../src/migrate/generator/mysqlSchemaGenerator.ts","../../src/migrate/generator/postgresSchemaGenerator.ts","../../src/migrate/generator/sqliteSchemaGenerator.ts","../../src/migrate/introspection/mysqlIntrospector.ts","../../src/migrate/introspection/postgresIntrospector.ts","../../src/migrate/introspection/sqliteIntrospector.ts","../../src/migrate/generator/mongoSchemaGenerator.ts","../../src/migrate/introspection/mongoIntrospector.ts","../../src/migrate/storage/databaseStorage.ts","../../src/migrate/migrator.ts","../../src/migrate/storage/jsonStorage.ts"],"sourcesContent":["import { AbstractDialect } from '../dialect/index.js';\nimport { getMeta } from '../entity/index.js';\nimport type {\n ColumnSchema,\n ColumnType,\n EntityMeta,\n FieldKey,\n FieldOptions,\n IndexSchema,\n NamingStrategy,\n SchemaDiff,\n SchemaGenerator,\n TableSchema,\n Type,\n} from '../type/index.js';\nimport { escapeSqlId, getKeys } from '../util/index.js';\n\n/**\n * Abstract base class for SQL schema generation\n */\nexport abstract class AbstractSchemaGenerator extends AbstractDialect implements SchemaGenerator {\n /**\n * Primary key type for auto-increment integer IDs\n */\n protected abstract readonly serialPrimaryKeyType: string;\n\n constructor(\n namingStrategy?: NamingStrategy,\n protected readonly escapeIdChar: '`' | '\"' = '`',\n ) {\n super(namingStrategy);\n }\n\n /**\n * Escape an identifier (table name, column name, etc.)\n */\n protected escapeId(identifier: string): string {\n return escapeSqlId(identifier, this.escapeIdChar);\n }\n\n generateCreateTable<E>(entity: Type<E>, options: { ifNotExists?: boolean } = {}): string {\n const meta = getMeta(entity);\n const tableName = this.resolveTableName(entity, meta);\n const columns = this.generateColumnDefinitions(meta);\n const constraints = this.generateTableConstraints(meta);\n\n const ifNotExists = options.ifNotExists ? 'IF NOT EXISTS ' : '';\n let sql = `CREATE TABLE ${ifNotExists}${this.escapeId(tableName)} (\\n`;\n sql += columns.map((col) => ` ${col}`).join(',\\n');\n\n if (constraints.length > 0) {\n sql += ',\\n';\n sql += constraints.map((c: any) => ` ${c}`).join(',\\n');\n }\n\n sql += '\\n)';\n sql += this.getTableOptions(meta);\n sql += ';';\n\n return sql;\n }\n\n generateDropTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const tableName = this.resolveTableName(entity, meta);\n return `DROP TABLE IF EXISTS ${this.escapeId(tableName)};`;\n }\n\n generateAlterTable(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n const tableName = this.escapeId(diff.tableName);\n\n // Add new columns\n if (diff.columnsToAdd?.length) {\n for (const column of diff.columnsToAdd) {\n const colDef = this.generateColumnDefinitionFromSchema(column);\n statements.push(`ALTER TABLE ${tableName} ADD COLUMN ${colDef};`);\n }\n }\n\n // Alter existing columns\n if (diff.columnsToAlter?.length) {\n for (const { to } of diff.columnsToAlter) {\n const colDef = this.generateColumnDefinitionFromSchema(to);\n const colStatements = this.generateAlterColumnStatements(diff.tableName, to, colDef);\n statements.push(...colStatements);\n }\n }\n\n // Drop columns\n if (diff.columnsToDrop?.length) {\n for (const columnName of diff.columnsToDrop) {\n statements.push(`ALTER TABLE ${tableName} DROP COLUMN ${this.escapeId(columnName)};`);\n }\n }\n\n // Add indexes\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateCreateIndex(diff.tableName, index));\n }\n }\n\n // Drop indexes\n if (diff.indexesToDrop?.length) {\n for (const indexName of diff.indexesToDrop) {\n statements.push(this.generateDropIndex(diff.tableName, indexName));\n }\n }\n\n return statements;\n }\n\n generateAlterTableDown(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n const tableName = this.escapeId(diff.tableName);\n\n // Rollback additions by dropping columns\n if (diff.columnsToAdd?.length) {\n for (const column of diff.columnsToAdd) {\n statements.push(`ALTER TABLE ${tableName} DROP COLUMN ${this.escapeId(column.name)};`);\n }\n }\n\n return statements;\n }\n\n generateCreateIndex(tableName: string, index: IndexSchema): string {\n const unique = index.unique ? 'UNIQUE ' : '';\n const columns = index.columns.map((c: any) => this.escapeId(c)).join(', ');\n return `CREATE ${unique}INDEX ${this.escapeId(index.name)} ON ${this.escapeId(tableName)} (${columns});`;\n }\n\n generateDropIndex(tableName: string, indexName: string): string {\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n\n /**\n * Generate column definitions from entity metadata\n */\n public generateColumnDefinitions<E>(meta: EntityMeta<E>): string[] {\n const columns: string[] = [];\n const fieldKeys = getKeys(meta.fields) as FieldKey<E>[];\n\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (field?.virtual) continue; // Skip virtual fields\n\n const colDef = this.generateColumnDefinition(key as string, field, meta);\n columns.push(colDef);\n }\n\n return columns;\n }\n\n /**\n * Generate a single column definition\n */\n public generateColumnDefinition<E>(fieldKey: string, field: FieldOptions, meta: EntityMeta<E>): string {\n const columnName = this.escapeId(this.resolveColumnName(fieldKey, field));\n const isId = field.isId === true;\n const isPrimaryKey = isId && meta.id === fieldKey;\n\n // Determine SQL type\n let sqlType: string;\n if (isPrimaryKey && field.autoIncrement !== false && !field.onInsert) {\n // Auto-increment primary key\n sqlType = this.serialPrimaryKeyType;\n } else {\n sqlType = this.getSqlType(field, field.type);\n }\n\n let definition = `${columnName} ${sqlType}`;\n\n // PRIMARY KEY constraint (for non-serial types)\n if (isPrimaryKey && !sqlType.includes('PRIMARY KEY')) {\n definition += ' PRIMARY KEY';\n }\n\n // NULL/NOT NULL\n if (!isPrimaryKey) {\n const nullable = field.nullable ?? true;\n if (!nullable) {\n definition += ' NOT NULL';\n }\n }\n\n // UNIQUE constraint\n if (field.unique && !isPrimaryKey) {\n definition += ' UNIQUE';\n }\n\n // DEFAULT value\n if (field.defaultValue !== undefined) {\n definition += ` DEFAULT ${this.formatDefaultValue(field.defaultValue)}`;\n }\n\n // COMMENT (if supported)\n if (field.comment) {\n definition += this.generateColumnComment(\n this.resolveTableName(meta.entity, meta),\n this.resolveColumnName(fieldKey, field),\n field.comment,\n );\n }\n\n return definition;\n }\n\n /**\n * Generate column definition from a ColumnSchema object\n */\n public generateColumnDefinitionFromSchema(column: ColumnSchema): string {\n const columnName = this.escapeId(column.name);\n let type = column.type;\n\n if (column.length && !type.includes('(')) {\n type = `${type}(${column.length})`;\n } else if (column.precision !== undefined && !type.includes('(')) {\n if (column.scale !== undefined) {\n type = `${type}(${column.precision}, ${column.scale})`;\n } else {\n type = `${type}(${column.precision})`;\n }\n }\n\n let definition = `${columnName} ${type}`;\n\n if (column.isPrimaryKey) {\n definition += ' PRIMARY KEY';\n }\n\n if (!column.nullable && !column.isPrimaryKey) {\n definition += ' NOT NULL';\n }\n\n if (column.isUnique && !column.isPrimaryKey) {\n definition += ' UNIQUE';\n }\n\n if (column.defaultValue !== undefined) {\n definition += ` DEFAULT ${this.formatDefaultValue(column.defaultValue)}`;\n }\n\n return definition;\n }\n\n /**\n * Generate table constraints (indexes, foreign keys, etc.)\n */\n public generateTableConstraints<E>(meta: EntityMeta<E>): string[] {\n const constraints: string[] = [];\n const fieldKeys = getKeys(meta.fields) as FieldKey<E>[];\n const tableName = this.resolveTableName(meta.entity, meta);\n\n // Generate indexes from field options\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (field?.index) {\n const columnName = this.resolveColumnName(key as string, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${tableName}_${columnName}`;\n constraints.push(`INDEX ${this.escapeId(indexName)} (${this.escapeId(columnName)})`);\n }\n }\n\n // Generate foreign key constraints from references\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (field?.reference) {\n const refEntity = field.reference();\n const refMeta = getMeta(refEntity);\n const refIdField = refMeta.fields[refMeta.id];\n const columnName = this.resolveColumnName(key as string, field);\n const refTableName = this.resolveTableName(refEntity, refMeta);\n const refColumnName = this.resolveColumnName(refMeta.id, refIdField);\n const fkName = `fk_${tableName}_${columnName}`;\n\n constraints.push(\n `CONSTRAINT ${this.escapeId(fkName)} FOREIGN KEY (${this.escapeId(columnName)}) ` +\n `REFERENCES ${this.escapeId(refTableName)} (${this.escapeId(refColumnName)})`,\n );\n }\n }\n\n return constraints;\n }\n\n getSqlType(field: FieldOptions, fieldType?: unknown): string {\n // Use explicit column type if specified\n if (field.columnType) {\n return this.mapColumnType(field.columnType, field);\n }\n\n // Handle special types\n if (field.type === 'json' || field.type === 'jsonb') {\n return this.mapColumnType(field.type as ColumnType, field);\n }\n\n if (field.type === 'vector') {\n return this.mapColumnType('vector', field);\n }\n\n // Infer from TypeScript type\n const type = fieldType ?? field.type;\n\n if (type === Number || type === 'number') {\n return field.precision ? this.mapColumnType('decimal', field) : 'BIGINT';\n }\n\n if (type === String || type === 'string') {\n const length = field.length ?? 255;\n return `VARCHAR(${length})`;\n }\n\n if (type === Boolean || type === 'boolean') {\n return this.getBooleanType();\n }\n\n if (type === Date || type === 'date') {\n return 'TIMESTAMP';\n }\n\n if (type === BigInt || type === 'bigint') {\n return 'BIGINT';\n }\n\n // Default to VARCHAR\n return `VARCHAR(${field.length ?? 255})`;\n }\n\n /**\n * Map uql column type to database-specific SQL type\n */\n public abstract mapColumnType(columnType: ColumnType, field: FieldOptions): string;\n\n /**\n * Get the boolean type for this database\n */\n public abstract getBooleanType(): string;\n\n /**\n * Generate ALTER COLUMN statements (database-specific)\n */\n public abstract generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[];\n\n /**\n * Get table options (e.g., ENGINE for MySQL)\n */\n getTableOptions<E>(meta: EntityMeta<E>): string {\n return '';\n }\n\n /**\n * Generate column comment clause (if supported)\n */\n public abstract generateColumnComment(tableName: string, columnName: string, comment: string): string;\n\n /**\n * Format a default value for SQL\n */\n public formatDefaultValue(value: unknown): string {\n if (value === null) {\n return 'NULL';\n }\n if (typeof value === 'string') {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n if (typeof value === 'boolean') {\n return value ? 'TRUE' : 'FALSE';\n }\n if (typeof value === 'number' || typeof value === 'bigint') {\n return String(value);\n }\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n return String(value);\n }\n\n /**\n * Compare two schemas and return the differences\n */\n diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n\n if (!currentSchema) {\n // Table doesn't exist, need to create\n return {\n tableName: this.resolveTableName(entity, meta),\n type: 'create',\n };\n }\n\n const columnsToAdd: ColumnSchema[] = [];\n const columnsToAlter: { from: ColumnSchema; to: ColumnSchema }[] = [];\n const columnsToDrop: string[] = [];\n\n const currentColumns = new Map(currentSchema.columns.map((c: any) => [c.name, c]));\n const fieldKeys = getKeys(meta.fields) as FieldKey<E>[];\n\n // Check for new or altered columns\n for (const key of fieldKeys) {\n const field = meta.fields[key];\n if (field?.virtual) continue;\n\n const columnName = this.resolveColumnName(key as string, field);\n const currentColumn = currentColumns.get(columnName);\n\n if (!currentColumn) {\n // Column needs to be added\n columnsToAdd.push(this.fieldToColumnSchema(key as string, field, meta));\n } else {\n // Check if column needs alteration\n const desiredColumn = this.fieldToColumnSchema(key as string, field, meta);\n if (this.columnsNeedAlteration(currentColumn, desiredColumn)) {\n columnsToAlter.push({ from: currentColumn, to: desiredColumn });\n }\n }\n currentColumns.delete(columnName);\n }\n\n // Remaining columns in currentColumns should be dropped\n for (const [name] of currentColumns) {\n columnsToDrop.push(name);\n }\n\n if (columnsToAdd.length === 0 && columnsToAlter.length === 0 && columnsToDrop.length === 0) {\n return undefined; // No changes needed\n }\n\n return {\n tableName: this.resolveTableName(entity, meta),\n type: 'alter',\n columnsToAdd: columnsToAdd.length > 0 ? columnsToAdd : undefined,\n columnsToAlter: columnsToAlter.length > 0 ? columnsToAlter : undefined,\n columnsToDrop: columnsToDrop.length > 0 ? columnsToDrop : undefined,\n };\n }\n\n /**\n * Convert field options to ColumnSchema\n */\n protected fieldToColumnSchema<E>(fieldKey: string, field: FieldOptions, meta: EntityMeta<E>): ColumnSchema {\n const isId = field.isId === true;\n const isPrimaryKey = isId && meta.id === fieldKey;\n\n return {\n name: this.resolveColumnName(fieldKey, field),\n type: this.getSqlType(field, field.type),\n nullable: field.nullable ?? !isPrimaryKey,\n defaultValue: field.defaultValue,\n isPrimaryKey,\n isAutoIncrement: isPrimaryKey && field.autoIncrement !== false && !field.onInsert,\n isUnique: field.unique ?? false,\n length: field.length,\n precision: field.precision,\n scale: field.scale,\n comment: field.comment,\n };\n }\n\n /**\n * Check if two columns differ enough to require alteration\n */\n protected columnsNeedAlteration(current: ColumnSchema, desired: ColumnSchema): boolean {\n // Compare relevant properties\n return (\n current.type.toLowerCase() !== desired.type.toLowerCase() ||\n current.nullable !== desired.nullable ||\n current.isUnique !== desired.isUnique ||\n JSON.stringify(current.defaultValue) !== JSON.stringify(desired.defaultValue)\n );\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * MySQL/MariaDB-specific schema generator\n */\nexport class MysqlSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'INT AUTO_INCREMENT PRIMARY KEY';\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n switch (columnType) {\n case 'int':\n return 'INT';\n case 'smallint':\n return 'SMALLINT';\n case 'bigint':\n return 'BIGINT';\n case 'float':\n return 'FLOAT';\n case 'double':\n case 'real':\n return 'DOUBLE';\n case 'decimal':\n case 'numeric':\n if (field.precision !== undefined) {\n if (field.scale !== undefined) {\n return `DECIMAL(${field.precision}, ${field.scale})`;\n }\n return `DECIMAL(${field.precision})`;\n }\n return 'DECIMAL(10, 2)';\n case 'boolean':\n return 'TINYINT(1)';\n case 'char':\n return `CHAR(${field.length ?? 1})`;\n case 'varchar':\n return `VARCHAR(${field.length ?? 255})`;\n case 'text':\n return 'TEXT';\n case 'uuid':\n return 'CHAR(36)';\n case 'date':\n return 'DATE';\n case 'time':\n return 'TIME';\n case 'timestamp':\n case 'timestamptz':\n return 'TIMESTAMP';\n case 'json':\n case 'jsonb':\n return 'JSON';\n case 'blob':\n case 'bytea':\n return 'BLOB';\n case 'vector':\n // MySQL doesn't have native vector support, use JSON\n return 'JSON';\n case 'serial':\n return 'INT AUTO_INCREMENT';\n case 'bigserial':\n return 'BIGINT AUTO_INCREMENT';\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'TINYINT(1)';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n return [`ALTER TABLE ${this.escapeId(tableName)} MODIFY COLUMN ${newDefinition};`];\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n const escapedComment = comment.replace(/'/g, \"''\");\n return ` COMMENT '${escapedComment}'`;\n }\n\n override getTableOptions<E>(): string {\n return ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n // MySQL requires table name in DROP INDEX\n return `DROP INDEX ${this.escapeId(indexName)} ON ${this.escapeId(tableName)};`;\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions, NamingStrategy } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * PostgreSQL-specific schema generator\n */\nexport class PostgresSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'SERIAL PRIMARY KEY';\n\n constructor(namingStrategy?: NamingStrategy) {\n super(namingStrategy, '\"');\n }\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n switch (columnType) {\n case 'int':\n return 'INTEGER';\n case 'smallint':\n return 'SMALLINT';\n case 'bigint':\n return 'BIGINT';\n case 'float':\n case 'double':\n case 'real':\n return 'DOUBLE PRECISION';\n case 'decimal':\n case 'numeric':\n if (field.precision !== undefined) {\n if (field.scale !== undefined) {\n return `NUMERIC(${field.precision}, ${field.scale})`;\n }\n return `NUMERIC(${field.precision})`;\n }\n return 'NUMERIC';\n case 'boolean':\n return 'BOOLEAN';\n case 'char':\n return `CHAR(${field.length ?? 1})`;\n case 'varchar':\n return `VARCHAR(${field.length ?? 255})`;\n case 'text':\n return 'TEXT';\n case 'uuid':\n return 'UUID';\n case 'date':\n return 'DATE';\n case 'time':\n return 'TIME';\n case 'timestamp':\n return 'TIMESTAMP';\n case 'timestamptz':\n return 'TIMESTAMPTZ';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSONB';\n case 'blob':\n case 'bytea':\n return 'BYTEA';\n case 'vector':\n if (field.length) {\n return `VECTOR(${field.length})`;\n }\n return 'VECTOR';\n case 'serial':\n return 'SERIAL';\n case 'bigserial':\n return 'BIGSERIAL';\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'BOOLEAN';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n const statements: string[] = [];\n const escapedTableName = this.escapeId(tableName);\n const escapedColumnName = this.escapeId(column.name);\n\n // PostgreSQL uses separate ALTER COLUMN clauses for different changes\n // 1. Change type\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} TYPE ${column.type};`);\n\n // 2. Change nullability\n if (column.nullable) {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} DROP NOT NULL;`);\n } else {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} SET NOT NULL;`);\n }\n\n // 3. Change default value\n if (column.defaultValue !== undefined) {\n statements.push(\n `ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} SET DEFAULT ${this.formatDefaultValue(column.defaultValue)};`,\n );\n } else {\n statements.push(`ALTER TABLE ${escapedTableName} ALTER COLUMN ${escapedColumnName} DROP DEFAULT;`);\n }\n\n return statements;\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n // PostgreSQL handles comments separately via COMMENT ON COLUMN\n return '';\n }\n\n /**\n * Generate COMMENT ON COLUMN statement for PostgreSQL\n */\n generateColumnCommentStatement(tableName: string, columnName: string, comment: string): string {\n const escapedComment = comment.replace(/'/g, \"''\");\n return `COMMENT ON COLUMN ${this.escapeId(tableName)}.${this.escapeId(columnName)} IS '${escapedComment}';`;\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n // PostgreSQL doesn't require table name in DROP INDEX\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n}\n","import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';\nimport { AbstractSchemaGenerator } from '../schemaGenerator.js';\n\n/**\n * SQLite-specific schema generator\n */\nexport class SqliteSchemaGenerator extends AbstractSchemaGenerator {\n protected readonly serialPrimaryKeyType = 'INTEGER PRIMARY KEY AUTOINCREMENT';\n\n public override mapColumnType(columnType: ColumnType, field: FieldOptions): string {\n // SQLite has dynamic typing, but we use type affinity\n switch (columnType) {\n case 'int':\n case 'smallint':\n case 'bigint':\n case 'serial':\n case 'bigserial':\n return 'INTEGER';\n case 'float':\n case 'double':\n case 'real':\n case 'decimal':\n case 'numeric':\n return 'REAL';\n case 'boolean':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'char':\n case 'varchar':\n case 'text':\n case 'uuid':\n return 'TEXT';\n case 'date':\n case 'time':\n case 'timestamp':\n case 'timestamptz':\n return 'TEXT'; // SQLite stores dates as TEXT or INTEGER\n case 'json':\n case 'jsonb':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'blob':\n case 'bytea':\n return 'BLOB';\n case 'vector':\n return 'TEXT'; // Store as JSON array\n default:\n return 'TEXT';\n }\n }\n\n public override getBooleanType(): string {\n return 'INTEGER';\n }\n\n public override generateAlterColumnStatements(\n tableName: string,\n column: ColumnSchema,\n newDefinition: string,\n ): string[] {\n // SQLite has very limited ALTER TABLE support\n // Column type changes require recreating the table\n throw new Error(\n `SQLite does not support altering column '${column.name}' in table '${tableName}'. ` +\n 'You need to recreate the table to change column types.',\n );\n }\n\n public override generateColumnComment(tableName: string, columnName: string, comment: string): string {\n return '';\n }\n\n override generateDropIndex(tableName: string, indexName: string): string {\n return `DROP INDEX IF EXISTS ${this.escapeId(indexName)};`;\n }\n\n override formatDefaultValue(value: unknown): string {\n if (typeof value === 'boolean') {\n return value ? '1' : '0';\n }\n return super.formatDefaultValue(value);\n }\n}\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * MySQL/MariaDB schema introspector.\n * Works with both MySQL and MariaDB as they share the same information_schema structure.\n */\nexport class MysqlSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = `\n SELECT TABLE_NAME as table_name\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_TYPE = 'BASE TABLE'\n ORDER BY TABLE_NAME\n `;\n\n const results = await querier.all<{ table_name: string }>(sql);\n return results.map((r: any) => r.table_name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = `\n SELECT COUNT(*) as count\n FROM information_schema.TABLES\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n `;\n\n const results = await querier.all<{ count: number }>(sql, [tableName]);\n return (results[0]?.count ?? 0) > 0;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('MysqlSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n const sql = `\n SELECT\n COLUMN_NAME as column_name,\n DATA_TYPE as data_type,\n COLUMN_TYPE as column_type,\n IS_NULLABLE as is_nullable,\n COLUMN_DEFAULT as column_default,\n CHARACTER_MAXIMUM_LENGTH as character_maximum_length,\n NUMERIC_PRECISION as numeric_precision,\n NUMERIC_SCALE as numeric_scale,\n COLUMN_KEY as column_key,\n EXTRA as extra,\n COLUMN_COMMENT as column_comment\n FROM information_schema.COLUMNS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n ORDER BY ORDINAL_POSITION\n `;\n\n const results = await querier.all<{\n column_name: string;\n data_type: string;\n column_type: string;\n is_nullable: string;\n column_default: string | null;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n column_key: string;\n extra: string;\n column_comment: string | null;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.column_name,\n type: row.data_type.toUpperCase(),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.column_key === 'PRI',\n isAutoIncrement: row.extra.toLowerCase().includes('auto_increment'),\n isUnique: row.column_key === 'UNI',\n length: row.character_maximum_length ?? undefined,\n precision: row.numeric_precision ?? undefined,\n scale: row.numeric_scale ?? undefined,\n comment: row.column_comment || undefined,\n }));\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = `\n SELECT\n INDEX_NAME as index_name,\n GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as columns,\n NOT NON_UNIQUE as is_unique\n FROM information_schema.STATISTICS\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND INDEX_NAME != 'PRIMARY'\n GROUP BY INDEX_NAME, NON_UNIQUE\n ORDER BY INDEX_NAME\n `;\n\n const results = await querier.all<{\n index_name: string;\n columns: string;\n is_unique: number;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.index_name,\n columns: row.columns.split(','),\n unique: Boolean(row.is_unique),\n }));\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = `\n SELECT\n kcu.CONSTRAINT_NAME as constraint_name,\n GROUP_CONCAT(kcu.COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as columns,\n kcu.REFERENCED_TABLE_NAME as referenced_table,\n GROUP_CONCAT(kcu.REFERENCED_COLUMN_NAME ORDER BY kcu.ORDINAL_POSITION) as referenced_columns,\n rc.DELETE_RULE as delete_rule,\n rc.UPDATE_RULE as update_rule\n FROM information_schema.KEY_COLUMN_USAGE kcu\n JOIN information_schema.REFERENTIAL_CONSTRAINTS rc\n ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME\n AND kcu.TABLE_SCHEMA = rc.CONSTRAINT_SCHEMA\n WHERE kcu.TABLE_SCHEMA = DATABASE()\n AND kcu.TABLE_NAME = ?\n AND kcu.REFERENCED_TABLE_NAME IS NOT NULL\n GROUP BY kcu.CONSTRAINT_NAME, kcu.REFERENCED_TABLE_NAME, rc.DELETE_RULE, rc.UPDATE_RULE\n ORDER BY kcu.CONSTRAINT_NAME\n `;\n\n const results = await querier.all<{\n constraint_name: string;\n columns: string;\n referenced_table: string;\n referenced_columns: string;\n delete_rule: string;\n update_rule: string;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.constraint_name,\n columns: row.columns.split(','),\n referencedTable: row.referenced_table,\n referencedColumns: row.referenced_columns.split(','),\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = `\n SELECT COLUMN_NAME as column_name\n FROM information_schema.KEY_COLUMN_USAGE\n WHERE TABLE_SCHEMA = DATABASE()\n AND TABLE_NAME = ?\n AND CONSTRAINT_NAME = 'PRIMARY'\n ORDER BY ORDINAL_POSITION\n `;\n\n const results = await querier.all<{ column_name: string }>(sql, [tableName]);\n\n if (results.length === 0) {\n return undefined;\n }\n\n return results.map((r: any) => r.column_name);\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n\n // Check for common patterns\n if (defaultValue === 'NULL') {\n return null;\n }\n if (defaultValue === 'CURRENT_TIMESTAMP') {\n return defaultValue;\n }\n if (/^'.*'$/.test(defaultValue)) {\n return defaultValue.slice(1, -1);\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n return defaultValue;\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n\n/**\n * Alias for MysqlSchemaIntrospector.\n * MariaDB uses the same information_schema structure as MySQL.\n */\nexport const MariadbSchemaIntrospector = MysqlSchemaIntrospector;\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * PostgreSQL schema introspector\n */\nexport class PostgresSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = `\n SELECT table_name\n FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_type = 'BASE TABLE'\n ORDER BY table_name\n `;\n\n const results = await querier.all<{ table_name: string }>(sql);\n return results.map((r: any) => r.table_name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = `\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = $1\n ) AS exists\n `;\n\n const results = await querier.all<{ exists: boolean }>(sql, [tableName]);\n return results[0]?.exists ?? false;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('PostgresSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n const sql = /*sql*/ `\n SELECT\n c.column_name,\n c.data_type,\n c.udt_name,\n c.is_nullable,\n c.column_default,\n c.character_maximum_length,\n c.numeric_precision,\n c.numeric_scale,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'PRIMARY KEY'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_primary_key,\n COALESCE(\n (SELECT TRUE FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n WHERE tc.table_name = c.table_name\n AND tc.constraint_type = 'UNIQUE'\n AND kcu.column_name = c.column_name\n LIMIT 1),\n FALSE\n ) AS is_unique,\n pg_catalog.col_description(\n (SELECT oid FROM pg_catalog.pg_class WHERE relname = c.table_name),\n c.ordinal_position\n ) AS column_comment\n FROM information_schema.columns c\n WHERE c.table_schema = 'public'\n AND c.table_name = $1\n ORDER BY c.ordinal_position\n `;\n\n const results = await querier.all<{\n column_name: string;\n data_type: string;\n udt_name: string;\n is_nullable: string;\n column_default: string | null;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n is_primary_key: boolean;\n is_unique: boolean;\n column_comment: string | null;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.column_name,\n type: this.normalizeType(row.data_type, row.udt_name),\n nullable: row.is_nullable === 'YES',\n defaultValue: this.parseDefaultValue(row.column_default),\n isPrimaryKey: row.is_primary_key,\n isAutoIncrement: this.isAutoIncrement(row.column_default),\n isUnique: row.is_unique,\n length: row.character_maximum_length ?? undefined,\n precision: row.numeric_precision ?? undefined,\n scale: row.numeric_scale ?? undefined,\n comment: row.column_comment ?? undefined,\n }));\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = /*sql*/ `\n SELECT\n i.relname AS index_name,\n array_agg(a.attname ORDER BY k.n) AS columns,\n ix.indisunique AS is_unique\n FROM pg_class t\n JOIN pg_index ix ON t.oid = ix.indrelid\n JOIN pg_class i ON i.oid = ix.indexrelid\n JOIN pg_namespace n ON n.oid = t.relnamespace\n CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n)\n JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum\n WHERE t.relname = $1\n AND n.nspname = 'public'\n AND NOT ix.indisprimary\n GROUP BY i.relname, ix.indisunique\n ORDER BY i.relname\n `;\n\n const results = await querier.all<{\n index_name: string;\n columns: string[];\n is_unique: boolean;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.index_name,\n columns: row.columns,\n unique: row.is_unique,\n }));\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = /*sql*/ `\n SELECT\n tc.constraint_name,\n array_agg(kcu.column_name ORDER BY kcu.ordinal_position) AS columns,\n ccu.table_name AS referenced_table,\n array_agg(ccu.column_name ORDER BY kcu.ordinal_position) AS referenced_columns,\n rc.delete_rule,\n rc.update_rule\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n JOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n JOIN information_schema.referential_constraints rc\n ON rc.constraint_name = tc.constraint_name\n AND rc.constraint_schema = tc.table_schema\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n GROUP BY tc.constraint_name, ccu.table_name, rc.delete_rule, rc.update_rule\n ORDER BY tc.constraint_name\n `;\n\n const results = await querier.all<{\n constraint_name: string;\n columns: string[];\n referenced_table: string;\n referenced_columns: string[];\n delete_rule: string;\n update_rule: string;\n }>(sql, [tableName]);\n\n return results.map((row: any) => ({\n name: row.constraint_name,\n columns: row.columns,\n referencedTable: row.referenced_table,\n referencedColumns: row.referenced_columns,\n onDelete: this.normalizeReferentialAction(row.delete_rule),\n onUpdate: this.normalizeReferentialAction(row.update_rule),\n }));\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = /*sql*/ `\n SELECT kcu.column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = $1\n AND tc.table_schema = 'public'\n ORDER BY kcu.ordinal_position\n `;\n\n const results = await querier.all<{ column_name: string }>(sql, [tableName]);\n\n if (results.length === 0) {\n return undefined;\n }\n\n return results.map((r: any) => r.column_name);\n }\n\n private normalizeType(dataType: string, udtName: string): string {\n // Handle user-defined types and arrays\n if (dataType === 'USER-DEFINED') {\n return udtName.toUpperCase();\n }\n if (dataType === 'ARRAY') {\n return `${udtName.replace(/^_/, '')}[]`;\n }\n return dataType.toUpperCase();\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (!defaultValue) {\n return undefined;\n }\n\n // Remove type casting\n const cleaned = defaultValue.replace(/::[a-z_]+(\\[\\])?/gi, '').trim();\n\n // Check for common patterns\n if (cleaned.startsWith(\"'\") && cleaned.endsWith(\"'\")) {\n return cleaned.slice(1, -1);\n }\n if (cleaned === 'true' || cleaned === 'false') {\n return cleaned === 'true';\n }\n if (cleaned === 'NULL') {\n return null;\n }\n if (/^-?\\d+$/.test(cleaned)) {\n return Number.parseInt(cleaned, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(cleaned)) {\n return Number.parseFloat(cleaned);\n }\n\n // Return as-is for functions like CURRENT_TIMESTAMP, nextval(), etc.\n return defaultValue;\n }\n\n private isAutoIncrement(defaultValue: string | null): boolean {\n if (!defaultValue) {\n return false;\n }\n return defaultValue.includes('nextval(');\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n","import type {\n ColumnSchema,\n ForeignKeySchema,\n IndexSchema,\n QuerierPool,\n SchemaIntrospector,\n SqlQuerier,\n TableSchema,\n} from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * SQLite schema introspector\n */\nexport class SqliteSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.getQuerier();\n\n try {\n const exists = await this.tableExistsInternal(querier, tableName);\n if (!exists) {\n return undefined;\n }\n\n const [columns, indexes, foreignKeys, primaryKey] = await Promise.all([\n this.getColumns(querier, tableName),\n this.getIndexes(querier, tableName),\n this.getForeignKeys(querier, tableName),\n this.getPrimaryKey(querier, tableName),\n ]);\n\n return {\n name: tableName,\n columns,\n primaryKey,\n indexes,\n foreignKeys,\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.getQuerier();\n\n try {\n const sql = /*sql*/ `\n SELECT name\n FROM sqlite_master\n WHERE type = 'table'\n AND name NOT LIKE 'sqlite_%'\n ORDER BY name\n `;\n\n const results = await querier.all<{ name: string }>(sql);\n return results.map((r: any) => r.name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const querier = await this.getQuerier();\n\n try {\n return this.tableExistsInternal(querier, tableName);\n } finally {\n await querier.release();\n }\n }\n\n private async tableExistsInternal(querier: SqlQuerier, tableName: string): Promise<boolean> {\n const sql = /*sql*/ `\n SELECT COUNT(*) as count\n FROM sqlite_master\n WHERE type = 'table'\n AND name = ?\n `;\n\n const results = await querier.all<{ count: number }>(sql, [tableName]);\n return (results[0]?.count ?? 0) > 0;\n }\n\n private async getQuerier(): Promise<SqlQuerier> {\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('SqliteSchemaIntrospector requires a SQL-based querier');\n }\n\n return querier;\n }\n\n private async getColumns(querier: SqlQuerier, tableName: string): Promise<ColumnSchema[]> {\n // SQLite uses PRAGMA for table info\n const sql = `PRAGMA table_info(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n cid: number;\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n }>(sql);\n\n // Get unique columns from indexes\n const uniqueColumns = await this.getUniqueColumns(querier, tableName);\n\n return results.map((row: any) => ({\n name: row.name,\n type: this.normalizeType(row.type),\n nullable: row.notnull === 0,\n defaultValue: this.parseDefaultValue(row.dflt_value),\n isPrimaryKey: row.pk > 0,\n isAutoIncrement: row.pk > 0 && row.type.toUpperCase() === 'INTEGER',\n isUnique: uniqueColumns.has(row.name),\n length: this.extractLength(row.type),\n precision: undefined,\n scale: undefined,\n comment: undefined, // SQLite doesn't support column comments\n }));\n }\n\n private async getUniqueColumns(querier: SqlQuerier, tableName: string): Promise<Set<string>> {\n const sql = `PRAGMA index_list(${this.escapeId(tableName)})`;\n\n const indexes = await querier.all<{\n seq: number;\n name: string;\n unique: number;\n origin: string;\n partial: number;\n }>(sql);\n\n const uniqueColumns = new Set<string>();\n\n for (const index of indexes) {\n if (index.unique && index.origin === 'u') {\n const indexInfo = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n // Only single-column unique constraints\n if (indexInfo.length === 1) {\n uniqueColumns.add(indexInfo[0].name);\n }\n }\n }\n\n return uniqueColumns;\n }\n\n private async getIndexes(querier: SqlQuerier, tableName: string): Promise<IndexSchema[]> {\n const sql = `PRAGMA index_list(${this.escapeId(tableName)})`;\n\n const indexes = await querier.all<{\n seq: number;\n name: string;\n unique: number;\n origin: string;\n partial: number;\n }>(sql);\n\n const result: IndexSchema[] = [];\n\n for (const index of indexes) {\n // Skip auto-generated indexes (primary key, unique constraints)\n if (index.origin !== 'c') {\n continue;\n }\n\n const columns = await querier.all<{ name: string }>(`PRAGMA index_info(${this.escapeId(index.name)})`);\n\n result.push({\n name: index.name,\n columns: columns.map((c: any) => c.name),\n unique: Boolean(index.unique),\n });\n }\n\n return result;\n }\n\n private async getForeignKeys(querier: SqlQuerier, tableName: string): Promise<ForeignKeySchema[]> {\n const sql = `PRAGMA foreign_key_list(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n match: string;\n }>(sql);\n\n // Group by id to handle composite foreign keys\n const grouped = new Map<number, typeof results>();\n for (const row of results) {\n const existing = grouped.get(row.id) ?? [];\n existing.push(row);\n grouped.set(row.id, existing);\n }\n\n return Array.from(grouped.entries()).map(([id, rows]) => {\n const first = rows[0];\n return {\n name: `fk_${tableName}_${id}`,\n columns: rows.map((r: any) => r.from),\n referencedTable: first.table,\n referencedColumns: rows.map((r: any) => r.to),\n onDelete: this.normalizeReferentialAction(first.on_delete),\n onUpdate: this.normalizeReferentialAction(first.on_update),\n };\n });\n }\n\n private async getPrimaryKey(querier: SqlQuerier, tableName: string): Promise<string[] | undefined> {\n const sql = `PRAGMA table_info(${this.escapeId(tableName)})`;\n\n const results = await querier.all<{\n cid: number;\n name: string;\n type: string;\n notnull: number;\n dflt_value: string | null;\n pk: number;\n }>(sql);\n\n const pkColumns = results.filter((r: any) => r.pk > 0).sort((a: any, b: any) => a.pk - b.pk);\n\n if (pkColumns.length === 0) {\n return undefined;\n }\n\n return pkColumns.map((r: any) => r.name);\n }\n\n private escapeId(identifier: string): string {\n return `\\`${identifier.replace(/`/g, '``')}\\``;\n }\n\n private normalizeType(type: string): string {\n // Extract base type without length/precision\n const match = type.match(/^([A-Za-z]+)/);\n return match ? match[1].toUpperCase() : type.toUpperCase();\n }\n\n private extractLength(type: string): number | undefined {\n const match = type.match(/\\((\\d+)\\)/);\n return match ? Number.parseInt(match[1], 10) : undefined;\n }\n\n private parseDefaultValue(defaultValue: string | null): unknown {\n if (defaultValue === null) {\n return undefined;\n }\n\n // Check for common patterns\n if (defaultValue === 'NULL') {\n return null;\n }\n if (defaultValue === 'CURRENT_TIMESTAMP' || defaultValue === 'CURRENT_DATE' || defaultValue === 'CURRENT_TIME') {\n return defaultValue;\n }\n if (/^'.*'$/.test(defaultValue)) {\n return defaultValue.slice(1, -1);\n }\n if (/^-?\\d+$/.test(defaultValue)) {\n return Number.parseInt(defaultValue, 10);\n }\n if (/^-?\\d+\\.\\d+$/.test(defaultValue)) {\n return Number.parseFloat(defaultValue);\n }\n\n return defaultValue;\n }\n\n private normalizeReferentialAction(action: string): 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION' | undefined {\n switch (action.toUpperCase()) {\n case 'CASCADE':\n return 'CASCADE';\n case 'SET NULL':\n return 'SET NULL';\n case 'RESTRICT':\n return 'RESTRICT';\n case 'NO ACTION':\n return 'NO ACTION';\n default:\n return undefined;\n }\n }\n}\n","import { AbstractDialect } from '../../dialect/index.js';\nimport { getMeta } from '../../entity/index.js';\nimport type { IndexSchema, SchemaDiff, SchemaGenerator, TableSchema, Type } from '../../type/index.js';\n\nexport class MongoSchemaGenerator extends AbstractDialect implements SchemaGenerator {\n generateCreateTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n const indexes: IndexSchema[] = [];\n\n for (const key in meta.fields) {\n const field = meta.fields[key];\n if (field.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n indexes.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n\n return JSON.stringify({ action: 'createCollection', name: collectionName, indexes });\n }\n\n generateDropTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n return JSON.stringify({ action: 'dropCollection', name: collectionName });\n }\n\n generateAlterTable(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateCreateIndex(diff.tableName, index));\n }\n }\n return statements;\n }\n\n generateAlterTableDown(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateDropIndex(diff.tableName, index.name));\n }\n }\n return statements;\n }\n\n generateCreateIndex(tableName: string, index: IndexSchema): string {\n const key: Record<string, number> = {};\n for (const col of index.columns) {\n key[col] = 1;\n }\n return JSON.stringify({\n action: 'createIndex',\n collection: tableName,\n name: index.name,\n key,\n options: { unique: index.unique, name: index.name },\n });\n }\n\n generateDropIndex(tableName: string, indexName: string): string {\n return JSON.stringify({\n action: 'dropIndex',\n collection: tableName,\n name: indexName,\n });\n }\n\n getSqlType(): string {\n return '';\n }\n\n diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n\n if (!currentSchema) {\n return { tableName: collectionName, type: 'create' };\n }\n\n const indexesToAdd: IndexSchema[] = [];\n const existingIndexes = new Set(currentSchema.indexes?.map((i: IndexSchema) => i.name) ?? []);\n\n for (const key in meta.fields) {\n const field = meta.fields[key];\n if (field.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n if (!existingIndexes.has(indexName)) {\n indexesToAdd.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n }\n\n if (indexesToAdd.length === 0) {\n return undefined;\n }\n\n return {\n tableName: collectionName,\n type: 'alter',\n indexesToAdd,\n };\n }\n}\n","import type { MongoQuerier, QuerierPool, SchemaIntrospector, TableSchema } from '../../type/index.js';\n\nexport class MongoSchemaIntrospector implements SchemaIntrospector {\n constructor(private readonly pool: QuerierPool) {}\n\n async getTableSchema(tableName: string): Promise<TableSchema | undefined> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections({ name: tableName }).toArray();\n if (collections.length === 0) {\n return undefined;\n }\n\n // MongoDB doesn't have a fixed schema, but we can look at the indexes\n const indexes = await db.collection(tableName).indexes();\n\n return {\n name: tableName,\n columns: [], // We don't have columns in Mongo\n indexes: indexes.map((idx: any) => ({\n name: idx.name,\n columns: Object.keys(idx.key),\n unique: !!idx.unique,\n })),\n };\n } finally {\n await querier.release();\n }\n }\n\n async getTableNames(): Promise<string[]> {\n const querier = await this.pool.getQuerier();\n try {\n const { db } = querier as MongoQuerier;\n const collections = await db.listCollections().toArray();\n return collections.map((c: any) => c.name);\n } finally {\n await querier.release();\n }\n }\n\n async tableExists(tableName: string): Promise<boolean> {\n const names = await this.getTableNames();\n return names.includes(tableName);\n }\n}\n","import type { MigrationStorage, QuerierPool, SqlQuerier } from '../../type/index.js';\nimport { isSqlQuerier } from '../../type/index.js';\n\n/**\n * Migration metadata stored in the database\n */\ninterface MigrationRecord {\n name: string;\n executed_at: Date | number;\n}\n\n/**\n * Stores migration state in a database table.\n * Uses the querier's dialect for escaping and placeholders.\n */\nexport class DatabaseMigrationStorage implements MigrationStorage {\n private readonly tableName: string;\n private storageInitialized = false;\n\n constructor(\n private readonly pool: QuerierPool,\n options: {\n tableName?: string;\n } = {},\n ) {\n this.tableName = options.tableName ?? 'uql_migrations';\n }\n\n async ensureStorage(): Promise<void> {\n if (this.storageInitialized) {\n return;\n }\n\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n await this.createTableIfNotExists(querier);\n this.storageInitialized = true;\n } finally {\n await querier.release();\n }\n }\n\n private async createTableIfNotExists(querier: SqlQuerier): Promise<void> {\n const { escapeId } = querier.dialect;\n const sql = `\n CREATE TABLE IF NOT EXISTS ${escapeId(this.tableName)} (\n ${escapeId('name')} VARCHAR(255) PRIMARY KEY,\n ${escapeId('executed_at')} TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )\n `;\n\n await querier.run(sql);\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('DatabaseMigrationStorage requires a SQL-based querier');\n }\n\n try {\n const { escapeId } = querier.dialect;\n const sql = `SELECT ${escapeId('name')} FROM ${escapeId(this.tableName)} ORDER BY ${escapeId('name')} ASC`;\n const results = await querier.all<MigrationRecord>(sql);\n return results.map((r: any) => r.name);\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Log a migration as executed - uses provided querier (within transaction)\n */\n async logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { escapeId, placeholder } = querier.dialect;\n const sql = `INSERT INTO ${escapeId(this.tableName)} (${escapeId('name')}) VALUES (${placeholder(1)})`;\n await querier.run(sql, [migrationName]);\n }\n\n /**\n * Unlog a migration - uses provided querier (within transaction)\n */\n async unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void> {\n await this.ensureStorage();\n const { escapeId, placeholder } = querier.dialect;\n const sql = `DELETE FROM ${escapeId(this.tableName)} WHERE ${escapeId('name')} = ${placeholder(1)}`;\n await querier.run(sql, [migrationName]);\n }\n}\n","import { readdir } from 'node:fs/promises';\nimport { basename, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { getEntities, getMeta } from '../entity/index.js';\nimport type {\n Dialect,\n Migration,\n MigrationDefinition,\n MigrationResult,\n MigrationStorage,\n MigratorOptions,\n MongoQuerier,\n NamingStrategy,\n Querier,\n QuerierPool,\n SchemaDiff,\n SchemaGenerator,\n SchemaIntrospector,\n Type,\n} from '../type/index.js';\nimport { isSqlQuerier } from '../type/index.js';\nimport {\n MariadbSchemaGenerator,\n MongoSchemaGenerator,\n MysqlSchemaGenerator,\n PostgresSchemaGenerator,\n SqliteSchemaGenerator,\n} from './generator/index.js';\nimport {\n MariadbSchemaIntrospector,\n MongoSchemaIntrospector,\n MysqlSchemaIntrospector,\n PostgresSchemaIntrospector,\n SqliteSchemaIntrospector,\n} from './introspection/index.js';\nimport { DatabaseMigrationStorage } from './storage/databaseStorage.js';\n\n/**\n * Main class for managing database migrations\n */\nexport class Migrator {\n private readonly storage: MigrationStorage;\n private readonly migrationsPath: string;\n private readonly logger: (message: string) => void;\n private readonly entities: Type<unknown>[];\n private readonly dialect: Dialect;\n private schemaGenerator?: SchemaGenerator;\n public schemaIntrospector?: SchemaIntrospector;\n\n constructor(\n private readonly pool: QuerierPool,\n options: MigratorOptions = {},\n ) {\n this.dialect = options.dialect ?? pool.dialect ?? 'postgres';\n this.storage =\n options.storage ??\n new DatabaseMigrationStorage(pool, {\n tableName: options.tableName,\n });\n this.migrationsPath = options.migrationsPath ?? './migrations';\n this.logger = options.logger ?? (() => {});\n this.entities = options.entities ?? [];\n this.schemaIntrospector = this.createIntrospector();\n this.schemaGenerator = options.schemaGenerator ?? this.createGenerator(options.namingStrategy);\n }\n\n /**\n * Set the schema generator for DDL operations\n */\n setSchemaGenerator(generator: SchemaGenerator): void {\n this.schemaGenerator = generator;\n }\n\n private createIntrospector(): SchemaIntrospector | undefined {\n switch (this.dialect) {\n case 'postgres':\n return new PostgresSchemaIntrospector(this.pool);\n case 'mysql':\n return new MysqlSchemaIntrospector(this.pool);\n case 'mariadb':\n return new MariadbSchemaIntrospector(this.pool);\n case 'sqlite':\n return new SqliteSchemaIntrospector(this.pool);\n case 'mongodb':\n return new MongoSchemaIntrospector(this.pool);\n default:\n return undefined;\n }\n }\n\n private createGenerator(namingStrategy?: NamingStrategy): SchemaGenerator | undefined {\n switch (this.dialect) {\n case 'postgres':\n return new PostgresSchemaGenerator(namingStrategy);\n case 'mysql':\n return new MysqlSchemaGenerator(namingStrategy);\n case 'mariadb':\n return new MariadbSchemaGenerator(namingStrategy);\n case 'sqlite':\n return new SqliteSchemaGenerator(namingStrategy);\n case 'mongodb':\n return new MongoSchemaGenerator(namingStrategy);\n default:\n return undefined;\n }\n }\n\n /**\n * Get the SQL dialect\n */\n getDialect(): Dialect {\n return this.dialect;\n }\n\n /**\n * Get all discovered migrations from the migrations directory\n */\n async getMigrations(): Promise<Migration[]> {\n const files = await this.getMigrationFiles();\n const migrations: Migration[] = [];\n\n for (const file of files) {\n const migration = await this.loadMigration(file);\n if (migration) {\n migrations.push(migration);\n }\n }\n\n // Sort by name (which typically includes timestamp)\n return migrations.sort((a: any, b: any) => a.name.localeCompare(b.name));\n }\n\n /**\n * Get list of pending migrations (not yet executed)\n */\n async pending(): Promise<Migration[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n return migrations.filter((m: any) => !executedSet.has(m.name));\n }\n\n /**\n * Get list of executed migrations\n */\n async executed(): Promise<string[]> {\n return this.storage.executed();\n }\n\n /**\n * Run all pending migrations\n */\n async up(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const pendingMigrations = await this.pending();\n const results: MigrationResult[] = [];\n\n let migrationsToRun = pendingMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'up');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Rollback migrations\n */\n async down(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {\n const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);\n\n const executedSet = new Set(executed);\n const executedMigrations = migrations.filter((m: any) => executedSet.has(m.name)).reverse(); // Rollback in reverse order\n\n const results: MigrationResult[] = [];\n let migrationsToRun = executedMigrations;\n\n if (options.to) {\n const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);\n if (toIndex === -1) {\n throw new Error(`Migration '${options.to}' not found`);\n }\n migrationsToRun = migrationsToRun.slice(0, toIndex + 1);\n }\n\n if (options.step !== undefined) {\n migrationsToRun = migrationsToRun.slice(0, options.step);\n }\n\n for (const migration of migrationsToRun) {\n const result = await this.runMigration(migration, 'down');\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Run a single migration within a transaction\n */\n private async runMigration(migration: Migration, direction: 'up' | 'down'): Promise<MigrationResult> {\n const startTime = Date.now();\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n this.logger(`${direction === 'up' ? 'Running' : 'Reverting'} migration: ${migration.name}`);\n\n await querier.beginTransaction();\n\n if (direction === 'up') {\n await migration.up(querier);\n // Log within the same transaction\n await this.storage.logWithQuerier(querier, migration.name);\n } else {\n await migration.down(querier);\n // Unlog within the same transaction\n await this.storage.unlogWithQuerier(querier, migration.name);\n }\n\n await querier.commitTransaction();\n\n const duration = Date.now() - startTime;\n this.logger(`Migration ${migration.name} ${direction === 'up' ? 'applied' : 'reverted'} in ${duration}ms`);\n\n return {\n name: migration.name,\n direction,\n duration,\n success: true,\n };\n } catch (error) {\n await querier.rollbackTransaction();\n\n const duration = Date.now() - startTime;\n this.logger(`Migration ${migration.name} failed: ${(error as Error).message}`);\n\n return {\n name: migration.name,\n direction,\n duration,\n success: false,\n error: error as Error,\n };\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Generate a new migration file\n */\n async generate(name: string): Promise<string> {\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const content = this.generateMigrationContent(name);\n\n const { writeFile, mkdir } = await import('node:fs/promises');\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger(`Created migration: ${filePath}`);\n return filePath;\n }\n\n /**\n * Generate a migration based on entity schema differences\n */\n async generateFromEntities(name: string): Promise<string> {\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const diffs = await this.getDiffs();\n const upStatements: string[] = [];\n const downStatements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = this.findEntityForTable(diff.tableName);\n if (entity) {\n upStatements.push(this.schemaGenerator.generateCreateTable(entity));\n downStatements.push(this.schemaGenerator.generateDropTable(entity));\n }\n } else if (diff.type === 'alter') {\n const alterStatements = this.schemaGenerator.generateAlterTable(diff);\n upStatements.push(...alterStatements);\n\n const alterDownStatements = this.schemaGenerator.generateAlterTableDown(diff);\n downStatements.push(...alterDownStatements);\n }\n }\n\n if (upStatements.length === 0) {\n this.logger('No schema changes detected.');\n return '';\n }\n\n const timestamp = this.getTimestamp();\n const fileName = `${timestamp}_${this.slugify(name)}.ts`;\n const filePath = join(this.migrationsPath, fileName);\n\n const content = this.generateMigrationContentWithStatements(name, upStatements, downStatements.reverse());\n\n const { writeFile, mkdir } = await import('node:fs/promises');\n await mkdir(this.migrationsPath, { recursive: true });\n await writeFile(filePath, content, 'utf-8');\n\n this.logger(`Created migration from entities: ${filePath}`);\n return filePath;\n }\n\n /**\n * Get all schema differences between entities and database\n */\n async getDiffs(): Promise<SchemaDiff[]> {\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n const diffs: SchemaDiff[] = [];\n\n for (const entity of entities) {\n const meta = getMeta(entity);\n const tableName = this.schemaGenerator.resolveTableName(entity, meta);\n const currentSchema = await this.schemaIntrospector.getTableSchema(tableName);\n const diff = this.schemaGenerator.diffSchema(entity, currentSchema);\n if (diff) {\n diffs.push(diff);\n }\n }\n\n return diffs;\n }\n\n private findEntityForTable(tableName: string): Type<unknown> | undefined {\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n for (const entity of entities) {\n const meta = getMeta(entity);\n const name = this.schemaGenerator.resolveTableName(entity, meta);\n if (name === tableName) {\n return entity;\n }\n }\n return undefined;\n }\n\n /**\n * Sync schema directly (for development only - not for production!)\n */\n async sync(options: { force?: boolean } = {}): Promise<void> {\n if (options.force) {\n return this.syncForce();\n }\n return this.autoSync({ safe: true });\n }\n\n /**\n * Drops and recreates all tables (Development only!)\n */\n public async syncForce(): Promise<void> {\n if (!this.schemaGenerator) {\n throw new Error('Schema generator not set. Call setSchemaGenerator() first.');\n }\n\n const entities = this.entities.length > 0 ? this.entities : getEntities();\n const querier = await this.pool.getQuerier();\n\n if (!isSqlQuerier(querier)) {\n await querier.release();\n throw new Error('Migrator requires a SQL-based querier');\n }\n\n try {\n await querier.beginTransaction();\n\n // Drop all tables first (in reverse order for foreign keys)\n for (const entity of [...entities].reverse()) {\n const dropSql = this.schemaGenerator.generateDropTable(entity);\n this.logger(`Executing: ${dropSql}`);\n await querier.run(dropSql);\n }\n\n // Create all tables\n for (const entity of entities) {\n const createSql = this.schemaGenerator.generateCreateTable(entity);\n this.logger(`Executing: ${createSql}`);\n await querier.run(createSql);\n }\n\n await querier.commitTransaction();\n this.logger('Schema sync (force) completed');\n } catch (error) {\n await querier.rollbackTransaction();\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n /**\n * Safely synchronizes the schema by only adding missing tables and columns.\n */\n async autoSync(options: { safe?: boolean; drop?: boolean; logging?: boolean } = {}): Promise<void> {\n if (!this.schemaGenerator || !this.schemaIntrospector) {\n throw new Error('Schema generator and introspector must be set');\n }\n\n const diffs = await this.getDiffs();\n const statements: string[] = [];\n\n for (const diff of diffs) {\n if (diff.type === 'create') {\n const entity = this.findEntityForTable(diff.tableName);\n if (entity) {\n statements.push(this.schemaGenerator.generateCreateTable(entity));\n }\n } else if (diff.type === 'alter') {\n const filteredDiff = this.filterDiff(diff, options);\n const alterStatements = this.schemaGenerator.generateAlterTable(filteredDiff);\n statements.push(...alterStatements);\n }\n }\n\n if (statements.length === 0) {\n if (options.logging) this.logger('Schema is already in sync.');\n return;\n }\n\n await this.executeSyncStatements(statements, options);\n }\n\n private filterDiff(diff: SchemaDiff, options: { safe?: boolean; drop?: boolean }): SchemaDiff {\n const filteredDiff = { ...diff } as { -readonly [K in keyof SchemaDiff]: SchemaDiff[K] };\n if (options.safe !== false) {\n // In safe mode, we only allow additions\n delete filteredDiff.columnsToDrop;\n delete filteredDiff.indexesToDrop;\n delete filteredDiff.foreignKeysToDrop;\n }\n if (!options.drop) {\n delete filteredDiff.columnsToDrop;\n }\n return filteredDiff;\n }\n\n private async executeSyncStatements(statements: string[], options: { logging?: boolean }): Promise<void> {\n const querier = await this.pool.getQuerier();\n try {\n if (this.dialect === 'mongodb') {\n await this.executeMongoSyncStatements(statements, options, querier as MongoQuerier);\n } else {\n await this.executeSqlSyncStatements(statements, options, querier);\n }\n if (options.logging) this.logger('Schema synchronization completed');\n } catch (error) {\n if (this.dialect !== 'mongodb' && isSqlQuerier(querier)) {\n await querier.rollbackTransaction();\n }\n throw error;\n } finally {\n await querier.release();\n }\n }\n\n private async executeMongoSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: MongoQuerier,\n ): Promise<void> {\n const db = querier.db;\n for (const stmt of statements) {\n const cmd = JSON.parse(stmt) as {\n action: string;\n name?: string;\n collection?: string;\n indexes?: { name: string; columns: string[]; unique?: boolean }[];\n key?: Record<string, number>;\n options?: any;\n };\n if (options.logging) this.logger(`Executing MongoDB: ${stmt}`);\n\n const collectionName = cmd.name || cmd.collection;\n if (!collectionName) {\n throw new Error(`MongoDB command missing collection name: ${stmt}`);\n }\n const collection = db.collection(collectionName);\n\n if (cmd.action === 'createCollection') {\n await db.createCollection(cmd.name);\n if (cmd.indexes?.length) {\n for (const idx of cmd.indexes) {\n const key = Object.fromEntries(idx.columns.map((c: string) => [c, 1]));\n await collection.createIndex(key, { unique: idx.unique, name: idx.name });\n }\n }\n } else if (cmd.action === 'dropCollection') {\n await collection.drop();\n } else if (cmd.action === 'createIndex') {\n await collection.createIndex(cmd.key, cmd.options);\n } else if (cmd.action === 'dropIndex') {\n await collection.dropIndex(cmd.name);\n }\n }\n }\n\n private async executeSqlSyncStatements(\n statements: string[],\n options: { logging?: boolean },\n querier: Querier,\n ): Promise<void> {\n if (!isSqlQuerier(querier)) {\n throw new Error('Migrator requires a SQL-based querier for this dialect');\n }\n await querier.beginTransaction();\n for (const sql of statements) {\n if (options.logging) this.logger(`Executing: ${sql}`);\n await querier.run(sql);\n }\n await querier.commitTransaction();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<{ pending: string[]; executed: string[] }> {\n const [pending, executed] = await Promise.all([this.pending().then((m) => m.map((x) => x.name)), this.executed()]);\n\n return { pending, executed };\n }\n\n /**\n * Get migration files from the migrations directory\n */\n private async getMigrationFiles(): Promise<string[]> {\n try {\n const files = await readdir(this.migrationsPath);\n return files\n .filter((f) => /\\.(ts|js|mjs)$/.test(f))\n .filter((f) => !f.endsWith('.d.ts'))\n .sort();\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n }\n\n /**\n * Load a migration from a file\n */\n private async loadMigration(fileName: string): Promise<Migration | undefined> {\n const filePath = join(this.migrationsPath, fileName);\n const fileUrl = pathToFileURL(filePath).href;\n\n try {\n const module = await import(fileUrl);\n const migration = module.default ?? module;\n\n if (this.isMigration(migration)) {\n return {\n name: this.getMigrationName(fileName),\n up: migration.up.bind(migration),\n down: migration.down.bind(migration),\n };\n }\n\n this.logger(`Warning: ${fileName} is not a valid migration`);\n return undefined;\n } catch (error) {\n this.logger(`Error loading migration ${fileName}: ${(error as Error).message}`);\n return undefined;\n }\n }\n\n /**\n * Check if an object is a valid migration\n */\n private isMigration(obj: unknown): obj is MigrationDefinition {\n return (\n typeof obj === 'object' &&\n obj !== undefined &&\n obj !== null &&\n typeof (obj as MigrationDefinition).up === 'function' &&\n typeof (obj as MigrationDefinition).down === 'function'\n );\n }\n\n /**\n * Extract migration name from filename\n */\n private getMigrationName(fileName: string): string {\n return basename(fileName, extname(fileName));\n }\n\n /**\n * Generate timestamp string for migration names\n */\n private getTimestamp(): string {\n const now = new Date();\n return [\n now.getFullYear(),\n String(now.getMonth() + 1).padStart(2, '0'),\n String(now.getDate()).padStart(2, '0'),\n String(now.getHours()).padStart(2, '0'),\n String(now.getMinutes()).padStart(2, '0'),\n String(now.getSeconds()).padStart(2, '0'),\n ].join('');\n }\n\n /**\n * Convert a string to a slug for filenames\n */\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '');\n }\n\n /**\n * Generate migration file content\n */\n private generateMigrationContent(name: string): string {\n return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';\n\n/**\n * Migration: ${name}\n * Created: ${new Date().toISOString()}\n */\nexport default {\n async up(querier: SqlQuerier): Promise<void> {\n // Add your migration logic here\n // Example:\n // await querier.run(\\`\n // CREATE TABLE \"users\" (\n // \"id\" SERIAL PRIMARY KEY,\n // \"name\" VARCHAR(255) NOT NULL,\n // \"email\" VARCHAR(255) UNIQUE NOT NULL,\n // \"createdAt\" TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n // )\n // \\`);\n },\n\n async down(querier: SqlQuerier): Promise<void> {\n // Add your rollback logic here\n // Example:\n // await querier.run(\\`DROP TABLE IF EXISTS \"users\"\\`);\n },\n};\n`;\n }\n\n /**\n * Generate migration file content with SQL statements\n */\n private generateMigrationContentWithStatements(\n name: string,\n upStatements: string[],\n downStatements: string[],\n ): string {\n const upSql = upStatements.map((s) => /*ts*/ ` await querier.run(\\`${s}\\`);`).join('\\n');\n const downSql = downStatements.map((s) => /*ts*/ ` await querier.run(\\`${s}\\`);`).join('\\n');\n\n return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';\n\n/**\n * Migration: ${name}\n * Created: ${new Date().toISOString()}\n * Generated from entity definitions\n */\nexport default {\n async up(querier: SqlQuerier): Promise<void> {\n${upSql}\n },\n\n async down(querier: SqlQuerier): Promise<void> {\n${downSql}\n },\n};\n`;\n }\n}\n\n/**\n * Helper function to define a migration with proper typing\n */\nexport function defineMigration(migration: MigrationDefinition): MigrationDefinition {\n return migration;\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { MigrationStorage, SqlQuerier } from '../../type/index.js';\n\n/**\n * Stores migration state in a JSON file (useful for development/testing)\n */\nexport class JsonMigrationStorage implements MigrationStorage {\n private readonly filePath: string;\n private cache: string[] | null = null;\n\n constructor(filePath = './migrations/.uql-migrations.json') {\n this.filePath = filePath;\n }\n\n async ensureStorage(): Promise<void> {\n try {\n await this.load();\n } catch {\n // File doesn't exist, create it\n await this.save([]);\n }\n }\n\n async executed(): Promise<string[]> {\n await this.ensureStorage();\n return this.cache ?? [];\n }\n\n async logWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n const executed = await this.executed();\n if (!executed.includes(migrationName)) {\n executed.push(migrationName);\n executed.sort();\n await this.save(executed);\n }\n }\n\n async unlogWithQuerier(_querier: SqlQuerier, migrationName: string): Promise<void> {\n const executed = await this.executed();\n const index = executed.indexOf(migrationName);\n if (index !== -1) {\n executed.splice(index, 1);\n await this.save(executed);\n }\n }\n\n private async load(): Promise<void> {\n const content = await readFile(this.filePath, 'utf-8');\n this.cache = JSON.parse(content);\n }\n\n private async save(migrations: string[]): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, JSON.stringify(migrations, null, 2), 'utf-8');\n this.cache = migrations;\n }\n}\n"],"names":["AbstractSchemaGenerator","AbstractDialect","namingStrategy","escapeIdChar","escapeId","identifier","escapeSqlId","generateCreateTable","entity","options","meta","getMeta","tableName","resolveTableName","columns","generateColumnDefinitions","constraints","generateTableConstraints","ifNotExists","sql","map","col","join","length","c","getTableOptions","generateDropTable","generateAlterTable","diff","statements","columnsToAdd","column","colDef","generateColumnDefinitionFromSchema","push","columnsToAlter","to","colStatements","generateAlterColumnStatements","columnsToDrop","columnName","indexesToAdd","index","generateCreateIndex","indexesToDrop","indexName","generateDropIndex","generateAlterTableDown","name","unique","fieldKeys","getKeys","fields","key","field","virtual","generateColumnDefinition","fieldKey","resolveColumnName","isId","isPrimaryKey","id","sqlType","autoIncrement","onInsert","serialPrimaryKeyType","getSqlType","type","definition","includes","nullable","defaultValue","undefined","formatDefaultValue","comment","generateColumnComment","precision","scale","isUnique","reference","refEntity","refMeta","refIdField","refTableName","refColumnName","fkName","fieldType","columnType","mapColumnType","Number","String","Boolean","getBooleanType","Date","BigInt","value","replace","toISOString","diffSchema","currentSchema","currentColumns","Map","currentColumn","get","fieldToColumnSchema","desiredColumn","columnsNeedAlteration","from","delete","isAutoIncrement","current","desired","toLowerCase","JSON","stringify","MysqlSchemaGenerator","newDefinition","escapedComment","PostgresSchemaGenerator","escapedTableName","escapedColumnName","generateColumnCommentStatement","SqliteSchemaGenerator","Error","MysqlSchemaIntrospector","pool","getTableSchema","querier","getQuerier","exists","tableExistsInternal","indexes","foreignKeys","primaryKey","Promise","all","getColumns","getIndexes","getForeignKeys","getPrimaryKey","release","getTableNames","results","r","table_name","tableExists","count","isSqlQuerier","row","column_name","data_type","toUpperCase","is_nullable","parseDefaultValue","column_default","column_key","extra","character_maximum_length","numeric_precision","numeric_scale","column_comment","index_name","split","is_unique","constraint_name","referencedTable","referenced_table","referencedColumns","referenced_columns","onDelete","normalizeReferentialAction","delete_rule","onUpdate","update_rule","test","slice","parseInt","parseFloat","action","MariadbSchemaIntrospector","PostgresSchemaIntrospector","normalizeType","udt_name","is_primary_key","dataType","udtName","cleaned","trim","startsWith","endsWith","SqliteSchemaIntrospector","uniqueColumns","getUniqueColumns","notnull","dflt_value","pk","has","extractLength","Set","origin","indexInfo","add","result","grouped","existing","set","Array","entries","rows","first","table","on_delete","on_update","pkColumns","filter","sort","a","b","match","MongoSchemaGenerator","collectionName","collection","existingIndexes","i","MongoSchemaIntrospector","db","collections","listCollections","toArray","idx","Object","keys","names","DatabaseMigrationStorage","storageInitialized","ensureStorage","createTableIfNotExists","dialect","run","executed","logWithQuerier","migrationName","placeholder","unlogWithQuerier","Migrator","storage","migrationsPath","logger","entities","schemaIntrospector","createIntrospector","schemaGenerator","createGenerator","setSchemaGenerator","generator","MariadbSchemaGenerator","getDialect","getMigrations","files","getMigrationFiles","migrations","file","migration","loadMigration","localeCompare","pending","executedSet","m","up","pendingMigrations","migrationsToRun","toIndex","findIndex","step","runMigration","success","down","executedMigrations","reverse","direction","startTime","now","beginTransaction","commitTransaction","duration","error","rollbackTransaction","message","generate","timestamp","getTimestamp","fileName","slugify","filePath","content","generateMigrationContent","writeFile","mkdir","recursive","generateFromEntities","diffs","getDiffs","upStatements","downStatements","findEntityForTable","alterStatements","alterDownStatements","generateMigrationContentWithStatements","getEntities","sync","force","syncForce","autoSync","safe","dropSql","createSql","filteredDiff","filterDiff","logging","executeSyncStatements","foreignKeysToDrop","drop","executeMongoSyncStatements","executeSqlSyncStatements","stmt","cmd","parse","createCollection","fromEntries","createIndex","dropIndex","status","then","x","readdir","f","code","fileUrl","pathToFileURL","href","module","default","isMigration","getMigrationName","bind","obj","basename","extname","getFullYear","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","text","upSql","s","downSql","defineMigration","JsonMigrationStorage","cache","load","save","_querier","indexOf","splice","readFile","dirname"],"mappings":"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"}
|