@vibeorm/migrate 2.6.0 → 2.7.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/dist/fs.js +56 -14
- package/dist/fs.js.map +7 -7
- package/dist/index.js +56 -14
- package/dist/index.js.map +7 -7
- package/dist/inspect-objects.d.ts.map +1 -1
- package/dist/normalize.d.ts +19 -1
- package/dist/normalize.d.ts.map +1 -1
- package/dist/postgres-types.d.ts +24 -0
- package/dist/postgres-types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/fs.js.map
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"/** Prove unfiltered MySQL FK metadata visibility without requiring global row reads. */\nexport function hasMysqlGlobalCatalogVisibility(params: { rows: readonly Record<string, unknown>[] }): boolean {\n let visible = false;\n for (const row of params.rows) {\n const values = Object.values(row);\n // Partial REVOKE records and unknown grant shapes may hide remote tables.\n // SHOW GRANTS does not expand roles; only a direct global grant is evidence.\n if (values.length !== 1 || typeof values[0] !== \"string\" || !values[0].startsWith(\"GRANT \")) return false;\n const grant = /^GRANT ([A-Z_ ,]+) ON \\*\\.\\* TO /.exec(values[0]);\n const privileges = grant?.[1]?.split(\", \") ?? [];\n if (privileges.some((privilege) => privilege === \"SHOW VIEW\" || privilege === \"SELECT\" || privilege === \"ALL PRIVILEGES\")) visible = true;\n }\n return visible;\n}\n",
|
|
6
6
|
"import { hasMysqlGlobalCatalogVisibility } from \"./mysql-catalog-visibility.ts\";\nimport { VibeError, sqlObjectKey, sqlObjectNamespace } from \"@vibeorm/schema\";\nimport { getSqlDialect, renderModuleDependencyQuery } from \"@vibeorm/sql\";\nimport type { SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { canonicalMigrationJson } from \"./desired-state.ts\";\nimport type { DesiredState, MigrationDesiredState } from \"./desired-state.ts\";\nimport type { ModuleMigrationOrigin } from \"./module-origin.ts\";\nimport { physicalNameKey } from \"./normalize.ts\";\nimport { schemaObjectIdentities } from \"./object-ownership.ts\";\nimport { inspectMigrationInventory } from \"./inventory.ts\";\nimport { introspectPhysicalPostgres } from \"./introspect/postgres.ts\";\nimport { introspectMysql } from \"./introspect/mysql.ts\";\nimport { introspectSqlite, introspectSqliteBeforeForeignKeyRestore } from \"./introspect/sqlite.ts\";\nimport { migrationNamespace, verifyMigrationTransition, verifySqliteTransitionBeforeRestore } from \"./inspect-objects.ts\";\nimport type { SqlExecutor } from \"./types.ts\";\n\nfunction refusal(params: { reason: string; moduleId?: string; identity?: SqlObjectIdentity }): VibeError {\n return new VibeError({ code: \"VIBE_MIGRATION\", message: \"Module ownership or dependencies cannot be reconciled with the declared and live schema; no package SQL was authorized\", meta: params });\n}\nfunction identities(params: { state: DesiredState; dialect: MigrationDesiredState[\"dialect\"]; namespace: string }): SqlObjectIdentity[] {\n return [...schemaObjectIdentities({ schema: params.state.schema, dialect: params.dialect, namespace: params.namespace }), ...(params.state.schema.migrationObjects ?? []).map((object) => object.identity), ...params.state.definitions.map((definition) => definition.identity)];\n}\n\n/** Baked placement; MySQL authors must name the actual application database. */\nexport function moduleNamespace(params: { origin: ModuleMigrationOrigin }): string {\n const namespaces = [...new Set(params.origin.owned.map((identity) => sqlObjectNamespace({ identity })))];\n if (namespaces.length > 1 || namespaces.length === 0 && params.origin.dialect === \"mysql\") throw refusal({ reason: \"module-namespace-required\", moduleId: params.origin.moduleId });\n return namespaces[0] ?? (params.origin.dialect === \"sqlite\" ? \"main\" : \"public\");\n}\n\n/** Derive the complete exact ownership set from source declarations, not a naming prefix. */\nexport function moduleOwnedObjects(params: { desiredState: MigrationDesiredState; namespace?: string }): readonly SqlObjectIdentity[] {\n const { desiredState } = params;\n if ((params.namespace === undefined && desiredState.dialect === \"mysql\")) throw refusal({ reason: \"module-namespace-required\" });\n const namespace = params.namespace ?? (desiredState.dialect === \"sqlite\" ? \"main\" : \"public\");\n const all = [desiredState.from, desiredState.to, ...(desiredState.down === undefined ? [] : [desiredState.down])].flatMap((state) => identities({ state, dialect: desiredState.dialect, namespace }));\n return [...new Map(all.map((identity) => [sqlObjectKey({ identity }), identity])).values()].sort((a, b) => sqlObjectKey({ identity: a }).localeCompare(sqlObjectKey({ identity: b })));\n}\n\n/** A checksum does not turn extra ownership claims into authority over application objects. */\nexport function assertModuleOwnership(params: { origin: ModuleMigrationOrigin; desiredState?: MigrationDesiredState }): void {\n const { origin } = params;\n const state = origin.source.desiredState!;\n const namespace = moduleNamespace({ origin });\n const expected = moduleOwnedObjects({ desiredState: state, namespace });\n const owned = new Set(origin.owned.map((identity) => sqlObjectKey({ identity })));\n if (expected.length !== owned.size || expected.some((identity) => !owned.has(sqlObjectKey({ identity })))) throw refusal({ reason: \"module-ownership-invalid\", moduleId: origin.moduleId });\n for (const identity of expected) {\n if (sqlObjectNamespace({ identity }) !== namespace || (\"table\" in identity ? identity.table.name : typeof identity.name === \"object\" ? identity.name.name : undefined) === \"_vibe_migrations\") throw refusal({ reason: \"module-ownership-invalid\", moduleId: origin.moduleId, identity });\n }\n for (const target of [state.from, state.to, ...(state.down === undefined ? [] : [state.down])]) {\n if (target.schema.rls !== undefined || target.schema.extensions.length > 0) throw refusal({ reason: \"module-schema-unsupported\", moduleId: origin.moduleId });\n for (const dependency of [...target.definitions.flatMap((definition) => definition.dependencies), ...(target.schema.migrationObjects ?? []).flatMap((object) => object.dependsOn), ...(state.unmanagedRemovals ?? [])]) {\n if (!owned.has(sqlObjectKey({ identity: dependency }))) throw refusal({ reason: \"module-external-dependency\", moduleId: origin.moduleId, identity: dependency });\n }\n }\n if (params.desiredState === undefined) return;\n const local = params.desiredState;\n const rest = (actual: DesiredState, source: DesiredState): unknown => {\n const keyOf = (entry: { name: string; dbName?: string; namespace?: string }): string => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect: origin.dialect });\n const tables = new Set(source.schema.models.map(keyOf));\n const enums = new Set(source.schema.enums.map(keyOf));\n const selected = actual.schema.models.filter((model) => tables.has(keyOf(model)));\n const selectedEnums = actual.schema.enums.filter((entry) => enums.has(keyOf(entry)));\n if (canonicalMigrationJson({ value: selected }) !== canonicalMigrationJson({ value: source.schema.models }) || canonicalMigrationJson({ value: selectedEnums }) !== canonicalMigrationJson({ value: source.schema.enums })) throw refusal({ reason: \"module-source-state-mismatch\", moduleId: origin.moduleId });\n const selectedObjects = (actual.schema.migrationObjects ?? []).filter((object) => owned.has(sqlObjectKey({ identity: object.identity })));\n const selectedDefinitions = actual.definitions.filter((definition) => owned.has(sqlObjectKey({ identity: definition.identity })));\n if (canonicalMigrationJson({ value: selectedObjects }) !== canonicalMigrationJson({ value: source.schema.migrationObjects ?? [] }) || canonicalMigrationJson({ value: selectedDefinitions }) !== canonicalMigrationJson({ value: source.definitions })) throw refusal({ reason: \"module-source-state-mismatch\", moduleId: origin.moduleId });\n return { ...actual, schema: { ...actual.schema, models: actual.schema.models.filter((model) => !tables.has(keyOf(model))), enums: actual.schema.enums.filter((entry) => !enums.has(keyOf(entry))), migrationObjects: (actual.schema.migrationObjects ?? []).filter((object) => !owned.has(sqlObjectKey({ identity: object.identity }))) }, definitions: actual.definitions.filter((definition) => !owned.has(sqlObjectKey({ identity: definition.identity }))) };\n };\n const before = canonicalMigrationJson({ value: rest(local.from, state.from) });\n if (before !== canonicalMigrationJson({ value: rest(local.to, state.to) }) || before !== canonicalMigrationJson({ value: rest(local.down ?? local.from, state.down ?? state.from) })) throw refusal({ reason: \"module-mutates-application-state\", moduleId: origin.moduleId });\n}\n\nfunction dependencyUnavailable(params: { origin: ModuleMigrationOrigin; cause?: unknown }): VibeError {\n return new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot establish module foreign-key dependencies across namespaces. MySQL requires direct global SHOW VIEW (or SELECT) without partial revokes; SHOW VIEW exposes metadata without granting external row reads. Restore catalog visibility before retrying\", meta: { reason: \"module-dependency-unavailable\", moduleId: params.origin.moduleId }, ...(params.cause === undefined ? {} : { cause: params.cause }) });\n}\n\nasync function assertCrossNamespaceModuleDependencies(params: { executor: SqlExecutor; origin: ModuleMigrationOrigin; namespace: string; tables: ReadonlySet<string> }): Promise<void> {\n const { executor, origin } = params;\n const dialect = getSqlDialect({ dialect: origin.dialect });\n const query = renderModuleDependencyQuery({ dialect, operation: { kind: \"foreignKeys\", namespace: params.namespace, tables: [...params.tables] } });\n // SQLite FKs cannot name an attached database. Its existing local checks below\n // remain authoritative; a module with no owned tables has no FK endpoints.\n if (query === undefined) return;\n const visibility = renderModuleDependencyQuery({ dialect, operation: { kind: \"visibility\" } });\n if (visibility !== undefined) {\n const rows = await executor({ text: visibility.text, values: [...visibility.values] }).then(undefined, (cause: unknown) => { throw dependencyUnavailable({ origin, cause }); });\n if (!hasMysqlGlobalCatalogVisibility({ rows })) throw dependencyUnavailable({ origin });\n }\n const rows = await executor({ text: query.text, values: [...query.values] }).then(undefined, (cause: unknown) => { throw dependencyUnavailable({ origin, cause }); });\n const flags: readonly unknown[] = [true, false, 0, 1, \"0\", \"1\"];\n for (const row of rows) {\n const { constraint_name: name, source_namespace: namespace, source_table: table, target_namespace: targetNamespace, target_table: targetTable, source_owned: source, target_owned: target } = row;\n if (typeof name !== \"string\" || name.length === 0 || typeof namespace !== \"string\" || namespace.length === 0 || typeof table !== \"string\" || table.length === 0 || typeof targetNamespace !== \"string\" || targetNamespace.length === 0 || typeof targetTable !== \"string\" || targetTable.length === 0 || !flags.includes(source) || !flags.includes(target) || Number(source) + Number(target) === 0) throw dependencyUnavailable({ origin });\n if (Number(source) !== Number(target)) throw refusal({ reason: \"module-external-dependency\", moduleId: origin.moduleId, identity: { kind: \"constraint\", constraintType: \"foreignKey\", table: { namespace, name: table }, name } });\n }\n}\n\n/** Inspect full physical inventory: new objects cannot claim existing app objects or external dependents. */\nexport async function assertLiveModuleOwnership(params: { executor: SqlExecutor; origin: ModuleMigrationOrigin; resume?: boolean; sqliteRestorePending?: true }): Promise<void> {\n const { executor, origin } = params;\n const namespace = moduleNamespace({ origin });\n if (origin.dialect !== \"postgres\" && await migrationNamespace({ executor, dialect: origin.dialect }) !== namespace) throw refusal({ reason: \"module-placement-mismatch\", moduleId: origin.moduleId });\n const inventory = await inspectMigrationInventory({ executor, dialect: origin.dialect, namespace });\n const before = new Set(identities({ state: origin.source.desiredState!.from, dialect: origin.dialect, namespace }).map((identity) => sqlObjectKey({ identity })));\n const owned = new Set(origin.owned.map((identity) => sqlObjectKey({ identity })));\n const tables = new Set(origin.owned.flatMap((identity) => identity.kind === \"table\" ? [identity.name.name] : []));\n await assertCrossNamespaceModuleDependencies({ executor, origin, namespace, tables });\n for (const object of inventory) {\n const key = sqlObjectKey({ identity: object.identity });\n if (params.resume !== true && owned.has(key) && !before.has(key)) throw refusal({ reason: \"module-object-collision\", moduleId: origin.moduleId, identity: object.identity });\n if (!owned.has(key) && ([\"function\", \"view\", \"trigger\"].includes(object.identity.kind) || \"table\" in object.identity && tables.has(object.identity.table.name) && object.backingConstraint === undefined)) throw refusal({ reason: \"module-external-dependency\", moduleId: origin.moduleId, identity: object.identity });\n if (object.inspectionUnavailable !== undefined && (owned.has(key) || \"table\" in object.identity && tables.has(object.identity.table.name))) throw refusal({ reason: \"module-dependency-unavailable\", moduleId: origin.moduleId, identity: object.identity });\n }\n const physical = origin.dialect === \"postgres\" ? await introspectPhysicalPostgres({ executor, namespaces: [namespace] }) : origin.dialect === \"mysql\" ? await introspectMysql({ executor }) : params.sqliteRestorePending === true ? await introspectSqliteBeforeForeignKeyRestore({ executor }) : await introspectSqlite({ executor });\n for (const model of physical.models) for (const relation of model.relations) {\n const target = physical.models.find((candidate) => candidate.name === relation.targetModel);\n if (target !== undefined && tables.has(model.dbName ?? model.name) !== tables.has(target.dbName ?? target.name)) throw refusal({ reason: \"module-external-dependency\", moduleId: origin.moduleId });\n }\n}\n\n/** Protect installed module objects without requiring an application snapshot. */\nexport async function assertApplicationModuleState(params: {\n executor: SqlExecutor;\n origins: readonly ModuleMigrationOrigin[];\n probe?: \"none\" | \"rollback\" | \"temporary\";\n sqliteRestorePending?: true;\n}): Promise<void> {\n for (const origin of params.origins) {\n await assertLiveModuleOwnership({ executor: params.executor, origin, resume: true, ...(params.sqliteRestorePending === true ? { sqliteRestorePending: true } : {}) });\n const state = origin.source.desiredState!;\n const options = { executor: params.executor, dialect: origin.dialect, from: state.from, to: state.to, removals: state.unmanagedRemovals, ...(params.probe === undefined ? {} : { probe: params.probe }) };\n const report = params.sqliteRestorePending === true ? await verifySqliteTransitionBeforeRestore(options) : await verifyMigrationTransition(options);\n if (!report.inSync) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Application SQL cannot change objects owned by module ${origin.moduleId}; use its reviewed module upgrade`, meta: { reason: \"module-application-mutation\", moduleId: origin.moduleId, report } });\n }\n}\n",
|
|
7
7
|
"import { VibeError, assertValidSchemaIR, isSqlObjectDefinition, isSqlObjectIdentity, providerToDialect, sqlObjectKey } from \"@vibeorm/schema\";\nimport type { Dialect, SchemaIR, SqlObjectDefinition, SqlObjectIdentity } from \"@vibeorm/schema\";\n\n/** Authored desired state; live catalog observations never become this state implicitly. */\nexport type DesiredState = {\n readonly schema: SchemaIR;\n readonly definitions: readonly SqlObjectDefinition[];\n /** Server context for independently normalized definitions; absent for authored-only records. */\n readonly normalization?: { readonly format: \"catalog-v1\"; readonly dialect: Dialect; readonly serverVersion: string };\n};\n\n/** Immutable metadata shipped beside each new forward migration. */\nexport type MigrationDesiredState = {\n readonly version: 1;\n readonly dialect: Dialect;\n readonly from: DesiredState;\n readonly to: DesiredState;\n /** Actual rollback target when irreversible steps cannot restore from exactly. */\n readonly down?: DesiredState;\n /** Exact unmanaged objects the forward SQL intentionally removes, including collateral. */\n readonly unmanagedRemovals?: readonly SqlObjectIdentity[];\n};\n\n/** Offline shells declare uncertainty until reviewed before/after metadata is supplied. */\nexport const UNFINALIZED_DESIRED_STATE: Readonly<{ version: 1; status: \"unfinalized\" }> = Object.freeze({ version: 1, status: \"unfinalized\" });\n\n/** Recognize only the exact offline placeholder, never malformed finalized metadata. */\nexport function isUnfinalizedDesiredState(params: { text: string }): boolean {\n const value: unknown = JSON.parse(params.text);\n return record(value) && value.version === 1 && value.status === \"unfinalized\" && Object.keys(value).length === 2;\n}\n\n/** On-disk desired-state format. */\nexport const DESIRED_STATE_METADATA: Readonly<{ filename: string; version: 1 }> = Object.freeze({ filename: \"desired-state.json\", version: 1 });\n\n/** Construct metadata from declarations, never from the database being verified. */\nexport function createDesiredState(params: { schema: SchemaIR; dialect: Dialect; definitions?: readonly SqlObjectDefinition[] }): DesiredState {\n assertValidSchemaIR({ schema: params.schema });\n const provider = providerToDialect({ provider: params.schema.datasource.provider }) === params.dialect ? params.schema.datasource.provider : params.dialect === \"postgres\" ? \"postgresql\" : params.dialect;\n const schema: SchemaIR = { ...params.schema, datasource: { provider } };\n const definitions = params.definitions ?? (schema.migrationObjects ?? []).flatMap((object) => object.expected === undefined ? [] : [object.expected]);\n const seen = new Set<string>();\n for (const definition of definitions) {\n if (!isSqlObjectDefinition(definition)) throw invalid({ migration: \"declaration\", detail: \"malformed expected definition\" });\n const key = sqlObjectKey({ identity: definition.identity });\n if (seen.has(key)) throw invalid({ migration: \"declaration\", detail: `duplicate definition ${key}` });\n seen.add(key);\n }\n return { schema, definitions };\n}\n\nfunction invalid(params: { migration: string; detail: string; cause?: unknown }): VibeError {\n return new VibeError({ code: \"VIBE_MIGRATION\", message: `Invalid desired state for migration \"${params.migration}\": ${params.detail}`, meta: { reason: \"desired-state-invalid\", migration: params.migration }, ...(params.cause === undefined ? {} : { cause: params.cause }) });\n}\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction keysOnly(value: Record<string, unknown>, allowed: readonly string[]): boolean {\n return Object.keys(value).every((key) => allowed.includes(key));\n}\nfunction modelShape(value: unknown): boolean {\n if (!record(value) || typeof value.name !== \"string\" || !Array.isArray(value.fields) || !Array.isArray(value.relations) || !Array.isArray(value.indexes)) return false;\n return value.fields.every((field) => record(field) && typeof field.name === \"string\"\n && (field.nativeTypeIdentity === undefined || (record(field.nativeTypeIdentity) && keysOnly(field.nativeTypeIdentity, [\"source\", \"namespace\"]) && field.isUnsupported === true && typeof field.nativeTypeIdentity.source === \"string\" && field.nativeTypeIdentity.source === field.nativeType && typeof field.nativeTypeIdentity.namespace === \"string\" && field.nativeTypeIdentity.namespace.length > 0))\n && (typeof field.type === \"string\" || (record(field.type) && typeof field.type.enum === \"string\"))\n && [\"isId\", \"isUnique\", \"isOptional\", \"isList\"].every((key) => typeof field[key] === \"boolean\"))\n && value.relations.every(record)\n && value.indexes.every((index) => record(index) && Array.isArray(index.fields) && index.fields.every(record))\n && (value.checks === undefined || (Array.isArray(value.checks) && value.checks.every((check) => record(check) && typeof check.name === \"string\" && typeof check.expression === \"string\")));\n}\nfunction state(value: unknown): value is DesiredState {\n if (!record(value) || !keysOnly(value, [\"schema\", \"definitions\", \"normalization\"]) || !record(value.schema) || !Array.isArray(value.definitions) || !value.definitions.every(isSqlObjectDefinition)) return false;\n const schema = value.schema;\n return record(schema.datasource) && [\"postgresql\", \"pglite\", \"sqlite\", \"mysql\"].includes(String(schema.datasource.provider))\n && keysOnly(schema, [\"datasource\", \"models\", \"enums\", \"extensions\", \"rls\", \"migrationObjects\"])\n && keysOnly(schema.datasource, [\"provider\"]) && Array.isArray(schema.models) && schema.models.every(modelShape)\n && Array.isArray(schema.enums) && schema.enums.every((entry) => record(entry) && typeof entry.name === \"string\" && Array.isArray(entry.values) && entry.values.every((label) => typeof label === \"string\")) && Array.isArray(schema.extensions) && schema.extensions.every(record)\n && (value.normalization === undefined || (record(value.normalization) && value.normalization.format === \"catalog-v1\" && [\"postgres\", \"sqlite\", \"mysql\"].includes(String(value.normalization.dialect)) && typeof value.normalization.serverVersion === \"string\"));\n}\n\n/** Validate untrusted sidecars, including their Schema IR, before planning or checksumming. */\nexport function assertDesiredState(params: { value: unknown; migration: string }): asserts params is { value: MigrationDesiredState; migration: string } {\n const value = params.value;\n if (!record(value) || !keysOnly(value, [\"version\", \"dialect\", \"from\", \"to\", \"down\", \"unmanagedRemovals\"]) || value.version !== 1 || ![\"postgres\", \"sqlite\", \"mysql\"].includes(String(value.dialect)) || !state(value.from) || !state(value.to) || (value.down !== undefined && !state(value.down))) {\n throw invalid({ migration: params.migration, detail: \"unsupported version or malformed state\" });\n }\n if (value.unmanagedRemovals !== undefined && (!Array.isArray(value.unmanagedRemovals) || !value.unmanagedRemovals.every(isSqlObjectIdentity))) throw invalid({ migration: params.migration, detail: \"malformed unmanaged-removal identities\" });\n for (const entry of [value.from, value.to, ...(value.down === undefined ? [] : [value.down as DesiredState])]) {\n assertValidSchemaIR({ schema: entry.schema });\n if (providerToDialect({ provider: entry.schema.datasource.provider }) !== value.dialect) throw invalid({ migration: params.migration, detail: \"schema provider differs from sidecar dialect\" });\n if (entry.normalization !== undefined && entry.normalization.dialect !== value.dialect) throw invalid({ migration: params.migration, detail: \"normalization dialect differs from sidecar dialect\" });\n const keys = entry.definitions.map((definition) => sqlObjectKey({ identity: definition.identity }));\n if (new Set(keys).size !== keys.length) throw invalid({ migration: params.migration, detail: \"duplicate definition\" });\n }\n}\n\n/** Canonical metadata bytes. Array order is retained because declarations may be ordered. */\nexport function canonicalMigrationJson(params: { value: unknown }): string {\n const value = params.value;\n if (Array.isArray(value)) return `[${value.map((entry) => canonicalMigrationJson({ value: entry })).join(\",\")}]`;\n if (record(value)) return `{${Object.keys(value).filter((key) => value[key] !== undefined).sort().map((key) => `${JSON.stringify(key)}:${canonicalMigrationJson({ value: value[key] })}`).join(\",\")}}`;\n return JSON.stringify(value) ?? \"null\";\n}\n\n/** Absent metadata contributes no checksum bytes, preserving old applied migrations. */\nexport function desiredStateChecksumSuffix(params: { desiredState?: MigrationDesiredState }): string {\n if (params.desiredState === undefined) return \"\";\n assertDesiredState({ value: params.desiredState, migration: \"checksum\" });\n return `\\n-- vibeorm:desired-state ${canonicalMigrationJson({ value: params.desiredState })}`;\n}\n\n/** Serialize metadata for a NEW migration; never retrofit an applied directory. */\nexport function serializeDesiredStateSidecar(params: { desiredState: MigrationDesiredState }): string {\n assertDesiredState({ value: params.desiredState, migration: \"serialize\" });\n return JSON.stringify(params.desiredState, null, 2) + \"\\n\";\n}\n\n/** Parse and validate a reviewed desired-state file. */\nexport function parseDesiredStateSidecar(params: { text: string; migration: string }): MigrationDesiredState {\n return parseMigrationMetadata({ text: params.text, parse: (value) => {\n const checked = { value, migration: params.migration };\n assertDesiredState(checked);\n return checked.value;\n }, failure: (cause) => invalid({ migration: params.migration, detail: \"malformed metadata\", cause }) });\n}\n\n/** Shared typed JSON boundary for desired-state and immutable module metadata. */\nexport function parseMigrationMetadata<T>(params: { text: string; parse: (value: unknown) => T; failure: (cause: unknown) => VibeError }): T {\n try {\n return params.parse(JSON.parse(params.text) as unknown);\n } catch (cause) {\n throw params.failure(cause);\n }\n}\n",
|
|
8
|
-
"/**\n * Schema-IR normalization for diffing.\n *\n * Both sides of a diff (a parsed/DSL schema and an introspected one) collapse\n * into the same normalized shape, so representation differences never produce\n * phantom steps. The normalizations, each pinned by a differ test:\n *\n * - `@unique` on a field and a `kind: \"unique\"` model index are the same\n * unique index (the database stores both identically).\n * - A single `@id` field and a single-field `@@id` are the same primary key.\n * - Field names resolve to db names (`@map` / `@@map`) everywhere.\n * - FK cascade actions resolve Prisma's defaults (required → Restrict,\n * optional → SetNull, onUpdate → Cascade) before comparing.\n * - App-level defaults (uuid/cuid/nanoid/ulid) compare as \"no database\n * default\"; `isUpdatedAt` is app-level and ignored entirely.\n * - Implicit M2M pairs collapse to their join table regardless of whether the\n * sides are parser `manyToMany` fields or introspected unnamed `oneToMany`\n * list sides (structural detection, LEARNINGS).\n * - Views never join the table diff (migrate does not manage view DDL in this\n * wave) but ARE collected by db name, so the differ can emit DROP VIEW for\n * views the target schema no longer declares (board #26).\n */\n\nimport { assertIndexOperatorClasses, VibeError, defaultForeignKeyName, defaultIndexName, enumStorageOf, isEnumType, qualifiedSqlName, assertSqlNamespace, unsupportedCapability } from \"@vibeorm/schema\";\nimport type {\n CascadeAction,\n Dialect,\n EnumIR,\n FieldIR,\n IndexIR,\n ModelIR,\n SchemaIR,\n} from \"@vibeorm/schema\";\nimport { detectImplicitM2MPairs } from \"./relations.ts\";\nimport {\n columnTypeKey,\n columnTypeSql,\n normalizeNativeType,\n defaultFingerprint,\n resolveOnDelete,\n resolveOnUpdate,\n} from \"./postgres-types.ts\";\nimport { sqliteColumnTypeKey, sqliteDefaultFingerprint } from \"./sqlite-types.ts\";\nimport { mysqlColumnTypeKey, mysqlColumnTypeSql, mysqlDefaultFingerprint, normalizeMysqlType } from \"./mysql-types.ts\";\nimport type { IndexColumn, JoinTableEnd } from \"./types.ts\";\n\n// ─── Normalized shapes ────────────────────────────────────────────\n\n/** A column ready for comparison. */\nexport type NormalizedColumn = {\n /** Column db name. */\n readonly name: string;\n readonly field: FieldIR;\n readonly typeKey: string;\n readonly nullable: boolean;\n readonly defaultKey: string | null;\n};\n\n/** An index (unique or not) ready for comparison. `key` ignores the name. */\nexport type NormalizedIndex = {\n readonly constraintName?: string;\n readonly key: string;\n readonly name: string;\n readonly kind: string;\n readonly unique: boolean;\n readonly columns: readonly IndexColumn[];\n readonly where?: string;\n /** `UNIQUE NULLS NOT DISTINCT` (postgres 15+). */\n readonly nullsNotDistinct?: boolean;\n};\n\n/** A foreign key ready for comparison. `key` excludes the cascade actions. */\nexport type NormalizedFk = {\n readonly key: string;\n readonly constraintName: string;\n readonly columns: readonly string[];\n readonly refTable: string;\n readonly refNamespace?: string;\n readonly refColumns: readonly string[];\n readonly onDelete: CascadeAction;\n readonly onUpdate: CascadeAction;\n};\n\n/** A model collapsed to its database shape. */\nexport type NormalizedTable = {\n readonly model: ModelIR;\n /** Table db name. */\n readonly table: string;\n readonly namespace?: string;\n readonly columns: ReadonlyMap<string, NormalizedColumn>;\n /** Primary-key column db names (empty = none). */\n readonly pk: readonly string[];\n readonly indexes: ReadonlyMap<string, NormalizedIndex>;\n readonly fks: ReadonlyMap<string, NormalizedFk>;\n /** CHECK names and authored expressions; live callers establish normalized equivalence first. */\n readonly checks: ReadonlyMap<string, string>;\n};\n\n/** An implicit M2M join table collapsed to its database shape. */\nexport type NormalizedJoinTable = {\n readonly table: string;\n readonly namespace?: string;\n readonly a: JoinTableEnd;\n readonly b: JoinTableEnd;\n};\n\n/** A whole schema, ready for diffing. */\nexport type NormalizedSchema = {\n readonly tables: ReadonlyMap<string, NormalizedTable>;\n readonly joinTables: ReadonlyMap<string, NormalizedJoinTable>;\n /** PostgreSQL maps use physicalNameKey tuples; inline-enum dialects retain database-local names. */\n readonly enums: ReadonlyMap<string, EnumIR>;\n /** View models keyed by physical identity — present for drop detection only (#26). */\n readonly views: ReadonlyMap<string, ModelIR>;\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\n/**\n * Collapse a SchemaIR into its comparable database shape. `dialect` (default\n * postgres) selects the column comparison keys: on sqlite columns compare by\n * STORAGE CLASS (TEXT/INTEGER/REAL/BLOB — the TEXT-ambiguity rule), on mysql\n * by mysql column type; enum columns on both compare by VALUE LIST, never by\n * name (the database does not store one).\n */\nexport function normalizeSchema(params: {\n schema: SchemaIR;\n dialect?: Dialect;\n}): NormalizedSchema {\n const { schema } = params;\n const dialect = params.dialect ?? \"postgres\";\n assertIndexOperatorClasses({ schema, dialect, physical: true });\n\n const enums = new Map<string, EnumIR>();\n for (const enumDef of schema.enums) {\n if (enumDef.namespace !== undefined) assertSqlNamespace({ namespace: enumDef.namespace, dialect });\n if (enumStorageOf({ enumDef }) === \"string\") continue;\n enums.set(physicalNameKey({ name: enumDef.dbName ?? enumDef.name, namespace: enumDef.namespace, dialect }), enumDef);\n }\n\n const tables = new Map<string, NormalizedTable>();\n const views = new Map<string, ModelIR>();\n for (const model of schema.models) {\n if (model.namespace !== undefined) assertSqlNamespace({ namespace: model.namespace, dialect });\n if (model.isView) {\n views.set(physicalNameKey({ name: model.dbName ?? model.name, namespace: model.namespace, dialect }), model);\n continue;\n }\n const table = normalizeModel({ model, schema, dialect, enums });\n tables.set(physicalNameKey({ name: table.table, namespace: table.namespace, dialect }), table);\n }\n\n const joinTables = new Map<string, NormalizedJoinTable>();\n for (const pair of detectImplicitM2MPairs({ schema })) {\n const join = normalizeJoinTable({ pair, schema, dialect });\n joinTables.set(physicalNameKey({ name: join.table, namespace: join.namespace, dialect }), join);\n }\n\n return { tables, joinTables, enums, views };\n}\n\n// ─── Logical enum → physical String ───────────────────────────────\n\nfunction physicalEnumField(params: { field: FieldIR; schema: SchemaIR; dialect: Dialect; table: string }): FieldIR {\n const { field, schema, dialect, table } = params;\n if (!isEnumType(field.type)) return field;\n const type = field.type;\n if (type.namespace !== undefined) assertSqlNamespace({ namespace: type.namespace, dialect });\n const name = type.enum;\n const enumDef = schema.enums.find((candidate) => (candidate.name === name || candidate.dbName === name) && (type.namespace === undefined || qualifiedSqlName({ name, namespace: candidate.namespace }).namespace === type.namespace));\n if (enumDef === undefined) return field;\n if (enumStorageOf({ enumDef }) !== \"string\") {\n return dialect === \"postgres\" ? { ...field, type: { enum: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }) } } : field;\n }\n const physical: FieldIR = {\n ...field,\n type: \"String\",\n ...(field.default?.kind === \"enumValue\" ? { default: { kind: \"literal\", value: field.default.value } } : {}),\n };\n assertStringEnumLabelsFit({ field: physical, values: enumDef.values, dialect, table });\n return physical;\n}\n\nconst MYSQL_TEXT_BYTES: Readonly<Record<string, number>> = {\n tinytext: 255,\n text: 65_535,\n mediumtext: 16_777_215,\n longtext: 4_294_967_295,\n};\n\n/** Refuse string storage that cannot preserve every enum label verbatim. */\nexport function assertStringEnumLabelsFit(params: {\n field: FieldIR;\n values: readonly string[];\n dialect: Dialect;\n table: string;\n}): void {\n const { field, values, dialect, table } = params;\n // SQLite's ordinary String mapping ignores native-type annotations and is\n // always unbounded TEXT. PostgreSQL/MySQL retain supported text overrides.\n if (dialect === \"sqlite\") return;\n const type = dialect === \"postgres\"\n ? normalizeNativeType({ raw: columnTypeSql({ field: { ...field, isList: false } }) })\n : normalizeMysqlType({ raw: mysqlColumnTypeSql({ field, enums: new Map() }) });\n const varchar = /^varchar(?:\\((\\d+)\\))?$/.exec(type);\n const textBytes = dialect === \"mysql\" ? MYSQL_TEXT_BYTES[type] : undefined;\n const supported = type === \"text\" || varchar !== null || textBytes !== undefined;\n const charLimit = varchar?.[1] === undefined ? undefined : Number(varchar[1]);\n const tooLong = values.some((value) =>\n (charLimit !== undefined && [...value].length > charLimit) ||\n (textBytes !== undefined && new TextEncoder().encode(value).length > textBytes),\n );\n if (!supported || tooLong) {\n throw unsupportedCapability({\n dialect,\n feature: `string enum column \"${table}\".\"${field.dbName ?? field.name}\" stored as ${type}`,\n hint: supported\n ? \"an enum label exceeds the physical column limit — choose a wider varchar or text type\"\n : \"use text or varchar storage; other types cannot preserve arbitrary enum labels verbatim\",\n });\n }\n}\n\n// ─── Per-dialect column keys ─────────────────────────────────\n\n/** Dialect-routed column type comparison key. */\nexport function columnTypeKeyFor(params: {\n field: FieldIR;\n dialect: Dialect;\n enums: ReadonlyMap<string, EnumIR>;\n}): string {\n const { field, dialect, enums } = params;\n switch (dialect) {\n case \"postgres\":\n return columnTypeKey({ field });\n case \"sqlite\":\n return sqliteColumnTypeKey({ field, enums });\n case \"mysql\":\n return mysqlColumnTypeKey({ field, enums });\n }\n}\n\n/** Dialect-routed default fingerprint. */\nexport function defaultFingerprintFor(params: {\n field: FieldIR;\n dialect: Dialect;\n}): string | null {\n const { field, dialect } = params;\n switch (dialect) {\n case \"postgres\":\n return defaultFingerprint({ field });\n case \"sqlite\":\n return sqliteDefaultFingerprint({ field });\n case \"mysql\":\n return mysqlDefaultFingerprint({ field });\n }\n}\n\n// ─── Model → table ────────────────────────────────────────────────\n\nfunction normalizeModel(params: {\n model: ModelIR;\n schema: SchemaIR;\n dialect: Dialect;\n enums: ReadonlyMap<string, EnumIR>;\n}): NormalizedTable {\n const { model, schema, dialect, enums } = params;\n const table = model.dbName ?? model.name;\n\n const columns = new Map<string, NormalizedColumn>();\n for (const logicalField of model.fields) {\n const field = physicalEnumField({ field: logicalField, schema, dialect, table });\n const name = field.dbName ?? field.name;\n columns.set(name, {\n name,\n field,\n typeKey: columnTypeKeyFor({ field, dialect, enums }),\n nullable: field.isOptional,\n defaultKey: defaultFingerprintFor({ field, dialect }),\n });\n }\n\n const pk = normalizePk({ model });\n const indexes = normalizeIndexes({ model, table, dialect });\n const fks = normalizeFks({ model, table, schema, dialect });\n\n const checks = new Map<string, string>();\n for (const check of model.checks ?? []) checks.set(check.name, check.expression);\n\n return { model, table, ...(model.namespace === undefined ? {} : { namespace: model.namespace }), columns, pk, indexes, fks, checks };\n}\n\nfunction normalizePk(params: { model: ModelIR }): readonly string[] {\n const { model } = params;\n if (model.primaryKey !== undefined && model.primaryKey.fields.length > 0) {\n return model.primaryKey.fields.map((name) => fieldDbName({ model, name }));\n }\n return model.fields.filter((field) => field.isId).map((field) => field.dbName ?? field.name);\n}\n\nfunction normalizeIndexes(params: {\n model: ModelIR;\n table: string;\n dialect: Dialect;\n}): ReadonlyMap<string, NormalizedIndex> {\n const { model, table, dialect } = params;\n const result = new Map<string, NormalizedIndex>();\n\n const add = (index: IndexIR): void => {\n const unique = index.kind === \"unique\";\n const kind = unique ? \"btree\" : index.kind;\n const columns: IndexColumn[] = index.fields.map((field) => {\n const fieldIR = model.fields.find((candidate) => candidate.name === field.name);\n // SQLITE-2: Decimal-typed index columns carry a marker — the sqlite DDL\n // renderer emits CAST(col AS REAL) expression indexes so B4's cast\n // compare sites stay indexable. Inert on other dialects and absent from\n // the comparison key.\n const decimal = fieldIR !== undefined && fieldIR.type === \"Decimal\" && fieldIR.isList !== true;\n return {\n name: fieldDbName({ model, name: field.name }),\n desc: field.sort === \"desc\",\n ...(decimal ? { decimal: true } : {}),\n ...(field.operatorClass === undefined ? {} : { operatorClass: field.operatorClass }),\n };\n });\n const where = index.where;\n const nullsNotDistinct = unique && index.nullsNotDistinct === true;\n const key = indexComparisonKey({ unique, kind, columns, where, nullsNotDistinct });\n if (result.has(key)) return;\n const name =\n index.name ??\n defaultIndexName({ table, columns: columns.map((column) => column.name), unique, dialect });\n result.set(key, {\n key,\n name,\n ...(index.constraintName === undefined ? {} : { constraintName: index.constraintName }),\n kind,\n unique,\n columns,\n ...(where === undefined ? {} : { where }),\n ...(nullsNotDistinct ? { nullsNotDistinct: true } : {}),\n });\n };\n\n for (const index of model.indexes) add(index);\n\n // `@unique` on a field is the same database object as `@@unique([field])`.\n for (const field of model.fields) {\n if (!field.isUnique) continue;\n add({ kind: \"unique\", fields: [{ name: field.name }] });\n }\n\n return result;\n}\n\nfunction indexComparisonKey(params: {\n unique: boolean;\n kind: string;\n columns: readonly IndexColumn[];\n where: string | undefined;\n nullsNotDistinct?: boolean;\n}): string {\n const { unique, kind, columns, where, nullsNotDistinct } = params;\n const cols = columns\n .map((column) => `${column.name}${column.desc ? \" desc\" : \"\"}${column.operatorClass === undefined ? \"\" : ` ops:${JSON.stringify([column.operatorClass.namespace, column.operatorClass.name])}`}`)\n .join(\",\");\n return `${unique ? \"u\" : \"i\"}${nullsNotDistinct === true ? \"n\" : \"\"}:${kind}:${cols}:${normalizeWhere({ where })}`;\n}\n\n/**\n * Comparison key for a partial-index predicate.\n *\n * Literal bytes, quoted identifier case and casts are semantic. Only the\n * supported boolean structure is reparenthesized. Quoted and unquoted names\n * may conservatively compare unequal; equivalence requires catalog evidence.\n * Complex lexical forms remain opaque rather than claiming false convergence.\n */\nexport function normalizeWhere(params: { where: string | undefined }): string {\n const { where } = params;\n if (where === undefined || where.trim() === \"\") return \"\";\n if (/\\$|\\\\|--|\\/\\*/.test(where)) return `raw:${where.trim()}`;\n const tokens = tokenizeWhere({ text: where });\n const parsed = parseOrExpression({ tokens, at: 0 });\n return parsed !== undefined && parsed.at === tokens.length\n ? parsed.text\n : tokens.join(\" \");\n}\n\n/** Tokenize the supported lexical subset without erasing quoted names or casts. */\nfunction tokenizeWhere(params: { text: string }): string[] {\n const { text } = params;\n const tokens: string[] = [];\n let i = 0;\n while (i < text.length) {\n const ch = text[i] as string;\n if (/\\s/.test(ch)) {\n i += 1;\n continue;\n }\n if (ch === \"'\") {\n // A literal is DATA: its bytes and its case decide equality.\n let literal = \"'\";\n i += 1;\n while (i < text.length) {\n literal += text[i];\n if (text[i] === \"'\") {\n if (text[i + 1] === \"'\") {\n literal += \"'\";\n i += 2;\n continue;\n }\n i += 1;\n break;\n }\n i += 1;\n }\n tokens.push(literal);\n continue;\n }\n if (ch === '\"' || ch === \"`\") {\n let name = \"\";\n i += 1;\n while (i < text.length) {\n if (text[i] === ch) {\n if (text[i + 1] !== ch) { i += 1; break; }\n name += ch;\n i += 2;\n } else {\n name += text[i];\n i += 1;\n }\n }\n tokens.push(JSON.stringify(name));\n continue;\n }\n if (ch === \"[\") {\n // A bracket can quote a SQLite identifier or carry PostgreSQL array\n // structure. Never consume ARRAY literal bytes as an identifier.\n const end = text.indexOf(\"]\", i + 1);\n const inner = end === -1 ? undefined : text.slice(i + 1, end);\n if (\n inner !== undefined &&\n tokens[tokens.length - 1] !== \"array\" &&\n /^[A-Za-z_][A-Za-z_0-9$]*$/.test(inner)\n ) {\n tokens.push(JSON.stringify(inner));\n i = end + 1;\n continue;\n }\n tokens.push(ch);\n i += 1;\n continue;\n }\n const word = /^[A-Za-z_][A-Za-z_0-9$]*/.exec(text.slice(i));\n if (word !== null) {\n tokens.push(word[0].toLowerCase());\n i += word[0].length;\n continue;\n }\n const number = /^[0-9]+(?:\\.[0-9]+)?/.exec(text.slice(i));\n if (number !== null) {\n tokens.push(number[0]);\n i += number[0].length;\n continue;\n }\n tokens.push(ch);\n i += 1;\n }\n return tokens;\n}\n\ntype ParsedExpression = { text: string; at: number; kind: \"or\" | \"and\" | \"atom\" };\n\n/** `<and> (OR <and>)*` — the loosest binding level. */\nfunction parseOrExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const first = parseAndExpression({ tokens: params.tokens, at: params.at });\n if (first === undefined) return undefined;\n let at = first.at;\n const parts = [first.text];\n while (params.tokens[at] === \"or\") {\n const next = parseAndExpression({ tokens: params.tokens, at: at + 1 });\n if (next === undefined) return undefined;\n parts.push(next.text);\n at = next.at;\n }\n return parts.length === 1\n ? { text: parts[0] as string, at, kind: first.kind }\n : { text: parts.join(\" or \"), at, kind: \"or\" };\n}\n\n/** `<primary> (AND <primary>)*` — binds tighter than OR, so OR operands get parentheses. */\nfunction parseAndExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const first = parsePrimaryExpression({ tokens: params.tokens, at: params.at });\n if (first === undefined) return undefined;\n let at = first.at;\n const operands: ParsedExpression[] = [first];\n while (params.tokens[at] === \"and\") {\n const next = parsePrimaryExpression({ tokens: params.tokens, at: at + 1 });\n if (next === undefined) return undefined;\n operands.push(next);\n at = next.at;\n }\n // Parentheses are re-added only where AND binds tighter than an OR operand.\n return operands.length === 1\n ? { text: first.text, at, kind: first.kind }\n : {\n text: operands\n .map((operand) => (operand.kind === \"or\" ? `(${operand.text})` : operand.text))\n .join(\" and \"),\n at,\n kind: \"and\",\n };\n}\n\n/** A parenthesized group, a `NOT`, or an atom read up to the next top-level operator. */\nfunction parsePrimaryExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const { tokens } = params;\n let at = params.at;\n if (tokens[at] === \"not\") {\n const operand = parsePrimaryExpression({ tokens, at: at + 1 });\n if (operand === undefined) return undefined;\n const inner = operand.kind === \"atom\" ? operand.text : `(${operand.text})`;\n return { text: `not ${inner}`, at: operand.at, kind: \"atom\" };\n }\n if (tokens[at] === \"(\") {\n const inner = parseOrExpression({ tokens, at: at + 1 });\n if (inner === undefined || tokens[inner.at] !== \")\") return undefined;\n // The parentheses themselves are formatting; the STRUCTURE they created is\n // carried in `kind` and re-parenthesized only where precedence needs it.\n return { text: inner.text, at: inner.at + 1, kind: inner.kind };\n }\n const parts: string[] = [];\n let depth = 0;\n while (at < tokens.length) {\n const token = tokens[at] as string;\n if (depth === 0 && (token === \"and\" || token === \"or\" || token === \")\")) break;\n if (token === \"(\") depth += 1;\n if (token === \")\") depth -= 1;\n parts.push(token);\n at += 1;\n }\n if (parts.length === 0) return undefined;\n // PostgreSQL omits unnecessary identifier quotes in these simple predicates.\n // Restrict this equivalence to a column null-check: quotes on SQL values,\n // function names, casts and mixed-case identifiers must remain significant.\n if (parts[1] === \"is\" && (parts.length === 3 && parts[2] === \"null\" || parts.length === 4 && parts[2] === \"not\" && parts[3] === \"null\")) {\n const quoted = /^\"([a-z_][a-z_0-9]*)\"$/.exec(parts[0]!);\n if (quoted !== null && !/^(?:true|false|null|unknown|default|user|current_.*|session_user|system_user|localtime|localtimestamp|and|or|not|is)$/.test(quoted[1]!)) parts[0] = quoted[1]!;\n }\n return { text: parts.join(\" \"), at, kind: \"atom\" };\n}\n\nfunction normalizeFks(params: {\n model: ModelIR;\n table: string;\n schema: SchemaIR;\n dialect: Dialect;\n}): ReadonlyMap<string, NormalizedFk> {\n const { model, table, schema } = params;\n const result = new Map<string, NormalizedFk>();\n\n for (const relation of model.relations) {\n if (relation.fields === undefined || relation.fields.length === 0) continue;\n\n const target = schema.models.find((candidate) => candidate.name === relation.targetModel);\n // A view is not a table — no dialect can reference one from a foreign key.\n // Views are skipped as tables everywhere else here (normalizeSchema,\n // differ, detectImplicitM2MPairs); the FK side skips them for the same\n // reason, so a model may carry a relation INTO a view for query purposes\n // without the DDL ever trying to constrain it.\n if (target !== undefined && target.isView) continue;\n const refTable = target === undefined ? relation.targetModel : (target.dbName ?? target.name);\n const columns = relation.fields.map((name) => fieldDbName({ model, name }));\n const refColumns = (relation.references ?? []).map((name) =>\n target === undefined ? name : fieldDbName({ model: target, name }),\n );\n\n // Required = every FK column is non-nullable (the ground truth the\n // database sees; Prisma's cascade defaults key off it).\n const required = relation.fields.every((name) => {\n const field = model.fields.find((candidate) => candidate.name === name);\n return field === undefined ? true : !field.isOptional;\n });\n\n const key = `${columns.join(\",\")}→${physicalNameKey({ name: refTable, namespace: target?.namespace, dialect: params.dialect })}.${refColumns.join(\",\")}`;\n if (result.has(key)) continue;\n result.set(key, {\n key,\n constraintName: relation.constraintName ?? defaultForeignKeyName({ table, columns, dialect: params.dialect }),\n columns,\n refTable,\n ...(target?.namespace === undefined ? {} : { refNamespace: target.namespace }),\n refColumns,\n onDelete: resolveOnDelete({ explicit: relation.onDelete, required }),\n onUpdate: resolveOnUpdate({ explicit: relation.onUpdate }),\n });\n }\n\n return result;\n}\n\n// ─── Join tables ──────────────────────────────────────────────────\n\nfunction normalizeJoinTable(params: {\n pair: { modelA: string; modelB: string; tableName: string; namespace?: string };\n schema: SchemaIR;\n dialect: Dialect;\n}): NormalizedJoinTable {\n const { pair, schema, dialect } = params;\n return {\n table: pair.tableName,\n ...(pair.namespace === undefined ? {} : { namespace: pair.namespace }),\n a: joinTableEnd({ modelName: pair.modelA, schema, dialect, joinTable: pair.tableName }),\n b: joinTableEnd({ modelName: pair.modelB, schema, dialect, joinTable: pair.tableName }),\n };\n}\n\nfunction joinTableEnd(params: {\n modelName: string;\n schema: SchemaIR;\n dialect: Dialect;\n joinTable: string;\n}): JoinTableEnd {\n const { modelName, schema, joinTable } = params;\n const model = schema.models.find((candidate) => candidate.name === modelName);\n if (model === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `implicit many-to-many table \"${joinTable}\" references unknown model \"${modelName}\"`,\n meta: { joinTable, model: modelName },\n });\n }\n\n const pkFields =\n model.primaryKey !== undefined && model.primaryKey.fields.length > 0\n ? model.primaryKey.fields.map((name) => model.fields.find((field) => field.name === name))\n : model.fields.filter((field) => field.isId);\n\n const pkField = pkFields[0];\n if (pkFields.length !== 1 || pkField === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `implicit many-to-many relations require a single-column primary key on \"${modelName}\" (join table \"${joinTable}\")`,\n meta: { joinTable, model: modelName },\n });\n }\n\n return {\n table: model.dbName ?? model.name,\n ...(model.namespace === undefined ? {} : { namespace: model.namespace }),\n column: pkField.dbName ?? pkField.name,\n field: physicalEnumField({ field: pkField, schema, dialect: params.dialect, table: model.dbName ?? model.name }),\n };\n}\n\n// ─── Shared helper ────────────────────────────────────────────────\n\n/** Collision-free PostgreSQL identity; other dialects retain their existing database-local keys. */\nexport function physicalNameKey(params: { name: string; namespace?: string; dialect?: Dialect }): string {\n if (params.dialect !== undefined && params.dialect !== \"postgres\") return params.name;\n const identity = qualifiedSqlName(params);\n return JSON.stringify([identity.namespace, identity.name]);\n}\n\n/** Namespaces declared by core placement or explicitly retained migration ownership. */\nexport function schemaNamespaces(params: { schema: SchemaIR }): string[] {\n return [...new Set([\n ...params.schema.models.flatMap((model) => model.namespace === undefined || model.namespace === \"public\" ? [] : [model.namespace]),\n ...params.schema.enums.flatMap((entry) => enumStorageOf({ enumDef: entry }) === \"string\" || entry.namespace === undefined || entry.namespace === \"public\" ? [] : [entry.namespace]),\n ...(params.schema.migrationObjects ?? []).flatMap((object) => object.identity.kind === \"namespace\" ? [object.identity.name] : []),\n ])];\n}\n\n/** Resolve a field name to its db column name on a model. */\nexport function fieldDbName(params: { model: ModelIR; name: string }): string {\n const { model, name } = params;\n const field = model.fields.find((candidate) => candidate.name === name);\n return field === undefined ? name : (field.dbName ?? field.name);\n}\n",
|
|
8
|
+
"/**\n * Schema-IR normalization for diffing.\n *\n * Both sides of a diff (a parsed/DSL schema and an introspected one) collapse\n * into the same normalized shape, so representation differences never produce\n * phantom steps. The normalizations, each pinned by a differ test:\n *\n * - `@unique` on a field and a `kind: \"unique\"` model index are the same\n * unique index (the database stores both identically).\n * - A single `@id` field and a single-field `@@id` are the same primary key.\n * - Field names resolve to db names (`@map` / `@@map`) everywhere.\n * - FK cascade actions resolve Prisma's defaults (required → Restrict,\n * optional → SetNull, onUpdate → Cascade) before comparing.\n * - App-level defaults (uuid/cuid/nanoid/ulid) compare as \"no database\n * default\"; `isUpdatedAt` is app-level and ignored entirely.\n * - Implicit M2M pairs collapse to their join table regardless of whether the\n * sides are parser `manyToMany` fields or introspected unnamed `oneToMany`\n * list sides (structural detection, LEARNINGS).\n * - Views never join the table diff (migrate does not manage view DDL in this\n * wave) but ARE collected by db name, so the differ can emit DROP VIEW for\n * views the target schema no longer declares (board #26).\n */\n\nimport { assertIndexOperatorClasses, VibeError, defaultForeignKeyName, defaultIndexName, enumStorageOf, isEnumType, qualifiedSqlName, assertSqlNamespace, unsupportedCapability } from \"@vibeorm/schema\";\nimport type {\n CascadeAction,\n Dialect,\n EnumIR,\n FieldIR,\n IndexIR,\n ModelIR,\n SchemaIR,\n} from \"@vibeorm/schema\";\nimport { detectImplicitM2MPairs } from \"./relations.ts\";\nimport {\n columnTypeKey,\n columnTypeSql,\n declaresExactColumnType,\n normalizeNativeType,\n defaultFingerprint,\n resolveOnDelete,\n resolveOnUpdate,\n} from \"./postgres-types.ts\";\nimport { sqliteColumnTypeKey, sqliteDefaultFingerprint } from \"./sqlite-types.ts\";\nimport { mysqlColumnTypeKey, mysqlColumnTypeSql, mysqlDefaultFingerprint, normalizeMysqlType } from \"./mysql-types.ts\";\nimport type { IndexColumn, JoinTableEnd } from \"./types.ts\";\n\n// ─── Normalized shapes ────────────────────────────────────────────\n\n/** A column ready for comparison. */\nexport type NormalizedColumn = {\n /** Column db name. */\n readonly name: string;\n readonly field: FieldIR;\n readonly typeKey: string;\n /** `typeKey` without grandfathered equivalences — what an exact declaration is compared with. */\n readonly exactTypeKey: string;\n /** The declaration pins its type exactly (an explicit timestamptz precision); see `columnTypeChanged`. */\n readonly pinsExactType: boolean;\n readonly nullable: boolean;\n readonly defaultKey: string | null;\n};\n\n/** An index (unique or not) ready for comparison. `key` ignores the name. */\nexport type NormalizedIndex = {\n readonly constraintName?: string;\n readonly key: string;\n readonly name: string;\n readonly kind: string;\n readonly unique: boolean;\n readonly columns: readonly IndexColumn[];\n readonly where?: string;\n /** `UNIQUE NULLS NOT DISTINCT` (postgres 15+). */\n readonly nullsNotDistinct?: boolean;\n};\n\n/** A foreign key ready for comparison. `key` excludes the cascade actions. */\nexport type NormalizedFk = {\n readonly key: string;\n readonly constraintName: string;\n readonly columns: readonly string[];\n readonly refTable: string;\n readonly refNamespace?: string;\n readonly refColumns: readonly string[];\n readonly onDelete: CascadeAction;\n readonly onUpdate: CascadeAction;\n};\n\n/** A model collapsed to its database shape. */\nexport type NormalizedTable = {\n readonly model: ModelIR;\n /** Table db name. */\n readonly table: string;\n readonly namespace?: string;\n readonly columns: ReadonlyMap<string, NormalizedColumn>;\n /** Primary-key column db names (empty = none). */\n readonly pk: readonly string[];\n readonly indexes: ReadonlyMap<string, NormalizedIndex>;\n readonly fks: ReadonlyMap<string, NormalizedFk>;\n /** CHECK names and authored expressions; live callers establish normalized equivalence first. */\n readonly checks: ReadonlyMap<string, string>;\n};\n\n/** An implicit M2M join table collapsed to its database shape. */\nexport type NormalizedJoinTable = {\n readonly table: string;\n readonly namespace?: string;\n readonly a: JoinTableEnd;\n readonly b: JoinTableEnd;\n};\n\n/** A whole schema, ready for diffing. */\nexport type NormalizedSchema = {\n readonly tables: ReadonlyMap<string, NormalizedTable>;\n readonly joinTables: ReadonlyMap<string, NormalizedJoinTable>;\n /** PostgreSQL maps use physicalNameKey tuples; inline-enum dialects retain database-local names. */\n readonly enums: ReadonlyMap<string, EnumIR>;\n /** View models keyed by physical identity — present for drop detection only (#26). */\n readonly views: ReadonlyMap<string, ModelIR>;\n};\n\n// ─── Entry point ──────────────────────────────────────────────────\n\n/**\n * Collapse a SchemaIR into its comparable database shape. `dialect` (default\n * postgres) selects the column comparison keys: on sqlite columns compare by\n * STORAGE CLASS (TEXT/INTEGER/REAL/BLOB — the TEXT-ambiguity rule), on mysql\n * by mysql column type; enum columns on both compare by VALUE LIST, never by\n * name (the database does not store one).\n */\nexport function normalizeSchema(params: {\n schema: SchemaIR;\n dialect?: Dialect;\n}): NormalizedSchema {\n const { schema } = params;\n const dialect = params.dialect ?? \"postgres\";\n assertIndexOperatorClasses({ schema, dialect, physical: true });\n\n const enums = new Map<string, EnumIR>();\n for (const enumDef of schema.enums) {\n if (enumDef.namespace !== undefined) assertSqlNamespace({ namespace: enumDef.namespace, dialect });\n if (enumStorageOf({ enumDef }) === \"string\") continue;\n enums.set(physicalNameKey({ name: enumDef.dbName ?? enumDef.name, namespace: enumDef.namespace, dialect }), enumDef);\n }\n\n const tables = new Map<string, NormalizedTable>();\n const views = new Map<string, ModelIR>();\n for (const model of schema.models) {\n if (model.namespace !== undefined) assertSqlNamespace({ namespace: model.namespace, dialect });\n if (model.isView) {\n views.set(physicalNameKey({ name: model.dbName ?? model.name, namespace: model.namespace, dialect }), model);\n continue;\n }\n const table = normalizeModel({ model, schema, dialect, enums });\n tables.set(physicalNameKey({ name: table.table, namespace: table.namespace, dialect }), table);\n }\n\n const joinTables = new Map<string, NormalizedJoinTable>();\n for (const pair of detectImplicitM2MPairs({ schema })) {\n const join = normalizeJoinTable({ pair, schema, dialect });\n joinTables.set(physicalNameKey({ name: join.table, namespace: join.namespace, dialect }), join);\n }\n\n return { tables, joinTables, enums, views };\n}\n\n// ─── Logical enum → physical String ───────────────────────────────\n\nfunction physicalEnumField(params: { field: FieldIR; schema: SchemaIR; dialect: Dialect; table: string }): FieldIR {\n const { field, schema, dialect, table } = params;\n if (!isEnumType(field.type)) return field;\n const type = field.type;\n if (type.namespace !== undefined) assertSqlNamespace({ namespace: type.namespace, dialect });\n const name = type.enum;\n const enumDef = schema.enums.find((candidate) => (candidate.name === name || candidate.dbName === name) && (type.namespace === undefined || qualifiedSqlName({ name, namespace: candidate.namespace }).namespace === type.namespace));\n if (enumDef === undefined) return field;\n if (enumStorageOf({ enumDef }) !== \"string\") {\n return dialect === \"postgres\" ? { ...field, type: { enum: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }) } } : field;\n }\n const physical: FieldIR = {\n ...field,\n type: \"String\",\n ...(field.default?.kind === \"enumValue\" ? { default: { kind: \"literal\", value: field.default.value } } : {}),\n };\n assertStringEnumLabelsFit({ field: physical, values: enumDef.values, dialect, table });\n return physical;\n}\n\nconst MYSQL_TEXT_BYTES: Readonly<Record<string, number>> = {\n tinytext: 255,\n text: 65_535,\n mediumtext: 16_777_215,\n longtext: 4_294_967_295,\n};\n\n/** Refuse string storage that cannot preserve every enum label verbatim. */\nexport function assertStringEnumLabelsFit(params: {\n field: FieldIR;\n values: readonly string[];\n dialect: Dialect;\n table: string;\n}): void {\n const { field, values, dialect, table } = params;\n // SQLite's ordinary String mapping ignores native-type annotations and is\n // always unbounded TEXT. PostgreSQL/MySQL retain supported text overrides.\n if (dialect === \"sqlite\") return;\n const type = dialect === \"postgres\"\n ? normalizeNativeType({ raw: columnTypeSql({ field: { ...field, isList: false } }) })\n : normalizeMysqlType({ raw: mysqlColumnTypeSql({ field, enums: new Map() }) });\n const varchar = /^varchar(?:\\((\\d+)\\))?$/.exec(type);\n const textBytes = dialect === \"mysql\" ? MYSQL_TEXT_BYTES[type] : undefined;\n const supported = type === \"text\" || varchar !== null || textBytes !== undefined;\n const charLimit = varchar?.[1] === undefined ? undefined : Number(varchar[1]);\n const tooLong = values.some((value) =>\n (charLimit !== undefined && [...value].length > charLimit) ||\n (textBytes !== undefined && new TextEncoder().encode(value).length > textBytes),\n );\n if (!supported || tooLong) {\n throw unsupportedCapability({\n dialect,\n feature: `string enum column \"${table}\".\"${field.dbName ?? field.name}\" stored as ${type}`,\n hint: supported\n ? \"an enum label exceeds the physical column limit — choose a wider varchar or text type\"\n : \"use text or varchar storage; other types cannot preserve arbitrary enum labels verbatim\",\n });\n }\n}\n\n// ─── Per-dialect column keys ─────────────────────────────────\n\n/**\n * Dialect-routed column type comparison key. `exact` drops postgres's\n * grandfathered equivalences; sqlite and mysql keys are exact already.\n */\nexport function columnTypeKeyFor(params: {\n field: FieldIR;\n dialect: Dialect;\n enums: ReadonlyMap<string, EnumIR>;\n exact?: boolean;\n}): string {\n const { field, dialect, enums, exact } = params;\n switch (dialect) {\n case \"postgres\":\n return columnTypeKey({ field, ...(exact === undefined ? {} : { exact }) });\n case \"sqlite\":\n return sqliteColumnTypeKey({ field, enums });\n case \"mysql\":\n return mysqlColumnTypeKey({ field, enums });\n }\n}\n\n/**\n * Whether `actual`'s column type differs from what `declared` asks for. The\n * declared side decides how strictly: an explicit timestamptz precision is\n * compared exactly (the runtime trusts a declared `(3)` as millisecond-exact),\n * a bare declaration keeps the grandfathered v1 / 2.0-alpha equivalence class.\n */\nexport function columnTypeChanged(params: { declared: NormalizedColumn; actual: NormalizedColumn }): boolean {\n const { declared, actual } = params;\n return declared.pinsExactType ? declared.exactTypeKey !== actual.exactTypeKey : declared.typeKey !== actual.typeKey;\n}\n\n/** Dialect-routed default fingerprint. */\nexport function defaultFingerprintFor(params: {\n field: FieldIR;\n dialect: Dialect;\n}): string | null {\n const { field, dialect } = params;\n switch (dialect) {\n case \"postgres\":\n return defaultFingerprint({ field });\n case \"sqlite\":\n return sqliteDefaultFingerprint({ field });\n case \"mysql\":\n return mysqlDefaultFingerprint({ field });\n }\n}\n\n// ─── Model → table ────────────────────────────────────────────────\n\nfunction normalizeModel(params: {\n model: ModelIR;\n schema: SchemaIR;\n dialect: Dialect;\n enums: ReadonlyMap<string, EnumIR>;\n}): NormalizedTable {\n const { model, schema, dialect, enums } = params;\n const table = model.dbName ?? model.name;\n\n const columns = new Map<string, NormalizedColumn>();\n for (const logicalField of model.fields) {\n const field = physicalEnumField({ field: logicalField, schema, dialect, table });\n const name = field.dbName ?? field.name;\n columns.set(name, {\n name,\n field,\n typeKey: columnTypeKeyFor({ field, dialect, enums }),\n exactTypeKey: columnTypeKeyFor({ field, dialect, enums, exact: true }),\n pinsExactType: dialect === \"postgres\" && declaresExactColumnType({ field }),\n nullable: field.isOptional,\n defaultKey: defaultFingerprintFor({ field, dialect }),\n });\n }\n\n const pk = normalizePk({ model });\n const indexes = normalizeIndexes({ model, table, dialect });\n const fks = normalizeFks({ model, table, schema, dialect });\n\n const checks = new Map<string, string>();\n for (const check of model.checks ?? []) checks.set(check.name, check.expression);\n\n return { model, table, ...(model.namespace === undefined ? {} : { namespace: model.namespace }), columns, pk, indexes, fks, checks };\n}\n\nfunction normalizePk(params: { model: ModelIR }): readonly string[] {\n const { model } = params;\n if (model.primaryKey !== undefined && model.primaryKey.fields.length > 0) {\n return model.primaryKey.fields.map((name) => fieldDbName({ model, name }));\n }\n return model.fields.filter((field) => field.isId).map((field) => field.dbName ?? field.name);\n}\n\nfunction normalizeIndexes(params: {\n model: ModelIR;\n table: string;\n dialect: Dialect;\n}): ReadonlyMap<string, NormalizedIndex> {\n const { model, table, dialect } = params;\n const result = new Map<string, NormalizedIndex>();\n\n const add = (index: IndexIR): void => {\n const unique = index.kind === \"unique\";\n const kind = unique ? \"btree\" : index.kind;\n const columns: IndexColumn[] = index.fields.map((field) => {\n const fieldIR = model.fields.find((candidate) => candidate.name === field.name);\n // SQLITE-2: Decimal-typed index columns carry a marker — the sqlite DDL\n // renderer emits CAST(col AS REAL) expression indexes so B4's cast\n // compare sites stay indexable. Inert on other dialects and absent from\n // the comparison key.\n const decimal = fieldIR !== undefined && fieldIR.type === \"Decimal\" && fieldIR.isList !== true;\n return {\n name: fieldDbName({ model, name: field.name }),\n desc: field.sort === \"desc\",\n ...(decimal ? { decimal: true } : {}),\n ...(field.operatorClass === undefined ? {} : { operatorClass: field.operatorClass }),\n };\n });\n const where = index.where;\n const nullsNotDistinct = unique && index.nullsNotDistinct === true;\n const key = indexComparisonKey({ unique, kind, columns, where, nullsNotDistinct });\n if (result.has(key)) return;\n const name =\n index.name ??\n defaultIndexName({ table, columns: columns.map((column) => column.name), unique, dialect });\n result.set(key, {\n key,\n name,\n ...(index.constraintName === undefined ? {} : { constraintName: index.constraintName }),\n kind,\n unique,\n columns,\n ...(where === undefined ? {} : { where }),\n ...(nullsNotDistinct ? { nullsNotDistinct: true } : {}),\n });\n };\n\n for (const index of model.indexes) add(index);\n\n // `@unique` on a field is the same database object as `@@unique([field])`.\n for (const field of model.fields) {\n if (!field.isUnique) continue;\n add({ kind: \"unique\", fields: [{ name: field.name }] });\n }\n\n return result;\n}\n\nfunction indexComparisonKey(params: {\n unique: boolean;\n kind: string;\n columns: readonly IndexColumn[];\n where: string | undefined;\n nullsNotDistinct?: boolean;\n}): string {\n const { unique, kind, columns, where, nullsNotDistinct } = params;\n const cols = columns\n .map((column) => `${column.name}${column.desc ? \" desc\" : \"\"}${column.operatorClass === undefined ? \"\" : ` ops:${JSON.stringify([column.operatorClass.namespace, column.operatorClass.name])}`}`)\n .join(\",\");\n return `${unique ? \"u\" : \"i\"}${nullsNotDistinct === true ? \"n\" : \"\"}:${kind}:${cols}:${normalizeWhere({ where })}`;\n}\n\n/**\n * Comparison key for a partial-index predicate.\n *\n * Literal bytes, quoted identifier case and casts are semantic. Only the\n * supported boolean structure is reparenthesized. Quoted and unquoted names\n * may conservatively compare unequal; equivalence requires catalog evidence.\n * Complex lexical forms remain opaque rather than claiming false convergence.\n */\nexport function normalizeWhere(params: { where: string | undefined }): string {\n const { where } = params;\n if (where === undefined || where.trim() === \"\") return \"\";\n if (/\\$|\\\\|--|\\/\\*/.test(where)) return `raw:${where.trim()}`;\n const tokens = tokenizeWhere({ text: where });\n const parsed = parseOrExpression({ tokens, at: 0 });\n return parsed !== undefined && parsed.at === tokens.length\n ? parsed.text\n : tokens.join(\" \");\n}\n\n/** Tokenize the supported lexical subset without erasing quoted names or casts. */\nfunction tokenizeWhere(params: { text: string }): string[] {\n const { text } = params;\n const tokens: string[] = [];\n let i = 0;\n while (i < text.length) {\n const ch = text[i] as string;\n if (/\\s/.test(ch)) {\n i += 1;\n continue;\n }\n if (ch === \"'\") {\n // A literal is DATA: its bytes and its case decide equality.\n let literal = \"'\";\n i += 1;\n while (i < text.length) {\n literal += text[i];\n if (text[i] === \"'\") {\n if (text[i + 1] === \"'\") {\n literal += \"'\";\n i += 2;\n continue;\n }\n i += 1;\n break;\n }\n i += 1;\n }\n tokens.push(literal);\n continue;\n }\n if (ch === '\"' || ch === \"`\") {\n let name = \"\";\n i += 1;\n while (i < text.length) {\n if (text[i] === ch) {\n if (text[i + 1] !== ch) { i += 1; break; }\n name += ch;\n i += 2;\n } else {\n name += text[i];\n i += 1;\n }\n }\n tokens.push(JSON.stringify(name));\n continue;\n }\n if (ch === \"[\") {\n // A bracket can quote a SQLite identifier or carry PostgreSQL array\n // structure. Never consume ARRAY literal bytes as an identifier.\n const end = text.indexOf(\"]\", i + 1);\n const inner = end === -1 ? undefined : text.slice(i + 1, end);\n if (\n inner !== undefined &&\n tokens[tokens.length - 1] !== \"array\" &&\n /^[A-Za-z_][A-Za-z_0-9$]*$/.test(inner)\n ) {\n tokens.push(JSON.stringify(inner));\n i = end + 1;\n continue;\n }\n tokens.push(ch);\n i += 1;\n continue;\n }\n const word = /^[A-Za-z_][A-Za-z_0-9$]*/.exec(text.slice(i));\n if (word !== null) {\n tokens.push(word[0].toLowerCase());\n i += word[0].length;\n continue;\n }\n const number = /^[0-9]+(?:\\.[0-9]+)?/.exec(text.slice(i));\n if (number !== null) {\n tokens.push(number[0]);\n i += number[0].length;\n continue;\n }\n tokens.push(ch);\n i += 1;\n }\n return tokens;\n}\n\ntype ParsedExpression = { text: string; at: number; kind: \"or\" | \"and\" | \"atom\" };\n\n/** `<and> (OR <and>)*` — the loosest binding level. */\nfunction parseOrExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const first = parseAndExpression({ tokens: params.tokens, at: params.at });\n if (first === undefined) return undefined;\n let at = first.at;\n const parts = [first.text];\n while (params.tokens[at] === \"or\") {\n const next = parseAndExpression({ tokens: params.tokens, at: at + 1 });\n if (next === undefined) return undefined;\n parts.push(next.text);\n at = next.at;\n }\n return parts.length === 1\n ? { text: parts[0] as string, at, kind: first.kind }\n : { text: parts.join(\" or \"), at, kind: \"or\" };\n}\n\n/** `<primary> (AND <primary>)*` — binds tighter than OR, so OR operands get parentheses. */\nfunction parseAndExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const first = parsePrimaryExpression({ tokens: params.tokens, at: params.at });\n if (first === undefined) return undefined;\n let at = first.at;\n const operands: ParsedExpression[] = [first];\n while (params.tokens[at] === \"and\") {\n const next = parsePrimaryExpression({ tokens: params.tokens, at: at + 1 });\n if (next === undefined) return undefined;\n operands.push(next);\n at = next.at;\n }\n // Parentheses are re-added only where AND binds tighter than an OR operand.\n return operands.length === 1\n ? { text: first.text, at, kind: first.kind }\n : {\n text: operands\n .map((operand) => (operand.kind === \"or\" ? `(${operand.text})` : operand.text))\n .join(\" and \"),\n at,\n kind: \"and\",\n };\n}\n\n/** A parenthesized group, a `NOT`, or an atom read up to the next top-level operator. */\nfunction parsePrimaryExpression(params: {\n tokens: readonly string[];\n at: number;\n}): ParsedExpression | undefined {\n const { tokens } = params;\n let at = params.at;\n if (tokens[at] === \"not\") {\n const operand = parsePrimaryExpression({ tokens, at: at + 1 });\n if (operand === undefined) return undefined;\n const inner = operand.kind === \"atom\" ? operand.text : `(${operand.text})`;\n return { text: `not ${inner}`, at: operand.at, kind: \"atom\" };\n }\n if (tokens[at] === \"(\") {\n const inner = parseOrExpression({ tokens, at: at + 1 });\n if (inner === undefined || tokens[inner.at] !== \")\") return undefined;\n // The parentheses themselves are formatting; the STRUCTURE they created is\n // carried in `kind` and re-parenthesized only where precedence needs it.\n return { text: inner.text, at: inner.at + 1, kind: inner.kind };\n }\n const parts: string[] = [];\n let depth = 0;\n while (at < tokens.length) {\n const token = tokens[at] as string;\n if (depth === 0 && (token === \"and\" || token === \"or\" || token === \")\")) break;\n if (token === \"(\") depth += 1;\n if (token === \")\") depth -= 1;\n parts.push(token);\n at += 1;\n }\n if (parts.length === 0) return undefined;\n // PostgreSQL omits unnecessary identifier quotes in these simple predicates.\n // Restrict this equivalence to a column null-check: quotes on SQL values,\n // function names, casts and mixed-case identifiers must remain significant.\n if (parts[1] === \"is\" && (parts.length === 3 && parts[2] === \"null\" || parts.length === 4 && parts[2] === \"not\" && parts[3] === \"null\")) {\n const quoted = /^\"([a-z_][a-z_0-9]*)\"$/.exec(parts[0]!);\n if (quoted !== null && !/^(?:true|false|null|unknown|default|user|current_.*|session_user|system_user|localtime|localtimestamp|and|or|not|is)$/.test(quoted[1]!)) parts[0] = quoted[1]!;\n }\n return { text: parts.join(\" \"), at, kind: \"atom\" };\n}\n\nfunction normalizeFks(params: {\n model: ModelIR;\n table: string;\n schema: SchemaIR;\n dialect: Dialect;\n}): ReadonlyMap<string, NormalizedFk> {\n const { model, table, schema } = params;\n const result = new Map<string, NormalizedFk>();\n\n for (const relation of model.relations) {\n if (relation.fields === undefined || relation.fields.length === 0) continue;\n\n const target = schema.models.find((candidate) => candidate.name === relation.targetModel);\n // A view is not a table — no dialect can reference one from a foreign key.\n // Views are skipped as tables everywhere else here (normalizeSchema,\n // differ, detectImplicitM2MPairs); the FK side skips them for the same\n // reason, so a model may carry a relation INTO a view for query purposes\n // without the DDL ever trying to constrain it.\n if (target !== undefined && target.isView) continue;\n const refTable = target === undefined ? relation.targetModel : (target.dbName ?? target.name);\n const columns = relation.fields.map((name) => fieldDbName({ model, name }));\n const refColumns = (relation.references ?? []).map((name) =>\n target === undefined ? name : fieldDbName({ model: target, name }),\n );\n\n // Required = every FK column is non-nullable (the ground truth the\n // database sees; Prisma's cascade defaults key off it).\n const required = relation.fields.every((name) => {\n const field = model.fields.find((candidate) => candidate.name === name);\n return field === undefined ? true : !field.isOptional;\n });\n\n const key = `${columns.join(\",\")}→${physicalNameKey({ name: refTable, namespace: target?.namespace, dialect: params.dialect })}.${refColumns.join(\",\")}`;\n if (result.has(key)) continue;\n result.set(key, {\n key,\n constraintName: relation.constraintName ?? defaultForeignKeyName({ table, columns, dialect: params.dialect }),\n columns,\n refTable,\n ...(target?.namespace === undefined ? {} : { refNamespace: target.namespace }),\n refColumns,\n onDelete: resolveOnDelete({ explicit: relation.onDelete, required }),\n onUpdate: resolveOnUpdate({ explicit: relation.onUpdate }),\n });\n }\n\n return result;\n}\n\n// ─── Join tables ──────────────────────────────────────────────────\n\nfunction normalizeJoinTable(params: {\n pair: { modelA: string; modelB: string; tableName: string; namespace?: string };\n schema: SchemaIR;\n dialect: Dialect;\n}): NormalizedJoinTable {\n const { pair, schema, dialect } = params;\n return {\n table: pair.tableName,\n ...(pair.namespace === undefined ? {} : { namespace: pair.namespace }),\n a: joinTableEnd({ modelName: pair.modelA, schema, dialect, joinTable: pair.tableName }),\n b: joinTableEnd({ modelName: pair.modelB, schema, dialect, joinTable: pair.tableName }),\n };\n}\n\nfunction joinTableEnd(params: {\n modelName: string;\n schema: SchemaIR;\n dialect: Dialect;\n joinTable: string;\n}): JoinTableEnd {\n const { modelName, schema, joinTable } = params;\n const model = schema.models.find((candidate) => candidate.name === modelName);\n if (model === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `implicit many-to-many table \"${joinTable}\" references unknown model \"${modelName}\"`,\n meta: { joinTable, model: modelName },\n });\n }\n\n const pkFields =\n model.primaryKey !== undefined && model.primaryKey.fields.length > 0\n ? model.primaryKey.fields.map((name) => model.fields.find((field) => field.name === name))\n : model.fields.filter((field) => field.isId);\n\n const pkField = pkFields[0];\n if (pkFields.length !== 1 || pkField === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `implicit many-to-many relations require a single-column primary key on \"${modelName}\" (join table \"${joinTable}\")`,\n meta: { joinTable, model: modelName },\n });\n }\n\n return {\n table: model.dbName ?? model.name,\n ...(model.namespace === undefined ? {} : { namespace: model.namespace }),\n column: pkField.dbName ?? pkField.name,\n field: physicalEnumField({ field: pkField, schema, dialect: params.dialect, table: model.dbName ?? model.name }),\n };\n}\n\n// ─── Shared helper ────────────────────────────────────────────────\n\n/** Collision-free PostgreSQL identity; other dialects retain their existing database-local keys. */\nexport function physicalNameKey(params: { name: string; namespace?: string; dialect?: Dialect }): string {\n if (params.dialect !== undefined && params.dialect !== \"postgres\") return params.name;\n const identity = qualifiedSqlName(params);\n return JSON.stringify([identity.namespace, identity.name]);\n}\n\n/** Namespaces declared by core placement or explicitly retained migration ownership. */\nexport function schemaNamespaces(params: { schema: SchemaIR }): string[] {\n return [...new Set([\n ...params.schema.models.flatMap((model) => model.namespace === undefined || model.namespace === \"public\" ? [] : [model.namespace]),\n ...params.schema.enums.flatMap((entry) => enumStorageOf({ enumDef: entry }) === \"string\" || entry.namespace === undefined || entry.namespace === \"public\" ? [] : [entry.namespace]),\n ...(params.schema.migrationObjects ?? []).flatMap((object) => object.identity.kind === \"namespace\" ? [object.identity.name] : []),\n ])];\n}\n\n/** Resolve a field name to its db column name on a model. */\nexport function fieldDbName(params: { model: ModelIR; name: string }): string {\n const { model, name } = params;\n const field = model.fields.find((candidate) => candidate.name === name);\n return field === undefined ? name : (field.dbName ?? field.name);\n}\n",
|
|
9
9
|
"/**\n * Implicit many-to-many detection on Schema IR.\n *\n * ONE structural rule in @vibeorm/schema, also used by RLS validation and\n * matching the parser's ambiguity rule (see LEARNINGS): two fields form an\n * implicit M:N **iff** both are lists that declare no FK columns, they are\n * distinct fields (self-exclusion — a 1:N self-relation must never pair with\n * itself), their relation names match symmetrically (both unnamed, or both\n * the same name), and each side is the OTHER'S SOLE counterpart under that\n * name key. Detection never reads `relation.type`, because an introspected\n * schema represents a real join table as two unnamed `oneToMany` list sides —\n * trusting the type would break round-trip stability.\n *\n * The sole-counterpart requirement is the phantom-join-table fix, round two:\n * two models holding foreign keys INTO EACH OTHER introspect as an unnamed\n * fieldless list on each side (every FK synthesizes one on its target), and\n * name-matching alone would marry those lists into a join table that exists\n * nowhere. Counting EVERY relation under the name key — FK-owning sides\n * included — disambiguates: the parser rejects the same shape as\n * `ambiguous-relation` at parse time, so parsed and introspected schemas\n * resolve identically.\n *\n * The join-table naming itself comes from the ONE shared convention in\n * `@vibeorm/schema` (`implicitJoinTable`) — never re-derived here.\n */\n\nimport { implicitJoinTable, isImplicitManyToManyRelation, qualifiedSqlName, unsupportedCapability, providerToDialect } from \"@vibeorm/schema\";\nimport type { SchemaIR } from \"@vibeorm/schema\";\n\n/** A detected implicit many-to-many relation. `modelA` sorts before `modelB`. */\nexport type ImplicitM2MPair = {\n readonly modelA: string;\n readonly modelB: string;\n /** Shared explicit relation name, when both sides declare one. */\n readonly relationName?: string;\n /** Join table name per the shared convention (`_PostToTag`, `_tags`). */\n readonly tableName: string;\n readonly namespace?: string;\n};\n\n/** Detect every implicit many-to-many pair in a schema. */\nexport function detectImplicitM2MPairs(params: { schema: SchemaIR }): ImplicitM2MPair[] {\n const { schema } = params;\n const pairs: ImplicitM2MPair[] = [];\n const seen = new Set<string>();\n\n for (const model of schema.models) {\n if (model.isView) continue;\n for (const relation of model.relations) {\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n\n const joinTable = implicitJoinTable({\n modelA: model.name,\n modelB: relation.targetModel,\n ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }),\n });\n const target = schema.models.find((entry) => entry.name === relation.targetModel)!;\n const namespace = qualifiedSqlName({ name: model.name, namespace: model.namespace }).namespace;\n if (namespace !== qualifiedSqlName({ name: target.name, namespace: target.namespace }).namespace) throw unsupportedCapability({ dialect: providerToDialect({ provider: schema.datasource.provider }), feature: \"implicitJoinNamespaces\", hint: \"Implicit join parents must share one physical namespace\" });\n const key = JSON.stringify([namespace, joinTable.tableName]);\n if (seen.has(key)) continue;\n seen.add(key);\n\n pairs.push({\n modelA: joinTable.modelA,\n modelB: joinTable.modelB,\n ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }),\n tableName: joinTable.tableName,\n ...(model.namespace === undefined && target.namespace === undefined ? {} : { namespace }),\n });\n }\n }\n\n return pairs;\n}\n",
|
|
10
|
-
"/**\n * Postgres column-type mapping (IR → pg text and back), native-type\n * normalization, default-value fingerprints/rendering, and cascade-action\n * resolution.\n *\n * The forward mapping implements dialect-matrix §2; the fingerprint helpers are\n * the differ's normalization layer — both the differ and the introspector lean\n * on them so `diff(introspect(push(X)), X) = []` holds by construction.\n */\n\nimport { VibeError, isEnumType, scalarListDefault, serializeJsonDefault, qualifiedSqlName } from \"@vibeorm/schema\";\nimport type { CascadeAction, FieldIR, ScalarType } from \"@vibeorm/schema\";\nimport type { PostgresTypeName } from \"@vibeorm/sql\";\nimport { POSTGRES_CODECS, postgresDialect, toPgArrayLiteral, parsePostgresTypeName, renderPostgresTypeName } from \"@vibeorm/sql\";\n\n// ─── Canonical scalar mapping (dialect-matrix §2) ─────────────────\n\n/** IR scalar → canonical postgres column type. */\nexport const SCALAR_TO_PG: Readonly<Record<ScalarType, string>> = {\n String: \"text\",\n Boolean: \"boolean\",\n Int: \"integer\",\n BigInt: \"bigint\",\n Float: \"double precision\",\n Decimal: \"numeric\",\n DateTime: \"timestamptz\",\n Json: \"jsonb\",\n Bytes: \"bytea\",\n};\n\n/**\n * Native spellings that compare EQUAL to a scalar's canonical mapping without\n * being it (comparison only — rendering keeps the declared spelling, so\n * `@db.Timestamptz(3)` still creates a precision-3 column). The canonical\n * DateTime mapping is bare `timestamptz` — postgres's server default,\n * precision 6, exactly what v1 emitted — so v1-created (and hand-written, and\n * Prisma-created) databases upgrade with zero DDL. `timestamptz(6)` is the\n * same type spelled explicitly, and `timestamptz(3)` is grandfathered for\n * databases created by the 2.0 alphas, which emitted it: without this class\n * either population would report a destructive type change on every DateTime\n * column. Any other precision stays distinct and still diffs.\n */\nconst CANONICAL_EQUIVALENTS: Readonly<Partial<Record<ScalarType, readonly string[]>>> = {\n DateTime: [\"timestamptz(3)\", \"timestamptz(6)\"],\n};\n\n// ─── Catalog type names (udt_name) → scalars ────────────────────────\n\n/** udt_name → canonical scalar for types that ARE the canonical mapping. */\nexport const CANONICAL_UDT: Readonly<Record<string, ScalarType>> = {\n text: \"String\",\n bool: \"Boolean\",\n int4: \"Int\",\n int8: \"BigInt\",\n float8: \"Float\",\n numeric: \"Decimal\",\n timestamptz: \"DateTime\",\n jsonb: \"Json\",\n bytea: \"Bytes\",\n};\n\n/**\n * udt_name → scalar for non-canonical types (nativeType carries the truth).\n * Every Prisma-legal PostgreSQL `@db.*` type is here: a type missing from this\n * map introspects as UNSUPPORTED, and an authored `@db.Money` then re-diffs\n * as a destructive type change against the `u:money` it reads back, forever.\n */\nexport const NON_CANONICAL_UDT: Readonly<Record<string, ScalarType>> = {\n varchar: \"String\",\n bpchar: \"String\",\n uuid: \"String\",\n bit: \"String\",\n varbit: \"String\",\n xml: \"String\",\n inet: \"String\",\n citext: \"String\",\n int2: \"Int\",\n oid: \"Int\",\n float4: \"Float\",\n money: \"Decimal\",\n timestamp: \"DateTime\",\n date: \"DateTime\",\n time: \"DateTime\",\n timetz: \"DateTime\",\n json: \"Json\",\n};\n\n/** Spelled built-in names (after `normalizeNativeType`) whose udt_name differs. */\nconst SPELLING_TO_UDT: Readonly<Record<string, string>> = {\n integer: \"int4\",\n bigint: \"int8\",\n smallint: \"int2\",\n boolean: \"bool\",\n doubleprecision: \"float8\",\n real: \"float4\",\n char: \"bpchar\",\n};\n\n/**\n * The scalar a BUILT-IN postgres type introspects as, by udt_name or spelled\n * name, or `undefined` for a type vibeorm does not map (an extension type).\n */\nexport function scalarForBuiltinType(params: { name: string }): ScalarType | undefined {\n const udt = SPELLING_TO_UDT[params.name] ?? params.name;\n return CANONICAL_UDT[udt] ?? NON_CANONICAL_UDT[udt];\n}\n\n// ─── Native-type normalization ────────────────────────────────────\n\n/**\n * Alias map applied to the base name of a native type (everything before the\n * parenthesized modifier) so that schema-declared `@db.*` spellings and\n * catalog-reported names compare equal.\n */\nconst NATIVE_ALIASES: Readonly<Record<string, string>> = {\n charactervarying: \"varchar\",\n character: \"char\",\n bpchar: \"char\",\n int: \"integer\",\n int4: \"integer\",\n int2: \"smallint\",\n int8: \"bigint\",\n serial: \"integer\",\n bigserial: \"bigint\",\n bool: \"boolean\",\n float4: \"real\",\n float8: \"doubleprecision\",\n double: \"doubleprecision\",\n doubleprecision: \"doubleprecision\",\n decimal: \"numeric\",\n timestampwithtimezone: \"timestamptz\",\n timestampwithouttimezone: \"timestamp\",\n timewithtimezone: \"timetz\",\n timewithouttimezone: \"time\",\n bitvarying: \"varbit\",\n};\n\n/**\n * Modifiers postgres applies when none is declared, so the declared and the\n * catalog spelling compare equal (`bit` IS `bit(1)`).\n */\nconst IMPLICIT_MODIFIERS: Readonly<Record<string, string>> = {\n bit: \"(1)\",\n};\n\n/**\n * Normalize a native type string for comparison: lowercase, whitespace\n * stripped, base name de-aliased. `\"VarChar(191)\"` and `\"character varying(191)\"`\n * both become `\"varchar(191)\"`.\n */\nexport function normalizeNativeType(params: { raw: string }): string {\n const compact = params.raw.toLowerCase().replace(/\\s+/g, \"\");\n const match = compact.match(/^([a-z_0-9]+)(\\(.*\\))?(\\[\\])?$/);\n if (match === null) return compact;\n const base = NATIVE_ALIASES[match[1] as string] ?? (match[1] as string);\n return `${base}${match[2] ?? IMPLICIT_MODIFIERS[base] ?? \"\"}${match[3] ?? \"\"}`;\n}\n\n/** Parse unsupported types without folding quoted identifier or literal bytes. */\nexport function parseUnsupportedPostgresType(params: { raw: string }): PostgresTypeName | undefined {\n const temporal = /^\\s*(time(?:stamp)?)\\s*(\\(\\s*\\d+\\s*\\))?\\s+(with|without)\\s+time\\s+zone\\s*((?:\\[\\s*\\]\\s*)*)$/i.exec(params.raw);\n if (temporal !== null) return parsePostgresTypeName({ raw: `${temporal[1]!.toLowerCase()}${temporal[3]!.toLowerCase() === \"with\" ? \"tz\" : \"\"}${temporal[2] ?? \"\"}${temporal[4] ?? \"\"}` });\n const parsed = parsePostgresTypeName(params);\n if (parsed !== undefined || /[\"']/.test(params.raw)) return parsed;\n const base = params.raw.toLowerCase().replace(/\\s+/g, \"\").replace(/\\(.*\\)|\\[\\]/g, \"\");\n return NATIVE_ALIASES[base] === undefined ? undefined : parsePostgresTypeName({ raw: normalizeNativeType(params) });\n}\n\n/**\n * Comparison key for a column's type. Two columns with equal keys need no\n * ALTER. A native type equal to the scalar's canonical mapping is dropped, so\n * `DateTime` and `DateTime @db.Timestamptz` compare equal — and so do the\n * mapping's `CANONICAL_EQUIVALENTS` (`@db.Timestamptz(6)`, the same type\n * spelled explicitly, and `@db.Timestamptz(3)`, what the 2.0 alphas created).\n * Any other precision stays distinct and still diffs.\n */\nexport function columnTypeKey(params: { field: FieldIR }): string {\n const { field } = params;\n const listSuffix = field.isList ? \"[]\" : \"\";\n\n if (field.isUnsupported === true) {\n const parsed = parseUnsupportedPostgresType({ raw: field.nativeType ?? \"\" });\n if (parsed === undefined) return `u:${field.nativeType ?? \"\"}`;\n const evidence = field.nativeTypeIdentity;\n const namespace = evidence !== undefined && evidence.source === field.nativeType ? evidence.namespace : parsed.namespace;\n // A BUILT-IN type spelled as `Unsupported(\"time(3) without time zone\")`\n // (what `db pull` emitted before the type was mapped) is the same column\n // as `DateTime @db.Time(3)`: key it exactly as the mapped declaration, so\n // neither spelling re-diffs against what introspection now reads back.\n const scalar = namespace === undefined || namespace === \"pg_catalog\" ? scalarForBuiltinType({ name: parsed.name }) : undefined;\n if (scalar !== undefined) {\n const { isUnsupported: _unsupported, nativeTypeIdentity: _identity, ...rest } = field;\n return columnTypeKey({ field: { ...rest, type: scalar, nativeType: `${parsed.name}${parsed.modifier ?? \"\"}`, isList: parsed.array || field.isList } });\n }\n return `u:${JSON.stringify([namespace ?? null, parsed.name, parsed.modifier, parsed.array || field.isList])}`;\n }\n if (isEnumType(field.type)) {\n const identity = qualifiedSqlName({ name: field.type.enum, namespace: field.type.namespace });\n return `e:${JSON.stringify([identity.namespace, identity.name])}${listSuffix}`;\n }\n if (field.nativeType !== undefined) {\n const normalized = normalizeNativeType({ raw: field.nativeType });\n const canonical = normalizeNativeType({ raw: SCALAR_TO_PG[field.type] });\n const isCanonical =\n normalized === canonical ||\n (CANONICAL_EQUIVALENTS[field.type]?.includes(normalized) ?? false);\n if (!isCanonical) return `n:${normalized}${listSuffix}`;\n }\n return `s:${field.type}${listSuffix}`;\n}\n\n/**\n * True when a type change from `from` to `to` is the safe scalar→array repair\n * (same base type, scalar becomes a one-element array via a `USING` clause —\n * the LEARNINGS enum-array lesson). Every other type change is treated as\n * potentially narrowing, i.e. destructive.\n */\nexport function isScalarToArrayChange(params: { from: FieldIR; to: FieldIR }): boolean {\n const { from, to } = params;\n if (from.isList || !to.isList) return false;\n const fromBase = columnTypeKey({ field: { ...from, isList: false } });\n const toBase = columnTypeKey({ field: { ...to, isList: false } });\n return fromBase === toBase;\n}\n\n// ─── Column type rendering ────────────────────────────────────────\n\n/** Render the postgres column type for a field (no identity, no default). */\nexport function columnTypeSql(params: { field: FieldIR }): string {\n const { field } = params;\n if (field.isUnsupported === true) {\n if (field.nativeType === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `unsupported column \"${field.name}\" carries no native type to render`,\n meta: { field: field.name },\n });\n }\n const parsed = parseUnsupportedPostgresType({ raw: field.nativeType });\n const evidence = field.nativeTypeIdentity;\n if (parsed !== undefined && evidence?.source === field.nativeType) return renderPostgresTypeName({ dialect: postgresDialect, type: { ...parsed, namespace: evidence.namespace, array: parsed.array || field.isList } });\n return field.nativeType;\n }\n const listSuffix = field.isList ? \"[]\" : \"\";\n if (isEnumType(field.type)) {\n return `${postgresDialect.quoteIdent({ name: field.type.namespace ?? \"public\" })}.${postgresDialect.quoteIdent({ name: field.type.enum })}${listSuffix}`;\n }\n if (field.nativeType !== undefined) {\n const normalized = normalizeNativeType({ raw: field.nativeType });\n const canonical = normalizeNativeType({ raw: SCALAR_TO_PG[field.type] });\n if (normalized !== canonical) return `${field.nativeType.toLowerCase()}${listSuffix}`;\n }\n return `${SCALAR_TO_PG[field.type]}${listSuffix}`;\n}\n\n/** True when the field renders as an identity column (autoincrement Int/BigInt). */\nexport function isIdentityColumn(params: { field: FieldIR }): boolean {\n const { field } = params;\n return (\n field.default?.kind === \"autoincrement\" &&\n !field.isList &&\n !isEnumType(field.type) &&\n (field.type === \"Int\" || field.type === \"BigInt\")\n );\n}\n\n// ─── Defaults ─────────────────────────────────────────────────────\n\n/**\n * Normalized fingerprint of a column default for diffing, or `null` when the\n * database carries no default. App-level id generators (uuid / cuid / nanoid /\n * ulid) fingerprint as `null`: the runtime injects them client-side, so the\n * database honestly has no default — this is what keeps introspection\n * round-trips stable for `@default(uuid())` columns.\n */\nexport function defaultFingerprint(params: { field: FieldIR }): string | null {\n const { field } = params;\n const def = field.default;\n if (def === undefined) return null;\n switch (def.kind) {\n case \"autoincrement\":\n return \"autoincrement\";\n case \"now\":\n return \"now\";\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return null;\n case \"list\":\n return `list:${JSON.stringify(field.type === \"Json\" ? def.values.map((value) => serializeJsonDefault({ value: POSTGRES_CODECS.Json.decode(value) })) : scalarListDefault({ type: field.type, values: def.values }))}`;\n case \"literal\": {\n const value = def.value;\n if (field.type === \"Json\" && typeof value === \"string\") return `json:${serializeJsonDefault({ value: POSTGRES_CODECS.Json.decode(value) })}`;\n if (typeof value === \"boolean\") return `bool:${value}`;\n if (typeof value === \"number\") return `num:${value}`;\n // A string literal on an enum column is the same default as an enumValue.\n if (isEnumType(field.type)) return `enum:${value}`;\n // A numeric string on a numeric column (`Decimal @default(\"0\")`) is the\n // same default as the number: postgres reports it back as `'0'::numeric`\n // and introspection parses that numerically, so a `str:` fingerprint\n // here would make the in-sync state unreachable — the step re-appears\n // after every push, forever.\n if (isNumericScalar({ type: field.type }) && NUMERIC_LITERAL.test(value)) {\n // Compare the DIGITS, not a rounded double: E4 now carries an exact\n // BigInt default as its decimal string, and `9007199254740993` and\n // `9007199254740992` are different defaults (E4 hand-off, F36).\n return /^-?\\d+$/.test(value) ? `num:${BigInt(value).toString()}` : `num:${Number(value)}`;\n }\n return `str:${value}`;\n }\n case \"enumValue\":\n return `enum:${def.value}`;\n case \"dbgenerated\": {\n // The two spellings every introspector already folds to `now` — a\n // `dbgenerated(\"now()\")` column otherwise re-plans against the `now`\n // it reads back, forever. Every other expression is opaque: even\n // whitespace and case can be literal data (including dollar quotes);\n // false equivalence is unsafe.\n const sql = def.sql.trim();\n if (/^now\\(\\)$/i.test(sql) || /^current_timestamp(\\(\\d\\))?$/i.test(sql)) return \"now\";\n return `db:${sql}`;\n }\n }\n}\n\n/**\n * Render the `DEFAULT` expression for a field, or `undefined` when the column\n * takes no database default (no default declared, app-level generators,\n * autoincrement — which renders as identity instead).\n */\nexport function defaultSql(params: { field: FieldIR }): string | undefined {\n const def = params.field.default;\n if (def === undefined) return undefined;\n switch (def.kind) {\n case \"autoincrement\":\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return undefined;\n case \"now\":\n return \"CURRENT_TIMESTAMP\";\n case \"list\":\n return `${quotePgString({ value: toPgArrayLiteral({ values: def.values }) })}::${columnTypeSql({ field: params.field })}`;\n case \"literal\": {\n const value = def.value;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return String(value);\n return quotePgString({ value });\n }\n case \"enumValue\":\n return quotePgString({ value: def.value });\n case \"dbgenerated\":\n return def.sql;\n }\n}\n\n/** Integer/decimal literal shape — the same one the introspector accepts. */\nconst NUMERIC_LITERAL: RegExp = /^-?\\d+(\\.\\d+)?$/;\n\n/** True for scalars whose defaults postgres reports back as numeric literals. */\nexport function isNumericScalar(params: { type: ScalarType }): boolean {\n const { type } = params;\n return type === \"Int\" || type === \"BigInt\" || type === \"Float\" || type === \"Decimal\";\n}\n\n// ─── Cascade actions ──────────────────────────────────────────────\n\n/**\n * `pg_constraint.confdeltype` / `confupdtype` single-char codes → IR actions\n * (used by the introspector).\n */\nexport const PG_CHAR_TO_CASCADE_ACTION: Readonly<Record<string, CascadeAction>> = {\n a: \"NoAction\",\n r: \"Restrict\",\n c: \"Cascade\",\n n: \"SetNull\",\n d: \"SetDefault\",\n};\n\n/** CascadeAction → SQL clause body. */\nexport const CASCADE_ACTION_SQL: Readonly<Record<CascadeAction, string>> = {\n Cascade: \"CASCADE\",\n Restrict: \"RESTRICT\",\n NoAction: \"NO ACTION\",\n SetNull: \"SET NULL\",\n SetDefault: \"SET DEFAULT\",\n};\n\n/**\n * Effective onDelete with Prisma's postgres defaults applied (LEARNINGS):\n * required FK → Restrict, optional FK → SetNull.\n */\nexport function resolveOnDelete(params: {\n explicit: CascadeAction | undefined;\n required: boolean;\n}): CascadeAction {\n if (params.explicit !== undefined) return params.explicit;\n return params.required ? \"Restrict\" : \"SetNull\";\n}\n\n/** Effective onUpdate — Prisma's postgres default is Cascade. */\nexport function resolveOnUpdate(params: { explicit: CascadeAction | undefined }): CascadeAction {\n return params.explicit ?? \"Cascade\";\n}\n\n// ─── Small quoting helpers ────────────────────────────────────────\n\n/** Quote a postgres string literal (single quotes, doubled embedded quotes). */\nexport function quotePgString(params: { value: string }): string {\n return `'${params.value.replaceAll(\"'\", \"''\")}'`;\n}\n",
|
|
10
|
+
"/**\n * Postgres column-type mapping (IR → pg text and back), native-type\n * normalization, default-value fingerprints/rendering, and cascade-action\n * resolution.\n *\n * The forward mapping implements dialect-matrix §2; the fingerprint helpers are\n * the differ's normalization layer — both the differ and the introspector lean\n * on them so `diff(introspect(push(X)), X) = []` holds by construction.\n */\n\nimport { VibeError, isEnumType, scalarListDefault, serializeJsonDefault, qualifiedSqlName } from \"@vibeorm/schema\";\nimport type { CascadeAction, FieldIR, ScalarType } from \"@vibeorm/schema\";\nimport type { PostgresTypeName } from \"@vibeorm/sql\";\nimport { POSTGRES_CODECS, postgresDialect, toPgArrayLiteral, parsePostgresTypeName, renderPostgresTypeName } from \"@vibeorm/sql\";\n\n// ─── Canonical scalar mapping (dialect-matrix §2) ─────────────────\n\n/** IR scalar → canonical postgres column type. */\nexport const SCALAR_TO_PG: Readonly<Record<ScalarType, string>> = {\n String: \"text\",\n Boolean: \"boolean\",\n Int: \"integer\",\n BigInt: \"bigint\",\n Float: \"double precision\",\n Decimal: \"numeric\",\n DateTime: \"timestamptz\",\n Json: \"jsonb\",\n Bytes: \"bytea\",\n};\n\n/**\n * Native spellings that compare EQUAL to a scalar's canonical mapping without\n * being it (comparison only — rendering keeps the declared spelling, so\n * `@db.Timestamptz(3)` still creates a precision-3 column). The canonical\n * DateTime mapping is bare `timestamptz` — postgres's server default,\n * precision 6, exactly what v1 emitted — so v1-created (and hand-written, and\n * Prisma-created) databases upgrade with zero DDL. `timestamptz(6)` is the\n * same type spelled explicitly, and `timestamptz(3)` is grandfathered for\n * databases created by the 2.0 alphas, which emitted it: without this class\n * either population would report a destructive type change on every DateTime\n * column. Any other precision stays distinct and still diffs.\n */\nconst CANONICAL_EQUIVALENTS: Readonly<Partial<Record<ScalarType, readonly string[]>>> = {\n DateTime: [\"timestamptz(3)\", \"timestamptz(6)\"],\n};\n\n/**\n * The class an EXPLICITLY declared precision is compared within: the same type\n * spelled another way, nothing grandfathered. The runtime trusts a declared\n * `@db.Timestamptz(3)` as millisecond-exact (keyset pagination), so it must\n * never match a microsecond column — and a declared `(6)` asks for 6.\n */\nconst EXACT_CANONICAL_EQUIVALENTS: Readonly<Partial<Record<ScalarType, readonly string[]>>> = {\n DateTime: [\"timestamptz(6)\"],\n};\n\n// ─── Catalog type names (udt_name) → scalars ────────────────────────\n\n/** udt_name → canonical scalar for types that ARE the canonical mapping. */\nexport const CANONICAL_UDT: Readonly<Record<string, ScalarType>> = {\n text: \"String\",\n bool: \"Boolean\",\n int4: \"Int\",\n int8: \"BigInt\",\n float8: \"Float\",\n numeric: \"Decimal\",\n timestamptz: \"DateTime\",\n jsonb: \"Json\",\n bytea: \"Bytes\",\n};\n\n/**\n * udt_name → scalar for non-canonical types (nativeType carries the truth).\n * Every Prisma-legal PostgreSQL `@db.*` type is here: a type missing from this\n * map introspects as UNSUPPORTED, and an authored `@db.Money` then re-diffs\n * as a destructive type change against the `u:money` it reads back, forever.\n */\nexport const NON_CANONICAL_UDT: Readonly<Record<string, ScalarType>> = {\n varchar: \"String\",\n bpchar: \"String\",\n uuid: \"String\",\n bit: \"String\",\n varbit: \"String\",\n xml: \"String\",\n inet: \"String\",\n citext: \"String\",\n int2: \"Int\",\n oid: \"Int\",\n float4: \"Float\",\n money: \"Decimal\",\n timestamp: \"DateTime\",\n date: \"DateTime\",\n time: \"DateTime\",\n timetz: \"DateTime\",\n json: \"Json\",\n};\n\n/** Spelled built-in names (after `normalizeNativeType`) whose udt_name differs. */\nconst SPELLING_TO_UDT: Readonly<Record<string, string>> = {\n integer: \"int4\",\n bigint: \"int8\",\n smallint: \"int2\",\n boolean: \"bool\",\n doubleprecision: \"float8\",\n real: \"float4\",\n char: \"bpchar\",\n};\n\n/**\n * The scalar a BUILT-IN postgres type introspects as, by udt_name or spelled\n * name, or `undefined` for a type vibeorm does not map (an extension type).\n */\nexport function scalarForBuiltinType(params: { name: string }): ScalarType | undefined {\n const udt = SPELLING_TO_UDT[params.name] ?? params.name;\n return CANONICAL_UDT[udt] ?? NON_CANONICAL_UDT[udt];\n}\n\n// ─── Native-type normalization ────────────────────────────────────\n\n/**\n * Alias map applied to the base name of a native type (everything before the\n * parenthesized modifier) so that schema-declared `@db.*` spellings and\n * catalog-reported names compare equal.\n */\nconst NATIVE_ALIASES: Readonly<Record<string, string>> = {\n charactervarying: \"varchar\",\n character: \"char\",\n bpchar: \"char\",\n int: \"integer\",\n int4: \"integer\",\n int2: \"smallint\",\n int8: \"bigint\",\n serial: \"integer\",\n bigserial: \"bigint\",\n bool: \"boolean\",\n float4: \"real\",\n float8: \"doubleprecision\",\n double: \"doubleprecision\",\n doubleprecision: \"doubleprecision\",\n decimal: \"numeric\",\n timestampwithtimezone: \"timestamptz\",\n timestampwithouttimezone: \"timestamp\",\n timewithtimezone: \"timetz\",\n timewithouttimezone: \"time\",\n bitvarying: \"varbit\",\n};\n\n/**\n * Modifiers postgres applies when none is declared, so the declared and the\n * catalog spelling compare equal (`bit` IS `bit(1)`).\n */\nconst IMPLICIT_MODIFIERS: Readonly<Record<string, string>> = {\n bit: \"(1)\",\n};\n\n/**\n * Temporal types whose bare spelling already means precision 6, so an explicit\n * `(6)` is the same type and normalizes to the bare name. `timestamptz` is not\n * here: its precisions are compared by `CANONICAL_EQUIVALENTS` and\n * `EXACT_CANONICAL_EQUIVALENTS`, which keep the explicit spelling.\n */\nconst DEFAULT_PRECISION_SIX: ReadonlySet<string> = new Set([\"timestamp\", \"time\", \"timetz\"]);\n\n/**\n * Normalize a native type string for comparison: lowercase, whitespace\n * stripped, base name de-aliased. `\"VarChar(191)\"` and `\"character varying(191)\"`\n * both become `\"varchar(191)\"`.\n */\nexport function normalizeNativeType(params: { raw: string }): string {\n const compact = params.raw.toLowerCase().replace(/\\s+/g, \"\");\n const match = compact.match(/^([a-z_0-9]+)(\\(.*\\))?(\\[\\])?$/);\n if (match === null) return compact;\n const base = NATIVE_ALIASES[match[1] as string] ?? (match[1] as string);\n const modifier = DEFAULT_PRECISION_SIX.has(base) && match[2] === \"(6)\" ? \"\" : match[2] ?? IMPLICIT_MODIFIERS[base] ?? \"\";\n return `${base}${modifier}${match[3] ?? \"\"}`;\n}\n\n/** Parse unsupported types without folding quoted identifier or literal bytes. */\nexport function parseUnsupportedPostgresType(params: { raw: string }): PostgresTypeName | undefined {\n const temporal = /^\\s*(time(?:stamp)?)\\s*(\\(\\s*\\d+\\s*\\))?\\s+(with|without)\\s+time\\s+zone\\s*((?:\\[\\s*\\]\\s*)*)$/i.exec(params.raw);\n if (temporal !== null) return parsePostgresTypeName({ raw: `${temporal[1]!.toLowerCase()}${temporal[3]!.toLowerCase() === \"with\" ? \"tz\" : \"\"}${temporal[2] ?? \"\"}${temporal[4] ?? \"\"}` });\n const parsed = parsePostgresTypeName(params);\n if (parsed !== undefined || /[\"']/.test(params.raw)) return parsed;\n const base = params.raw.toLowerCase().replace(/\\s+/g, \"\").replace(/\\(.*\\)|\\[\\]/g, \"\");\n return NATIVE_ALIASES[base] === undefined ? undefined : parsePostgresTypeName({ raw: normalizeNativeType(params) });\n}\n\n/**\n * Comparison key for a column's type. Two columns with equal keys need no\n * ALTER. A native type equal to the scalar's canonical mapping is dropped, so\n * `DateTime` and `DateTime @db.Timestamptz` compare equal — and so do the\n * mapping's `CANONICAL_EQUIVALENTS` (`@db.Timestamptz(6)`, the same type\n * spelled explicitly, and `@db.Timestamptz(3)`, what the 2.0 alphas created).\n * Any other precision stays distinct and still diffs.\n *\n * `exact: true` keys within `EXACT_CANONICAL_EQUIVALENTS` instead: the key an\n * explicit declaration (`declaresExactColumnType`) is compared with.\n */\nexport function columnTypeKey(params: { field: FieldIR; exact?: boolean }): string {\n const { field, exact } = params;\n const listSuffix = field.isList ? \"[]\" : \"\";\n\n if (field.isUnsupported === true) {\n const parsed = parseUnsupportedPostgresType({ raw: field.nativeType ?? \"\" });\n if (parsed === undefined) return `u:${field.nativeType ?? \"\"}`;\n const evidence = field.nativeTypeIdentity;\n const namespace = evidence !== undefined && evidence.source === field.nativeType ? evidence.namespace : parsed.namespace;\n // A BUILT-IN type spelled as `Unsupported(\"time(3) without time zone\")`\n // (what `db pull` emitted before the type was mapped) is the same column\n // as `DateTime @db.Time(3)`: key it exactly as the mapped declaration, so\n // neither spelling re-diffs against what introspection now reads back.\n const scalar = namespace === undefined || namespace === \"pg_catalog\" ? scalarForBuiltinType({ name: parsed.name }) : undefined;\n if (scalar !== undefined) {\n const { isUnsupported: _unsupported, nativeTypeIdentity: _identity, ...rest } = field;\n return columnTypeKey({ field: { ...rest, type: scalar, nativeType: `${parsed.name}${parsed.modifier ?? \"\"}`, isList: parsed.array || field.isList }, ...(exact === undefined ? {} : { exact }) });\n }\n return `u:${JSON.stringify([namespace ?? null, parsed.name, parsed.modifier, parsed.array || field.isList])}`;\n }\n if (isEnumType(field.type)) {\n const identity = qualifiedSqlName({ name: field.type.enum, namespace: field.type.namespace });\n return `e:${JSON.stringify([identity.namespace, identity.name])}${listSuffix}`;\n }\n if (field.nativeType !== undefined) {\n const normalized = normalizeNativeType({ raw: field.nativeType });\n const canonical = normalizeNativeType({ raw: SCALAR_TO_PG[field.type] });\n const equivalents = exact === true ? EXACT_CANONICAL_EQUIVALENTS : CANONICAL_EQUIVALENTS;\n const isCanonical =\n normalized === canonical ||\n (equivalents[field.type]?.includes(normalized) ?? false);\n if (!isCanonical) return `n:${normalized}${listSuffix}`;\n }\n return `s:${field.type}${listSuffix}`;\n}\n\n/**\n * True when a declaration pins its type exactly: an explicit precision on a\n * type whose other spellings are grandfathered (`@db.Timestamptz(3)`,\n * `@db.Timestamptz(6)`). The declared side decides: such a declaration is\n * compared through `columnTypeKey({ exact: true })`, while a bare `DateTime` /\n * `@db.Timestamptz` keeps accepting the v1 and 2.0-alpha columns.\n */\nexport function declaresExactColumnType(params: { field: FieldIR }): boolean {\n const { field } = params;\n if (field.isUnsupported === true || field.nativeType === undefined || isEnumType(field.type)) return false;\n return CANONICAL_EQUIVALENTS[field.type]?.includes(normalizeNativeType({ raw: field.nativeType })) ?? false;\n}\n\n/** Fractional-seconds digits of a timestamptz DateTime column (bare = postgres's 6), else `undefined`. */\nfunction timestamptzPrecision(params: { field: FieldIR }): number | undefined {\n const { field } = params;\n if (field.type !== \"DateTime\" || field.isUnsupported === true) return undefined;\n const normalized = field.nativeType === undefined ? \"timestamptz\" : normalizeNativeType({ raw: field.nativeType });\n if (normalized === \"timestamptz\") return 6;\n const match = /^timestamptz\\((\\d)\\)$/.exec(normalized);\n return match === null ? undefined : Number(match[1]);\n}\n\n/**\n * True when a type change only RAISES a timestamptz precision. Every stored\n * value survives (on a scalar column postgres changes only the type modifier,\n * no table rewrite), so the step is not destructive. LOWERING the precision\n * rewrites the table and rounds stored values: that stays destructive.\n */\nexport function isTimestamptzPrecisionWidening(params: { from: FieldIR; to: FieldIR }): boolean {\n const { from, to } = params;\n if (from.isList !== to.isList) return false;\n const before = timestamptzPrecision({ field: from });\n const after = timestamptzPrecision({ field: to });\n return before !== undefined && after !== undefined && after >= before;\n}\n\n/**\n * True when a type change from `from` to `to` is the safe scalar→array repair\n * (same base type, scalar becomes a one-element array via a `USING` clause —\n * the LEARNINGS enum-array lesson). Every other type change is treated as\n * potentially narrowing, i.e. destructive.\n */\nexport function isScalarToArrayChange(params: { from: FieldIR; to: FieldIR }): boolean {\n const { from, to } = params;\n if (from.isList || !to.isList) return false;\n const fromBase = columnTypeKey({ field: { ...from, isList: false } });\n const toBase = columnTypeKey({ field: { ...to, isList: false } });\n return fromBase === toBase;\n}\n\n// ─── Column type rendering ────────────────────────────────────────\n\n/** Render the postgres column type for a field (no identity, no default). */\nexport function columnTypeSql(params: { field: FieldIR }): string {\n const { field } = params;\n if (field.isUnsupported === true) {\n if (field.nativeType === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `unsupported column \"${field.name}\" carries no native type to render`,\n meta: { field: field.name },\n });\n }\n const parsed = parseUnsupportedPostgresType({ raw: field.nativeType });\n const evidence = field.nativeTypeIdentity;\n if (parsed !== undefined && evidence?.source === field.nativeType) return renderPostgresTypeName({ dialect: postgresDialect, type: { ...parsed, namespace: evidence.namespace, array: parsed.array || field.isList } });\n return field.nativeType;\n }\n const listSuffix = field.isList ? \"[]\" : \"\";\n if (isEnumType(field.type)) {\n return `${postgresDialect.quoteIdent({ name: field.type.namespace ?? \"public\" })}.${postgresDialect.quoteIdent({ name: field.type.enum })}${listSuffix}`;\n }\n if (field.nativeType !== undefined) {\n const normalized = normalizeNativeType({ raw: field.nativeType });\n const canonical = normalizeNativeType({ raw: SCALAR_TO_PG[field.type] });\n if (normalized !== canonical) return `${field.nativeType.toLowerCase()}${listSuffix}`;\n }\n return `${SCALAR_TO_PG[field.type]}${listSuffix}`;\n}\n\n/** True when the field renders as an identity column (autoincrement Int/BigInt). */\nexport function isIdentityColumn(params: { field: FieldIR }): boolean {\n const { field } = params;\n return (\n field.default?.kind === \"autoincrement\" &&\n !field.isList &&\n !isEnumType(field.type) &&\n (field.type === \"Int\" || field.type === \"BigInt\")\n );\n}\n\n// ─── Defaults ─────────────────────────────────────────────────────\n\n/**\n * Normalized fingerprint of a column default for diffing, or `null` when the\n * database carries no default. App-level id generators (uuid / cuid / nanoid /\n * ulid) fingerprint as `null`: the runtime injects them client-side, so the\n * database honestly has no default — this is what keeps introspection\n * round-trips stable for `@default(uuid())` columns.\n */\nexport function defaultFingerprint(params: { field: FieldIR }): string | null {\n const { field } = params;\n const def = field.default;\n if (def === undefined) return null;\n switch (def.kind) {\n case \"autoincrement\":\n return \"autoincrement\";\n case \"now\":\n return \"now\";\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return null;\n case \"list\":\n return `list:${JSON.stringify(field.type === \"Json\" ? def.values.map((value) => serializeJsonDefault({ value: POSTGRES_CODECS.Json.decode(value) })) : scalarListDefault({ type: field.type, values: def.values }))}`;\n case \"literal\": {\n const value = def.value;\n if (field.type === \"Json\" && typeof value === \"string\") return `json:${serializeJsonDefault({ value: POSTGRES_CODECS.Json.decode(value) })}`;\n if (typeof value === \"boolean\") return `bool:${value}`;\n if (typeof value === \"number\") return `num:${value}`;\n // A string literal on an enum column is the same default as an enumValue.\n if (isEnumType(field.type)) return `enum:${value}`;\n // A numeric string on a numeric column (`Decimal @default(\"0\")`) is the\n // same default as the number: postgres reports it back as `'0'::numeric`\n // and introspection parses that numerically, so a `str:` fingerprint\n // here would make the in-sync state unreachable — the step re-appears\n // after every push, forever.\n if (isNumericScalar({ type: field.type }) && NUMERIC_LITERAL.test(value)) {\n // Compare the DIGITS, not a rounded double: E4 now carries an exact\n // BigInt default as its decimal string, and `9007199254740993` and\n // `9007199254740992` are different defaults (E4 hand-off, F36).\n return /^-?\\d+$/.test(value) ? `num:${BigInt(value).toString()}` : `num:${Number(value)}`;\n }\n return `str:${value}`;\n }\n case \"enumValue\":\n return `enum:${def.value}`;\n case \"dbgenerated\": {\n // The two spellings every introspector already folds to `now` — a\n // `dbgenerated(\"now()\")` column otherwise re-plans against the `now`\n // it reads back, forever. Every other expression is opaque: even\n // whitespace and case can be literal data (including dollar quotes);\n // false equivalence is unsafe.\n const sql = def.sql.trim();\n if (/^now\\(\\)$/i.test(sql) || /^current_timestamp(\\(\\d\\))?$/i.test(sql)) return \"now\";\n return `db:${sql}`;\n }\n }\n}\n\n/**\n * Render the `DEFAULT` expression for a field, or `undefined` when the column\n * takes no database default (no default declared, app-level generators,\n * autoincrement — which renders as identity instead).\n */\nexport function defaultSql(params: { field: FieldIR }): string | undefined {\n const def = params.field.default;\n if (def === undefined) return undefined;\n switch (def.kind) {\n case \"autoincrement\":\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return undefined;\n case \"now\":\n return \"CURRENT_TIMESTAMP\";\n case \"list\":\n return `${quotePgString({ value: toPgArrayLiteral({ values: def.values }) })}::${columnTypeSql({ field: params.field })}`;\n case \"literal\": {\n const value = def.value;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return String(value);\n return quotePgString({ value });\n }\n case \"enumValue\":\n return quotePgString({ value: def.value });\n case \"dbgenerated\":\n return def.sql;\n }\n}\n\n/** Integer/decimal literal shape — the same one the introspector accepts. */\nconst NUMERIC_LITERAL: RegExp = /^-?\\d+(\\.\\d+)?$/;\n\n/** True for scalars whose defaults postgres reports back as numeric literals. */\nexport function isNumericScalar(params: { type: ScalarType }): boolean {\n const { type } = params;\n return type === \"Int\" || type === \"BigInt\" || type === \"Float\" || type === \"Decimal\";\n}\n\n// ─── Cascade actions ──────────────────────────────────────────────\n\n/**\n * `pg_constraint.confdeltype` / `confupdtype` single-char codes → IR actions\n * (used by the introspector).\n */\nexport const PG_CHAR_TO_CASCADE_ACTION: Readonly<Record<string, CascadeAction>> = {\n a: \"NoAction\",\n r: \"Restrict\",\n c: \"Cascade\",\n n: \"SetNull\",\n d: \"SetDefault\",\n};\n\n/** CascadeAction → SQL clause body. */\nexport const CASCADE_ACTION_SQL: Readonly<Record<CascadeAction, string>> = {\n Cascade: \"CASCADE\",\n Restrict: \"RESTRICT\",\n NoAction: \"NO ACTION\",\n SetNull: \"SET NULL\",\n SetDefault: \"SET DEFAULT\",\n};\n\n/**\n * Effective onDelete with Prisma's postgres defaults applied (LEARNINGS):\n * required FK → Restrict, optional FK → SetNull.\n */\nexport function resolveOnDelete(params: {\n explicit: CascadeAction | undefined;\n required: boolean;\n}): CascadeAction {\n if (params.explicit !== undefined) return params.explicit;\n return params.required ? \"Restrict\" : \"SetNull\";\n}\n\n/** Effective onUpdate — Prisma's postgres default is Cascade. */\nexport function resolveOnUpdate(params: { explicit: CascadeAction | undefined }): CascadeAction {\n return params.explicit ?? \"Cascade\";\n}\n\n// ─── Small quoting helpers ────────────────────────────────────────\n\n/** Quote a postgres string literal (single quotes, doubled embedded quotes). */\nexport function quotePgString(params: { value: string }): string {\n return `'${params.value.replaceAll(\"'\", \"''\")}'`;\n}\n",
|
|
11
11
|
"/**\n * SQLite column-type mapping (IR → storage class and back), comparison keys,\n * default rendering/fingerprints, and the enum CHECK-constraint convention.\n *\n * dialect-matrix §2: sqlite columns use the four storage classes only —\n * String/DateTime/Decimal/Json → TEXT, Boolean/Int/BigInt → INTEGER,\n * Float → REAL, Bytes → BLOB. Enums are TEXT plus a named CHECK constraint\n * (`CONSTRAINT \"<table>_<column>_enum_<Enum>\" CHECK (\"<column>\" IN (…))`) —\n * the constraint NAME is the marker that lets introspection recover the enum's\n * name, and the IN list recovers its values. Scalar lists are unsupported\n * (refused by the differ; this module throws as the render-time backstop).\n *\n * THE TEXT AMBIGUITY, stated honestly: DateTime, Decimal and Json all live in\n * TEXT, and Boolean/BigInt live in INTEGER — a pulled schema reports such\n * columns as String/Int (there is no marker to say otherwise). Column\n * comparison is therefore STORAGE-CLASS based on sqlite (`sqliteColumnTypeKey`\n * compares what the database actually stores), so `diff(introspect(push(X)),\n * X)` stays [] even though the introspected IR says String where X said\n * DateTime.\n */\n\nimport { VibeError, isEnumType, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { FieldIR, ScalarType } from \"@vibeorm/schema\";\nimport { ParamCollector, sqliteDialect } from \"@vibeorm/sql\";\nimport { resolveEnumValues } from \"./enum-values.ts\";\nimport { defaultFingerprint, quotePgString } from \"./postgres-types.ts\";\nimport type { EnumIR } from \"@vibeorm/schema\";\n\n// ─── Canonical scalar mapping (dialect-matrix §2) ─────────────────\n\n/** IR scalar → sqlite storage class. */\nexport const SCALAR_TO_SQLITE: Readonly<Record<ScalarType, string>> = {\n String: \"TEXT\",\n Boolean: \"INTEGER\",\n Int: \"INTEGER\",\n BigInt: \"INTEGER\",\n Float: \"REAL\",\n Decimal: \"TEXT\",\n DateTime: \"TEXT\",\n Json: \"TEXT\",\n Bytes: \"BLOB\",\n};\n\n/** Render-time backstop for scalar-list columns (the differ refuses earlier). */\nexport function refuseSqliteScalarList(params: { field: FieldIR }): never {\n throw unsupportedCapability({\n dialect: \"sqlite\",\n feature: `scalar list column \"${params.field.name}\"`,\n hint: \"sqlite has no array column type — model the list as a separate table or a Json column\",\n });\n}\n\n/**\n * Storage class for a column. Unsupported columns render their nativeType\n * verbatim (fidelity over guessing); enums are TEXT (the CHECK is separate).\n */\nexport function sqliteStorageType(params: { field: FieldIR }): string {\n const { field } = params;\n if (field.isUnsupported === true) {\n if (field.nativeType === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `unsupported column \"${field.name}\" carries no native type to render`,\n meta: { field: field.name },\n });\n }\n return field.nativeType;\n }\n if (field.isList) refuseSqliteScalarList({ field });\n if (isEnumType(field.type)) return \"TEXT\";\n return SCALAR_TO_SQLITE[field.type];\n}\n\n// ─── Comparison keys (the differ's sqlite normalization) ──────────\n\n/**\n * Comparison key for a column on sqlite: the STORAGE CLASS, not the IR type —\n * String and DateTime are both `t:TEXT` because the database cannot tell them\n * apart. Enum columns key on their VALUE LIST (`e:A|B`), never their name\n * (the name only lives in our CHECK-constraint convention): adding an enum\n * value changes the key and flows through `alterColumn` → table rebuild with\n * the widened CHECK.\n */\nexport function sqliteColumnTypeKey(params: {\n field: FieldIR;\n enums: ReadonlyMap<string, EnumIR>;\n}): string {\n const { field, enums } = params;\n if (field.isUnsupported === true) {\n return `u:${(field.nativeType ?? \"\").toLowerCase().replace(/\\s+/g, \"\")}`;\n }\n if (isEnumType(field.type)) {\n const values = resolveEnumValues({ name: field.type.enum, enums });\n return values === undefined ? `e:?${field.type.enum}` : `e:${values.join(\"|\")}`;\n }\n const listSuffix = field.isList ? \"[]\" : \"\";\n return `t:${SCALAR_TO_SQLITE[field.type]}${listSuffix}`;\n}\n\n/**\n * Default fingerprint on sqlite: postgres rules, except booleans compare as\n * their INTEGER storage (`true` → `num:1`) — an introspected sqlite schema can\n * only ever report `DEFAULT 1`, and the fingerprint must not churn on that.\n */\nexport function sqliteDefaultFingerprint(params: { field: FieldIR }): string | null {\n const { field } = params;\n const def = field.default;\n if (def?.kind === \"now\") return `db:${sqliteDialect.renderDbNow({ offsetSeconds: 0, collector: new ParamCollector(sqliteDialect) })}`;\n if (def?.kind === \"literal\" && field.type === \"Json\") return defaultFingerprint({ field: { ...field, type: \"String\" } });\n if (def?.kind === \"literal\" && typeof def.value === \"boolean\") {\n return `num:${def.value ? 1 : 0}`;\n }\n return defaultFingerprint({ field });\n}\n\n// ─── Default rendering ────────────────────────────────────────────\n\n/**\n * Render the `DEFAULT` expression for a field on sqlite, or `undefined` when\n * the column takes none (app-level generators, autoincrement — which renders\n * as `INTEGER PRIMARY KEY AUTOINCREMENT` instead). Booleans store as 1/0.\n */\nexport function sqliteDefaultSql(params: { field: FieldIR }): string | undefined {\n const def = params.field.default;\n if (def === undefined) return undefined;\n switch (def.kind) {\n case \"autoincrement\":\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return undefined;\n case \"now\":\n return `(${sqliteDialect.renderDbNow({ offsetSeconds: 0, collector: new ParamCollector(sqliteDialect) })})`;\n case \"list\":\n return refuseSqliteScalarList({ field: params.field });\n case \"literal\": {\n const value = def.value;\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (typeof value === \"number\") return String(value);\n return quotePgString({ value });\n }\n case \"enumValue\":\n return quotePgString({ value: def.value });\n case \"dbgenerated\":\n return def.sql;\n }\n}\n\n// ─── Enum CHECK-constraint convention ─────────────────────────────\n\n/**\n * Name of the enum CHECK constraint for a column — the `_enum_` infix is the\n * introspection marker that recovers the enum's name from `sqlite_master.sql`.\n */\nexport function sqliteEnumCheckName(params: {\n table: string;\n column: string;\n enumName: string;\n}): string {\n return `${params.table}_${params.column}_enum_${params.enumName}`;\n}\n\n/** One parsed enum CHECK constraint from a table's `sqlite_master.sql`. */\nexport type ParsedEnumCheck = {\n readonly column: string;\n readonly enumName: string;\n readonly values: readonly string[];\n};\n\nconst ENUM_CHECK_PATTERN =\n /CONSTRAINT \"((?:[^\"]|\"\")+)_enum_((?:[^\"]|\"\")+)\" CHECK \\(\"((?:[^\"]|\"\")+)\" IN \\(([^)]*)\\)\\)/g;\n\n/** One parsed NAMED user CHECK from a table's `sqlite_master.sql`. */\nexport type ParsedNamedCheck = {\n readonly name: string;\n readonly expression: string;\n};\n\n/**\n * Every `CONSTRAINT \"name\" CHECK (…)` in a table's `sqlite_master.sql`, with\n * a balanced-paren walk for the expression (a regex capture would stop at the\n * first `)`). The caller filters out the enum-convention names — those are\n * column machinery, not user checks.\n */\nexport function parseSqliteNamedChecks(params: { tableSql: string }): ParsedNamedCheck[] {\n const { tableSql } = params;\n const result: ParsedNamedCheck[] = [];\n for (const match of tableSql.matchAll(/\\bCONSTRAINT\\s+(?:\"((?:[^\"]|\"\")+)\"|`((?:[^`]|``)+)`|\\[([^\\]]+)\\]|([A-Za-z_][A-Za-z_0-9]*))\\s+CHECK\\s*\\(/gi)) {\n const name = match[1]?.replaceAll('\"\"', '\"') ?? match[2]?.replaceAll(\"``\", \"`\") ?? match[3] ?? match[4]!;\n const open = (match.index ?? 0) + match[0].length - 1;\n let depth = 0;\n let close = -1;\n let quote: string | undefined;\n for (let index = open; index < tableSql.length; index++) {\n const char = tableSql[index];\n if (quote !== undefined) {\n if (char === quote) {\n if (tableSql[index + 1] === quote) index++;\n else quote = undefined;\n }\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") { quote = char; continue; }\n if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) {\n close = index;\n break;\n }\n }\n }\n if (close === -1) continue;\n result.push({ name, expression: tableSql.slice(open + 1, close) });\n }\n return result;\n}\n\n/**\n * Recover enum columns from a table's `sqlite_master.sql` text. Only checks\n * following OUR naming convention are recognized; foreign CHECK constraints\n * are ignored (and — documented limitation — do not survive a table rebuild).\n */\nexport function parseSqliteEnumChecks(params: { tableSql: string }): ParsedEnumCheck[] {\n const result: ParsedEnumCheck[] = [];\n for (const match of params.tableSql.matchAll(ENUM_CHECK_PATTERN)) {\n const enumName = (match[2] as string).replaceAll('\"\"', '\"');\n const column = (match[3] as string).replaceAll('\"\"', '\"');\n const values: string[] = [];\n for (const value of (match[4] as string).matchAll(/'((?:[^']|'')*)'/g)) {\n values.push((value[1] as string).replaceAll(\"''\", \"'\"));\n }\n result.push({ column, enumName, values });\n }\n return result;\n}\n",
|
|
12
12
|
"/**\n * Enum-value resolution shared by the sqlite/mysql type mappers.\n *\n * On dialects without named enum types (sqlite: TEXT + CHECK, mysql: inline\n * `ENUM(...)`) the enum's NAME does not survive in the database — only its\n * VALUES do. Column comparison keys and DDL rendering therefore resolve a\n * field's enum reference to its value list; the name is presentation only.\n */\n\nimport { isEnumType, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { Dialect, EnumIR, FieldIR } from \"@vibeorm/schema\";\n\n/**\n * Resolve an enum name to its values. The map is keyed by db name\n * (`dbName ?? name`, the normalize.ts convention); a schema-side reference by\n * IR name falls back to a scan so both key styles resolve.\n */\nexport function resolveEnumValues(params: {\n name: string;\n namespace?: string;\n enums: ReadonlyMap<string, EnumIR>;\n}): readonly string[] | undefined {\n const { name, enums } = params;\n const direct = enums.get(name);\n if (direct !== undefined) return direct.values;\n for (const enumDef of enums.values()) {\n if ((enumDef.name === name || enumDef.dbName === name) && (params.namespace === undefined || (enumDef.namespace ?? \"public\") === params.namespace)) return enumDef.values;\n }\n return undefined;\n}\n\n/** Storage transitions are detected on physical fields, after normalization. */\nexport function isEnumStringTransition(params: { from: FieldIR; to: FieldIR }): boolean {\n const { from, to } = params;\n return (isEnumType(from.type) && to.type === \"String\") || (from.type === \"String\" && isEnumType(to.type));\n}\n\n/** Shared differ/renderer backstop for storage casts that are not yet lossless. */\nexport function assertEnumStringTransition(params: { from: FieldIR; to: FieldIR; dialect: Dialect; table: string; column: string }): void {\n const { from, to, dialect, table, column } = params;\n if (!isEnumStringTransition({ from, to })) return;\n const reason = from.isList !== to.isList\n ? \"change scalar/list shape separately from enum storage\"\n : from.default?.kind === \"dbgenerated\" || to.default?.kind === \"dbgenerated\"\n ? \"database-expression defaults may depend on the native enum type — migrate the default explicitly first\"\n : dialect === \"mysql\" && isEnumType(to.type)\n ? \"non-strict mysql can silently replace out-of-list strings with '' — validate and migrate this column manually in strict mode\"\n : undefined;\n if (reason !== undefined) {\n throw unsupportedCapability({ dialect, feature: `enum storage conversion on \"${table}\".\"${column}\"`, hint: reason });\n }\n}\n",
|
|
13
13
|
"/**\n * MySQL column-type mapping (IR → column type and back), native-type\n * normalization, comparison keys and default rendering.\n *\n * dialect-matrix §2: String → varchar(191) by default (191 because\n * utf8mb4 × 4 bytes keeps the column inside the 767-byte legacy index-key\n * limit; `@db.Text` opts into TEXT, which we never index), Boolean →\n * tinyint(1) (THE marker that lets introspection recover Boolean),\n * Int → int, BigInt → bigint, Float → double, Decimal → decimal(65,30),\n * DateTime → datetime(3), Json → json, Bytes → longblob, enums → inline\n * `ENUM('A', 'B')` — nameless in the database, so comparison keys use the\n * VALUE LIST (like sqlite) and a pulled schema synthesizes\n * `<Table>_<column>` enum names. Scalar lists are unsupported.\n */\n\nimport { VibeError, isEnumType, unsupportedCapability } from \"@vibeorm/schema\";\nimport { mysqlDialect } from \"@vibeorm/sql\";\nimport type { EnumIR, FieldIR, ScalarType } from \"@vibeorm/schema\";\nimport { resolveEnumValues } from \"./enum-values.ts\";\nimport { defaultFingerprint, quotePgString } from \"./postgres-types.ts\";\n\n// ─── Canonical scalar mapping (dialect-matrix §2) ─────────────────\n\n/** IR scalar → canonical mysql column type (information_schema spelling). */\nexport const SCALAR_TO_MYSQL: Readonly<Record<ScalarType, string>> = {\n String: `varchar(${mysqlDialect.conflictKeyEquality.defaultStringMaxLength})`,\n Boolean: \"tinyint(1)\",\n Int: \"int\",\n BigInt: \"bigint\",\n Float: \"double\",\n Decimal: \"decimal(65,30)\",\n DateTime: \"datetime(3)\",\n Json: \"json\",\n Bytes: \"longblob\",\n};\n\n/** Render-time backstop for scalar-list columns (the differ refuses earlier). */\nexport function refuseMysqlScalarList(params: { field: FieldIR }): never {\n throw unsupportedCapability({\n dialect: \"mysql\",\n feature: `scalar list column \"${params.field.name}\"`,\n hint: \"mysql has no array column type — model the list as a separate table or a JSON column\",\n });\n}\n\n// ─── Native-type normalization ────────────────────────────────────\n\nconst MYSQL_NATIVE_ALIASES: Readonly<Record<string, string>> = {\n integer: \"int\",\n dec: \"decimal\",\n numeric: \"decimal\",\n bool: \"tinyint(1)\",\n boolean: \"tinyint(1)\",\n character: \"char\",\n};\n\n/**\n * Normalize a mysql type string for comparison: lowercase, whitespace\n * stripped, base de-aliased, integer display widths dropped (mysql 8.0.19+\n * omits them; older catalogs report `int(11)`) — EXCEPT `tinyint(1)`, which is\n * the Boolean marker and must survive normalization.\n */\nexport function normalizeMysqlType(params: { raw: string }): string {\n const compact = params.raw.toLowerCase().replace(/\\s+/g, \"\");\n if (compact === \"tinyint(1)\" || compact === \"bool\" || compact === \"boolean\") return \"tinyint(1)\";\n const match = compact.match(/^([a-z_0-9]+)(\\(.*\\))?(.*)$/);\n if (match === null) return compact;\n const base = MYSQL_NATIVE_ALIASES[match[1] as string] ?? (match[1] as string);\n let modifier = match[2] ?? \"\";\n if (/^(tinyint|smallint|mediumint|int|bigint)$/.test(base)) modifier = \"\";\n return `${base}${modifier}${match[3] ?? \"\"}`;\n}\n\n// ─── Comparison keys ──────────────────────────────────────────────\n\n/**\n * Comparison key for a column on mysql. Enum columns key on their VALUE LIST\n * (order-sensitive — mysql ENUM order defines sort order); a native type equal\n * to the scalar's canonical mapping is dropped so `String` and\n * `String @db.VarChar(191)` compare equal.\n */\nexport function mysqlColumnTypeKey(params: {\n field: FieldIR;\n enums: ReadonlyMap<string, EnumIR>;\n}): string {\n const { field, enums } = params;\n if (field.isUnsupported === true) {\n return `u:${normalizeMysqlType({ raw: field.nativeType ?? \"\" })}`;\n }\n if (isEnumType(field.type)) {\n const values = resolveEnumValues({ name: field.type.enum, enums });\n return values === undefined ? `e:?${field.type.enum}` : `e:${values.join(\"|\")}`;\n }\n const listSuffix = field.isList ? \"[]\" : \"\";\n if (field.nativeType !== undefined) {\n const normalized = normalizeMysqlType({ raw: field.nativeType });\n const canonical = normalizeMysqlType({ raw: SCALAR_TO_MYSQL[field.type] });\n if (normalized !== canonical) return `n:${normalized}${listSuffix}`;\n }\n return `t:${normalizeMysqlType({ raw: SCALAR_TO_MYSQL[field.type] })}${listSuffix}`;\n}\n\n/**\n * Default fingerprint on mysql: postgres rules verbatim — tinyint(1) lets the\n * introspector map `DEFAULT '1'` back to a boolean literal, so booleans keep\n * their `bool:` fingerprint (unlike sqlite).\n */\nexport function mysqlDefaultFingerprint(params: { field: FieldIR }): string | null {\n return defaultFingerprint({ field: params.field });\n}\n\n// ─── Column type & default rendering ──────────────────────────────\n\n/** Render the mysql column type for a field (no NOT NULL, no default). */\nexport function mysqlColumnTypeSql(params: {\n field: FieldIR;\n enums: ReadonlyMap<string, EnumIR>;\n}): string {\n const { field, enums } = params;\n if (field.isUnsupported === true) {\n if (field.nativeType === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `unsupported column \"${field.name}\" carries no native type to render`,\n meta: { field: field.name },\n });\n }\n return field.nativeType;\n }\n if (field.isList) refuseMysqlScalarList({ field });\n if (isEnumType(field.type)) {\n const values = resolveEnumValues({ name: field.type.enum, enums });\n if (values === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `enum \"${field.type.enum}\" on column \"${field.name}\" is not declared in the schema`,\n meta: { field: field.name, enum: field.type.enum },\n });\n }\n if (values.some((value) => /[\\\\\\x00-\\x1f\\x7f]/.test(value))) throw unsupportedCapability({ dialect: \"mysql\", feature: \"mysqlEnumLiteralEscaping\", hint: \"ENUM labels containing backslashes or control characters require a reviewed SQL-mode-specific migration\" });\n return `ENUM(${values.map((value) => quotePgString({ value })).join(\", \")})`;\n }\n if (field.nativeType !== undefined) {\n const normalized = normalizeMysqlType({ raw: field.nativeType });\n const canonical = normalizeMysqlType({ raw: SCALAR_TO_MYSQL[field.type] });\n if (normalized !== canonical) return field.nativeType.toLowerCase();\n }\n return SCALAR_TO_MYSQL[field.type];\n}\n\n/**\n * Render the `DEFAULT` expression for a field on mysql, or `undefined` when\n * the column takes none. `now()` renders `CURRENT_TIMESTAMP(3)` (precision\n * must match the datetime(3) column); booleans store as 1/0.\n */\nexport function mysqlDefaultSql(params: { field: FieldIR }): string | undefined {\n const def = params.field.default;\n if (def === undefined) return undefined;\n switch (def.kind) {\n case \"autoincrement\":\n case \"uuid\":\n case \"cuid\":\n case \"nanoid\":\n case \"ulid\":\n return undefined;\n case \"now\":\n return \"CURRENT_TIMESTAMP(3)\";\n case \"list\":\n return refuseMysqlScalarList({ field: params.field });\n case \"literal\": {\n const value = def.value;\n if (typeof value === \"string\" && (params.field.type === \"Json\" || /[\\\\\\x00-\\x1f\\x7f]/.test(value))) {\n // Hex text is independent of NO_BACKSLASH_ESCAPES and preserves literal bytes.\n const hex = Array.from(new TextEncoder().encode(value), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n return `(CONVERT(X'${hex}' USING utf8mb4))`;\n }\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (typeof value === \"number\") return String(value);\n return quotePgString({ value });\n }\n case \"enumValue\":\n return mysqlDefaultSql({ field: { ...params.field, default: { kind: \"literal\", value: def.value } } });\n case \"dbgenerated\":\n return def.sql;\n }\n}\n\n// ─── COLUMN_TYPE parsing (introspection) ──────────────────────────\n\n/** Parse an information_schema `COLUMN_TYPE` of form `enum('A','B')`. */\nexport function parseMysqlEnumColumnType(params: { columnType: string }): string[] | null {\n const match = params.columnType.trim().match(/^enum\\((.*)\\)$/i);\n if (match === null) return null;\n const values: string[] = [];\n for (const value of (match[1] as string).matchAll(/'((?:[^']|'')*)'/g)) {\n values.push((value[1] as string).replaceAll(\"''\", \"'\"));\n }\n return values;\n}\n",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"import { VibeError, defaultForeignKeyName, defaultPrimaryKeyName, isSqlObjectIdentity, sqlObjectKey } from \"@vibeorm/schema\";\nimport type { Dialect, QualifiedSqlName, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { getSqlDialect, renderMigrationInventory, renderSqliteColumnInventory, renderMysqlObjectMembers, sqliteTableConstraints, renderSqliteForeignKeyInventory } from \"@vibeorm/sql\";\nimport type { SqlExecutor } from \"./types.ts\";\nimport { assertCatalogVisibility } from \"./inspect-objects.ts\";\nimport { parseSqliteNamedChecks } from \"./sqlite-types.ts\";\n\n/** Live identities remain observations and cannot establish desired ownership. */\nexport type CatalogObject = { readonly identity: SqlObjectIdentity; readonly backingConstraint?: string; readonly inspectionUnavailable?: string };\n\n/** Enumerate live objects in the migration namespace. Permission errors propagate as unavailable. */\nexport async function inspectMigrationInventory(params: { executor: SqlExecutor; dialect: Dialect; namespace: string }): Promise<readonly CatalogObject[]> {\n await assertCatalogVisibility(params);\n const query = renderMigrationInventory({ dialect: getSqlDialect({ dialect: params.dialect }), namespace: params.namespace });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n const objects: CatalogObject[] = [];\n const kinds: Readonly<Record<string, \"check\" | \"foreignKey\" | \"exclusion\" | \"unique\" | \"primaryKey\">> = {\n c: \"check\", f: \"foreignKey\", x: \"exclusion\", u: \"unique\", p: \"primaryKey\", CHECK: \"check\", \"FOREIGN KEY\": \"foreignKey\", UNIQUE: \"unique\", \"PRIMARY KEY\": \"primaryKey\",\n };\n for (const row of rows) {\n const name = row.name;\n if (typeof name !== \"string\" || typeof row.kind !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Malformed catalog identity\", meta: { reason: \"inventory-unavailable\" } });\n const qualified: QualifiedSqlName = { namespace: params.namespace, name };\n const table: QualifiedSqlName = { namespace: params.namespace, name: String(row.parent ?? \"\") };\n let identity: SqlObjectIdentity;\n switch (row.kind) {\n case \"namespace\": identity = { kind: \"namespace\", name }; break;\n case \"table\": case \"view\": case \"sequence\": case \"enum\": identity = { kind: row.kind, name: qualified }; break;\n case \"trigger\": case \"index\": identity = { kind: row.kind, table, name }; break;\n case \"column\": case \"columnDefault\": case \"generatedColumn\": identity = { kind: row.kind, table, column: name }; break;\n case \"constraint\": {\n const constraintType = kinds[String(row.subtype)];\n if (constraintType === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Unknown constraint catalog kind\", meta: { reason: \"inventory-unavailable\" } });\n identity = { kind: \"constraint\", table, name, constraintType };\n break;\n }\n case \"function\": {\n let argumentTypes: unknown = JSON.parse(String(row.signature));\n if (params.dialect === \"mysql\") {\n const query = renderMysqlObjectMembers({ dialect: getSqlDialect({ dialect: params.dialect }), identity: { kind: \"function\", name: qualified, argumentTypes: [] } })!;\n const members = await params.executor({ text: query.text, values: [...query.values] });\n if (members.length === 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"MySQL function signature unavailable\", meta: { reason: \"inventory-unavailable\", name } });\n argumentTypes = members.filter((member) => member.mode !== null).map((member) => ({ namespace: \"mysql\", name: String(member.type) }));\n }\n const candidate = { kind: \"function\", name: qualified, argumentTypes };\n if (!isSqlObjectIdentity(candidate)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Invalid function signature in catalog\", meta: { reason: \"inventory-unavailable\" } });\n identity = candidate;\n break;\n }\n default: throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Unknown catalog object kind ${row.kind}`, meta: { reason: \"inventory-unavailable\" } });\n }\n objects.push({ identity, ...(typeof row.backing === \"string\" ? { backingConstraint: row.backing } : {}) });\n if (params.dialect === \"sqlite\" && row.kind === \"table\" && typeof row.definition === \"string\" && !/^\\s*CREATE\\s+VIRTUAL\\s+TABLE\\b/i.test(row.definition)) {\n const clauses = sqliteTableConstraints({ sql: row.definition });\n for (const constraint of clauses) {\n if (constraint.type === \"check\") continue;\n const name = constraint.named ? constraint.name : constraint.type === \"primaryKey\" ? defaultPrimaryKeyName({ table: qualified.name, dialect: \"sqlite\" }) : constraint.type === \"foreignKey\" ? defaultForeignKeyName({ table: qualified.name, columns: constraint.columns, dialect: \"sqlite\" }) : constraint.name;\n objects.push({ identity: { kind: \"constraint\", constraintType: constraint.type, table: qualified, name }, ...(constraint.type === \"unique\" && !constraint.named ? { inspectionUnavailable: \"sqlite-anonymous-unique-constraint\" } : {}) });\n }\n const checks = parseSqliteNamedChecks({ tableSql: row.definition });\n for (const check of checks) objects.push({ identity: { kind: \"constraint\", constraintType: \"check\", table: qualified, name: check.name } });\n // This is a conservative detector, not a SQL expression parser. Unnamed\n // CHECKs cannot be individually represented by the core IR and must not\n // disappear in a rebuild. A token in a literal may conservatively refuse.\n if ([...row.definition.matchAll(/\\bCHECK\\s*\\(/gi)].length > checks.length) objects.push({ identity: { kind: \"table\", name: qualified }, inspectionUnavailable: \"sqlite-unnamed-check-definition-unavailable\" });\n const query = renderSqliteColumnInventory({ dialect: getSqlDialect({ dialect: params.dialect }), namespace: params.namespace, table: name });\n const columns = await params.executor({ text: query.text, values: [...query.values] });\n if (columns.some((column) => Number(column.pk) > 0) && !clauses.some((clause) => clause.type === \"primaryKey\")) objects.push({ identity: { kind: \"constraint\", constraintType: \"primaryKey\", table: qualified, name: defaultPrimaryKeyName({ table: qualified.name, dialect: \"sqlite\" }) } });\n const fkQuery = renderSqliteForeignKeyInventory({ dialect: getSqlDialect({ dialect: params.dialect }), namespace: params.namespace, table: name });\n const foreignKeys = await params.executor({ text: fkQuery.text, values: [...fkQuery.values] });\n const groups = new Map<number, string[]>();\n for (const fk of foreignKeys) groups.set(Number(fk.id), [...(groups.get(Number(fk.id)) ?? []), String(fk.from)]);\n for (const fields of groups.values()) {\n if (clauses.some((clause) => clause.type === \"foreignKey\" && JSON.stringify(clause.columns) === JSON.stringify(fields))) continue;\n objects.push({ identity: { kind: \"constraint\", constraintType: \"foreignKey\", table: qualified, name: defaultForeignKeyName({ table: qualified.name, columns: fields, dialect: \"sqlite\" }) }, inspectionUnavailable: \"sqlite-inline-foreign-key-definition-unavailable\" });\n }\n for (const column of columns) {\n objects.push({ identity: { kind: \"column\", table: qualified, column: String(column.name) } });\n if (Number(column.hidden) > 1) objects.push({ identity: { kind: \"generatedColumn\", table: qualified, column: String(column.name) } });\n else if (column.definition !== null && column.definition !== undefined) objects.push({ identity: { kind: \"columnDefault\", table: qualified, column: String(column.name) } });\n }\n }\n }\n return [...new Map(objects.map((object) => [sqlObjectKey({ identity: object.identity }), object])).values()];\n}\n",
|
|
16
16
|
"import { IDENTIFIER_LIMITS, VibeError, identifierLength, sqlNamespaceIssue, sqlObjectKey, sqlObjectNamespace, qualifiedSqlName, enumStorageOf, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { Dialect, QualifiedSqlName, SchemaIR, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { getSqlDialect, renderExternalOwnershipCatalog, renderReplayCoverageGaps } from \"@vibeorm/sql\";\nimport { inspectMigrationInventory } from \"./inventory.ts\";\nimport type { CatalogObject } from \"./inventory.ts\";\nimport type { DesiredState } from \"./desired-state.ts\";\nimport type { SqlExecutor } from \"./types.ts\";\n\n/** Plain-data ownership of a namespace or named public relations/routines. */\nexport type ExternalObjectOwner =\n | { readonly owner: string; readonly schema: string; readonly tables?: never; readonly partitions?: never; readonly functions?: never }\n | { readonly owner: string; readonly schema?: never; readonly tables?: readonly string[]; readonly partitions?: readonly { readonly parent: string; readonly pattern: string }[]; readonly functions?: readonly string[] };\n\ntype CompiledPartition = { readonly parent: string; readonly pattern: RegExp };\nconst partitionPatterns = new WeakMap<ExternalObjectOwner, readonly CompiledPartition[]>();\n\nfunction invalid(params: { detail: string; owner?: string; cause?: unknown }): VibeError {\n return new VibeError({ code: \"VIBE_CONFIG\", message: `Invalid external ownership declaration: ${params.detail}`, meta: { reason: \"external-declaration-invalid\", ...(params.owner === undefined ? {} : { owner: params.owner }) }, ...(params.cause === undefined ? {} : { cause: params.cause }) });\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction identifier(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0 && !value.includes(\"\\0\") && identifierLength({ name: value, dialect: \"postgres\" }) <= IDENTIFIER_LIMITS.postgres!.max;\n}\n\nfunction names(params: { value: unknown; key: string }): readonly string[] | undefined {\n if (params.value === undefined) return undefined;\n if (!Array.isArray(params.value) || !params.value.every(identifier) || new Set(params.value).size !== params.value.length) throw invalid({ detail: `${params.key} must contain unique non-empty PostgreSQL identifiers` });\n return [...params.value];\n}\n\n/** Validate config and regular-expression syntax without opening a database. */\nexport async function parseExternalObjects(params: { value: unknown; dialect?: Dialect }): Promise<readonly ExternalObjectOwner[]> {\n return Promise.resolve().then(() => {\n if (!Array.isArray(params.value)) throw invalid({ detail: \"external must be an array\" });\n if (params.value.length > 0 && params.dialect !== undefined && params.dialect !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect, feature: \"externalObjects\" });\n const owners = new Set<string>();\n const claims = new Set<string>();\n const compiled: { readonly owner: string; readonly pattern: RegExp }[] = [];\n const tableClaims: { readonly owner: string; readonly name: string }[] = [];\n const result: ExternalObjectOwner[] = [];\n for (const value of params.value) {\n if (!record(value) || typeof value.owner !== \"string\" || value.owner.trim().length === 0 || value.owner.includes(\"\\0\")) throw invalid({ detail: \"each entry needs a non-empty owner\" });\n const owner = value.owner;\n if (owners.has(owner)) throw invalid({ detail: \"an owner must have one declaration\", owner });\n owners.add(owner);\n const allowed = value.schema === undefined ? [\"owner\", \"tables\", \"partitions\", \"functions\"] : [\"owner\", \"schema\"];\n if (Object.keys(value).some((key) => !allowed.includes(key))) throw invalid({ detail: \"whole-schema and named-object declarations are exclusive; unknown keys refuse\", owner });\n const claim = (options: { kind: string; name: string }): void => {\n const { kind, name } = options;\n const key = JSON.stringify([kind, name]);\n if (claims.has(key)) throw invalid({ detail: `${kind} ${JSON.stringify(name)} has conflicting owners`, owner });\n claims.add(key);\n };\n if (value.schema !== undefined) {\n const issue = sqlNamespaceIssue({ namespace: value.schema, allowPublic: false });\n if (issue !== undefined || typeof value.schema !== \"string\") throw invalid({ detail: issue ?? \"schema must be a string\", owner });\n claim({ kind: \"namespace\", name: value.schema });\n result.push(Object.freeze({ owner, schema: value.schema }));\n continue;\n }\n const tables = names({ value: value.tables, key: \"tables\" });\n const functions = names({ value: value.functions, key: \"functions\" });\n const partitions: { readonly parent: string; readonly pattern: string }[] = [];\n const ownerPatterns: CompiledPartition[] = [];\n if (value.partitions !== undefined) {\n if (!Array.isArray(value.partitions)) throw invalid({ detail: \"partitions must be an array\", owner });\n for (const partition of value.partitions) {\n if (!record(partition) || Object.keys(partition).some((key) => key !== \"parent\" && key !== \"pattern\") || !identifier(partition.parent) || typeof partition.pattern !== \"string\" || partition.pattern.length === 0 || !tables?.includes(partition.parent)) throw invalid({ detail: \"partition patterns require a parent in the same owner's tables\", owner });\n const pattern = new RegExp(`^(?:${partition.pattern})$`);\n compiled.push({ owner, pattern });\n ownerPatterns.push({ parent: partition.parent, pattern });\n partitions.push(Object.freeze({ parent: partition.parent, pattern: partition.pattern }));\n }\n }\n if ((tables?.length ?? 0) + (functions?.length ?? 0) + partitions.length === 0) throw invalid({ detail: \"named ownership needs at least one table or function\", owner });\n for (const name of tables ?? []) {\n if (name === \"_vibe_migrations\") throw invalid({ detail: \"the migration journal cannot be claimed externally\", owner });\n claim({ kind: \"table\", name }); tableClaims.push({ owner, name });\n }\n for (const name of functions ?? []) claim({ kind: \"function\", name });\n const declaration: ExternalObjectOwner = Object.freeze({ owner, ...(tables === undefined ? {} : { tables: Object.freeze(tables) }), ...(functions === undefined ? {} : { functions: Object.freeze(functions) }), ...(value.partitions === undefined ? {} : { partitions: Object.freeze(partitions) }) });\n partitionPatterns.set(declaration, ownerPatterns);\n result.push(declaration);\n }\n for (const table of tableClaims) for (const pattern of compiled) {\n if (table.owner !== pattern.owner && pattern.pattern.exec(table.name)?.[0] === table.name) throw invalid({ detail: \"a full-name pattern claims another owner's named table\", owner: pattern.owner });\n }\n return Object.freeze(result);\n }).catch((cause: unknown) => {\n if (cause instanceof VibeError) throw cause;\n throw invalid({ detail: \"regular-expression pattern cannot be compiled\", cause });\n });\n}\n\n/** Catalog edges retain their exact endpoints, including other namespaces. */\nexport type ExternalOwnershipCatalog = {\n readonly namespaces: readonly string[];\n readonly inventory: readonly CatalogObject[];\n readonly inheritance: readonly { readonly parent: QualifiedSqlName; readonly child: QualifiedSqlName }[];\n readonly ownedSequences: readonly { readonly table: QualifiedSqlName; readonly sequence: QualifiedSqlName }[];\n readonly foreignKeys: readonly { readonly table: QualifiedSqlName; readonly target: QualifiedSqlName; readonly name: string }[];\n readonly coverageGaps?: readonly Record<string, unknown>[];\n};\n\n/** Ordinary routine declarations report missing names without inventing a signature. */\nexport type MissingExternalObject = { readonly kind: \"namespace\"; readonly name: string } | { readonly kind: \"table\" | \"function\"; readonly name: QualifiedSqlName };\n\n/** Exclusion is an ownership report, never structural verification of another tool's objects. */\nexport type ExternalOwnerReport = {\n readonly owner: string;\n readonly state: \"excluded\";\n readonly count: number;\n readonly identities: readonly SqlObjectIdentity[];\n readonly missing: readonly MissingExternalObject[];\n};\n\ntype OwnedName = { readonly owner: string; readonly name: QualifiedSqlName };\n\n/** Keep full observations beside comparison-only ownership closure. */\nexport type ExternalObjectResolution = {\n readonly declarations: readonly ExternalObjectOwner[];\n readonly catalog: ExternalOwnershipCatalog;\n readonly inventory: readonly CatalogObject[];\n readonly owners: readonly ExternalOwnerReport[];\n readonly identities: readonly SqlObjectIdentity[];\n readonly tables: readonly OwnedName[];\n readonly sequences: readonly OwnedName[];\n};\n\nfunction nameKey(name: QualifiedSqlName): string {\n return sqlObjectKey({ identity: { kind: \"table\", name } });\n}\n\nfunction schemaOwner(params: { external: readonly ExternalObjectOwner[]; namespace: string }): string | undefined {\n return params.external.find((entry) => entry.schema === params.namespace)?.owner;\n}\n\nfunction declaredTableOwner(params: { external: readonly ExternalObjectOwner[]; name: QualifiedSqlName }): string | undefined {\n const whole = schemaOwner({ external: params.external, namespace: params.name.namespace });\n if (whole !== undefined || params.name.namespace !== \"public\") return whole;\n const matches = params.external.filter((entry) => {\n if (entry.tables?.includes(params.name.name)) return true;\n const patterns = partitionPatterns.get(entry);\n if ((entry.partitions?.length ?? 0) > 0 && patterns === undefined) throw invalid({ detail: \"resolve partition declarations returned by parseExternalObjects\", owner: entry.owner });\n return patterns?.some(({ pattern }) => pattern.exec(params.name.name)?.[0] === params.name.name) === true;\n });\n if (matches.length > 1) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"A table is claimed by more than one external owner\", meta: { reason: \"external-owner-collision\", identity: { kind: \"table\", name: params.name }, owners: matches.map((entry) => entry.owner) } });\n return matches[0]?.owner;\n}\n\n/** Match exact qualified ownership, including missing declarations and full-name patterns. */\nexport function externalObjectOwner(params: { identity: SqlObjectIdentity; external: ExternalObjectResolution }): string | undefined {\n const { identity, external } = params;\n const whole = schemaOwner({ external: external.declarations, namespace: sqlObjectNamespace({ identity }) });\n if (whole !== undefined) return whole;\n if (identity.kind === \"table\" || \"table\" in identity) {\n const name = \"table\" in identity ? identity.table : identity.name;\n return external.tables.find((entry) => nameKey(entry.name) === nameKey(name))?.owner ?? declaredTableOwner({ external: external.declarations, name });\n }\n if (identity.kind === \"sequence\") return external.sequences.find((entry) => nameKey(entry.name) === nameKey(identity.name))?.owner;\n if (identity.kind === \"function\" && identity.name.namespace === \"public\") return external.declarations.find((entry) => entry.functions?.includes(identity.name.name))?.owner;\n return undefined;\n}\n\n/** Resolve validated plain declarations from complete catalog observations, without DDL. */\nexport function resolveExternalObjectOwnership(params: { external: readonly ExternalObjectOwner[]; catalog: ExternalOwnershipCatalog; dialect: Dialect }): ExternalObjectResolution {\n if (params.external.length > 0 && params.dialect !== \"postgres\") throw unsupportedCapability({ dialect: params.dialect, feature: \"externalObjects\" });\n if (params.catalog.inventory.some((object) => object.inspectionUnavailable !== undefined)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"External ownership requires complete catalog visibility\", meta: { reason: \"external-inventory-unavailable\", objects: params.catalog.inventory.filter((object) => object.inspectionUnavailable !== undefined) } });\n const tables = new Map<string, OwnedName>();\n const assign = (entry: OwnedName): boolean => {\n const key = nameKey(entry.name);\n const prior = tables.get(key)?.owner ?? declaredTableOwner({ external: params.external, name: entry.name });\n if (prior !== undefined && prior !== entry.owner) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"An inherited table has conflicting external owners\", meta: { reason: \"external-owner-collision\", identity: { kind: \"table\", name: entry.name }, owners: [prior, entry.owner] } });\n if (tables.has(key)) return false;\n tables.set(key, entry);\n return true;\n };\n for (const declaration of params.external) for (const name of declaration.tables ?? []) assign({ owner: declaration.owner, name: { namespace: \"public\", name } });\n for (const object of params.catalog.inventory) {\n if (object.identity.kind !== \"table\") continue;\n const owner = declaredTableOwner({ external: params.external, name: object.identity.name });\n if (owner !== undefined) assign({ owner, name: object.identity.name });\n }\n let changed = true;\n while (changed) {\n changed = false;\n for (const edge of params.catalog.inheritance) {\n const owner = tables.get(nameKey(edge.parent))?.owner;\n if (owner !== undefined && assign({ owner, name: edge.child })) changed = true;\n }\n }\n const sequences = params.catalog.ownedSequences.flatMap((edge): OwnedName[] => {\n const owner = tables.get(nameKey(edge.table))?.owner;\n if (owner === undefined) return [];\n const whole = schemaOwner({ external: params.external, namespace: edge.sequence.namespace });\n if (whole !== undefined && whole !== owner) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"An owned sequence has conflicting external owners\", meta: { reason: \"external-owner-collision\", identity: { kind: \"sequence\", name: edge.sequence }, owners: [whole, owner] } });\n return [{ owner, name: edge.sequence }];\n });\n const closure = { declarations: params.external, catalog: params.catalog, inventory: params.catalog.inventory, tables: [...tables.values()], sequences, owners: [], identities: [] };\n for (const edge of params.catalog.foreignKeys) {\n const owner = externalObjectOwner({ external: closure, identity: { kind: \"table\", name: edge.table } });\n const targetOwner = externalObjectOwner({ external: closure, identity: { kind: \"table\", name: edge.target } });\n if (owner !== targetOwner && (owner !== undefined || targetOwner !== undefined)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Foreign keys cannot cross external ownership boundaries\", meta: { reason: \"external-cross-owner-foreign-key\", name: edge.name, table: edge.table, target: edge.target, owner: owner ?? \"application\", targetOwner: targetOwner ?? \"application\" } });\n }\n const observed = new Map<string, SqlObjectIdentity>();\n for (const namespace of params.catalog.namespaces) {\n if (schemaOwner({ external: params.external, namespace }) !== undefined) observed.set(sqlObjectKey({ identity: { kind: \"namespace\", name: namespace } }), { kind: \"namespace\", name: namespace });\n }\n for (const object of params.catalog.inventory) observed.set(sqlObjectKey({ identity: object.identity }), object.identity);\n const owners = params.external.map((entry): ExternalOwnerReport => {\n const identities = [...observed.values()].filter((identity) => externalObjectOwner({ identity, external: closure }) === entry.owner);\n const missing: MissingExternalObject[] = [];\n if (entry.schema !== undefined && !params.catalog.namespaces.includes(entry.schema)) missing.push({ kind: \"namespace\", name: entry.schema });\n for (const name of entry.tables ?? []) if (!params.catalog.inventory.some(({ identity }) => identity.kind === \"table\" && identity.name.namespace === \"public\" && identity.name.name === name)) missing.push({ kind: \"table\", name: { namespace: \"public\", name } });\n for (const name of entry.functions ?? []) if (!params.catalog.inventory.some(({ identity }) => identity.kind === \"function\" && identity.name.namespace === \"public\" && identity.name.name === name)) missing.push({ kind: \"function\", name: { namespace: \"public\", name } });\n return { owner: entry.owner, state: \"excluded\", count: identities.length, identities, missing };\n });\n return { ...closure, owners, identities: owners.flatMap((owner) => owner.identities) };\n}\n\nfunction catalogName(params: { row: Record<string, unknown>; namespace: string; name: string }): QualifiedSqlName {\n const namespace = params.row[params.namespace];\n const name = params.row[params.name];\n if (!identifier(namespace) || !identifier(name)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Malformed external ownership catalog endpoint\", meta: { reason: \"external-inventory-unavailable\" } });\n return { namespace, name };\n}\n\n/** Read all ownership edges and retain unfiltered inventory for dependency safety. */\nexport async function inspectExternalObjects(params: { executor: SqlExecutor; dialect: Dialect; external: readonly ExternalObjectOwner[]; inventory?: readonly CatalogObject[] }): Promise<ExternalObjectResolution> {\n const external = await parseExternalObjects({ value: params.external, dialect: params.dialect });\n if (params.dialect !== \"postgres\") return resolveExternalObjectOwnership({ external, dialect: params.dialect, catalog: { namespaces: [], inventory: params.inventory ?? [], inheritance: [], ownedSequences: [], foreignKeys: [] } });\n const read = async (operation: Parameters<typeof renderExternalOwnershipCatalog>[0][\"operation\"]): Promise<Record<string, unknown>[]> => {\n const query = renderExternalOwnershipCatalog({ dialect: getSqlDialect({ dialect: params.dialect }), operation });\n return params.executor({ text: query.text, values: [...query.values] });\n };\n const namespaceRows = await read(\"namespaces\");\n if (namespaceRows.some((row) => !identifier(row.namespace) || row.visible !== true)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"External ownership cannot prove visibility of every inspected namespace\", meta: { reason: \"external-inventory-unavailable\" } });\n const namespaces = namespaceRows.map((row) => String(row.namespace));\n const [inherited, owned, foreignKeys] = await Promise.all([read(\"inheritance\"), read(\"ownedSequences\"), read(\"foreignKeys\")]);\n const inventory = params.inventory ?? (await Promise.all(namespaces.map((namespace) => inspectMigrationInventory({ executor: params.executor, dialect: params.dialect, namespace })))).flat();\n const coverageGaps = (await Promise.all(namespaces.map(async (namespace) => {\n const query = renderReplayCoverageGaps({ dialect: getSqlDialect({ dialect: params.dialect }), namespace });\n return params.executor({ text: query.text, values: [...query.values] });\n }))).flat();\n return resolveExternalObjectOwnership({ external, dialect: params.dialect, catalog: {\n namespaces, inventory, coverageGaps,\n inheritance: inherited.map((row) => ({ parent: catalogName({ row, namespace: \"parentNamespace\", name: \"parentName\" }), child: catalogName({ row, namespace: \"namespace\", name: \"name\" }) })),\n ownedSequences: owned.map((row) => ({ table: catalogName({ row, namespace: \"tableNamespace\", name: \"tableName\" }), sequence: catalogName({ row, namespace: \"namespace\", name: \"name\" }) })),\n foreignKeys: foreignKeys.map((row) => ({ table: catalogName({ row, namespace: \"namespace\", name: \"table\" }), target: catalogName({ row, namespace: \"refNamespace\", name: \"refTable\" }), name: catalogName({ row, namespace: \"namespace\", name: \"name\" }).name })),\n } });\n}\n\n/** Refuse app/module/external collisions even when the target object does not yet exist. */\nexport function assertExternalOwnershipClaims(params: { external: ExternalObjectResolution; identities: readonly SqlObjectIdentity[] }): void {\n for (const identity of params.identities) {\n const owner = externalObjectOwner({ identity, external: params.external }) ?? (identity.kind === \"namespace\" ? [...params.external.tables, ...params.external.sequences].find((entry) => entry.name.namespace === identity.name)?.owner : undefined);\n if (owner !== undefined) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"Application or module declarations collide with external ownership\", meta: { reason: \"external-owned-object-collision\", owner, identity } });\n }\n}\n\n/** Comparison-only projection; shared enum types do not follow a named table. */\nexport function projectExternalSchema(params: { schema: SchemaIR; external: ExternalObjectResolution }): SchemaIR {\n const { schema, external } = params;\n const models = schema.models.filter((model) => externalObjectOwner({ external, identity: { kind: model.isView ? \"view\" : \"table\", name: qualifiedSqlName({ name: model.dbName ?? model.name, namespace: model.namespace }) } }) === undefined);\n const removed = new Set(schema.models.filter((model) => !models.includes(model)).map((model) => model.name));\n for (const model of models) for (const relation of model.relations) if (removed.has(relation.targetModel)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Application relations cannot depend on externally owned tables\", meta: { reason: \"external-cross-owner-foreign-key\", model: model.name, relation: relation.name } });\n return { ...schema, models,\n enums: schema.enums.filter((entry) => enumStorageOf({ enumDef: entry }) === \"string\" || externalObjectOwner({ external, identity: { kind: \"enum\", name: qualifiedSqlName({ name: entry.dbName ?? entry.name, namespace: entry.namespace }) } }) === undefined),\n ...(schema.migrationObjects === undefined ? {} : { migrationObjects: schema.migrationObjects.filter((object) => externalObjectOwner({ external, identity: object.identity }) === undefined) }),\n };\n}\n\n/** Do not mutate checksum-bound state while surrendering comparison ownership. */\nexport function projectExternalState(params: { state: DesiredState; external: ExternalObjectResolution }): DesiredState {\n return { ...params.state, schema: projectExternalSchema({ schema: params.state.schema, external: params.external }), definitions: params.state.definitions.filter((definition) => externalObjectOwner({ external: params.external, identity: definition.identity }) === undefined) };\n}\n\n/** Drop external identities from comparisons only; resolution keeps the original inventory. */\nexport function projectExternalInventory(params: { inventory: readonly CatalogObject[]; external: ExternalObjectResolution }): readonly CatalogObject[] {\n return params.inventory.filter((object) => externalObjectOwner({ identity: object.identity, external: params.external }) === undefined);\n}\n\n/** Exempt namespace placement only; every non-external layout/definition gap remains visible. */\nexport function migrationCoverageGaps(params: { gaps: readonly Record<string, unknown>[]; namespace: string; namespaces: readonly string[]; external?: ExternalObjectResolution }): readonly Record<string, unknown>[] {\n const recognized = new Set([...params.namespaces, ...(params.external?.tables.map((entry) => entry.name.namespace) ?? []), ...(params.external?.sequences.map((entry) => entry.name.namespace) ?? [])]);\n const kept = params.gaps.filter((gap) => {\n const namespace = typeof gap.namespace === \"string\" ? gap.namespace : params.namespace;\n if (gap.kind === \"namespace\" && typeof gap.name === \"string\" && recognized.has(gap.name)) return false;\n const external = params.external;\n if (external === undefined) return true;\n if (external.declarations.some((entry) => entry.schema === namespace || gap.kind === \"namespace\" && entry.schema === gap.name)) return false;\n const name = gap.kind === \"rule\" ? gap.parent : gap.name;\n if ((gap.kind === \"relation-layout\" || gap.kind === \"rule\") && typeof name === \"string\" && externalObjectOwner({ external, identity: { kind: \"table\", name: { namespace, name } } }) !== undefined) return false;\n return true;\n });\n return [...new Map(kept.map((gap) => [JSON.stringify(gap), gap])).values()];\n}\n",
|
|
17
17
|
"import { randomUUID } from \"node:crypto\";\nimport { VibeError, sqlObjectKey } from \"@vibeorm/schema\";\nimport type { SchemaIR, ExclusionIR, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { postgresDialect, renderExclusionCatalog, renderExclusionProbe } from \"@vibeorm/sql\";\nimport type { SqlExecutor } from \"./types.ts\";\nimport type { DesiredState } from \"./desired-state.ts\";\nimport type { MigrationObjectState, MigrationStateDifference } from \"./inspect-objects.ts\";\n\n/** Normalize an independently authored definition on an empty clone, rolled back by the caller's session. */\nexport async function deparseExclusion(params: { executor: SqlExecutor; table: string; namespace?: string; definition: string }): Promise<string> {\n const probe = `vibe_exclusion_${randomUUID().replaceAll(\"-\", \"\")}`;\n await params.executor({ text: \"SAVEPOINT vibe_exclusion_probe\" });\n try {\n for (const text of renderExclusionProbe({ dialect: postgresDialect, table: params.table, ...(params.namespace === undefined ? {} : { namespace: params.namespace }), probe, definition: params.definition })) await params.executor({ text });\n const rows = await params.executor({ text: renderExclusionCatalog({ dialect: postgresDialect, probe }) });\n if (typeof rows[0]?.definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Exclusion probe unavailable\", meta: { reason: \"exclusion-inspection-unavailable\" } });\n return rows[0].definition;\n } finally {\n await params.executor({ text: \"ROLLBACK TO SAVEPOINT vibe_exclusion_probe\" });\n await params.executor({ text: \"RELEASE SAVEPOINT vibe_exclusion_probe\" });\n }\n}\n\n/** Establish definition equivalence before the pure differ sees catalog SQL. */\nexport async function prepareExclusionDiff(params: { executor: SqlExecutor; from: SchemaIR; to: SchemaIR; previous?: DesiredState; probe?: string; replaceChecks?: readonly SqlObjectIdentity[] }): Promise<SchemaIR> {\n const models = [];\n for (const model of params.from.models) {\n const table = model.dbName ?? model.name;\n const target = params.to.models.find((entry) => (entry.dbName ?? entry.name) === table && (entry.namespace ?? \"public\") === (model.namespace ?? \"public\"));\n const exclusions: ExclusionIR[] = [];\n for (const before of model.exclusions ?? []) {\n const next = target?.exclusions?.find((entry) => entry.name === before.name);\n if (next === undefined || next.definition === before.definition) { exclusions.push(before); continue; }\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"exclusion\", table: { namespace: model.namespace ?? \"public\", name: table }, name: before.name };\n if (params.probe === \"rollback\") {\n const normalized = await deparseExclusion({ executor: params.executor, table, ...(model.namespace === undefined ? {} : { namespace: model.namespace }), definition: next.definition });\n exclusions.push(normalized === before.definition ? next : { name: before.name, definition: before.definition, requiredExtensions: before.requiredExtensions });\n continue;\n }\n const previous = params.previous?.schema.models.find((entry) => (entry.dbName ?? entry.name) === table && (entry.namespace ?? \"public\") === (model.namespace ?? \"public\"))?.exclusions?.find((entry) => entry.name === before.name);\n if (previous !== undefined) { exclusions.push(previous); continue; }\n if (params.replaceChecks?.some((entry) => sqlObjectKey({ identity: entry }) === sqlObjectKey({ identity }))) { exclusions.push({ name: before.name, definition: before.definition, requiredExtensions: before.requiredExtensions }); continue; }\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Exclusion equivalence requires a rollback probe or explicit replacement\", meta: { reason: \"explicit-replacement-required\", identity } });\n }\n models.push({ ...model, exclusions });\n }\n return { ...params.from, models };\n}\n\n/** Verify definition and enforcement without treating a backing index as an ordinary index. */\nexport async function verifyExclusions(params: { executor: SqlExecutor; expected: DesiredState; probe?: string }): Promise<MigrationObjectState[]> {\n if (!params.expected.schema.models.some((model) => (model.exclusions?.length ?? 0) > 0)) return [];\n const rows = (await Promise.all([...new Set(params.expected.schema.models.map((model) => model.namespace ?? \"public\"))].map(async (namespace) => (await params.executor({ text: renderExclusionCatalog({ dialect: postgresDialect, namespace }) })).map((row): Record<string, unknown> => ({ ...row, namespace }))))).flat();\n const objects: MigrationObjectState[] = [];\n for (const model of params.expected.schema.models) for (const exclusion of model.exclusions ?? []) {\n const table = model.dbName ?? model.name;\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"exclusion\", table: { namespace: model.namespace ?? \"public\", name: table }, name: exclusion.name };\n const row = rows.find((entry) => entry.namespace === (model.namespace ?? \"public\") && entry.table_name === table && entry.constraint_name === exclusion.name);\n if (row === undefined) { objects.push({ identity, ownership: \"schema\", state: \"missing\", differences: [] }); continue; }\n const differences: MigrationStateDifference[] = [\"validated\", \"valid\", \"ready\"].flatMap((attribute) => row[attribute] === true ? [] : [{ attribute, expected: true, actual: row[attribute] }]);\n const independentlyVerified = params.expected.definitions.some((entry) => sqlObjectKey({ identity: entry.identity }) === sqlObjectKey({ identity }));\n const definition = independentlyVerified ? row.definition : params.probe === \"rollback\" ? await deparseExclusion({ executor: params.executor, table, ...(model.namespace === undefined ? {} : { namespace: model.namespace }), definition: exclusion.definition }) : (exclusion.normalizationSource === exclusion.definition ? exclusion.normalizedDefinition : undefined) ?? exclusion.definition;\n if (definition !== row.definition) differences.push({ attribute: \"definition\", expected: definition, actual: row.definition });\n objects.push({ identity, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : params.probe === \"rollback\" ? \"changed\" : \"unavailable\", differences });\n }\n return objects;\n}\n",
|
|
18
|
-
"import { externalObjectOwner, projectExternalSchema, projectExternalState } from \"./external-objects.ts\";\nimport type { ExternalObjectResolution } from \"./external-objects.ts\";\nimport { verifyExclusions } from \"./exclusions.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { VibeError, sqlObjectKey, sqlObjectNamespace, DIALECT_CAPABILITIES, qualifiedSqlName } from \"@vibeorm/schema\";\nimport type { Dialect, SchemaIR, SqlObjectDefinition, SqlObjectFacts, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { getSqlDialect, renderMigrationObjectBatch, renderMigrationObjectQuery, renderCheckProbe, renderMigrationNamespace, renderMigrationDependencies, renderMysqlObjectMembers, renderMysqlCheckProbe, sqliteColumnClauses, renderMigrationVisibility, sqliteTableConstraints, renderSqliteColumnInventory } from \"@vibeorm/sql\";\nimport type { MigrationObjectBatch } from \"@vibeorm/sql\";\nimport type { SqlExecutor } from \"./types.ts\";\nimport type { DesiredState } from \"./desired-state.ts\";\nimport { canonicalMigrationJson } from \"./desired-state.ts\";\nimport { parseSqliteNamedChecks } from \"./sqlite-types.ts\";\nimport { introspectPhysicalPostgres } from \"./introspect/postgres.ts\";\nimport { introspectMysql } from \"./introspect/mysql.ts\";\nimport { introspectSqlite, introspectSqliteBeforeForeignKeyRestore } from \"./introspect/sqlite.ts\";\nimport { executeStatement } from \"./execute.ts\";\nimport { normalizeSchema, physicalNameKey, schemaNamespaces } from \"./normalize.ts\";\nimport { prepareOperatorClassDiff } from \"./operator-classes.ts\";\nimport { resolvePostgresTypeIdentities } from \"./postgres-type-identity.ts\";\nimport { equivalentPostgresDefaultFunction } from \"./postgres-default-equivalence.ts\";\nimport { schemaObjectIdentities } from \"./object-ownership.ts\";\n\n/** A single difference, not a boolean that hides disabled or changed objects. */\nexport type MigrationStateDifference = { readonly attribute: string; readonly expected: unknown; readonly actual: unknown };\n/** Ownership and live condition are independent dimensions. */\nexport type MigrationObjectState = {\n readonly identity: SqlObjectIdentity;\n readonly ownership: \"schema\" | \"migration\" | \"unknown\";\n readonly state: \"matching\" | \"missing\" | \"changed\" | \"unavailable\";\n readonly differences: readonly MigrationStateDifference[];\n readonly reason?: string;\n};\n/** A report only claims convergence when every requested definition was verified. */\nexport type MigrationStateReport = { readonly inSync: boolean; readonly objects: readonly MigrationObjectState[] };\n/** Catalog read outcome; missing is never substituted for insufficient privileges. */\nexport type InspectedSqlObject =\n | { readonly state: \"present\"; readonly definition: SqlObjectDefinition }\n | { readonly state: \"missing\" }\n | { readonly state: \"unavailable\"; readonly reason: string };\n\nfunction factsOf(params: { row: Record<string, unknown> }): SqlObjectFacts | undefined {\n const facts: Record<string, string | number | boolean | null | readonly string[]> = {};\n for (const [name, value] of Object.entries(params.row)) {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\" || (typeof value === \"number\" && Number.isFinite(value))) facts[name] = value;\n else if (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) facts[name] = value;\n else return undefined;\n }\n return facts;\n}\n\n/** Read an explicitly qualified object using the dialect's catalog renderer. */\nexport async function inspectSqlObject(params: { executor: SqlExecutor; dialect: Dialect; identity: SqlObjectIdentity }): Promise<InspectedSqlObject> {\n return Promise.resolve().then(async (): Promise<InspectedSqlObject> => {\n const namespace = sqlObjectNamespace({ identity: params.identity });\n const query = renderMigrationObjectQuery({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n if (params.dialect === \"mysql\") await assertCatalogVisibility({ executor: params.executor, dialect: params.dialect, namespace });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n if (rows.length === 0) return { state: \"missing\" };\n if (rows.length !== 1) return { state: \"unavailable\", reason: \"ambiguous-catalog-identity\" };\n let facts = factsOf({ row: rows[0]! });\n if (facts === undefined) return { state: \"unavailable\", reason: \"unsupported-catalog-value\" };\n if (params.dialect === \"mysql\" && (params.identity.kind === \"function\" || params.identity.kind === \"view\") && facts.definition === null) return { state: \"unavailable\", reason: \"definition-not-visible\" };\n if (params.dialect === \"sqlite\" && params.identity.kind === \"constraint\") {\n const name = params.identity.name;\n if (params.identity.constraintType === \"check\") {\n const check = parseSqliteNamedChecks({ tableSql: String(facts.definition ?? \"\") }).find((entry) => entry.name === name);\n if (check === undefined) return { state: \"missing\" };\n facts = { type: \"check\", definition: check.expression };\n } else {\n const constraintType = params.identity.constraintType;\n const constraint = sqliteTableConstraints({ sql: String(facts.definition ?? \"\") }).find((entry) => entry.name === name && entry.type === constraintType);\n if (constraint === undefined && constraintType === \"primaryKey\" && name === `${params.identity.table.name}_pkey`) {\n // SQLite has no catalog constraint name for an inline primary key.\n // The inventory's synthetic identity is backed by ordered pragma keys,\n // not an invented textual constraint definition.\n const query = renderSqliteColumnInventory({ dialect: getSqlDialect({ dialect: \"sqlite\" }), namespace: params.identity.table.namespace, table: params.identity.table.name });\n const columns = (await params.executor({ text: query.text, values: [...query.values] })).filter((column) => Number(column.pk) > 0).sort((a, b) => Number(a.pk) - Number(b.pk));\n if (columns.length === 0) return { state: \"missing\" };\n facts = { type: \"primaryKey\", columns: columns.map((column) => String(column.name)) };\n } else {\n if (constraint === undefined) return { state: \"unavailable\", reason: \"constraint-definition-inspection-unavailable\" };\n facts = { type: constraint.type, definition: constraint.sql };\n }\n }\n }\n if (params.dialect === \"sqlite\" && (params.identity.kind === \"column\" || params.identity.kind === \"columnDefault\" || params.identity.kind === \"generatedColumn\")) {\n const column = params.identity.column;\n const clause = sqliteColumnClauses({ sql: String(facts.tableDefinition ?? \"\") }).find((entry) => entry.name === column);\n if (clause === undefined) return { state: \"unavailable\", reason: \"column-definition-inspection-unavailable\" };\n const { tableDefinition: ignored, ...attributes } = facts;\n facts = { ...attributes, columnDefinition: clause.sql };\n }\n if (params.identity.kind === \"columnDefault\") facts = { definition: facts.definition ?? null };\n if (params.dialect === \"postgres\") {\n const query = renderMigrationDependencies({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n return postgresInspection({ identity: params.identity, facts, addresses: rows.map((row) => row.address) });\n }\n if (params.dialect === \"mysql\") {\n const query = renderMysqlObjectMembers({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n if (query !== undefined) {\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n if (params.identity.kind === \"function\" && rows.length === 0) return { state: \"unavailable\", reason: \"function-signature-unavailable\" };\n if (params.identity.kind === \"function\") {\n const signature = rows.filter((row) => row.mode !== null).map((row) => ({ namespace: \"mysql\", name: String(row.type) }));\n if (canonicalMigrationJson({ value: signature }) !== canonicalMigrationJson({ value: params.identity.argumentTypes })) return { state: \"missing\" };\n }\n facts = { ...facts, members: rows.map((row) => canonicalMigrationJson({ value: row })) };\n }\n }\n return { state: \"present\", definition: { identity: params.identity, facts, dependencies: [], format: \"catalog-v2\" } };\n }).catch((error: unknown): InspectedSqlObject => ({ state: \"unavailable\", reason: error instanceof VibeError ? String(error.meta.feature ?? error.code) : \"catalog-query-failed\" }));\n}\n\nfunction postgresInspection(params: { identity: SqlObjectIdentity; facts: SqlObjectFacts; addresses: readonly unknown[] }): InspectedSqlObject {\n if (!params.addresses.every((address): address is string => typeof address === \"string\")) return { state: \"unavailable\", reason: \"dependency-inspection-unavailable\" };\n const facts = { ...(params.identity.kind === \"columnDefault\" ? { definition: params.facts.definition ?? null } : params.facts), dependencyAddresses: [...params.addresses].sort() };\n const dependencies: SqlObjectIdentity[] = [];\n if (params.identity.kind === \"trigger\") {\n if (params.facts.functionArguments !== \"\") return { state: \"unavailable\", reason: \"trigger-function-signature-unavailable\" };\n dependencies.push({ kind: \"function\", name: { namespace: String(params.facts.functionNamespace), name: String(params.facts.functionName) }, argumentTypes: [] });\n }\n return { state: \"present\", definition: { identity: params.identity, facts, dependencies, format: \"catalog-v2\" } };\n}\n\nfunction unavailableReason(params: { error: unknown }): string {\n return params.error instanceof VibeError ? String(params.error.meta.feature ?? params.error.meta.reason ?? params.error.code) : \"catalog-query-failed\";\n}\n\ntype BatchOutcome = { readonly ok: true; readonly rows: ReadonlyMap<number, readonly Record<string, unknown>[]> } | { readonly ok: false; readonly reason: string };\n\nasync function readBatch(params: { executor: SqlExecutor; batch: MigrationObjectBatch }): Promise<BatchOutcome> {\n const positions = new Set(params.batch.positions);\n return Promise.resolve().then(async (): Promise<BatchOutcome> => {\n const rows = new Map<number, Record<string, unknown>[]>();\n for (const row of await params.executor({ text: params.batch.text, values: [...params.batch.values] })) {\n if (typeof row.position !== \"number\" || !Number.isInteger(row.position) || !positions.has(row.position)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Invalid batched catalog identity\", meta: { reason: \"catalog-query-failed\" } });\n const matches = rows.get(row.position) ?? [];\n matches.push(row);\n rows.set(row.position, matches);\n }\n return { ok: true, rows };\n }).then((outcome) => outcome, (error: unknown): BatchOutcome => ({ ok: false, reason: unavailableReason({ error }) }));\n}\n\nfunction batchedInspection(params: { identity: SqlObjectIdentity; matches: readonly Record<string, unknown>[] }): InspectedSqlObject {\n if (params.matches.length === 0) return { state: \"missing\" };\n if (params.matches.length !== 1) return { state: \"unavailable\", reason: \"ambiguous-catalog-identity\" };\n const row = params.matches[0]!;\n const facts = row.facts !== null && typeof row.facts === \"object\" && !Array.isArray(row.facts) ? factsOf({ row: row.facts as Record<string, unknown> }) : undefined;\n if (facts === undefined || !Array.isArray(row.dependencyAddresses)) return { state: \"unavailable\", reason: \"unsupported-catalog-value\" };\n return postgresInspection({ identity: params.identity, facts, addresses: row.dependencyAddresses });\n}\n\n/** Inspect an independent reference in bounded round trips, preserving missing/unavailable outcomes. */\nexport async function inspectSqlObjects(params: { executor: SqlExecutor; dialect: Dialect; identities: readonly SqlObjectIdentity[] }): Promise<readonly InspectedSqlObject[]> {\n if (params.dialect !== \"postgres\") {\n const results: InspectedSqlObject[] = [];\n for (const identity of params.identities) results.push(await inspectSqlObject({ ...params, identity }));\n return results;\n }\n return Promise.resolve().then(async (): Promise<readonly InspectedSqlObject[]> => {\n const results: InspectedSqlObject[] = params.identities.map((): InspectedSqlObject => ({ state: \"unavailable\", reason: \"catalog-query-failed\" }));\n for (const batch of renderMigrationObjectBatch({ dialect: getSqlDialect({ dialect: params.dialect }), identities: params.identities })) {\n // A failing batch marks only the positions it answers for; other kinds keep their own verdicts.\n const outcome = await readBatch({ executor: params.executor, batch });\n for (const position of batch.positions) {\n results[position] = outcome.ok ? batchedInspection({ identity: params.identities[position]!, matches: outcome.rows.get(position) ?? [] }) : { state: \"unavailable\", reason: outcome.reason };\n }\n }\n return results;\n }).then((result) => result, (error: unknown) => params.identities.map((): InspectedSqlObject => ({ state: \"unavailable\", reason: unavailableReason({ error }) })));\n}\n\n/** Require provable catalog visibility; role-only/partial grants report unavailable rather than missing. */\nexport async function assertCatalogVisibility(params: { executor: SqlExecutor; dialect: Dialect; namespace: string }): Promise<void> {\n if (params.dialect !== \"mysql\") return;\n const query = renderMigrationVisibility({ dialect: getSqlDialect({ dialect: params.dialect }), namespace: params.namespace });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n const grants = new Set(rows.map((row) => row.privilege));\n const missing = [\"SELECT\", \"TRIGGER\", \"SHOW VIEW\", \"EXECUTE\"].filter((privilege) => !grants.has(privilege));\n if (missing.length > 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"MySQL catalog visibility requires direct database-wide grants; role-only or partial grants cannot prove object absence\", meta: { reason: \"inventory-unavailable\", missing } });\n}\n\n/**\n * Facts a catalog-v1 capture never recorded. A v1 expectation cannot assert\n * them, so only there are they skipped; a catalog-v2 expectation compares every\n * fact. Adding a fact means a new format version, never a new row here.\n */\nconst CATALOG_V1_OMITTED_FACTS: Readonly<Record<string, readonly string[]>> = Object.freeze({\n function: [\"definerOwner\"],\n column: [\"collationNamespace\", \"collationName\"],\n generatedColumn: [\"collationNamespace\", \"collationName\"],\n});\n\nfunction compare(params: { expected: SqlObjectDefinition; live: SqlObjectDefinition }): MigrationStateDifference[] {\n const differences: MigrationStateDifference[] = [];\n const omitted = params.expected.format === \"catalog-v1\" ? CATALOG_V1_OMITTED_FACTS[params.expected.identity.kind] ?? [] : [];\n for (const key of new Set([...Object.keys(params.expected.facts), ...Object.keys(params.live.facts)])) {\n if (omitted.includes(key) && !Object.hasOwn(params.expected.facts, key)) continue;\n const expected = params.expected.facts[key];\n const actual = params.live.facts[key];\n if ((expected === undefined) !== (actual === undefined) || canonicalMigrationJson({ value: expected }) !== canonicalMigrationJson({ value: actual })) differences.push({ attribute: key, expected, actual });\n }\n const expected = params.expected.dependencies.map((identity) => sqlObjectKey({ identity })).sort();\n const actual = params.live.dependencies.map((identity) => sqlObjectKey({ identity })).sort();\n if (JSON.stringify(expected) !== JSON.stringify(actual)) differences.push({ attribute: \"dependencies\", expected, actual });\n return differences;\n}\n\n/** Probe modes make database writes and required privileges explicit. */\nexport function assertProbeMode(params: { dialect: Dialect; probe?: \"none\" | \"rollback\" | \"temporary\" }): void {\n if (params.probe !== undefined && params.probe !== \"none\" && DIALECT_CAPABILITIES[params.dialect].checkNormalization !== params.probe) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `${params.probe} CHECK probes are unavailable on ${params.dialect}`, meta: { feature: \"checkProbe\", dialect: params.dialect } });\n}\n\n/** Read-only by default. The report never treats an absent expectation as a match. */\nexport async function verifyMigrationState(params: { executor: SqlExecutor; expected: DesiredState; dialect: Dialect; namespaces?: readonly string[]; external?: ExternalObjectResolution; probe?: \"none\" | \"rollback\" | \"temporary\"; /** Independent replay verification may batch its catalog reads. */ batch?: true }): Promise<MigrationStateReport> {\n return verifyState(params);\n}\n\nasync function verifyState(params: Parameters<typeof verifyMigrationState>[0] & { sqliteRestorePending?: true }): Promise<MigrationStateReport> {\n if (params.external !== undefined) params = { ...params, expected: projectExternalState({ state: params.expected, external: params.external }) };\n assertProbeMode({ dialect: params.dialect, probe: params.probe });\n const declarations = params.expected.schema.migrationObjects ?? [];\n const owned = new Set(declarations.map((object) => sqlObjectKey({ identity: object.identity })));\n const definitions = new Map(params.expected.definitions.map((definition) => [sqlObjectKey({ identity: definition.identity }), definition]));\n const identities = new Map(params.expected.definitions.map((definition) => [sqlObjectKey({ identity: definition.identity }), definition.identity]));\n for (const object of declarations) identities.set(sqlObjectKey({ identity: object.identity }), object.identity);\n const objects: MigrationObjectState[] = [];\n const inspections = params.batch === true ? await inspectSqlObjects({ ...params, identities: [...identities.values()] }) : undefined;\n let position = 0;\n for (const [key, identity] of identities) {\n const ownership = owned.has(key) ? \"migration\" : \"schema\";\n const expected = definitions.get(key);\n const live = inspections === undefined ? await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity }) : inspections[position]!;\n position++;\n if (live.state !== \"present\") {\n objects.push({ identity, ownership, state: live.state, differences: [], ...(live.state === \"unavailable\" ? { reason: live.reason } : {}) });\n } else if (expected === undefined && identity.kind === \"namespace\") {\n objects.push({ identity, ownership, state: \"matching\", differences: [] });\n } else if (expected === undefined) {\n objects.push({ identity, ownership, state: \"unavailable\", reason: \"independent-definition-required\", differences: [] });\n } else if (params.dialect === \"postgres\" && identity.kind === \"table\" && (expected.facts.persistence === undefined || expected.facts.options === undefined)) {\n objects.push({ identity, ownership, state: \"unavailable\", reason: \"table-physical-reference-required\", differences: compare({ expected, live: live.definition }) });\n } else {\n const differences = compare({ expected, live: live.definition });\n objects.push({ identity, ownership, state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n if (params.dialect === \"postgres\" && schemaNamespaces({ schema: params.expected.schema }).length > 0 || params.expected.schema.models.length > 0 || params.expected.schema.enums.length > 0) objects.push(...await verifySchemaObjects(params));\n if (params.dialect === \"postgres\") objects.push(...await verifyExclusions(params));\n return { inSync: objects.every((object) => object.state === \"matching\"), objects };\n}\n\nasync function verifySchemaObjects(params: Parameters<typeof verifyMigrationState>[0] & { sqliteRestorePending?: true }): Promise<MigrationObjectState[]> {\n const physical = params.dialect === \"postgres\" ? await introspectPhysicalPostgres({ executor: params.executor, namespaces: [\"public\", ...(params.namespaces ?? []), ...schemaNamespaces({ schema: params.expected.schema })] })\n : params.dialect === \"mysql\" ? await introspectMysql({ executor: params.executor })\n : params.sqliteRestorePending === true ? await introspectSqliteBeforeForeignKeyRestore({ executor: params.executor }) : await introspectSqlite({ executor: params.executor });\n const resolved = params.dialect === \"postgres\" ? await resolvePostgresTypeIdentities({ executor: params.executor, schema: params.expected.schema, mode: \"verify\" }) : { schema: params.expected.schema, unavailable: [] };\n const expected = normalizeSchema({ schema: resolved.schema, dialect: params.dialect });\n const physicalComparison = params.external === undefined ? physical : projectExternalSchema({ schema: physical, external: params.external });\n const comparable = params.dialect === \"postgres\" ? await prepareOperatorClassDiff({ executor: params.executor, from: physicalComparison, to: resolved.schema }) : physicalComparison;\n const actual = normalizeSchema({ schema: comparable, dialect: params.dialect });\n const objects: MigrationObjectState[] = resolved.unavailable.map((identity) => ({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"type-reference-required\", differences: [] }));\n const namespace = await migrationNamespace({ executor: params.executor, dialect: params.dialect });\n const sqliteTableOptions = params.dialect === \"sqlite\" && expected.tables.size > 0\n ? await params.executor({ text: \"PRAGMA main.table_list;\", values: [] }) : undefined;\n if (params.dialect === \"postgres\") for (const name of schemaNamespaces({ schema: params.expected.schema })) {\n const identity: SqlObjectIdentity = { kind: \"namespace\", name };\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n objects.push({ identity, ownership: \"schema\", state: inspection.state === \"present\" ? \"matching\" : inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n }\n if (params.dialect === \"postgres\") for (const desired of expected.enums.values()) {\n const identity: SqlObjectIdentity = { kind: \"enum\", name: qualifiedSqlName({ name: desired.dbName ?? desired.name, namespace: desired.namespace, defaultNamespace: namespace }) };\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: live.state, differences: [], ...(live.state === \"unavailable\" ? { reason: live.reason } : {}) });\n continue;\n }\n const values = live.definition.facts.values;\n if (!Array.isArray(values) || !values.every((value) => typeof value === \"string\")) {\n objects.push({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"enum-values-unavailable\", differences: [] });\n continue;\n }\n const matching = canonicalMigrationJson({ value: desired.values }) === canonicalMigrationJson({ value: values });\n objects.push({ identity, ownership: \"schema\", state: matching ? \"matching\" : \"changed\", differences: matching ? [] : [{ attribute: \"values\", expected: desired.values, actual: values }] });\n }\n for (const [key, desired] of expected.tables) {\n const name = desired.table;\n const table = qualifiedSqlName({ name, namespace: desired.namespace, defaultNamespace: namespace });\n const live = actual.tables.get(key);\n if (live === undefined) {\n const presence = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity: { kind: \"table\", name: table } });\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: presence.state === \"missing\" ? \"missing\" : \"unavailable\", ...(presence.state === \"missing\" ? {} : { reason: \"schema-definition-not-visible\" }), differences: [] });\n continue;\n }\n if (sqliteTableOptions !== undefined) {\n const options = sqliteTableOptions.find((row) => row.schema === namespace && row.name === name);\n if (options?.strict !== 0 || options.wr !== 0) {\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: \"unavailable\", reason: \"sqlite-table-options-unrepresented\", differences: [{ attribute: \"tableOptions\", expected: { strict: 0, wr: 0 }, actual: options === undefined ? undefined : { strict: options.strict, wr: options.wr } }] });\n continue;\n }\n }\n const differences: MigrationStateDifference[] = [];\n const pin = (attribute: string, expected: unknown, actual: unknown): void => {\n if (canonicalMigrationJson({ value: expected }) !== canonicalMigrationJson({ value: actual })) differences.push({ attribute, expected, actual });\n };\n pin(\"primaryKey\", desired.pk, live.pk);\n for (const [column, field] of desired.columns) {\n const stored = live.columns.get(column);\n pin(`columns.${column}.type`, field.typeKey, stored?.typeKey);\n pin(`columns.${column}.nullable`, field.nullable, stored?.nullable);\n if (params.dialect === \"mysql\" && field.field.collation !== undefined) {\n pin(`columns.${column}.collation`, field.field.collation.toLowerCase(), stored?.field.collation?.toLowerCase());\n }\n const ownedDefault = params.expected.schema.migrationObjects?.some((object) => (object.identity.kind === \"columnDefault\" || object.identity.kind === \"generatedColumn\") && object.identity.table.namespace === table.namespace && object.identity.table.name === name && object.identity.column === column);\n if (!ownedDefault) {\n const desiredDefault = field.field.default;\n const actualDefault = stored?.field.default;\n const equivalent = params.dialect === \"postgres\" && field.defaultKey !== stored?.defaultKey &&\n desiredDefault?.kind === \"dbgenerated\" && actualDefault?.kind === \"dbgenerated\" &&\n await equivalentPostgresDefaultFunction({ executor: params.executor, table, column, expected: desiredDefault.sql, actual: actualDefault.sql });\n if (!equivalent) pin(`columns.${column}.default`, field.defaultKey, stored?.defaultKey);\n }\n }\n for (const [key, fk] of desired.fks) {\n const stored = live.fks.get(key);\n pin(`foreignKeys.${fk.constraintName}`, { columns: fk.columns, refTable: fk.refTable, refNamespace: fk.refNamespace ?? namespace, refColumns: fk.refColumns, onDelete: fk.onDelete, onUpdate: fk.onUpdate }, stored === undefined ? undefined : { columns: stored.columns, refTable: stored.refTable, refNamespace: stored.refNamespace ?? namespace, refColumns: stored.refColumns, onDelete: stored.onDelete, onUpdate: stored.onUpdate });\n if (params.dialect === \"postgres\" && stored !== undefined) {\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"foreignKey\", table, name: stored.constraintName };\n // A reviewed catalog definition can deliberately describe a staged NOT VALID FK.\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n } else {\n const differences = [\"validated\", \"triggersEnabled\"].flatMap((attribute) => inspection.definition.facts[attribute] === true ? [] : [{ attribute, expected: true, actual: inspection.definition.facts[attribute] }]);\n objects.push({ identity, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n }\n for (const [key, index] of desired.indexes) {\n pin(`indexes.${index.name}`, key, live.indexes.get(key)?.key);\n if (params.dialect !== \"postgres\" || !live.indexes.has(key)) continue;\n const identity: SqlObjectIdentity = { kind: \"index\", table, name: live.indexes.get(key)!.name };\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n } else {\n const differences = [\"valid\", \"ready\"].flatMap((attribute) => inspection.definition.facts[attribute] === true ? [] : [{ attribute, expected: true, actual: inspection.definition.facts[attribute] }]);\n objects.push({ identity, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n for (const [check, expression] of desired.checks) {\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"check\", table, name: check };\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const stored = live.checks.get(check);\n if (stored === undefined) { objects.push({ identity, ownership: \"schema\", state: \"missing\", differences: [] }); continue; }\n if (params.dialect !== \"sqlite\") {\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") { objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [] }); continue; }\n const disabled = params.dialect === \"postgres\" ? inspection.definition.facts.validated !== true : inspection.definition.facts.enforced !== \"YES\";\n if (disabled) { objects.push({ identity, ownership: \"schema\", state: \"changed\", differences: [{ attribute: params.dialect === \"postgres\" ? \"validated\" : \"enforced\", expected: params.dialect === \"postgres\" ? true : \"YES\", actual: params.dialect === \"postgres\" ? inspection.definition.facts.validated : inspection.definition.facts.enforced }] }); continue; }\n }\n if (stored === expression) { objects.push({ identity, ownership: \"schema\", state: \"matching\", differences: [] }); continue; }\n if (params.dialect === \"postgres\" && params.probe === \"rollback\") {\n const normalized = await deparsePostgresCheck({ executor: params.executor, table, expression, probe: \"rollback\" });\n const read = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const actual = read.state === \"present\" ? read.definition.facts.definition : undefined;\n objects.push({ identity, ownership: \"schema\", state: normalized === actual ? \"matching\" : \"changed\", differences: normalized === actual ? [] : [{ attribute: \"definition\", expected: normalized, actual }] });\n } else if (params.dialect === \"mysql\" && params.probe === \"temporary\") {\n const normalized = await deparseMysqlCheck({ executor: params.executor, table, expression, probe: \"temporary\" });\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const actual = inspection.state === \"present\" ? inspection.definition.facts.definition : undefined;\n const match = normalized === actual;\n objects.push({ identity, ownership: \"schema\", state: inspection.state === \"unavailable\" ? \"unavailable\" : match ? \"matching\" : \"changed\", differences: match ? [] : [{ attribute: \"definition\", expected: normalized, actual }] });\n } else objects.push({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"explicit-replacement-required\", differences: [{ attribute: \"definition\", expected: expression, actual: stored }] });\n }\n }\n for (const [name, join] of expected.joinTables) {\n const stored = actual.joinTables.get(name);\n const shape = (value: typeof join | undefined): unknown => value === undefined ? undefined : { a: { table: value.a.table, namespace: value.a.namespace ?? namespace, column: value.a.column }, b: { table: value.b.table, namespace: value.b.namespace ?? namespace, column: value.b.column } };\n const matching = canonicalMigrationJson({ value: shape(join) }) === canonicalMigrationJson({ value: shape(stored) });\n objects.push({ identity: { kind: \"table\", name: qualifiedSqlName({ name: join.table, namespace: join.namespace, defaultNamespace: namespace }) }, ownership: \"schema\", state: stored === undefined ? \"missing\" : matching ? \"matching\" : \"changed\", differences: matching ? [] : [{ attribute: \"joinTable\", expected: shape(join), actual: shape(stored) }] });\n }\n for (const [key, view] of expected.views) {\n const name = qualifiedSqlName({ name: view.dbName ?? view.name, namespace: view.namespace, defaultNamespace: namespace });\n if (!params.expected.definitions.some((definition) => definition.identity.kind === \"view\" && definition.identity.name.namespace === name.namespace && definition.identity.name.name === name.name)) objects.push({ identity: { kind: \"view\", name }, ownership: \"schema\", state: actual.views.has(key) ? \"unavailable\" : \"missing\", reason: \"independent-definition-required\", differences: [] });\n }\n return objects;\n}\n\n/** A transition verifies intended removals as well as definitions that should remain. */\nexport async function verifyMigrationTransition(params: { executor: SqlExecutor; dialect: Dialect; from: DesiredState; to: DesiredState; namespaces?: readonly string[]; external?: ExternalObjectResolution; removals?: readonly SqlObjectIdentity[]; probe?: \"none\" | \"rollback\" | \"temporary\" }): Promise<MigrationStateReport> {\n return verifyTransition(params);\n}\n\n/** @internal Only for a validated rebuild script immediately before COMMIT/FK restoration. */\nexport async function verifySqliteTransitionBeforeRestore(params: Parameters<typeof verifyMigrationTransition>[0]): Promise<MigrationStateReport> {\n if (params.dialect !== \"sqlite\") throw new VibeError({ code: \"VIBE_INTERNAL\", message: \"SQLite rebuild verification requires the SQLite dialect\" });\n await executeStatement({ executor: params.executor, dialect: \"sqlite\", statement: \"PRAGMA foreign_key_check;\" });\n return verifyTransition({ ...params, sqliteRestorePending: true });\n}\n\nasync function verifyTransition(params: Parameters<typeof verifyMigrationTransition>[0] & { sqliteRestorePending?: true }): Promise<MigrationStateReport> {\n const external = params.external;\n if (external !== undefined) {\n for (const identity of params.removals ?? []) {\n const owner = externalObjectOwner({ identity, external });\n if (owner !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Transition removals cannot target externally owned objects\", meta: { reason: \"external-owned-removal\", owner, identity } });\n }\n params = { ...params, from: projectExternalState({ state: params.from, external }), to: projectExternalState({ state: params.to, external }) };\n }\n const report = await verifyState({ executor: params.executor, dialect: params.dialect, expected: params.to, ...(params.namespaces === undefined ? {} : { namespaces: params.namespaces }), ...(external === undefined ? {} : { external }), ...(params.sqliteRestorePending === true ? { sqliteRestorePending: true } : {}), ...(params.probe === undefined ? {} : { probe: params.probe }) });\n const namespace = await migrationNamespace(params);\n const identities = (state: DesiredState): SqlObjectIdentity[] => [...schemaObjectIdentities({ schema: state.schema, dialect: params.dialect, namespace }), ...(state.schema.migrationObjects ?? []).map((object) => object.identity), ...state.definitions.map((definition) => definition.identity)];\n const retained = new Set(identities(params.to).map((identity) => sqlObjectKey({ identity })));\n const removed = new Map([...identities(params.from).filter((identity) => identity.kind !== \"namespace\" && !retained.has(sqlObjectKey({ identity }))), ...(params.removals ?? [])].map((identity) => [sqlObjectKey({ identity }), identity]));\n const objects = [...report.objects];\n for (const identity of removed.values()) {\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const absent = live.state === \"missing\" || (identity.kind === \"columnDefault\" && live.state === \"present\" && live.definition.facts.definition === null);\n if (!absent) objects.push({ identity, ownership: \"schema\", state: live.state === \"unavailable\" ? \"unavailable\" : \"changed\", reason: live.state === \"unavailable\" ? live.reason : \"expected-absent\", differences: [{ attribute: \"presence\", expected: false, actual: live.state === \"present\" ? true : undefined }] });\n }\n return { inSync: report.inSync && objects.every((object) => object.state === \"matching\"), objects };\n}\n\n/** Resolve the physical namespace once; never invent a MySQL database name. */\nexport async function migrationNamespace(params: { executor: SqlExecutor; dialect: Dialect }): Promise<string> {\n if (params.dialect !== \"mysql\") return params.dialect === \"sqlite\" ? \"main\" : \"public\";\n const query = renderMigrationNamespace({ dialect: getSqlDialect({ dialect: params.dialect }) });\n const rows = await params.executor({ text: query.text, values: [] });\n const namespace = rows[0]?.namespace;\n if (typeof namespace !== \"string\" || namespace.length === 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot determine the migration namespace\", meta: { reason: \"inspection-unavailable\" } });\n return namespace;\n}\n\n/** Refuse mutation/adoption when verification is incomplete. */\nexport function assertMigrationState(params: { report: MigrationStateReport }): void {\n if (!params.report.inSync) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Migration state could not be verified\", meta: { reason: \"migration-state-unverified\", shadowReusable: true, objects: params.report.objects.filter((object) => object.state !== \"matching\") } });\n}\n\n/** Normalize a trusted authored CHECK in the real type context without retaining DDL. Caller owns transaction. */\nexport async function deparsePostgresCheck(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; probe: \"rollback\" }): Promise<string> {\n const definition = await deparsePostgresCheckDefinition({ ...params, constraint: \"vibeorm_check_probe\" });\n return String(definition.facts.definition);\n}\n\n/** Compile a trusted CHECK declaration into normalized metadata using only the authored expression. */\nexport async function deparsePostgresCheckDefinition(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; constraint: string; probe: \"rollback\" }): Promise<SqlObjectDefinition> {\n const name = \"vibeorm_check_probe\";\n await params.executor({ text: \"SAVEPOINT vibeorm_check_probe\" });\n try {\n const query = renderCheckProbe({ dialect: getSqlDialect({ dialect: \"postgres\" }), table: params.table, expression: params.expression, name });\n await params.executor({ text: query.text });\n const result = await inspectSqlObject({ executor: params.executor, dialect: \"postgres\", identity: { kind: \"constraint\", constraintType: \"check\", table: params.table, name } });\n if (result.state !== \"present\" || typeof result.definition.facts.definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"CHECK normalization probe unavailable\", meta: { reason: \"check-inspection-unavailable\" } });\n return { ...result.definition, identity: { kind: \"constraint\", constraintType: \"check\", table: params.table, name: params.constraint }, facts: { ...result.definition.facts, definition: result.definition.facts.definition.replace(/ NOT VALID$/, \"\"), validated: true } };\n } finally {\n await params.executor({ text: \"ROLLBACK TO SAVEPOINT vibeorm_check_probe\" });\n await params.executor({ text: \"RELEASE SAVEPOINT vibeorm_check_probe\" });\n }\n}\n\n/** Normalize on a private MySQL temporary clone; cleanup is mandatory even after a failed expression. */\nexport async function deparseMysqlCheck(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; probe: \"temporary\" }): Promise<string> {\n const probe = `vibe_check_${randomUUID().replaceAll(\"-\", \"\")}`;\n const dialect = getSqlDialect({ dialect: \"mysql\" });\n const clone = renderMysqlCheckProbe({ dialect, probe, operation: \"clone\", table: params.table });\n await params.executor({ text: clone.text });\n let created = true;\n try {\n const read = renderMysqlCheckProbe({ dialect, probe, operation: \"read\" });\n const source = await params.executor({ text: read.text, values: [] });\n const definition = source[0]?.[\"Create Table\"];\n if (typeof definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot read temporary clone definition\" });\n const drop = renderMysqlCheckProbe({ dialect, probe, operation: \"drop\" });\n await params.executor({ text: drop.text });\n created = false;\n // CREATE/DROP TEMPORARY TABLE preserve the caller's transaction; ALTER TABLE does not.\n const add = renderMysqlCheckProbe({ dialect, probe, operation: \"add\", expression: params.expression, definition });\n await params.executor({ text: add.text });\n created = true;\n const rows = await params.executor({ text: read.text, values: [] });\n const normalizedDefinition = rows[0]?.[\"Create Table\"];\n const check = typeof normalizedDefinition === \"string\" ? parseSqliteNamedChecks({ tableSql: normalizedDefinition }).find((entry) => entry.name === probe) : undefined;\n if (check === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"MySQL temporary CHECK deparse unavailable\", meta: { reason: \"check-inspection-unavailable\" } });\n return check.expression;\n } finally {\n if (created) {\n const drop = renderMysqlCheckProbe({ dialect, probe, operation: \"drop\" });\n await params.executor({ text: drop.text });\n }\n }\n}\n\n/** Resolve raw CHECK comparisons; unequal unnormalized text never silently produces an empty diff. */\nexport async function prepareCheckDiff(params: { executor: SqlExecutor; from: SchemaIR; to: SchemaIR; dialect: Dialect; probe?: \"none\" | \"rollback\" | \"temporary\"; previous?: DesiredState; replaceChecks?: readonly SqlObjectIdentity[] }): Promise<SchemaIR> {\n assertProbeMode({ dialect: params.dialect, probe: params.probe });\n const models = [];\n for (const model of params.from.models) {\n const table = model.dbName ?? model.name;\n const target = params.to.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect: params.dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect: params.dialect }));\n const checks = [];\n for (const check of model.checks ?? []) {\n const next = target?.checks?.find((entry) => entry.name === check.name);\n if (next === undefined || next.expression === check.expression) { checks.push({ name: check.name, expression: check.expression }); continue; }\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"check\", table: qualifiedSqlName({ name: table, namespace: model.namespace, defaultNamespace: await migrationNamespace({ executor: params.executor, dialect: params.dialect }) }), name: check.name };\n if (params.dialect === \"postgres\" && params.probe === \"rollback\") {\n const desired = await deparsePostgresCheck({ executor: params.executor, table: identity.table, expression: next.expression, probe: \"rollback\" });\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Live CHECK inspection unavailable\", meta: { reason: \"check-inspection-unavailable\", identity } });\n if (live.definition.facts.definition === desired) { checks.push(next); continue; }\n checks.push({ name: check.name, expression: check.expression });\n continue;\n }\n if (params.dialect === \"mysql\" && params.probe === \"temporary\") {\n const desired = await deparseMysqlCheck({ executor: params.executor, table: identity.table, expression: next.expression, probe: \"temporary\" });\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Live CHECK inspection unavailable\", meta: { reason: \"check-inspection-unavailable\", identity } });\n checks.push(desired === live.definition.facts.definition ? next : { name: check.name, expression: check.expression });\n continue;\n }\n const previous = params.previous?.schema.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect: params.dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect: params.dialect }))?.checks?.find((entry) => entry.name === check.name);\n if (previous !== undefined) {\n // The planner verified this independent baseline before comparing authored text.\n checks.push(previous.expression === next.expression ? next : { name: check.name, expression: check.expression });\n continue;\n }\n if (params.replaceChecks?.some((entry) => sqlObjectKey({ identity: entry }) === sqlObjectKey({ identity }))) { checks.push({ name: check.name, expression: check.expression }); continue; }\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Cannot establish CHECK equivalence for ${table}.${check.name}; request a rollback probe or an explicit replacement`, meta: { reason: \"explicit-replacement-required\", identity } });\n }\n models.push({ ...model, checks });\n }\n return { ...params.from, models };\n}\n",
|
|
19
|
-
"/**\n * Postgres / PGlite introspection: live database → SchemaIR.\n *\n * Representation contract (the differ's round-trip depends on it, LEARNINGS):\n *\n * - Type mapping is the REVERSE of dialect-matrix §2; `nativeType` is set only\n * when the column's type is NOT the canonical mapping for its scalar.\n * - Identity columns and `nextval(...)` defaults → `@default(autoincrement())`.\n * - Enum ARRAY columns (`data_type = 'ARRAY'`, `udt_name = '_EnumName'`) are\n * enum lists — never `String[]`.\n * - Unknown column types (tsvector, geometry, …) become `isUnsupported` fields\n * with the raw type in `nativeType` — kept, not dropped.\n * - FK/join-table representation comes from introspect/shared.ts — the ONE\n * structural rule every dialect introspector uses.\n * - Views (`isView: true`) are returned with their columns only.\n * - The `_vibe_migrations` bookkeeping table is skipped.\n * - Namespace scope is explicit; omission retains the legacy public catalog.\n */\n\nimport { renderExclusionCatalog } from \"@vibeorm/sql\";\nimport { parsePgArrayLiteral } from \"@vibeorm/sql\";\nimport { scalarListDefault } from \"@vibeorm/schema\";\nimport { exactIntegerLiteral } from \"@vibeorm/schema\";\nimport { postgresDialect, renderRlsReadinessQuery, renderPostgresPhysicalCatalog, renderPostgresIndexKeys, renderMigrationObjectQuery } from \"@vibeorm/sql\";\n\nimport { VibeError, assertSqlNamespace, isReservedClientName } from \"@vibeorm/schema\";\nimport type {\n CheckIR,\n DefaultValueIR,\n EnumIR,\n FieldIR,\n FieldType,\n IndexIR,\n ModelIR,\n ScalarType,\n SchemaIR,\n} from \"@vibeorm/schema\";\nimport { CANONICAL_UDT, NON_CANONICAL_UDT, PG_CHAR_TO_CASCADE_ACTION, isNumericScalar, normalizeNativeType } from \"../postgres-types.ts\";\nimport {\n addFkRelations,\n addJoinTableRelations,\n detectJoinTable,\n} from \"./shared.ts\";\nimport type { FkGroup, IntrospectedIndex, JoinTableInfo } from \"./shared.ts\";\nimport type { SqlExecutor } from \"../types.ts\";\nimport { physicalNameKey } from \"../normalize.ts\";\nimport type { PostgresPhysicalCatalogQuery } from \"@vibeorm/sql\";\nimport { resolvePostgresTypeIdentities } from \"../postgres-type-identity.ts\";\nimport { projectPostgresRls, verifyPostgresRls } from \"./postgres-rls.ts\";\n\n// ─── Row shapes ───────────────────────────────────────────────────\n\ntype ColumnRow = {\n table: string;\n name: string;\n dataType: string;\n udtName: string;\n udtNamespace: string;\n nullable: boolean;\n identity: boolean;\n columnDefault: string | null;\n datetimePrecision: number | null;\n charMaxLength: number | null;\n numericPrecision: number | null;\n numericScale: number | null;\n /** `format_type(...)` — carries type modifiers of non-catalog types (vector(3)). */\n fullType: string | null;\n};\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/** Introspect a live postgres/pglite database in explicitly selected namespaces. */\nexport async function introspectPostgres(params: {\n executor: SqlExecutor;\n namespaces?: readonly string[];\n /** Trusted policy declaration; missing this refuses lossy RLS introspection/export. */\n rlsSchema?: SchemaIR;\n /** The caller owns BEGIN/COMMIT, keeping probe locks through subsequent migration DDL. */\n inTransaction?: boolean;\n requireInstalledRls?: boolean;\n}): Promise<SchemaIR> {\n const { executor } = params;\n if (params.inTransaction !== true) await executor({ text: \"BEGIN\" });\n try {\n const savedPath = await executor(renderRlsReadinessQuery({ dialect: postgresDialect, query: \"readSearchPath\" }));\n const searchPath = savedPath[0]?.searchPath;\n if (typeof searchPath !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot read the migration search_path\" });\n const matched = await verifyPostgresRls({ executor, ...(params.rlsSchema === undefined ? {} : { schema: params.rlsSchema }), ...(params.requireInstalledRls === undefined ? {} : { requireInstalled: params.requireInstalledRls }) }).then(\n (verified) => verified,\n (error: unknown) => {\n if (error instanceof VibeError) throw error;\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Native RLS verification could not complete. Check migration privileges and supply the deployed schema as previousSchema/rlsSchema before changing referenced columns.\", meta: { reason: \"rls-verification-unavailable\" }, cause: error });\n },\n );\n // Only policy verification uses the empty path. Physical definitions must\n // deparse in the caller's context, just like direct catalog verification;\n // otherwise native-enum predicates gain qualifiers only in replayed IR.\n await executor(renderRlsReadinessQuery({ dialect: postgresDialect, query: \"setSearchPath\", searchPath }));\n const physical = await introspectPhysicalPostgres({ executor, namespaces: params.namespaces ?? [\"public\", ...params.rlsSchema?.models.flatMap((model) => model.namespace === undefined ? [] : [model.namespace]) ?? []] });\n return projectPostgresRls({ physical, ...(params.rlsSchema === undefined ? {} : { declared: params.rlsSchema }), matched });\n } finally {\n // Introspection/probes never commit database changes; an outer migration retains its locks.\n if (params.inTransaction !== true) await executor({ text: \"ROLLBACK\" });\n }\n}\n\n/** Read the physical catalog only; no policy probes, locks or transaction statements. */\nexport async function introspectPhysicalPostgres(params: { executor: SqlExecutor; namespaces?: readonly string[] }): Promise<SchemaIR> {\n const { executor } = params;\n const namespaces = [...new Set(params.namespaces ?? [\"public\"])];\n const physicalNames = new Map<string, { namespace: string; name: string }>();\n const enumIdentities = new Map<string, { namespace: string; name: string }>();\n const namespaceObjects = [];\n const read = async (query: PostgresPhysicalCatalogQuery): Promise<Record<string, unknown>[]> => {\n const groups = await Promise.all(namespaces.map(async (namespace) => {\n assertSqlNamespace({ namespace, dialect: \"postgres\" });\n const sql = renderPostgresPhysicalCatalog({ dialect: postgresDialect, namespace, query });\n const rows = await executor({ text: sql.text, values: [...sql.values] });\n return rows.map((row) => {\n const name = typeof row.table_name === \"string\" ? row.table_name : undefined;\n const table = name === undefined ? undefined : physicalNameKey({ namespace, name });\n if (table !== undefined && name !== undefined) physicalNames.set(table, { namespace, name });\n const typeName = typeof row.type_name === \"string\" ? row.type_name : undefined;\n const enumKey = typeName === undefined ? undefined : physicalNameKey({ namespace, name: typeName });\n if (enumKey !== undefined && typeName !== undefined) enumIdentities.set(enumKey, { namespace, name: typeName });\n return { ...row, ...(table === undefined ? {} : { table_name: table }), ...(enumKey === undefined ? {} : { type_name: enumKey }), ...(typeof row.foreign_table_name === \"string\" ? { foreign_table_name: physicalNameKey({ namespace: typeof row.foreign_namespace === \"string\" ? row.foreign_namespace : namespace, name: row.foreign_table_name }) } : {}) };\n });\n }));\n return groups.flat();\n };\n for (const namespace of namespaces) {\n if (namespace === \"public\") continue;\n const query = renderMigrationObjectQuery({ dialect: postgresDialect, identity: { kind: \"namespace\", name: namespace } });\n if ((await executor({ text: query.text, values: [...query.values] })).length > 0) namespaceObjects.push({ id: `namespace:${namespace}`, dialect: \"postgres\" as const, identity: { kind: \"namespace\" as const, name: namespace }, create: [], drop: [], dependsOn: [] });\n }\n const [tableRows, viewRows, columnRows, constraintRows, fkRows, enumRows, indexRows, checkRows, exclusionRows] = await Promise.all([\n read(\"tables\"), read(\"views\"), read(\"columns\"), read(\"constraints\"), read(\"foreignKeys\"), read(\"enums\"), read(\"indexes\"), read(\"checks\"),\n Promise.all(namespaces.map(async (namespace) => (await executor({ text: renderExclusionCatalog({ dialect: postgresDialect, namespace }) })).map((row): Record<string, unknown> => ({ ...row, table_name: physicalNameKey({ namespace, name: String(row.table_name) }) })))).then((rows) => rows.flat()),\n ]);\n const keysQuery = renderPostgresIndexKeys({ dialect: postgresDialect });\n const indexKeys = await executor({ text: keysQuery.text, values: [...keysQuery.values] });\n if (indexKeys.some((row) => typeof row.table_namespace !== \"string\" || typeof row.table_name !== \"string\" || typeof row.index_name !== \"string\" || typeof row.method !== \"string\" || typeof row.unique !== \"boolean\" || typeof row.descending !== \"boolean\" || typeof row.exact_default !== \"boolean\" && row.column_name !== null || typeof row.operator_namespace !== \"string\" || typeof row.operator_name !== \"string\" || !Number.isSafeInteger(Number(row.ordinal)) || Number(row.ordinal) < 1)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL index-key identity is incomplete\", meta: { reason: \"index-inspection-unavailable\" } });\n\n const tables = tableRows.map((row) => row.table_name as string);\n const views = viewRows.map((row) => row.table_name as string);\n\n const columns: ColumnRow[] = columnRows.map((row) => ({\n table: row.table_name as string,\n name: row.column_name as string,\n dataType: row.data_type as string,\n udtName: row.udt_name as string,\n udtNamespace: typeof row.udt_schema === \"string\" ? row.udt_schema : \"public\",\n nullable: (row.is_nullable as string) === \"YES\",\n identity: (row.is_identity as string | null) === \"YES\",\n columnDefault: (row.column_default as string | null) ?? null,\n datetimePrecision: toNumberOrNull(row.datetime_precision),\n charMaxLength: toNumberOrNull(row.character_maximum_length),\n numericPrecision: toNumberOrNull(row.numeric_precision),\n numericScale: toNumberOrNull(row.numeric_scale),\n fullType: (row.full_type as string | null) ?? null,\n }));\n\n // Enums.\n const enums: EnumIR[] = [];\n {\n const valuesByName = new Map<string, string[]>();\n for (const row of enumRows) {\n const name = row.type_name as string;\n const list = valuesByName.get(name);\n if (list === undefined) valuesByName.set(name, [row.enum_value as string]);\n else list.push(row.enum_value as string);\n }\n for (const [name, values] of valuesByName) enums.push({ name, values });\n }\n const enumNames = new Set(enums.map((entry) => entry.name));\n\n // Constraints → PKs, single-column uniques, multi-column uniques.\n const pkByTable = new Map<string, string[]>();\n const pkNames = new Map<string, string>();\n const uniquesByConstraint = new Map<string, { table: string; name: string; columns: string[] }>();\n const constraintNames = new Set<string>();\n for (const row of constraintRows) {\n const table = row.table_name as string;\n const constraintName = row.constraint_name as string;\n const columnName = row.column_name as string;\n constraintNames.add(JSON.stringify([table, constraintName]));\n if ((row.constraint_type as string) === \"PRIMARY KEY\") {\n pkNames.set(table, constraintName);\n const list = pkByTable.get(table);\n if (list === undefined) pkByTable.set(table, [columnName]);\n else list.push(columnName);\n } else {\n const constraintKey = JSON.stringify([table, constraintName]);\n const entry = uniquesByConstraint.get(constraintKey);\n if (entry === undefined) uniquesByConstraint.set(constraintKey, { table, name: constraintName, columns: [columnName] });\n else entry.columns.push(columnName);\n }\n }\n\n // CHECK constraints, grouped per table (name + inner expression).\n const checksByTable = new Map<string, CheckIR[]>();\n for (const row of checkRows) {\n const table = row.table_name as string;\n const name = row.constraint_name as string;\n const expression = stripCheckDefinition({ definition: String(row.definition ?? \"\") });\n const list = checksByTable.get(table);\n if (list === undefined) checksByTable.set(table, [{ name, expression, catalogExpression: true }]);\n else list.push({ name, expression, catalogExpression: true });\n }\n\n // FK groups (composite support — actions live on the constraint).\n type MutableFkGroup = {\n constraintName: string;\n table: string;\n columns: string[];\n refTable: string;\n refColumns: string[];\n onDelete: FkGroup[\"onDelete\"];\n onUpdate: FkGroup[\"onUpdate\"];\n };\n const fkGroupsByName = new Map<string, MutableFkGroup>();\n for (const row of fkRows) {\n const constraintName = row.constraint_name as string;\n const key = JSON.stringify([row.table_name, constraintName]);\n const existing = fkGroupsByName.get(key);\n if (existing === undefined) {\n fkGroupsByName.set(key, {\n constraintName,\n table: row.table_name as string,\n columns: [row.column_name as string],\n refTable: row.foreign_table_name as string,\n refColumns: [row.foreign_column_name as string],\n onDelete: PG_CHAR_TO_CASCADE_ACTION[(row.on_delete_char as string) ?? \"a\"] ?? \"NoAction\",\n onUpdate: PG_CHAR_TO_CASCADE_ACTION[(row.on_update_char as string) ?? \"a\"] ?? \"NoAction\",\n });\n } else {\n existing.columns.push(row.column_name as string);\n existing.refColumns.push(row.foreign_column_name as string);\n }\n }\n const fkGroups: FkGroup[] = [...fkGroupsByName.values()].map((group) => ({\n ...group,\n required: group.columns.every((columnName) => {\n const column = columns.find((c) => c.table === group.table && c.name === columnName);\n return column === undefined ? true : !column.nullable;\n }),\n }));\n\n // Indexes (parsed from indexdef).\n const indexes: IntrospectedIndex[] = [];\n for (const row of indexRows) {\n // Exclusions own their index. They are never independent DROP INDEX targets.\n if (row.backing_constraint_type === \"x\") continue;\n const operands = indexKeys.filter((key) => physicalNameKey({ namespace: String(key.table_namespace), name: String(key.table_name) }) === row.table_name && key.index_name === row.index_name);\n if (row.plain_columns === true && operands.length !== Number(row.key_count)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Plain index keys could not be read completely; refusing name-only operator-class introspection\", meta: { reason: \"index-inspection-unavailable\", table: row.table_name, index: row.index_name } });\n if (operands.length > 0) {\n // Expressions remain represented by the existing index path; plain keys\n // and operator classes are read structurally, never split from indexdef.\n if (operands.every((key) => typeof key.column_name === \"string\")) indexes.push({\n table: String(row.table_name), name: String(row.index_name), unique: operands[0]!.unique === true, kind: String(operands[0]!.method),\n columns: operands.map((key) => ({ name: String(key.column_name), desc: key.descending === true, ...(key.exact_default === true ? {} : { operatorClass: { namespace: String(key.operator_namespace), name: String(key.operator_name) } }) })),\n ...(typeof operands[0]!.predicate === \"string\" ? { where: operands[0]!.predicate } : {}),\n ...(operands[0]!.nulls_not_distinct === true ? { nullsNotDistinct: true } : {}),\n });\n else {\n const parsed = parseIndexDef({ table: String(row.table_name), name: String(row.index_name), def: String(row.index_def) });\n if (parsed !== null) indexes.push(parsed);\n }\n } else {\n const parsed = parseIndexDef({ table: String(row.table_name), name: String(row.index_name), def: String(row.index_def) });\n if (parsed !== null) indexes.push(parsed);\n }\n }\n\n // Implicit join tables (the shared structural rule).\n const joinTables = new Map<string, JoinTableInfo>();\n for (const table of tables) {\n const physicalTable = physicalNames.get(table)!;\n if (!physicalTable.name.startsWith(\"_\")) continue;\n const tableFks = fkRows.filter((row) => row.table_name === table);\n const tableIndexes = indexRows.filter((row) => row.table_name === table);\n if (pkByTable.has(table) || (checksByTable.get(table)?.length ?? 0) > 0 || exclusionRows.some((row) => row.table_name === table)) continue;\n if (!tableFks.every((row) => row.validated === true && row.deferrable === false && row.triggers_enabled === true)) continue;\n if (tableIndexes.length !== 2 || !tableIndexes.every((row) => row.valid === true && row.ready === true && row.immediate === true && row.plain_columns === true && typeof row.key_count === \"number\" && row.key_count === row.attribute_count)) continue;\n if (tableFks.some((row) => {\n const source = columnRows.find((column) => column.table_name === table && column.column_name === row.column_name);\n const target = columnRows.find((column) => column.table_name === row.foreign_table_name && column.column_name === row.foreign_column_name);\n return source === undefined || target === undefined || typeof source.full_type !== \"string\" || source.full_type.length === 0 || source.full_type !== target.full_type\n || source.column_default !== null || source.is_identity !== \"NO\" || source.is_generated !== \"NEVER\" || source.is_nullable !== \"NO\"\n || source.collation_name === undefined || source.collation_name !== target.collation_name;\n })) continue;\n if (tableFks.some((row) => row.foreign_namespace !== undefined && row.foreign_namespace !== physicalTable.namespace)) continue;\n const detected = detectJoinTable({\n table: physicalTable.name,\n columnNames: columns.filter((column) => column.table === table).map((column) => column.name),\n fkGroups: fkGroups.filter((group) => group.table === table).map((group) => ({ ...group, table: physicalTable.name, refTable: physicalNames.get(group.refTable)?.name ?? group.refTable })),\n indexes: indexes.filter((index) => index.table === table).map((index) => ({ ...index, table: physicalTable.name })),\n });\n if (detected !== null) joinTables.set(table, { ...detected, ...(physicalTable.namespace === \"public\" && namespaces.length === 1 ? {} : { relationName: detected.relationName ?? physicalTable.name.slice(1) }), tableA: physicalNameKey({ namespace: physicalTable.namespace, name: detected.tableA }), tableB: physicalNameKey({ namespace: physicalTable.namespace, name: detected.tableB }) });\n }\n\n // Models.\n const models: ModelIR[] = [];\n for (const table of tables) {\n if (joinTables.has(table)) continue;\n models.push(\n buildModel({\n table,\n physicalTable: physicalNames.get(table)!.name,\n isView: false,\n columns,\n pkByTable,\n pkNames,\n uniquesByConstraint,\n constraintNames,\n indexes,\n enumNames,\n exclusions: exclusionRows.filter((row) => row.table_name === table).map((row) => ({ name: String(row.constraint_name), definition: String(row.definition), requiredExtensions: [], catalogDefinition: true as const })),\n checks: checksByTable.get(table) ?? [],\n }),\n );\n }\n for (const view of views) {\n models.push(\n buildModel({\n table: view,\n physicalTable: physicalNames.get(view)!.name,\n isView: true,\n columns,\n pkByTable,\n pkNames,\n uniquesByConstraint,\n constraintNames,\n indexes: [],\n enumNames,\n checks: [],\n }),\n );\n }\n\n // Relations: FK side + inverse list side, then implicit M2M list sides.\n addFkRelations({ models, fkGroups, joinTables });\n addJoinTableRelations({ models, joinTables });\n\n const logicalNames = new Set([...physicalNames.values(), ...enumIdentities.values()].map((entry) => entry.name));\n const logicalName = (params: { key: string; name: string; duplicates: boolean }): string => {\n if (!params.duplicates && /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(params.name) && !isReservedClientName({ name: params.name.charAt(0).toLowerCase() + params.name.slice(1) })) return params.name;\n const hex = Array.from(new TextEncoder().encode(params.key), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n let name = `VibePhysical_${hex}`;\n while (logicalNames.has(name)) name += \"_\";\n logicalNames.add(name);\n return name;\n };\n const modelNames = new Map(models.map((model) => {\n const identity = physicalNames.get(model.name)!;\n const duplicates = [...physicalNames.values()].filter((entry) => entry.name === identity.name).length > 1;\n return [model.name, logicalName({ key: model.name, name: identity.name, duplicates })];\n }));\n const enumLogicalNames = new Map(enums.map((entry) => {\n const identity = enumIdentities.get(entry.name)!;\n const duplicates = [...enumIdentities.values()].filter((candidate) => candidate.name === identity.name).length > 1;\n return [entry.name, logicalName({ key: entry.name, name: identity.name, duplicates })];\n }));\n const qualifiedModels = models.map((model) => {\n const identity = physicalNames.get(model.name)!;\n const name = modelNames.get(model.name)!;\n const { dbName: _physicalName, ...metadata } = model;\n return { ...metadata, name, ...(name === identity.name ? {} : { dbName: identity.name }), ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }),\n fields: model.fields.map((field) => {\n if (typeof field.type === \"string\") return field;\n const identity = enumIdentities.get(field.type.enum)!;\n return { ...field, type: { enum: enumLogicalNames.get(field.type.enum)!, ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }) } };\n }),\n relations: model.relations.map((relation) => ({ ...relation, name: /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(relation.name) ? relation.name : `relation_${Array.from(new TextEncoder().encode(relation.name), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`, model: name, targetModel: modelNames.get(relation.targetModel) ?? relation.targetModel })),\n };\n });\n const qualifiedEnums = enums.map((entry) => {\n const identity = enumIdentities.get(entry.name)!;\n const name = enumLogicalNames.get(entry.name)!;\n return { ...entry, name, ...(name === identity.name ? {} : { dbName: identity.name }), ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }) };\n });\n const resolved = await resolvePostgresTypeIdentities({ executor, mode: \"catalog\", schema: {\n datasource: { provider: \"postgresql\" }, models: qualifiedModels, enums: qualifiedEnums, extensions: [], ...(namespaceObjects.length === 0 ? {} : { migrationObjects: namespaceObjects }),\n } });\n if (resolved.unavailable.length > 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL column type identity could not be read\", meta: { reason: \"type-inspection-unavailable\", columns: resolved.unavailable } });\n return resolved.schema;\n}\n\n// ─── Model building ───────────────────────────────────────────────\n\nfunction buildModel(params: {\n table: string;\n physicalTable: string;\n isView: boolean;\n columns: readonly ColumnRow[];\n pkByTable: ReadonlyMap<string, string[]>;\n pkNames: ReadonlyMap<string, string>;\n uniquesByConstraint: ReadonlyMap<string, { table: string; name: string; columns: string[] }>;\n constraintNames: ReadonlySet<string>;\n indexes: readonly IntrospectedIndex[];\n enumNames: ReadonlySet<string>;\n exclusions?: ModelIR[\"exclusions\"];\n checks: readonly CheckIR[];\n}): ModelIR {\n const { table, isView, columns, pkByTable, uniquesByConstraint, constraintNames, indexes, enumNames } =\n params;\n\n const tableColumns = columns.filter((column) => column.table === table);\n const pk = pkByTable.get(table) ?? [];\n\n // Single-column uniqueness (constraints + unique indexes) → field.isUnique.\n const uniqueSingles = new Set<string>();\n const multiUniques: { name: string; columns: string[] }[] = [];\n for (const unique of uniquesByConstraint.values()) {\n const name = unique.name;\n if (unique.table !== table) continue;\n if (unique.columns.length === 1) uniqueSingles.add(unique.columns[0] as string);\n multiUniques.push({ name, columns: unique.columns });\n }\n const tableIndexes = indexes.filter(\n (index) => index.table === table && !constraintNames.has(JSON.stringify([table, index.name])),\n );\n for (const index of tableIndexes) {\n if (!index.unique) continue;\n // A partial or NULLS-NOT-DISTINCT unique is NOT a plain field @unique —\n // folding it would drop the predicate/flag and make every diff recreate\n // the index. Those stay model-level indexes below.\n if (index.columns.length === 1 && index.where === undefined && index.nullsNotDistinct !== true && index.columns[0]?.operatorClass === undefined) {\n uniqueSingles.add((index.columns[0] as { name: string }).name);\n }\n }\n\n const fields: FieldIR[] = tableColumns.map((column) =>\n buildField({ column, pk, uniqueSingles, enumNames }),\n );\n\n // Indexes: multi-column unique constraints + all non-constraint indexes\n // (single-column uniques were folded into the fields above).\n const modelIndexes: IndexIR[] = [];\n for (const unique of multiUniques) {\n modelIndexes.push({\n name: unique.name,\n constraintName: unique.name,\n kind: \"unique\",\n fields: unique.columns.map((name) => ({ name })),\n });\n }\n for (const index of tableIndexes) {\n if (\n index.unique &&\n index.columns.length === 1 &&\n index.where === undefined &&\n index.nullsNotDistinct !== true &&\n index.columns[0]?.operatorClass === undefined &&\n index.name === `${params.physicalTable}_${index.columns[0]!.name}_key`\n ) {\n continue; // folded into field.isUnique above\n }\n modelIndexes.push({\n name: index.name,\n kind: index.unique ? \"unique\" : index.kind,\n fields: index.columns.map((column) => ({\n name: column.name,\n ...(column.desc ? { sort: \"desc\" as const } : {}),\n ...(column.operatorClass === undefined ? {} : { operatorClass: column.operatorClass }),\n })),\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n });\n }\n\n return {\n name: table,\n dbName: params.physicalTable,\n fields,\n relations: [],\n indexes: modelIndexes,\n ...(params.exclusions?.length ? { exclusions: params.exclusions } : {}),\n ...(params.checks.length === 0 ? {} : { checks: params.checks }),\n isView,\n ...(pk.length > 1 ? { primaryKey: { fields: pk } } : {}),\n ...(params.pkNames.get(table) === undefined ? {} : { primaryKeyConstraintName: params.pkNames.get(table)! }),\n };\n}\n\n/** `pg_get_constraintdef` → the inner expression: `CHECK ((amount >= 0))` → `(amount >= 0)`. */\nfunction stripCheckDefinition(params: { definition: string }): string {\n const trimmed = params.definition.trim();\n const match = trimmed.match(/^CHECK\\s*\\((.*)\\)$/is);\n return match === null ? trimmed : (match[1] as string).trim();\n}\n\nfunction buildField(params: {\n column: ColumnRow;\n pk: readonly string[];\n uniqueSingles: ReadonlySet<string>;\n enumNames: ReadonlySet<string>;\n}): FieldIR {\n const { column, pk, uniqueSingles, enumNames } = params;\n const mapped = reverseMapType({ column, enumNames });\n const isId = pk.length === 1 && pk[0] === column.name;\n const defaultValue = parseColumnDefault({ column, mapped });\n\n return {\n name: column.name,\n type: mapped.type,\n isList: mapped.isList,\n isOptional: column.nullable,\n isId,\n isUnique: uniqueSingles.has(column.name),\n isUpdatedAt: false,\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(mapped.nativeType === undefined ? {} : { nativeType: mapped.nativeType }),\n ...(mapped.isUnsupported === true ? { isUnsupported: true as const } : {}),\n };\n}\n\n// ─── Reverse type mapping (dialect-matrix §2, reversed) ───────────\n\ntype MappedType = {\n type: FieldType;\n isList: boolean;\n nativeType?: string;\n isUnsupported?: true;\n};\n\n\nfunction reverseMapType(params: { column: ColumnRow; enumNames: ReadonlySet<string> }): MappedType {\n const { column, enumNames } = params;\n const isList = column.dataType === \"ARRAY\";\n const udt = isList ? column.udtName.replace(/^_/, \"\") : column.udtName;\n\n // Enum (scalar or array — the LEARNINGS `_EnumName` lesson).\n const enumKey = physicalNameKey({ namespace: column.udtNamespace, name: udt });\n if (enumNames.has(enumKey)) {\n return { type: { enum: enumKey }, isList };\n }\n\n const canonical = CANONICAL_UDT[udt];\n if (canonical !== undefined) {\n const nativeType = nonCanonicalModifier({ column, udt, scalar: canonical });\n return { type: canonical, isList, ...(nativeType === undefined ? {} : { nativeType }) };\n }\n\n const nonCanonical = NON_CANONICAL_UDT[udt];\n if (nonCanonical !== undefined) {\n return { type: nonCanonical, isList, nativeType: withModifier({ column, udt }) };\n }\n\n // Unknown type → unsupported column, raw type preserved (F3: keep, don't\n // drop). `format_type` keeps modifiers (`vector(3)`), so an extension-lowered\n // column round-trips diff-clean against its declared native type.\n const raw = column.fullType ?? udt;\n return {\n type: \"String\",\n isList: false,\n nativeType: isList && !raw.endsWith(\"[]\") ? `${raw}[]` : raw,\n isUnsupported: true,\n };\n}\n\n/**\n * For canonical base types, return a nativeType only when a modifier makes the\n * column diverge from the canonical mapping (timestamptz(3), numeric(10,2)).\n * Bare `timestamptz` is the canonical DateTime mapping and postgres reports\n * its default precision as 6, so precision 6 (or none) means \"no override\";\n * every other precision is carried truthfully — the differ's equivalence\n * class, not this function, decides that timestamptz(3) needs no ALTER.\n */\nfunction nonCanonicalModifier(params: {\n column: ColumnRow;\n udt: string;\n scalar: ScalarType;\n}): string | undefined {\n const { column, udt, scalar } = params;\n // information_schema omits element modifiers on arrays; format_type keeps them.\n if (column.dataType === \"ARRAY\" && column.fullType !== null) {\n const element = normalizeNativeType({ raw: column.fullType }).replace(/\\[\\]$/, \"\");\n if (/^(numeric|timestamptz)\\([\\d,]+\\)$/.test(element)) return element;\n }\n if (scalar === \"DateTime\" && udt === \"timestamptz\") {\n const precision = column.datetimePrecision;\n return precision === null || precision === 6 ? undefined : `timestamptz(${precision})`;\n }\n if (scalar === \"Decimal\" && udt === \"numeric\") {\n if (column.numericPrecision === null) return undefined;\n const scale = column.numericScale ?? 0;\n return `numeric(${column.numericPrecision},${scale})`;\n }\n return undefined;\n}\n\n/** Render `udt(modifier)` for non-canonical types that carry one. */\nfunction withModifier(params: { column: ColumnRow; udt: string }): string {\n const { column, udt } = params;\n // information_schema omits character_maximum_length for varchar arrays.\n // format_type preserves the element typmod; keep it so push/pull converges.\n if (udt === \"varchar\" && column.dataType === \"ARRAY\" && column.fullType !== null) {\n const elementType = normalizeNativeType({ raw: column.fullType }).replace(/\\[\\]$/, \"\");\n if (/^varchar\\(\\d+\\)$/.test(elementType)) return elementType;\n }\n if ((udt === \"varchar\" || udt === \"bpchar\") && column.charMaxLength !== null) {\n return `${udt === \"bpchar\" ? \"char\" : \"varchar\"}(${column.charMaxLength})`;\n }\n if (udt === \"bpchar\") return \"char\";\n if ((udt === \"bit\" || udt === \"varbit\") && column.charMaxLength !== null) return `${udt}(${column.charMaxLength})`;\n // Precision 6 is postgres's default for every time type: an undeclared\n // precision reads back as 6, and `time(6)` normalizes to the same key.\n if ((udt === \"timestamp\" || udt === \"time\" || udt === \"timetz\") && column.datetimePrecision !== null && column.datetimePrecision !== 6) {\n return `${udt}(${column.datetimePrecision})`;\n }\n return udt;\n}\n\n// ─── Default parsing ──────────────────────────────────────────────\n\nfunction parseColumnDefault(params: {\n column: ColumnRow;\n mapped: MappedType;\n}): DefaultValueIR | undefined {\n const { column, mapped } = params;\n\n if (column.identity) return { kind: \"autoincrement\" };\n\n const raw = column.columnDefault;\n if (raw === null) return undefined;\n if (raw.startsWith(\"NULL::\")) return undefined;\n\n if (/^nextval\\('(?:[^']|'')*'::regclass\\)$/.test(raw)) return { kind: \"autoincrement\" };\n if (raw === \"now()\" || raw.startsWith(\"CURRENT_TIMESTAMP\")) return { kind: \"now\" };\n if (raw === \"true\" || raw === \"false\") return { kind: \"literal\", value: raw === \"true\" };\n if (/^-?\\d+(\\.\\d+)?$/.test(raw)) return { kind: \"literal\", value: /^-?\\d+$/.test(raw) ? exactIntegerLiteral({ text: raw }) : Number(raw) };\n\n // 'value' or 'value'::type — embedded quotes arrive doubled.\n const quoted = raw.match(/^'((?:[^']|'')*)'(::.*)?$/);\n if (quoted !== null) {\n const value = (quoted[1] as string).replaceAll(\"''\", \"'\");\n if (mapped.isList) {\n const elements = parsePgArrayLiteral({ literal: value });\n if (elements !== null && !elements.includes(null)) {\n const decoded = elements.map((entry) => mapped.type === \"Boolean\" ? entry === \"t\" || entry === \"true\" :\n mapped.type === \"Int\" || mapped.type === \"Float\" ? Number(entry) : entry);\n return { kind: \"list\", values: scalarListDefault({ type: mapped.type, values: decoded }) };\n }\n return { kind: \"dbgenerated\", sql: raw };\n }\n if (typeof mapped.type === \"object\") return { kind: \"enumValue\", value };\n if (isNumericScalar({ type: mapped.type }) && /^-?\\d+(\\.\\d+)?$/.test(value)) {\n return { kind: \"literal\", value: /^-?\\d+$/.test(value) ? exactIntegerLiteral({ text: value }) : Number(value) };\n }\n // A cast to a non-string type (e.g. '{}'::text[]) is not a plain literal.\n const cast = quoted[2];\n if (cast !== undefined && cast !== \"\" && mapped.isList) {\n return { kind: \"dbgenerated\", sql: raw };\n }\n return { kind: \"literal\", value };\n }\n\n return { kind: \"dbgenerated\", sql: raw };\n}\n\n// ─── Index parsing ────────────────────────────────────────────────\n\n/**\n * Parse a `pg_indexes.indexdef` line:\n * `CREATE [UNIQUE] INDEX name ON schema.table USING method (cols) [WHERE pred]`.\n * The column list is scanned with balanced parentheses (expressions like\n * `lower(email)` and `WHERE` predicates both contain parens, so a regex over\n * the whole line cannot split them). Returns null for definitions that don't\n * match — never expected from pg.\n */\nfunction parseIndexDef(params: {\n table: string;\n name: string;\n def: string;\n}): IntrospectedIndex | null {\n const { table, name, def } = params;\n const head = def.match(/^CREATE (UNIQUE )?INDEX .*? USING (\\w+) \\(/);\n if (head === null) return null;\n\n // Scan the balanced column list starting right after the opening paren.\n const start = (head.index ?? 0) + head[0].length;\n let depth = 1;\n let end = -1;\n for (let position = start; position < def.length; position += 1) {\n const char = def[position];\n if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) {\n end = position;\n break;\n }\n }\n }\n if (end === -1) return null;\n\n const columns = splitTopLevel({ text: def.slice(start, end) }).map((entry) => {\n const trimmed = entry.trim();\n const desc = / DESC$/i.test(trimmed);\n const nameOnly = trimmed.replace(/ (DESC|ASC)( NULLS (FIRST|LAST))?$/i, \"\");\n return { name: nameOnly.replaceAll('\"', \"\"), desc };\n });\n\n const tail = def.slice(end + 1).trim();\n // INCLUDE, storage options and TABLESPACE can precede WHERE. Only top-level\n // keywords count: an included column named \"WHERE\" is not a predicate.\n let nullsNotDistinct = false;\n let whereRaw: string | undefined;\n let tailDepth = 0;\n let quote: string | undefined;\n for (let position = 0; position < tail.length; position += 1) {\n const char = tail[position]!;\n if (quote !== undefined) {\n if (char === quote) {\n if (tail[position + 1] === quote) position += 1;\n else quote = undefined;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") { quote = char; continue; }\n if (char === \"(\") { tailDepth += 1; continue; }\n if (char === \")\") { tailDepth -= 1; continue; }\n if (tailDepth !== 0 || (position > 0 && !/\\s/.test(tail[position - 1]!))) continue;\n const rest = tail.slice(position);\n if (/^NULLS NOT DISTINCT\\b/i.test(rest)) nullsNotDistinct = true;\n const where = rest.match(/^WHERE\\s+/i);\n if (where !== null) { whereRaw = rest.slice(where[0].length); break; }\n }\n return {\n table,\n name,\n unique: head[1] !== undefined,\n kind: (head[2] as string).toLowerCase(),\n columns,\n ...(whereRaw === undefined ? {} : { where: whereRaw }),\n ...(nullsNotDistinct ? { nullsNotDistinct: true } : {}),\n };\n}\n\n/** Split a parenthesized column list on top-level commas only. */\nfunction splitTopLevel(params: { text: string }): string[] {\n const { text } = params;\n const parts: string[] = [];\n let depth = 0;\n let current = \"\";\n for (const char of text) {\n if (char === \"(\") depth += 1;\n if (char === \")\") depth -= 1;\n if (char === \",\" && depth === 0) {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += char;\n }\n if (current.trim().length > 0) parts.push(current);\n return parts;\n}\n\nfunction toNumberOrNull(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n}\n",
|
|
18
|
+
"import { externalObjectOwner, projectExternalSchema, projectExternalState } from \"./external-objects.ts\";\nimport type { ExternalObjectResolution } from \"./external-objects.ts\";\nimport { verifyExclusions } from \"./exclusions.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { VibeError, sqlObjectKey, sqlObjectNamespace, DIALECT_CAPABILITIES, qualifiedSqlName } from \"@vibeorm/schema\";\nimport type { Dialect, SchemaIR, SqlObjectDefinition, SqlObjectFacts, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { getSqlDialect, renderMigrationObjectBatch, renderMigrationObjectQuery, renderCheckProbe, renderMigrationNamespace, renderMigrationDependencies, renderMysqlObjectMembers, renderMysqlCheckProbe, sqliteColumnClauses, renderMigrationVisibility, sqliteTableConstraints, renderSqliteColumnInventory } from \"@vibeorm/sql\";\nimport type { MigrationObjectBatch } from \"@vibeorm/sql\";\nimport type { SqlExecutor } from \"./types.ts\";\nimport type { DesiredState } from \"./desired-state.ts\";\nimport { canonicalMigrationJson } from \"./desired-state.ts\";\nimport { parseSqliteNamedChecks } from \"./sqlite-types.ts\";\nimport { introspectPhysicalPostgres } from \"./introspect/postgres.ts\";\nimport { introspectMysql } from \"./introspect/mysql.ts\";\nimport { introspectSqlite, introspectSqliteBeforeForeignKeyRestore } from \"./introspect/sqlite.ts\";\nimport { executeStatement } from \"./execute.ts\";\nimport { normalizeSchema, physicalNameKey, schemaNamespaces } from \"./normalize.ts\";\nimport { prepareOperatorClassDiff } from \"./operator-classes.ts\";\nimport { resolvePostgresTypeIdentities } from \"./postgres-type-identity.ts\";\nimport { equivalentPostgresDefaultFunction } from \"./postgres-default-equivalence.ts\";\nimport { schemaObjectIdentities } from \"./object-ownership.ts\";\n\n/** A single difference, not a boolean that hides disabled or changed objects. */\nexport type MigrationStateDifference = { readonly attribute: string; readonly expected: unknown; readonly actual: unknown };\n/** Ownership and live condition are independent dimensions. */\nexport type MigrationObjectState = {\n readonly identity: SqlObjectIdentity;\n readonly ownership: \"schema\" | \"migration\" | \"unknown\";\n readonly state: \"matching\" | \"missing\" | \"changed\" | \"unavailable\";\n readonly differences: readonly MigrationStateDifference[];\n readonly reason?: string;\n};\n/** A report only claims convergence when every requested definition was verified. */\nexport type MigrationStateReport = { readonly inSync: boolean; readonly objects: readonly MigrationObjectState[] };\n/** Catalog read outcome; missing is never substituted for insufficient privileges. */\nexport type InspectedSqlObject =\n | { readonly state: \"present\"; readonly definition: SqlObjectDefinition }\n | { readonly state: \"missing\" }\n | { readonly state: \"unavailable\"; readonly reason: string };\n\nfunction factsOf(params: { row: Record<string, unknown> }): SqlObjectFacts | undefined {\n const facts: Record<string, string | number | boolean | null | readonly string[]> = {};\n for (const [name, value] of Object.entries(params.row)) {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\" || (typeof value === \"number\" && Number.isFinite(value))) facts[name] = value;\n else if (Array.isArray(value) && value.every((entry) => typeof entry === \"string\")) facts[name] = value;\n else return undefined;\n }\n return facts;\n}\n\n/** Read an explicitly qualified object using the dialect's catalog renderer. */\nexport async function inspectSqlObject(params: { executor: SqlExecutor; dialect: Dialect; identity: SqlObjectIdentity }): Promise<InspectedSqlObject> {\n return Promise.resolve().then(async (): Promise<InspectedSqlObject> => {\n const namespace = sqlObjectNamespace({ identity: params.identity });\n const query = renderMigrationObjectQuery({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n if (params.dialect === \"mysql\") await assertCatalogVisibility({ executor: params.executor, dialect: params.dialect, namespace });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n if (rows.length === 0) return { state: \"missing\" };\n if (rows.length !== 1) return { state: \"unavailable\", reason: \"ambiguous-catalog-identity\" };\n let facts = factsOf({ row: rows[0]! });\n if (facts === undefined) return { state: \"unavailable\", reason: \"unsupported-catalog-value\" };\n if (params.dialect === \"mysql\" && (params.identity.kind === \"function\" || params.identity.kind === \"view\") && facts.definition === null) return { state: \"unavailable\", reason: \"definition-not-visible\" };\n if (params.dialect === \"sqlite\" && params.identity.kind === \"constraint\") {\n const name = params.identity.name;\n if (params.identity.constraintType === \"check\") {\n const check = parseSqliteNamedChecks({ tableSql: String(facts.definition ?? \"\") }).find((entry) => entry.name === name);\n if (check === undefined) return { state: \"missing\" };\n facts = { type: \"check\", definition: check.expression };\n } else {\n const constraintType = params.identity.constraintType;\n const constraint = sqliteTableConstraints({ sql: String(facts.definition ?? \"\") }).find((entry) => entry.name === name && entry.type === constraintType);\n if (constraint === undefined && constraintType === \"primaryKey\" && name === `${params.identity.table.name}_pkey`) {\n // SQLite has no catalog constraint name for an inline primary key.\n // The inventory's synthetic identity is backed by ordered pragma keys,\n // not an invented textual constraint definition.\n const query = renderSqliteColumnInventory({ dialect: getSqlDialect({ dialect: \"sqlite\" }), namespace: params.identity.table.namespace, table: params.identity.table.name });\n const columns = (await params.executor({ text: query.text, values: [...query.values] })).filter((column) => Number(column.pk) > 0).sort((a, b) => Number(a.pk) - Number(b.pk));\n if (columns.length === 0) return { state: \"missing\" };\n facts = { type: \"primaryKey\", columns: columns.map((column) => String(column.name)) };\n } else {\n if (constraint === undefined) return { state: \"unavailable\", reason: \"constraint-definition-inspection-unavailable\" };\n facts = { type: constraint.type, definition: constraint.sql };\n }\n }\n }\n if (params.dialect === \"sqlite\" && (params.identity.kind === \"column\" || params.identity.kind === \"columnDefault\" || params.identity.kind === \"generatedColumn\")) {\n const column = params.identity.column;\n const clause = sqliteColumnClauses({ sql: String(facts.tableDefinition ?? \"\") }).find((entry) => entry.name === column);\n if (clause === undefined) return { state: \"unavailable\", reason: \"column-definition-inspection-unavailable\" };\n const { tableDefinition: ignored, ...attributes } = facts;\n facts = { ...attributes, columnDefinition: clause.sql };\n }\n if (params.identity.kind === \"columnDefault\") facts = { definition: facts.definition ?? null };\n if (params.dialect === \"postgres\") {\n const query = renderMigrationDependencies({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n return postgresInspection({ identity: params.identity, facts, addresses: rows.map((row) => row.address) });\n }\n if (params.dialect === \"mysql\") {\n const query = renderMysqlObjectMembers({ dialect: getSqlDialect({ dialect: params.dialect }), identity: params.identity });\n if (query !== undefined) {\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n if (params.identity.kind === \"function\" && rows.length === 0) return { state: \"unavailable\", reason: \"function-signature-unavailable\" };\n if (params.identity.kind === \"function\") {\n const signature = rows.filter((row) => row.mode !== null).map((row) => ({ namespace: \"mysql\", name: String(row.type) }));\n if (canonicalMigrationJson({ value: signature }) !== canonicalMigrationJson({ value: params.identity.argumentTypes })) return { state: \"missing\" };\n }\n facts = { ...facts, members: rows.map((row) => canonicalMigrationJson({ value: row })) };\n }\n }\n return { state: \"present\", definition: { identity: params.identity, facts, dependencies: [], format: \"catalog-v2\" } };\n }).catch((error: unknown): InspectedSqlObject => ({ state: \"unavailable\", reason: error instanceof VibeError ? String(error.meta.feature ?? error.code) : \"catalog-query-failed\" }));\n}\n\nfunction postgresInspection(params: { identity: SqlObjectIdentity; facts: SqlObjectFacts; addresses: readonly unknown[] }): InspectedSqlObject {\n if (!params.addresses.every((address): address is string => typeof address === \"string\")) return { state: \"unavailable\", reason: \"dependency-inspection-unavailable\" };\n const facts = { ...(params.identity.kind === \"columnDefault\" ? { definition: params.facts.definition ?? null } : params.facts), dependencyAddresses: [...params.addresses].sort() };\n const dependencies: SqlObjectIdentity[] = [];\n if (params.identity.kind === \"trigger\") {\n if (params.facts.functionArguments !== \"\") return { state: \"unavailable\", reason: \"trigger-function-signature-unavailable\" };\n dependencies.push({ kind: \"function\", name: { namespace: String(params.facts.functionNamespace), name: String(params.facts.functionName) }, argumentTypes: [] });\n }\n return { state: \"present\", definition: { identity: params.identity, facts, dependencies, format: \"catalog-v2\" } };\n}\n\nfunction unavailableReason(params: { error: unknown }): string {\n return params.error instanceof VibeError ? String(params.error.meta.feature ?? params.error.meta.reason ?? params.error.code) : \"catalog-query-failed\";\n}\n\ntype BatchOutcome = { readonly ok: true; readonly rows: ReadonlyMap<number, readonly Record<string, unknown>[]> } | { readonly ok: false; readonly reason: string };\n\nasync function readBatch(params: { executor: SqlExecutor; batch: MigrationObjectBatch }): Promise<BatchOutcome> {\n const positions = new Set(params.batch.positions);\n return Promise.resolve().then(async (): Promise<BatchOutcome> => {\n const rows = new Map<number, Record<string, unknown>[]>();\n for (const row of await params.executor({ text: params.batch.text, values: [...params.batch.values] })) {\n if (typeof row.position !== \"number\" || !Number.isInteger(row.position) || !positions.has(row.position)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Invalid batched catalog identity\", meta: { reason: \"catalog-query-failed\" } });\n const matches = rows.get(row.position) ?? [];\n matches.push(row);\n rows.set(row.position, matches);\n }\n return { ok: true, rows };\n }).then((outcome) => outcome, (error: unknown): BatchOutcome => ({ ok: false, reason: unavailableReason({ error }) }));\n}\n\nfunction batchedInspection(params: { identity: SqlObjectIdentity; matches: readonly Record<string, unknown>[] }): InspectedSqlObject {\n if (params.matches.length === 0) return { state: \"missing\" };\n if (params.matches.length !== 1) return { state: \"unavailable\", reason: \"ambiguous-catalog-identity\" };\n const row = params.matches[0]!;\n const facts = row.facts !== null && typeof row.facts === \"object\" && !Array.isArray(row.facts) ? factsOf({ row: row.facts as Record<string, unknown> }) : undefined;\n if (facts === undefined || !Array.isArray(row.dependencyAddresses)) return { state: \"unavailable\", reason: \"unsupported-catalog-value\" };\n return postgresInspection({ identity: params.identity, facts, addresses: row.dependencyAddresses });\n}\n\n/** Inspect an independent reference in bounded round trips, preserving missing/unavailable outcomes. */\nexport async function inspectSqlObjects(params: { executor: SqlExecutor; dialect: Dialect; identities: readonly SqlObjectIdentity[] }): Promise<readonly InspectedSqlObject[]> {\n if (params.dialect !== \"postgres\") {\n const results: InspectedSqlObject[] = [];\n for (const identity of params.identities) results.push(await inspectSqlObject({ ...params, identity }));\n return results;\n }\n return Promise.resolve().then(async (): Promise<readonly InspectedSqlObject[]> => {\n const results: InspectedSqlObject[] = params.identities.map((): InspectedSqlObject => ({ state: \"unavailable\", reason: \"catalog-query-failed\" }));\n for (const batch of renderMigrationObjectBatch({ dialect: getSqlDialect({ dialect: params.dialect }), identities: params.identities })) {\n // A failing batch marks only the positions it answers for; other kinds keep their own verdicts.\n const outcome = await readBatch({ executor: params.executor, batch });\n for (const position of batch.positions) {\n results[position] = outcome.ok ? batchedInspection({ identity: params.identities[position]!, matches: outcome.rows.get(position) ?? [] }) : { state: \"unavailable\", reason: outcome.reason };\n }\n }\n return results;\n }).then((result) => result, (error: unknown) => params.identities.map((): InspectedSqlObject => ({ state: \"unavailable\", reason: unavailableReason({ error }) })));\n}\n\n/** Require provable catalog visibility; role-only/partial grants report unavailable rather than missing. */\nexport async function assertCatalogVisibility(params: { executor: SqlExecutor; dialect: Dialect; namespace: string }): Promise<void> {\n if (params.dialect !== \"mysql\") return;\n const query = renderMigrationVisibility({ dialect: getSqlDialect({ dialect: params.dialect }), namespace: params.namespace });\n const rows = await params.executor({ text: query.text, values: [...query.values] });\n const grants = new Set(rows.map((row) => row.privilege));\n const missing = [\"SELECT\", \"TRIGGER\", \"SHOW VIEW\", \"EXECUTE\"].filter((privilege) => !grants.has(privilege));\n if (missing.length > 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"MySQL catalog visibility requires direct database-wide grants; role-only or partial grants cannot prove object absence\", meta: { reason: \"inventory-unavailable\", missing } });\n}\n\n/**\n * Facts a catalog-v1 capture never recorded. A v1 expectation cannot assert\n * them, so only there are they skipped; a catalog-v2 expectation compares every\n * fact. Adding a fact means a new format version, never a new row here.\n */\nconst CATALOG_V1_OMITTED_FACTS: Readonly<Record<string, readonly string[]>> = Object.freeze({\n function: [\"definerOwner\"],\n column: [\"collationNamespace\", \"collationName\"],\n generatedColumn: [\"collationNamespace\", \"collationName\"],\n});\n\nfunction compare(params: { expected: SqlObjectDefinition; live: SqlObjectDefinition }): MigrationStateDifference[] {\n const differences: MigrationStateDifference[] = [];\n const omitted = params.expected.format === \"catalog-v1\" ? CATALOG_V1_OMITTED_FACTS[params.expected.identity.kind] ?? [] : [];\n for (const key of new Set([...Object.keys(params.expected.facts), ...Object.keys(params.live.facts)])) {\n if (omitted.includes(key) && !Object.hasOwn(params.expected.facts, key)) continue;\n const expected = params.expected.facts[key];\n const actual = params.live.facts[key];\n if ((expected === undefined) !== (actual === undefined) || canonicalMigrationJson({ value: expected }) !== canonicalMigrationJson({ value: actual })) differences.push({ attribute: key, expected, actual });\n }\n const expected = params.expected.dependencies.map((identity) => sqlObjectKey({ identity })).sort();\n const actual = params.live.dependencies.map((identity) => sqlObjectKey({ identity })).sort();\n if (JSON.stringify(expected) !== JSON.stringify(actual)) differences.push({ attribute: \"dependencies\", expected, actual });\n return differences;\n}\n\n/** Probe modes make database writes and required privileges explicit. */\nexport function assertProbeMode(params: { dialect: Dialect; probe?: \"none\" | \"rollback\" | \"temporary\" }): void {\n if (params.probe !== undefined && params.probe !== \"none\" && DIALECT_CAPABILITIES[params.dialect].checkNormalization !== params.probe) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `${params.probe} CHECK probes are unavailable on ${params.dialect}`, meta: { feature: \"checkProbe\", dialect: params.dialect } });\n}\n\n/** Read-only by default. The report never treats an absent expectation as a match. */\nexport async function verifyMigrationState(params: { executor: SqlExecutor; expected: DesiredState; dialect: Dialect; namespaces?: readonly string[]; external?: ExternalObjectResolution; probe?: \"none\" | \"rollback\" | \"temporary\"; /** Independent replay verification may batch its catalog reads. */ batch?: true }): Promise<MigrationStateReport> {\n return verifyState(params);\n}\n\nasync function verifyState(params: Parameters<typeof verifyMigrationState>[0] & { sqliteRestorePending?: true }): Promise<MigrationStateReport> {\n if (params.external !== undefined) params = { ...params, expected: projectExternalState({ state: params.expected, external: params.external }) };\n assertProbeMode({ dialect: params.dialect, probe: params.probe });\n const declarations = params.expected.schema.migrationObjects ?? [];\n const owned = new Set(declarations.map((object) => sqlObjectKey({ identity: object.identity })));\n const definitions = new Map(params.expected.definitions.map((definition) => [sqlObjectKey({ identity: definition.identity }), definition]));\n const identities = new Map(params.expected.definitions.map((definition) => [sqlObjectKey({ identity: definition.identity }), definition.identity]));\n for (const object of declarations) identities.set(sqlObjectKey({ identity: object.identity }), object.identity);\n const objects: MigrationObjectState[] = [];\n const inspections = params.batch === true ? await inspectSqlObjects({ ...params, identities: [...identities.values()] }) : undefined;\n let position = 0;\n for (const [key, identity] of identities) {\n const ownership = owned.has(key) ? \"migration\" : \"schema\";\n const expected = definitions.get(key);\n const live = inspections === undefined ? await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity }) : inspections[position]!;\n position++;\n if (live.state !== \"present\") {\n objects.push({ identity, ownership, state: live.state, differences: [], ...(live.state === \"unavailable\" ? { reason: live.reason } : {}) });\n } else if (expected === undefined && identity.kind === \"namespace\") {\n objects.push({ identity, ownership, state: \"matching\", differences: [] });\n } else if (expected === undefined) {\n objects.push({ identity, ownership, state: \"unavailable\", reason: \"independent-definition-required\", differences: [] });\n } else if (params.dialect === \"postgres\" && identity.kind === \"table\" && (expected.facts.persistence === undefined || expected.facts.options === undefined)) {\n objects.push({ identity, ownership, state: \"unavailable\", reason: \"table-physical-reference-required\", differences: compare({ expected, live: live.definition }) });\n } else {\n const differences = compare({ expected, live: live.definition });\n objects.push({ identity, ownership, state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n if (params.dialect === \"postgres\" && schemaNamespaces({ schema: params.expected.schema }).length > 0 || params.expected.schema.models.length > 0 || params.expected.schema.enums.length > 0) objects.push(...await verifySchemaObjects(params));\n if (params.dialect === \"postgres\") objects.push(...await verifyExclusions(params));\n return { inSync: objects.every((object) => object.state === \"matching\"), objects };\n}\n\nasync function verifySchemaObjects(params: Parameters<typeof verifyMigrationState>[0] & { sqliteRestorePending?: true }): Promise<MigrationObjectState[]> {\n const physical = params.dialect === \"postgres\" ? await introspectPhysicalPostgres({ executor: params.executor, namespaces: [\"public\", ...(params.namespaces ?? []), ...schemaNamespaces({ schema: params.expected.schema })] })\n : params.dialect === \"mysql\" ? await introspectMysql({ executor: params.executor })\n : params.sqliteRestorePending === true ? await introspectSqliteBeforeForeignKeyRestore({ executor: params.executor }) : await introspectSqlite({ executor: params.executor });\n const resolved = params.dialect === \"postgres\" ? await resolvePostgresTypeIdentities({ executor: params.executor, schema: params.expected.schema, mode: \"verify\" }) : { schema: params.expected.schema, unavailable: [] };\n const expected = normalizeSchema({ schema: resolved.schema, dialect: params.dialect });\n const physicalComparison = params.external === undefined ? physical : projectExternalSchema({ schema: physical, external: params.external });\n const comparable = params.dialect === \"postgres\" ? await prepareOperatorClassDiff({ executor: params.executor, from: physicalComparison, to: resolved.schema }) : physicalComparison;\n const actual = normalizeSchema({ schema: comparable, dialect: params.dialect });\n const objects: MigrationObjectState[] = resolved.unavailable.map((identity) => ({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"type-reference-required\", differences: [] }));\n const namespace = await migrationNamespace({ executor: params.executor, dialect: params.dialect });\n const sqliteTableOptions = params.dialect === \"sqlite\" && expected.tables.size > 0\n ? await params.executor({ text: \"PRAGMA main.table_list;\", values: [] }) : undefined;\n if (params.dialect === \"postgres\") for (const name of schemaNamespaces({ schema: params.expected.schema })) {\n const identity: SqlObjectIdentity = { kind: \"namespace\", name };\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n objects.push({ identity, ownership: \"schema\", state: inspection.state === \"present\" ? \"matching\" : inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n }\n if (params.dialect === \"postgres\") for (const desired of expected.enums.values()) {\n const identity: SqlObjectIdentity = { kind: \"enum\", name: qualifiedSqlName({ name: desired.dbName ?? desired.name, namespace: desired.namespace, defaultNamespace: namespace }) };\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: live.state, differences: [], ...(live.state === \"unavailable\" ? { reason: live.reason } : {}) });\n continue;\n }\n const values = live.definition.facts.values;\n if (!Array.isArray(values) || !values.every((value) => typeof value === \"string\")) {\n objects.push({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"enum-values-unavailable\", differences: [] });\n continue;\n }\n const matching = canonicalMigrationJson({ value: desired.values }) === canonicalMigrationJson({ value: values });\n objects.push({ identity, ownership: \"schema\", state: matching ? \"matching\" : \"changed\", differences: matching ? [] : [{ attribute: \"values\", expected: desired.values, actual: values }] });\n }\n for (const [key, desired] of expected.tables) {\n const name = desired.table;\n const table = qualifiedSqlName({ name, namespace: desired.namespace, defaultNamespace: namespace });\n const live = actual.tables.get(key);\n if (live === undefined) {\n const presence = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity: { kind: \"table\", name: table } });\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: presence.state === \"missing\" ? \"missing\" : \"unavailable\", ...(presence.state === \"missing\" ? {} : { reason: \"schema-definition-not-visible\" }), differences: [] });\n continue;\n }\n if (sqliteTableOptions !== undefined) {\n const options = sqliteTableOptions.find((row) => row.schema === namespace && row.name === name);\n if (options?.strict !== 0 || options.wr !== 0) {\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: \"unavailable\", reason: \"sqlite-table-options-unrepresented\", differences: [{ attribute: \"tableOptions\", expected: { strict: 0, wr: 0 }, actual: options === undefined ? undefined : { strict: options.strict, wr: options.wr } }] });\n continue;\n }\n }\n const differences: MigrationStateDifference[] = [];\n const pin = (attribute: string, expected: unknown, actual: unknown): void => {\n if (canonicalMigrationJson({ value: expected }) !== canonicalMigrationJson({ value: actual })) differences.push({ attribute, expected, actual });\n };\n pin(\"primaryKey\", desired.pk, live.pk);\n for (const [column, field] of desired.columns) {\n const stored = live.columns.get(column);\n // The declaration decides how strictly (see `columnTypeChanged`).\n const exactType = field.pinsExactType;\n pin(`columns.${column}.type`, exactType ? field.exactTypeKey : field.typeKey, exactType ? stored?.exactTypeKey : stored?.typeKey);\n pin(`columns.${column}.nullable`, field.nullable, stored?.nullable);\n if (params.dialect === \"mysql\" && field.field.collation !== undefined) {\n pin(`columns.${column}.collation`, field.field.collation.toLowerCase(), stored?.field.collation?.toLowerCase());\n }\n const ownedDefault = params.expected.schema.migrationObjects?.some((object) => (object.identity.kind === \"columnDefault\" || object.identity.kind === \"generatedColumn\") && object.identity.table.namespace === table.namespace && object.identity.table.name === name && object.identity.column === column);\n if (!ownedDefault) {\n const desiredDefault = field.field.default;\n const actualDefault = stored?.field.default;\n const equivalent = params.dialect === \"postgres\" && field.defaultKey !== stored?.defaultKey &&\n desiredDefault?.kind === \"dbgenerated\" && actualDefault?.kind === \"dbgenerated\" &&\n await equivalentPostgresDefaultFunction({ executor: params.executor, table, column, expected: desiredDefault.sql, actual: actualDefault.sql });\n if (!equivalent) pin(`columns.${column}.default`, field.defaultKey, stored?.defaultKey);\n }\n }\n for (const [key, fk] of desired.fks) {\n const stored = live.fks.get(key);\n pin(`foreignKeys.${fk.constraintName}`, { columns: fk.columns, refTable: fk.refTable, refNamespace: fk.refNamespace ?? namespace, refColumns: fk.refColumns, onDelete: fk.onDelete, onUpdate: fk.onUpdate }, stored === undefined ? undefined : { columns: stored.columns, refTable: stored.refTable, refNamespace: stored.refNamespace ?? namespace, refColumns: stored.refColumns, onDelete: stored.onDelete, onUpdate: stored.onUpdate });\n if (params.dialect === \"postgres\" && stored !== undefined) {\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"foreignKey\", table, name: stored.constraintName };\n // A reviewed catalog definition can deliberately describe a staged NOT VALID FK.\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n } else {\n const differences = [\"validated\", \"triggersEnabled\"].flatMap((attribute) => inspection.definition.facts[attribute] === true ? [] : [{ attribute, expected: true, actual: inspection.definition.facts[attribute] }]);\n objects.push({ identity, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n }\n for (const [key, index] of desired.indexes) {\n pin(`indexes.${index.name}`, key, live.indexes.get(key)?.key);\n if (params.dialect !== \"postgres\" || !live.indexes.has(key)) continue;\n const identity: SqlObjectIdentity = { kind: \"index\", table, name: live.indexes.get(key)!.name };\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") {\n objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [], ...(inspection.state === \"unavailable\" ? { reason: inspection.reason } : {}) });\n } else {\n const differences = [\"valid\", \"ready\"].flatMap((attribute) => inspection.definition.facts[attribute] === true ? [] : [{ attribute, expected: true, actual: inspection.definition.facts[attribute] }]);\n objects.push({ identity, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n }\n }\n objects.push({ identity: { kind: \"table\", name: table }, ownership: \"schema\", state: differences.length === 0 ? \"matching\" : \"changed\", differences });\n for (const [check, expression] of desired.checks) {\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"check\", table, name: check };\n if (params.expected.definitions.some((definition) => sqlObjectKey({ identity: definition.identity }) === sqlObjectKey({ identity }))) continue;\n const stored = live.checks.get(check);\n if (stored === undefined) { objects.push({ identity, ownership: \"schema\", state: \"missing\", differences: [] }); continue; }\n if (params.dialect !== \"sqlite\") {\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (inspection.state !== \"present\") { objects.push({ identity, ownership: \"schema\", state: inspection.state, differences: [] }); continue; }\n const disabled = params.dialect === \"postgres\" ? inspection.definition.facts.validated !== true : inspection.definition.facts.enforced !== \"YES\";\n if (disabled) { objects.push({ identity, ownership: \"schema\", state: \"changed\", differences: [{ attribute: params.dialect === \"postgres\" ? \"validated\" : \"enforced\", expected: params.dialect === \"postgres\" ? true : \"YES\", actual: params.dialect === \"postgres\" ? inspection.definition.facts.validated : inspection.definition.facts.enforced }] }); continue; }\n }\n if (stored === expression) { objects.push({ identity, ownership: \"schema\", state: \"matching\", differences: [] }); continue; }\n if (params.dialect === \"postgres\" && params.probe === \"rollback\") {\n const normalized = await deparsePostgresCheck({ executor: params.executor, table, expression, probe: \"rollback\" });\n const read = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const actual = read.state === \"present\" ? read.definition.facts.definition : undefined;\n objects.push({ identity, ownership: \"schema\", state: normalized === actual ? \"matching\" : \"changed\", differences: normalized === actual ? [] : [{ attribute: \"definition\", expected: normalized, actual }] });\n } else if (params.dialect === \"mysql\" && params.probe === \"temporary\") {\n const normalized = await deparseMysqlCheck({ executor: params.executor, table, expression, probe: \"temporary\" });\n const inspection = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const actual = inspection.state === \"present\" ? inspection.definition.facts.definition : undefined;\n const match = normalized === actual;\n objects.push({ identity, ownership: \"schema\", state: inspection.state === \"unavailable\" ? \"unavailable\" : match ? \"matching\" : \"changed\", differences: match ? [] : [{ attribute: \"definition\", expected: normalized, actual }] });\n } else objects.push({ identity, ownership: \"schema\", state: \"unavailable\", reason: \"explicit-replacement-required\", differences: [{ attribute: \"definition\", expected: expression, actual: stored }] });\n }\n }\n for (const [name, join] of expected.joinTables) {\n const stored = actual.joinTables.get(name);\n const shape = (value: typeof join | undefined): unknown => value === undefined ? undefined : { a: { table: value.a.table, namespace: value.a.namespace ?? namespace, column: value.a.column }, b: { table: value.b.table, namespace: value.b.namespace ?? namespace, column: value.b.column } };\n const matching = canonicalMigrationJson({ value: shape(join) }) === canonicalMigrationJson({ value: shape(stored) });\n objects.push({ identity: { kind: \"table\", name: qualifiedSqlName({ name: join.table, namespace: join.namespace, defaultNamespace: namespace }) }, ownership: \"schema\", state: stored === undefined ? \"missing\" : matching ? \"matching\" : \"changed\", differences: matching ? [] : [{ attribute: \"joinTable\", expected: shape(join), actual: shape(stored) }] });\n }\n for (const [key, view] of expected.views) {\n const name = qualifiedSqlName({ name: view.dbName ?? view.name, namespace: view.namespace, defaultNamespace: namespace });\n if (!params.expected.definitions.some((definition) => definition.identity.kind === \"view\" && definition.identity.name.namespace === name.namespace && definition.identity.name.name === name.name)) objects.push({ identity: { kind: \"view\", name }, ownership: \"schema\", state: actual.views.has(key) ? \"unavailable\" : \"missing\", reason: \"independent-definition-required\", differences: [] });\n }\n return objects;\n}\n\n/** A transition verifies intended removals as well as definitions that should remain. */\nexport async function verifyMigrationTransition(params: { executor: SqlExecutor; dialect: Dialect; from: DesiredState; to: DesiredState; namespaces?: readonly string[]; external?: ExternalObjectResolution; removals?: readonly SqlObjectIdentity[]; probe?: \"none\" | \"rollback\" | \"temporary\" }): Promise<MigrationStateReport> {\n return verifyTransition(params);\n}\n\n/** @internal Only for a validated rebuild script immediately before COMMIT/FK restoration. */\nexport async function verifySqliteTransitionBeforeRestore(params: Parameters<typeof verifyMigrationTransition>[0]): Promise<MigrationStateReport> {\n if (params.dialect !== \"sqlite\") throw new VibeError({ code: \"VIBE_INTERNAL\", message: \"SQLite rebuild verification requires the SQLite dialect\" });\n await executeStatement({ executor: params.executor, dialect: \"sqlite\", statement: \"PRAGMA foreign_key_check;\" });\n return verifyTransition({ ...params, sqliteRestorePending: true });\n}\n\nasync function verifyTransition(params: Parameters<typeof verifyMigrationTransition>[0] & { sqliteRestorePending?: true }): Promise<MigrationStateReport> {\n const external = params.external;\n if (external !== undefined) {\n for (const identity of params.removals ?? []) {\n const owner = externalObjectOwner({ identity, external });\n if (owner !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Transition removals cannot target externally owned objects\", meta: { reason: \"external-owned-removal\", owner, identity } });\n }\n params = { ...params, from: projectExternalState({ state: params.from, external }), to: projectExternalState({ state: params.to, external }) };\n }\n const report = await verifyState({ executor: params.executor, dialect: params.dialect, expected: params.to, ...(params.namespaces === undefined ? {} : { namespaces: params.namespaces }), ...(external === undefined ? {} : { external }), ...(params.sqliteRestorePending === true ? { sqliteRestorePending: true } : {}), ...(params.probe === undefined ? {} : { probe: params.probe }) });\n const namespace = await migrationNamespace(params);\n const identities = (state: DesiredState): SqlObjectIdentity[] => [...schemaObjectIdentities({ schema: state.schema, dialect: params.dialect, namespace }), ...(state.schema.migrationObjects ?? []).map((object) => object.identity), ...state.definitions.map((definition) => definition.identity)];\n const retained = new Set(identities(params.to).map((identity) => sqlObjectKey({ identity })));\n const removed = new Map([...identities(params.from).filter((identity) => identity.kind !== \"namespace\" && !retained.has(sqlObjectKey({ identity }))), ...(params.removals ?? [])].map((identity) => [sqlObjectKey({ identity }), identity]));\n const objects = [...report.objects];\n for (const identity of removed.values()) {\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n const absent = live.state === \"missing\" || (identity.kind === \"columnDefault\" && live.state === \"present\" && live.definition.facts.definition === null);\n if (!absent) objects.push({ identity, ownership: \"schema\", state: live.state === \"unavailable\" ? \"unavailable\" : \"changed\", reason: live.state === \"unavailable\" ? live.reason : \"expected-absent\", differences: [{ attribute: \"presence\", expected: false, actual: live.state === \"present\" ? true : undefined }] });\n }\n return { inSync: report.inSync && objects.every((object) => object.state === \"matching\"), objects };\n}\n\n/** Resolve the physical namespace once; never invent a MySQL database name. */\nexport async function migrationNamespace(params: { executor: SqlExecutor; dialect: Dialect }): Promise<string> {\n if (params.dialect !== \"mysql\") return params.dialect === \"sqlite\" ? \"main\" : \"public\";\n const query = renderMigrationNamespace({ dialect: getSqlDialect({ dialect: params.dialect }) });\n const rows = await params.executor({ text: query.text, values: [] });\n const namespace = rows[0]?.namespace;\n if (typeof namespace !== \"string\" || namespace.length === 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot determine the migration namespace\", meta: { reason: \"inspection-unavailable\" } });\n return namespace;\n}\n\n/** Refuse mutation/adoption when verification is incomplete. */\nexport function assertMigrationState(params: { report: MigrationStateReport }): void {\n if (!params.report.inSync) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Migration state could not be verified\", meta: { reason: \"migration-state-unverified\", shadowReusable: true, objects: params.report.objects.filter((object) => object.state !== \"matching\") } });\n}\n\n/** Normalize a trusted authored CHECK in the real type context without retaining DDL. Caller owns transaction. */\nexport async function deparsePostgresCheck(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; probe: \"rollback\" }): Promise<string> {\n const definition = await deparsePostgresCheckDefinition({ ...params, constraint: \"vibeorm_check_probe\" });\n return String(definition.facts.definition);\n}\n\n/** Compile a trusted CHECK declaration into normalized metadata using only the authored expression. */\nexport async function deparsePostgresCheckDefinition(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; constraint: string; probe: \"rollback\" }): Promise<SqlObjectDefinition> {\n const name = \"vibeorm_check_probe\";\n await params.executor({ text: \"SAVEPOINT vibeorm_check_probe\" });\n try {\n const query = renderCheckProbe({ dialect: getSqlDialect({ dialect: \"postgres\" }), table: params.table, expression: params.expression, name });\n await params.executor({ text: query.text });\n const result = await inspectSqlObject({ executor: params.executor, dialect: \"postgres\", identity: { kind: \"constraint\", constraintType: \"check\", table: params.table, name } });\n if (result.state !== \"present\" || typeof result.definition.facts.definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"CHECK normalization probe unavailable\", meta: { reason: \"check-inspection-unavailable\" } });\n return { ...result.definition, identity: { kind: \"constraint\", constraintType: \"check\", table: params.table, name: params.constraint }, facts: { ...result.definition.facts, definition: result.definition.facts.definition.replace(/ NOT VALID$/, \"\"), validated: true } };\n } finally {\n await params.executor({ text: \"ROLLBACK TO SAVEPOINT vibeorm_check_probe\" });\n await params.executor({ text: \"RELEASE SAVEPOINT vibeorm_check_probe\" });\n }\n}\n\n/** Normalize on a private MySQL temporary clone; cleanup is mandatory even after a failed expression. */\nexport async function deparseMysqlCheck(params: { executor: SqlExecutor; table: { namespace: string; name: string }; expression: string; probe: \"temporary\" }): Promise<string> {\n const probe = `vibe_check_${randomUUID().replaceAll(\"-\", \"\")}`;\n const dialect = getSqlDialect({ dialect: \"mysql\" });\n const clone = renderMysqlCheckProbe({ dialect, probe, operation: \"clone\", table: params.table });\n await params.executor({ text: clone.text });\n let created = true;\n try {\n const read = renderMysqlCheckProbe({ dialect, probe, operation: \"read\" });\n const source = await params.executor({ text: read.text, values: [] });\n const definition = source[0]?.[\"Create Table\"];\n if (typeof definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot read temporary clone definition\" });\n const drop = renderMysqlCheckProbe({ dialect, probe, operation: \"drop\" });\n await params.executor({ text: drop.text });\n created = false;\n // CREATE/DROP TEMPORARY TABLE preserve the caller's transaction; ALTER TABLE does not.\n const add = renderMysqlCheckProbe({ dialect, probe, operation: \"add\", expression: params.expression, definition });\n await params.executor({ text: add.text });\n created = true;\n const rows = await params.executor({ text: read.text, values: [] });\n const normalizedDefinition = rows[0]?.[\"Create Table\"];\n const check = typeof normalizedDefinition === \"string\" ? parseSqliteNamedChecks({ tableSql: normalizedDefinition }).find((entry) => entry.name === probe) : undefined;\n if (check === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"MySQL temporary CHECK deparse unavailable\", meta: { reason: \"check-inspection-unavailable\" } });\n return check.expression;\n } finally {\n if (created) {\n const drop = renderMysqlCheckProbe({ dialect, probe, operation: \"drop\" });\n await params.executor({ text: drop.text });\n }\n }\n}\n\n/** Resolve raw CHECK comparisons; unequal unnormalized text never silently produces an empty diff. */\nexport async function prepareCheckDiff(params: { executor: SqlExecutor; from: SchemaIR; to: SchemaIR; dialect: Dialect; probe?: \"none\" | \"rollback\" | \"temporary\"; previous?: DesiredState; replaceChecks?: readonly SqlObjectIdentity[] }): Promise<SchemaIR> {\n assertProbeMode({ dialect: params.dialect, probe: params.probe });\n const models = [];\n for (const model of params.from.models) {\n const table = model.dbName ?? model.name;\n const target = params.to.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect: params.dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect: params.dialect }));\n const checks = [];\n for (const check of model.checks ?? []) {\n const next = target?.checks?.find((entry) => entry.name === check.name);\n if (next === undefined || next.expression === check.expression) { checks.push({ name: check.name, expression: check.expression }); continue; }\n const identity: SqlObjectIdentity = { kind: \"constraint\", constraintType: \"check\", table: qualifiedSqlName({ name: table, namespace: model.namespace, defaultNamespace: await migrationNamespace({ executor: params.executor, dialect: params.dialect }) }), name: check.name };\n if (params.dialect === \"postgres\" && params.probe === \"rollback\") {\n const desired = await deparsePostgresCheck({ executor: params.executor, table: identity.table, expression: next.expression, probe: \"rollback\" });\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Live CHECK inspection unavailable\", meta: { reason: \"check-inspection-unavailable\", identity } });\n if (live.definition.facts.definition === desired) { checks.push(next); continue; }\n checks.push({ name: check.name, expression: check.expression });\n continue;\n }\n if (params.dialect === \"mysql\" && params.probe === \"temporary\") {\n const desired = await deparseMysqlCheck({ executor: params.executor, table: identity.table, expression: next.expression, probe: \"temporary\" });\n const live = await inspectSqlObject({ executor: params.executor, dialect: params.dialect, identity });\n if (live.state !== \"present\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Live CHECK inspection unavailable\", meta: { reason: \"check-inspection-unavailable\", identity } });\n checks.push(desired === live.definition.facts.definition ? next : { name: check.name, expression: check.expression });\n continue;\n }\n const previous = params.previous?.schema.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect: params.dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect: params.dialect }))?.checks?.find((entry) => entry.name === check.name);\n if (previous !== undefined) {\n // The planner verified this independent baseline before comparing authored text.\n checks.push(previous.expression === next.expression ? next : { name: check.name, expression: check.expression });\n continue;\n }\n if (params.replaceChecks?.some((entry) => sqlObjectKey({ identity: entry }) === sqlObjectKey({ identity }))) { checks.push({ name: check.name, expression: check.expression }); continue; }\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Cannot establish CHECK equivalence for ${table}.${check.name}; request a rollback probe or an explicit replacement`, meta: { reason: \"explicit-replacement-required\", identity } });\n }\n models.push({ ...model, checks });\n }\n return { ...params.from, models };\n}\n",
|
|
19
|
+
"/**\n * Postgres / PGlite introspection: live database → SchemaIR.\n *\n * Representation contract (the differ's round-trip depends on it, LEARNINGS):\n *\n * - Type mapping is the REVERSE of dialect-matrix §2; `nativeType` is set only\n * when the column's type is NOT the canonical mapping for its scalar.\n * - Identity columns and `nextval(...)` defaults → `@default(autoincrement())`.\n * - Enum ARRAY columns (`data_type = 'ARRAY'`, `udt_name = '_EnumName'`) are\n * enum lists — never `String[]`.\n * - Unknown column types (tsvector, geometry, …) become `isUnsupported` fields\n * with the raw type in `nativeType` — kept, not dropped.\n * - FK/join-table representation comes from introspect/shared.ts — the ONE\n * structural rule every dialect introspector uses.\n * - Views (`isView: true`) are returned with their columns only.\n * - The `_vibe_migrations` bookkeeping table is skipped.\n * - Namespace scope is explicit; omission retains the legacy public catalog.\n */\n\nimport { renderExclusionCatalog } from \"@vibeorm/sql\";\nimport { parsePgArrayLiteral } from \"@vibeorm/sql\";\nimport { scalarListDefault } from \"@vibeorm/schema\";\nimport { exactIntegerLiteral } from \"@vibeorm/schema\";\nimport { postgresDialect, renderRlsReadinessQuery, renderPostgresPhysicalCatalog, renderPostgresIndexKeys, renderMigrationObjectQuery } from \"@vibeorm/sql\";\n\nimport { VibeError, assertSqlNamespace, isReservedClientName } from \"@vibeorm/schema\";\nimport type {\n CheckIR,\n DefaultValueIR,\n EnumIR,\n FieldIR,\n FieldType,\n IndexIR,\n ModelIR,\n ScalarType,\n SchemaIR,\n} from \"@vibeorm/schema\";\nimport { CANONICAL_UDT, NON_CANONICAL_UDT, PG_CHAR_TO_CASCADE_ACTION, isNumericScalar, normalizeNativeType, parseUnsupportedPostgresType } from \"../postgres-types.ts\";\nimport {\n addFkRelations,\n addJoinTableRelations,\n detectJoinTable,\n} from \"./shared.ts\";\nimport type { FkGroup, IntrospectedIndex, JoinTableInfo } from \"./shared.ts\";\nimport type { SqlExecutor } from \"../types.ts\";\nimport { physicalNameKey } from \"../normalize.ts\";\nimport type { PostgresPhysicalCatalogQuery } from \"@vibeorm/sql\";\nimport { resolvePostgresTypeIdentities } from \"../postgres-type-identity.ts\";\nimport { projectPostgresRls, verifyPostgresRls } from \"./postgres-rls.ts\";\n\n// ─── Row shapes ───────────────────────────────────────────────────\n\ntype ColumnRow = {\n table: string;\n name: string;\n dataType: string;\n udtName: string;\n udtNamespace: string;\n nullable: boolean;\n identity: boolean;\n columnDefault: string | null;\n datetimePrecision: number | null;\n charMaxLength: number | null;\n numericPrecision: number | null;\n numericScale: number | null;\n /** `format_type(...)` — carries type modifiers of non-catalog types (vector(3)). */\n fullType: string | null;\n};\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/** Introspect a live postgres/pglite database in explicitly selected namespaces. */\nexport async function introspectPostgres(params: {\n executor: SqlExecutor;\n namespaces?: readonly string[];\n /** Trusted policy declaration; missing this refuses lossy RLS introspection/export. */\n rlsSchema?: SchemaIR;\n /** The caller owns BEGIN/COMMIT, keeping probe locks through subsequent migration DDL. */\n inTransaction?: boolean;\n requireInstalledRls?: boolean;\n}): Promise<SchemaIR> {\n const { executor } = params;\n if (params.inTransaction !== true) await executor({ text: \"BEGIN\" });\n try {\n const savedPath = await executor(renderRlsReadinessQuery({ dialect: postgresDialect, query: \"readSearchPath\" }));\n const searchPath = savedPath[0]?.searchPath;\n if (typeof searchPath !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot read the migration search_path\" });\n const matched = await verifyPostgresRls({ executor, ...(params.rlsSchema === undefined ? {} : { schema: params.rlsSchema }), ...(params.requireInstalledRls === undefined ? {} : { requireInstalled: params.requireInstalledRls }) }).then(\n (verified) => verified,\n (error: unknown) => {\n if (error instanceof VibeError) throw error;\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Native RLS verification could not complete. Check migration privileges and supply the deployed schema as previousSchema/rlsSchema before changing referenced columns.\", meta: { reason: \"rls-verification-unavailable\" }, cause: error });\n },\n );\n // Only policy verification uses the empty path. Physical definitions must\n // deparse in the caller's context, just like direct catalog verification;\n // otherwise native-enum predicates gain qualifiers only in replayed IR.\n await executor(renderRlsReadinessQuery({ dialect: postgresDialect, query: \"setSearchPath\", searchPath }));\n const physical = await introspectPhysicalPostgres({ executor, namespaces: params.namespaces ?? [\"public\", ...params.rlsSchema?.models.flatMap((model) => model.namespace === undefined ? [] : [model.namespace]) ?? []] });\n return projectPostgresRls({ physical, ...(params.rlsSchema === undefined ? {} : { declared: params.rlsSchema }), matched });\n } finally {\n // Introspection/probes never commit database changes; an outer migration retains its locks.\n if (params.inTransaction !== true) await executor({ text: \"ROLLBACK\" });\n }\n}\n\n/** Read the physical catalog only; no policy probes, locks or transaction statements. */\nexport async function introspectPhysicalPostgres(params: { executor: SqlExecutor; namespaces?: readonly string[] }): Promise<SchemaIR> {\n const { executor } = params;\n const namespaces = [...new Set(params.namespaces ?? [\"public\"])];\n const physicalNames = new Map<string, { namespace: string; name: string }>();\n const enumIdentities = new Map<string, { namespace: string; name: string }>();\n const namespaceObjects = [];\n const read = async (query: PostgresPhysicalCatalogQuery): Promise<Record<string, unknown>[]> => {\n const groups = await Promise.all(namespaces.map(async (namespace) => {\n assertSqlNamespace({ namespace, dialect: \"postgres\" });\n const sql = renderPostgresPhysicalCatalog({ dialect: postgresDialect, namespace, query });\n const rows = await executor({ text: sql.text, values: [...sql.values] });\n return rows.map((row) => {\n const name = typeof row.table_name === \"string\" ? row.table_name : undefined;\n const table = name === undefined ? undefined : physicalNameKey({ namespace, name });\n if (table !== undefined && name !== undefined) physicalNames.set(table, { namespace, name });\n const typeName = typeof row.type_name === \"string\" ? row.type_name : undefined;\n const enumKey = typeName === undefined ? undefined : physicalNameKey({ namespace, name: typeName });\n if (enumKey !== undefined && typeName !== undefined) enumIdentities.set(enumKey, { namespace, name: typeName });\n return { ...row, ...(table === undefined ? {} : { table_name: table }), ...(enumKey === undefined ? {} : { type_name: enumKey }), ...(typeof row.foreign_table_name === \"string\" ? { foreign_table_name: physicalNameKey({ namespace: typeof row.foreign_namespace === \"string\" ? row.foreign_namespace : namespace, name: row.foreign_table_name }) } : {}) };\n });\n }));\n return groups.flat();\n };\n for (const namespace of namespaces) {\n if (namespace === \"public\") continue;\n const query = renderMigrationObjectQuery({ dialect: postgresDialect, identity: { kind: \"namespace\", name: namespace } });\n if ((await executor({ text: query.text, values: [...query.values] })).length > 0) namespaceObjects.push({ id: `namespace:${namespace}`, dialect: \"postgres\" as const, identity: { kind: \"namespace\" as const, name: namespace }, create: [], drop: [], dependsOn: [] });\n }\n const [tableRows, viewRows, columnRows, constraintRows, fkRows, enumRows, indexRows, checkRows, exclusionRows] = await Promise.all([\n read(\"tables\"), read(\"views\"), read(\"columns\"), read(\"constraints\"), read(\"foreignKeys\"), read(\"enums\"), read(\"indexes\"), read(\"checks\"),\n Promise.all(namespaces.map(async (namespace) => (await executor({ text: renderExclusionCatalog({ dialect: postgresDialect, namespace }) })).map((row): Record<string, unknown> => ({ ...row, table_name: physicalNameKey({ namespace, name: String(row.table_name) }) })))).then((rows) => rows.flat()),\n ]);\n const keysQuery = renderPostgresIndexKeys({ dialect: postgresDialect });\n const indexKeys = await executor({ text: keysQuery.text, values: [...keysQuery.values] });\n if (indexKeys.some((row) => typeof row.table_namespace !== \"string\" || typeof row.table_name !== \"string\" || typeof row.index_name !== \"string\" || typeof row.method !== \"string\" || typeof row.unique !== \"boolean\" || typeof row.descending !== \"boolean\" || typeof row.exact_default !== \"boolean\" && row.column_name !== null || typeof row.operator_namespace !== \"string\" || typeof row.operator_name !== \"string\" || !Number.isSafeInteger(Number(row.ordinal)) || Number(row.ordinal) < 1)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL index-key identity is incomplete\", meta: { reason: \"index-inspection-unavailable\" } });\n\n const tables = tableRows.map((row) => row.table_name as string);\n const views = viewRows.map((row) => row.table_name as string);\n\n const columns: ColumnRow[] = columnRows.map((row) => ({\n table: row.table_name as string,\n name: row.column_name as string,\n dataType: row.data_type as string,\n udtName: row.udt_name as string,\n udtNamespace: typeof row.udt_schema === \"string\" ? row.udt_schema : \"public\",\n nullable: (row.is_nullable as string) === \"YES\",\n identity: (row.is_identity as string | null) === \"YES\",\n columnDefault: (row.column_default as string | null) ?? null,\n datetimePrecision: toNumberOrNull(row.datetime_precision),\n charMaxLength: toNumberOrNull(row.character_maximum_length),\n numericPrecision: toNumberOrNull(row.numeric_precision),\n numericScale: toNumberOrNull(row.numeric_scale),\n fullType: (row.full_type as string | null) ?? null,\n }));\n\n // Enums.\n const enums: EnumIR[] = [];\n {\n const valuesByName = new Map<string, string[]>();\n for (const row of enumRows) {\n const name = row.type_name as string;\n const list = valuesByName.get(name);\n if (list === undefined) valuesByName.set(name, [row.enum_value as string]);\n else list.push(row.enum_value as string);\n }\n for (const [name, values] of valuesByName) enums.push({ name, values });\n }\n const enumNames = new Set(enums.map((entry) => entry.name));\n\n // Constraints → PKs, single-column uniques, multi-column uniques.\n const pkByTable = new Map<string, string[]>();\n const pkNames = new Map<string, string>();\n const uniquesByConstraint = new Map<string, { table: string; name: string; columns: string[] }>();\n const constraintNames = new Set<string>();\n for (const row of constraintRows) {\n const table = row.table_name as string;\n const constraintName = row.constraint_name as string;\n const columnName = row.column_name as string;\n constraintNames.add(JSON.stringify([table, constraintName]));\n if ((row.constraint_type as string) === \"PRIMARY KEY\") {\n pkNames.set(table, constraintName);\n const list = pkByTable.get(table);\n if (list === undefined) pkByTable.set(table, [columnName]);\n else list.push(columnName);\n } else {\n const constraintKey = JSON.stringify([table, constraintName]);\n const entry = uniquesByConstraint.get(constraintKey);\n if (entry === undefined) uniquesByConstraint.set(constraintKey, { table, name: constraintName, columns: [columnName] });\n else entry.columns.push(columnName);\n }\n }\n\n // CHECK constraints, grouped per table (name + inner expression).\n const checksByTable = new Map<string, CheckIR[]>();\n for (const row of checkRows) {\n const table = row.table_name as string;\n const name = row.constraint_name as string;\n const expression = stripCheckDefinition({ definition: String(row.definition ?? \"\") });\n const list = checksByTable.get(table);\n if (list === undefined) checksByTable.set(table, [{ name, expression, catalogExpression: true }]);\n else list.push({ name, expression, catalogExpression: true });\n }\n\n // FK groups (composite support — actions live on the constraint).\n type MutableFkGroup = {\n constraintName: string;\n table: string;\n columns: string[];\n refTable: string;\n refColumns: string[];\n onDelete: FkGroup[\"onDelete\"];\n onUpdate: FkGroup[\"onUpdate\"];\n };\n const fkGroupsByName = new Map<string, MutableFkGroup>();\n for (const row of fkRows) {\n const constraintName = row.constraint_name as string;\n const key = JSON.stringify([row.table_name, constraintName]);\n const existing = fkGroupsByName.get(key);\n if (existing === undefined) {\n fkGroupsByName.set(key, {\n constraintName,\n table: row.table_name as string,\n columns: [row.column_name as string],\n refTable: row.foreign_table_name as string,\n refColumns: [row.foreign_column_name as string],\n onDelete: PG_CHAR_TO_CASCADE_ACTION[(row.on_delete_char as string) ?? \"a\"] ?? \"NoAction\",\n onUpdate: PG_CHAR_TO_CASCADE_ACTION[(row.on_update_char as string) ?? \"a\"] ?? \"NoAction\",\n });\n } else {\n existing.columns.push(row.column_name as string);\n existing.refColumns.push(row.foreign_column_name as string);\n }\n }\n const fkGroups: FkGroup[] = [...fkGroupsByName.values()].map((group) => ({\n ...group,\n required: group.columns.every((columnName) => {\n const column = columns.find((c) => c.table === group.table && c.name === columnName);\n return column === undefined ? true : !column.nullable;\n }),\n }));\n\n // Indexes (parsed from indexdef).\n const indexes: IntrospectedIndex[] = [];\n for (const row of indexRows) {\n // Exclusions own their index. They are never independent DROP INDEX targets.\n if (row.backing_constraint_type === \"x\") continue;\n const operands = indexKeys.filter((key) => physicalNameKey({ namespace: String(key.table_namespace), name: String(key.table_name) }) === row.table_name && key.index_name === row.index_name);\n if (row.plain_columns === true && operands.length !== Number(row.key_count)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Plain index keys could not be read completely; refusing name-only operator-class introspection\", meta: { reason: \"index-inspection-unavailable\", table: row.table_name, index: row.index_name } });\n if (operands.length > 0) {\n // Expressions remain represented by the existing index path; plain keys\n // and operator classes are read structurally, never split from indexdef.\n if (operands.every((key) => typeof key.column_name === \"string\")) indexes.push({\n table: String(row.table_name), name: String(row.index_name), unique: operands[0]!.unique === true, kind: String(operands[0]!.method),\n columns: operands.map((key) => ({ name: String(key.column_name), desc: key.descending === true, ...(key.exact_default === true ? {} : { operatorClass: { namespace: String(key.operator_namespace), name: String(key.operator_name) } }) })),\n ...(typeof operands[0]!.predicate === \"string\" ? { where: operands[0]!.predicate } : {}),\n ...(operands[0]!.nulls_not_distinct === true ? { nullsNotDistinct: true } : {}),\n });\n else {\n const parsed = parseIndexDef({ table: String(row.table_name), name: String(row.index_name), def: String(row.index_def) });\n if (parsed !== null) indexes.push(parsed);\n }\n } else {\n const parsed = parseIndexDef({ table: String(row.table_name), name: String(row.index_name), def: String(row.index_def) });\n if (parsed !== null) indexes.push(parsed);\n }\n }\n\n // Implicit join tables (the shared structural rule).\n const joinTables = new Map<string, JoinTableInfo>();\n for (const table of tables) {\n const physicalTable = physicalNames.get(table)!;\n if (!physicalTable.name.startsWith(\"_\")) continue;\n const tableFks = fkRows.filter((row) => row.table_name === table);\n const tableIndexes = indexRows.filter((row) => row.table_name === table);\n if (pkByTable.has(table) || (checksByTable.get(table)?.length ?? 0) > 0 || exclusionRows.some((row) => row.table_name === table)) continue;\n if (!tableFks.every((row) => row.validated === true && row.deferrable === false && row.triggers_enabled === true)) continue;\n if (tableIndexes.length !== 2 || !tableIndexes.every((row) => row.valid === true && row.ready === true && row.immediate === true && row.plain_columns === true && typeof row.key_count === \"number\" && row.key_count === row.attribute_count)) continue;\n if (tableFks.some((row) => {\n const source = columnRows.find((column) => column.table_name === table && column.column_name === row.column_name);\n const target = columnRows.find((column) => column.table_name === row.foreign_table_name && column.column_name === row.foreign_column_name);\n return source === undefined || target === undefined || typeof source.full_type !== \"string\" || source.full_type.length === 0 || source.full_type !== target.full_type\n || source.column_default !== null || source.is_identity !== \"NO\" || source.is_generated !== \"NEVER\" || source.is_nullable !== \"NO\"\n || source.collation_name === undefined || source.collation_name !== target.collation_name;\n })) continue;\n if (tableFks.some((row) => row.foreign_namespace !== undefined && row.foreign_namespace !== physicalTable.namespace)) continue;\n const detected = detectJoinTable({\n table: physicalTable.name,\n columnNames: columns.filter((column) => column.table === table).map((column) => column.name),\n fkGroups: fkGroups.filter((group) => group.table === table).map((group) => ({ ...group, table: physicalTable.name, refTable: physicalNames.get(group.refTable)?.name ?? group.refTable })),\n indexes: indexes.filter((index) => index.table === table).map((index) => ({ ...index, table: physicalTable.name })),\n });\n if (detected !== null) joinTables.set(table, { ...detected, ...(physicalTable.namespace === \"public\" && namespaces.length === 1 ? {} : { relationName: detected.relationName ?? physicalTable.name.slice(1) }), tableA: physicalNameKey({ namespace: physicalTable.namespace, name: detected.tableA }), tableB: physicalNameKey({ namespace: physicalTable.namespace, name: detected.tableB }) });\n }\n\n // Models.\n const models: ModelIR[] = [];\n for (const table of tables) {\n if (joinTables.has(table)) continue;\n models.push(\n buildModel({\n table,\n physicalTable: physicalNames.get(table)!.name,\n isView: false,\n columns,\n pkByTable,\n pkNames,\n uniquesByConstraint,\n constraintNames,\n indexes,\n enumNames,\n exclusions: exclusionRows.filter((row) => row.table_name === table).map((row) => ({ name: String(row.constraint_name), definition: String(row.definition), requiredExtensions: [], catalogDefinition: true as const })),\n checks: checksByTable.get(table) ?? [],\n }),\n );\n }\n for (const view of views) {\n models.push(\n buildModel({\n table: view,\n physicalTable: physicalNames.get(view)!.name,\n isView: true,\n columns,\n pkByTable,\n pkNames,\n uniquesByConstraint,\n constraintNames,\n indexes: [],\n enumNames,\n checks: [],\n }),\n );\n }\n\n // Relations: FK side + inverse list side, then implicit M2M list sides.\n addFkRelations({ models, fkGroups, joinTables });\n addJoinTableRelations({ models, joinTables });\n\n const logicalNames = new Set([...physicalNames.values(), ...enumIdentities.values()].map((entry) => entry.name));\n const logicalName = (params: { key: string; name: string; duplicates: boolean }): string => {\n if (!params.duplicates && /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(params.name) && !isReservedClientName({ name: params.name.charAt(0).toLowerCase() + params.name.slice(1) })) return params.name;\n const hex = Array.from(new TextEncoder().encode(params.key), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n let name = `VibePhysical_${hex}`;\n while (logicalNames.has(name)) name += \"_\";\n logicalNames.add(name);\n return name;\n };\n const modelNames = new Map(models.map((model) => {\n const identity = physicalNames.get(model.name)!;\n const duplicates = [...physicalNames.values()].filter((entry) => entry.name === identity.name).length > 1;\n return [model.name, logicalName({ key: model.name, name: identity.name, duplicates })];\n }));\n const enumLogicalNames = new Map(enums.map((entry) => {\n const identity = enumIdentities.get(entry.name)!;\n const duplicates = [...enumIdentities.values()].filter((candidate) => candidate.name === identity.name).length > 1;\n return [entry.name, logicalName({ key: entry.name, name: identity.name, duplicates })];\n }));\n const qualifiedModels = models.map((model) => {\n const identity = physicalNames.get(model.name)!;\n const name = modelNames.get(model.name)!;\n const { dbName: _physicalName, ...metadata } = model;\n return { ...metadata, name, ...(name === identity.name ? {} : { dbName: identity.name }), ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }),\n fields: model.fields.map((field) => {\n if (typeof field.type === \"string\") return field;\n const identity = enumIdentities.get(field.type.enum)!;\n return { ...field, type: { enum: enumLogicalNames.get(field.type.enum)!, ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }) } };\n }),\n relations: model.relations.map((relation) => ({ ...relation, name: /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(relation.name) ? relation.name : `relation_${Array.from(new TextEncoder().encode(relation.name), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`, model: name, targetModel: modelNames.get(relation.targetModel) ?? relation.targetModel })),\n };\n });\n const qualifiedEnums = enums.map((entry) => {\n const identity = enumIdentities.get(entry.name)!;\n const name = enumLogicalNames.get(entry.name)!;\n return { ...entry, name, ...(name === identity.name ? {} : { dbName: identity.name }), ...(identity.namespace === \"public\" ? {} : { namespace: identity.namespace }) };\n });\n const resolved = await resolvePostgresTypeIdentities({ executor, mode: \"catalog\", schema: {\n datasource: { provider: \"postgresql\" }, models: qualifiedModels, enums: qualifiedEnums, extensions: [], ...(namespaceObjects.length === 0 ? {} : { migrationObjects: namespaceObjects }),\n } });\n if (resolved.unavailable.length > 0) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL column type identity could not be read\", meta: { reason: \"type-inspection-unavailable\", columns: resolved.unavailable } });\n return resolved.schema;\n}\n\n// ─── Model building ───────────────────────────────────────────────\n\nfunction buildModel(params: {\n table: string;\n physicalTable: string;\n isView: boolean;\n columns: readonly ColumnRow[];\n pkByTable: ReadonlyMap<string, string[]>;\n pkNames: ReadonlyMap<string, string>;\n uniquesByConstraint: ReadonlyMap<string, { table: string; name: string; columns: string[] }>;\n constraintNames: ReadonlySet<string>;\n indexes: readonly IntrospectedIndex[];\n enumNames: ReadonlySet<string>;\n exclusions?: ModelIR[\"exclusions\"];\n checks: readonly CheckIR[];\n}): ModelIR {\n const { table, isView, columns, pkByTable, uniquesByConstraint, constraintNames, indexes, enumNames } =\n params;\n\n const tableColumns = columns.filter((column) => column.table === table);\n const pk = pkByTable.get(table) ?? [];\n\n // Single-column uniqueness (constraints + unique indexes) → field.isUnique.\n const uniqueSingles = new Set<string>();\n const multiUniques: { name: string; columns: string[] }[] = [];\n for (const unique of uniquesByConstraint.values()) {\n const name = unique.name;\n if (unique.table !== table) continue;\n if (unique.columns.length === 1) uniqueSingles.add(unique.columns[0] as string);\n multiUniques.push({ name, columns: unique.columns });\n }\n const tableIndexes = indexes.filter(\n (index) => index.table === table && !constraintNames.has(JSON.stringify([table, index.name])),\n );\n for (const index of tableIndexes) {\n if (!index.unique) continue;\n // A partial or NULLS-NOT-DISTINCT unique is NOT a plain field @unique —\n // folding it would drop the predicate/flag and make every diff recreate\n // the index. Those stay model-level indexes below.\n if (index.columns.length === 1 && index.where === undefined && index.nullsNotDistinct !== true && index.columns[0]?.operatorClass === undefined) {\n uniqueSingles.add((index.columns[0] as { name: string }).name);\n }\n }\n\n const fields: FieldIR[] = tableColumns.map((column) =>\n buildField({ column, pk, uniqueSingles, enumNames }),\n );\n\n // Indexes: multi-column unique constraints + all non-constraint indexes\n // (single-column uniques were folded into the fields above).\n const modelIndexes: IndexIR[] = [];\n for (const unique of multiUniques) {\n modelIndexes.push({\n name: unique.name,\n constraintName: unique.name,\n kind: \"unique\",\n fields: unique.columns.map((name) => ({ name })),\n });\n }\n for (const index of tableIndexes) {\n if (\n index.unique &&\n index.columns.length === 1 &&\n index.where === undefined &&\n index.nullsNotDistinct !== true &&\n index.columns[0]?.operatorClass === undefined &&\n index.name === `${params.physicalTable}_${index.columns[0]!.name}_key`\n ) {\n continue; // folded into field.isUnique above\n }\n modelIndexes.push({\n name: index.name,\n kind: index.unique ? \"unique\" : index.kind,\n fields: index.columns.map((column) => ({\n name: column.name,\n ...(column.desc ? { sort: \"desc\" as const } : {}),\n ...(column.operatorClass === undefined ? {} : { operatorClass: column.operatorClass }),\n })),\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n });\n }\n\n return {\n name: table,\n dbName: params.physicalTable,\n fields,\n relations: [],\n indexes: modelIndexes,\n ...(params.exclusions?.length ? { exclusions: params.exclusions } : {}),\n ...(params.checks.length === 0 ? {} : { checks: params.checks }),\n isView,\n ...(pk.length > 1 ? { primaryKey: { fields: pk } } : {}),\n ...(params.pkNames.get(table) === undefined ? {} : { primaryKeyConstraintName: params.pkNames.get(table)! }),\n };\n}\n\n/** `pg_get_constraintdef` → the inner expression: `CHECK ((amount >= 0))` → `(amount >= 0)`. */\nfunction stripCheckDefinition(params: { definition: string }): string {\n const trimmed = params.definition.trim();\n const match = trimmed.match(/^CHECK\\s*\\((.*)\\)$/is);\n return match === null ? trimmed : (match[1] as string).trim();\n}\n\nfunction buildField(params: {\n column: ColumnRow;\n pk: readonly string[];\n uniqueSingles: ReadonlySet<string>;\n enumNames: ReadonlySet<string>;\n}): FieldIR {\n const { column, pk, uniqueSingles, enumNames } = params;\n const mapped = reverseMapType({ column, enumNames });\n const isId = pk.length === 1 && pk[0] === column.name;\n const defaultValue = parseColumnDefault({ column, mapped });\n\n return {\n name: column.name,\n type: mapped.type,\n isList: mapped.isList,\n isOptional: column.nullable,\n isId,\n isUnique: uniqueSingles.has(column.name),\n isUpdatedAt: false,\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(mapped.nativeType === undefined ? {} : { nativeType: mapped.nativeType }),\n ...(mapped.isUnsupported === true ? { isUnsupported: true as const } : {}),\n };\n}\n\n// ─── Reverse type mapping (dialect-matrix §2, reversed) ───────────\n\ntype MappedType = {\n type: FieldType;\n isList: boolean;\n nativeType?: string;\n isUnsupported?: true;\n};\n\n\nfunction reverseMapType(params: { column: ColumnRow; enumNames: ReadonlySet<string> }): MappedType {\n const { column, enumNames } = params;\n const isList = column.dataType === \"ARRAY\";\n const udt = isList ? column.udtName.replace(/^_/, \"\") : column.udtName;\n\n // Enum (scalar or array — the LEARNINGS `_EnumName` lesson).\n const enumKey = physicalNameKey({ namespace: column.udtNamespace, name: udt });\n if (enumNames.has(enumKey)) {\n return { type: { enum: enumKey }, isList };\n }\n\n const canonical = CANONICAL_UDT[udt];\n if (canonical !== undefined) {\n const nativeType = nonCanonicalModifier({ column, udt, scalar: canonical });\n return { type: canonical, isList, ...(nativeType === undefined ? {} : { nativeType }) };\n }\n\n const nonCanonical = NON_CANONICAL_UDT[udt];\n if (nonCanonical !== undefined) {\n return { type: nonCanonical, isList, nativeType: withModifier({ column, udt }) };\n }\n\n // Unknown type → unsupported column, raw type preserved (F3: keep, don't\n // drop). `format_type` keeps modifiers (`vector(3)`), so an extension-lowered\n // column round-trips diff-clean against its declared native type.\n const raw = column.fullType ?? udt;\n return {\n type: \"String\",\n isList: false,\n nativeType: isList && !raw.endsWith(\"[]\") ? `${raw}[]` : raw,\n isUnsupported: true,\n };\n}\n\n/**\n * For canonical base types, return a nativeType only when a modifier makes the\n * column diverge from the canonical mapping (timestamptz(3), numeric(10,2)).\n * Bare `timestamptz` is the canonical DateTime mapping and postgres reports\n * its default precision as 6, so precision 6 (or none) means \"no override\";\n * every other precision is carried truthfully — the differ's equivalence\n * class, not this function, decides that timestamptz(3) needs no ALTER.\n */\nfunction nonCanonicalModifier(params: {\n column: ColumnRow;\n udt: string;\n scalar: ScalarType;\n}): string | undefined {\n const { column, udt, scalar } = params;\n // information_schema omits element modifiers on arrays; format_type keeps\n // them, but spells a timestamptz element `timestamp(3) with time zone[]`,\n // which only the temporal parser reads. Precision 6 is the bare default.\n if (column.dataType === \"ARRAY\" && column.fullType !== null) {\n const temporal = parseUnsupportedPostgresType({ raw: column.fullType });\n const element = temporal?.name === \"timestamptz\"\n ? `timestamptz${temporal.modifier}`\n : normalizeNativeType({ raw: column.fullType }).replace(/\\[\\]$/, \"\");\n if (element !== \"timestamptz(6)\" && /^(numeric|timestamptz)\\([\\d,]+\\)$/.test(element)) return element;\n }\n if (scalar === \"DateTime\" && udt === \"timestamptz\") {\n const precision = column.datetimePrecision;\n return precision === null || precision === 6 ? undefined : `timestamptz(${precision})`;\n }\n if (scalar === \"Decimal\" && udt === \"numeric\") {\n if (column.numericPrecision === null) return undefined;\n const scale = column.numericScale ?? 0;\n return `numeric(${column.numericPrecision},${scale})`;\n }\n return undefined;\n}\n\n/** Render `udt(modifier)` for non-canonical types that carry one. */\nfunction withModifier(params: { column: ColumnRow; udt: string }): string {\n const { column, udt } = params;\n // information_schema omits character_maximum_length for array elements\n // (varchar, char, bit, varbit). format_type preserves the element typmod;\n // keep it so push/pull converges.\n if ((udt === \"varchar\" || udt === \"bpchar\" || udt === \"bit\" || udt === \"varbit\") && column.dataType === \"ARRAY\" && column.fullType !== null) {\n const elementType = normalizeNativeType({ raw: column.fullType }).replace(/\\[\\]$/, \"\");\n if (/^(varchar|char|bit|varbit)\\(\\d+\\)$/.test(elementType)) return elementType;\n }\n if ((udt === \"varchar\" || udt === \"bpchar\") && column.charMaxLength !== null) {\n return `${udt === \"bpchar\" ? \"char\" : \"varchar\"}(${column.charMaxLength})`;\n }\n if (udt === \"bpchar\") return \"char\";\n if ((udt === \"bit\" || udt === \"varbit\") && column.charMaxLength !== null) return `${udt}(${column.charMaxLength})`;\n // information_schema reports no precision for an array column; format_type\n // keeps it (`timestamp(3) without time zone[]`), so read it from there.\n if ((udt === \"timestamp\" || udt === \"time\" || udt === \"timetz\") && column.dataType === \"ARRAY\" && column.fullType !== null) {\n const element = parseUnsupportedPostgresType({ raw: column.fullType });\n return element === undefined || element.modifier === \"\" || element.modifier === \"(6)\" ? udt : `${udt}${element.modifier}`;\n }\n // Precision 6 is postgres's default for every time type: an undeclared\n // precision reads back as 6, and `time(6)` normalizes to the same key.\n if ((udt === \"timestamp\" || udt === \"time\" || udt === \"timetz\") && column.datetimePrecision !== null && column.datetimePrecision !== 6) {\n return `${udt}(${column.datetimePrecision})`;\n }\n return udt;\n}\n\n// ─── Default parsing ──────────────────────────────────────────────\n\nfunction parseColumnDefault(params: {\n column: ColumnRow;\n mapped: MappedType;\n}): DefaultValueIR | undefined {\n const { column, mapped } = params;\n\n if (column.identity) return { kind: \"autoincrement\" };\n\n const raw = column.columnDefault;\n if (raw === null) return undefined;\n if (raw.startsWith(\"NULL::\")) return undefined;\n\n if (/^nextval\\('(?:[^']|'')*'::regclass\\)$/.test(raw)) return { kind: \"autoincrement\" };\n if (raw === \"now()\" || raw.startsWith(\"CURRENT_TIMESTAMP\")) return { kind: \"now\" };\n if (raw === \"true\" || raw === \"false\") return { kind: \"literal\", value: raw === \"true\" };\n if (/^-?\\d+(\\.\\d+)?$/.test(raw)) return { kind: \"literal\", value: /^-?\\d+$/.test(raw) ? exactIntegerLiteral({ text: raw }) : Number(raw) };\n\n // 'value' or 'value'::type — embedded quotes arrive doubled.\n const quoted = raw.match(/^'((?:[^']|'')*)'(::.*)?$/);\n if (quoted !== null) {\n const value = (quoted[1] as string).replaceAll(\"''\", \"'\");\n if (mapped.isList) {\n const elements = parsePgArrayLiteral({ literal: value });\n if (elements !== null && !elements.includes(null)) {\n const decoded = elements.map((entry) => mapped.type === \"Boolean\" ? entry === \"t\" || entry === \"true\" :\n mapped.type === \"Int\" || mapped.type === \"Float\" ? Number(entry) : entry);\n return { kind: \"list\", values: scalarListDefault({ type: mapped.type, values: decoded }) };\n }\n return { kind: \"dbgenerated\", sql: raw };\n }\n if (typeof mapped.type === \"object\") return { kind: \"enumValue\", value };\n if (isNumericScalar({ type: mapped.type }) && /^-?\\d+(\\.\\d+)?$/.test(value)) {\n return { kind: \"literal\", value: /^-?\\d+$/.test(value) ? exactIntegerLiteral({ text: value }) : Number(value) };\n }\n // A cast to a non-string type (e.g. '{}'::text[]) is not a plain literal.\n const cast = quoted[2];\n if (cast !== undefined && cast !== \"\" && mapped.isList) {\n return { kind: \"dbgenerated\", sql: raw };\n }\n return { kind: \"literal\", value };\n }\n\n return { kind: \"dbgenerated\", sql: raw };\n}\n\n// ─── Index parsing ────────────────────────────────────────────────\n\n/**\n * Parse a `pg_indexes.indexdef` line:\n * `CREATE [UNIQUE] INDEX name ON schema.table USING method (cols) [WHERE pred]`.\n * The column list is scanned with balanced parentheses (expressions like\n * `lower(email)` and `WHERE` predicates both contain parens, so a regex over\n * the whole line cannot split them). Returns null for definitions that don't\n * match — never expected from pg.\n */\nfunction parseIndexDef(params: {\n table: string;\n name: string;\n def: string;\n}): IntrospectedIndex | null {\n const { table, name, def } = params;\n const head = def.match(/^CREATE (UNIQUE )?INDEX .*? USING (\\w+) \\(/);\n if (head === null) return null;\n\n // Scan the balanced column list starting right after the opening paren.\n const start = (head.index ?? 0) + head[0].length;\n let depth = 1;\n let end = -1;\n for (let position = start; position < def.length; position += 1) {\n const char = def[position];\n if (char === \"(\") depth += 1;\n else if (char === \")\") {\n depth -= 1;\n if (depth === 0) {\n end = position;\n break;\n }\n }\n }\n if (end === -1) return null;\n\n const columns = splitTopLevel({ text: def.slice(start, end) }).map((entry) => {\n const trimmed = entry.trim();\n const desc = / DESC$/i.test(trimmed);\n const nameOnly = trimmed.replace(/ (DESC|ASC)( NULLS (FIRST|LAST))?$/i, \"\");\n return { name: nameOnly.replaceAll('\"', \"\"), desc };\n });\n\n const tail = def.slice(end + 1).trim();\n // INCLUDE, storage options and TABLESPACE can precede WHERE. Only top-level\n // keywords count: an included column named \"WHERE\" is not a predicate.\n let nullsNotDistinct = false;\n let whereRaw: string | undefined;\n let tailDepth = 0;\n let quote: string | undefined;\n for (let position = 0; position < tail.length; position += 1) {\n const char = tail[position]!;\n if (quote !== undefined) {\n if (char === quote) {\n if (tail[position + 1] === quote) position += 1;\n else quote = undefined;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") { quote = char; continue; }\n if (char === \"(\") { tailDepth += 1; continue; }\n if (char === \")\") { tailDepth -= 1; continue; }\n if (tailDepth !== 0 || (position > 0 && !/\\s/.test(tail[position - 1]!))) continue;\n const rest = tail.slice(position);\n if (/^NULLS NOT DISTINCT\\b/i.test(rest)) nullsNotDistinct = true;\n const where = rest.match(/^WHERE\\s+/i);\n if (where !== null) { whereRaw = rest.slice(where[0].length); break; }\n }\n return {\n table,\n name,\n unique: head[1] !== undefined,\n kind: (head[2] as string).toLowerCase(),\n columns,\n ...(whereRaw === undefined ? {} : { where: whereRaw }),\n ...(nullsNotDistinct ? { nullsNotDistinct: true } : {}),\n };\n}\n\n/** Split a parenthesized column list on top-level commas only. */\nfunction splitTopLevel(params: { text: string }): string[] {\n const { text } = params;\n const parts: string[] = [];\n let depth = 0;\n let current = \"\";\n for (const char of text) {\n if (char === \"(\") depth += 1;\n if (char === \")\") depth -= 1;\n if (char === \",\" && depth === 0) {\n parts.push(current);\n current = \"\";\n continue;\n }\n current += char;\n }\n if (current.trim().length > 0) parts.push(current);\n return parts;\n}\n\nfunction toNumberOrNull(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n}\n",
|
|
20
20
|
"/**\n * Introspection helpers shared by ALL dialect introspectors — the join-table\n * detection rule and the relation/naming conventions live HERE, once\n * (LEARNINGS: implicit-M2M conventions must never be re-implemented per\n * consumer). Every dialect introspector produces the same representation:\n *\n * - FKs become an UNNAMED `manyToOne` on the owning model plus an UNNAMED\n * `oneToMany` list side on the target — EXCEPT when the model pair carries\n * more than one unnamed relation pair (mutual FKs, twin FKs to one target,\n * an FK alongside a default-named join table): those FK pairs get a\n * synthesized `@relation` name so `db pull` output re-parses (the parser\n * rejects the unnamed shape as `ambiguous-relation`) and implicit-M2M\n * detection keeps its name keys unique.\n * - Only canonical implicit join tables are compressed: required A/B columns,\n * cascading single-column FKs to primary keys, an unfiltered AB unique index\n * and the B lookup index, with no extra indexes. Noncanonical shapes remain\n * explicit models or refuse when compression cannot preserve their keys.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { CascadeAction, ModelIR, RelationIR, QualifiedSqlName } from \"@vibeorm/schema\";\n\n// ─── Shared shapes ────────────────────────────────────────────────\n\n/** A grouped foreign key (composite-capable), dialect-independent. */\nexport type FkGroup = {\n readonly constraintName: string;\n readonly table: string;\n readonly columns: readonly string[];\n readonly refTable: string;\n readonly refColumns: readonly string[];\n readonly onDelete: CascadeAction;\n readonly onUpdate: CascadeAction;\n /** Every FK column NOT NULL (drives isOptional on the relation). */\n readonly required: boolean;\n};\n\n/** An introspected index in the shape join-table detection needs. */\nexport type IntrospectedIndex = {\n readonly table: string;\n readonly name: string;\n readonly unique: boolean;\n readonly kind: string;\n readonly columns: readonly { readonly name: string; readonly desc: boolean; readonly operatorClass?: QualifiedSqlName }[];\n readonly where?: string;\n /** `UNIQUE NULLS NOT DISTINCT` (postgres 15+). */\n readonly nullsNotDistinct?: boolean;\n};\n\n/** A detected physical join table. */\nexport type JoinTableInfo = {\n readonly tableA: string;\n readonly tableB: string;\n readonly relationName?: string;\n};\n\n// ─── Join-table detection (THE structural rule) ───────────────────\n\n/**\n * Detect whether a physical table is an implicit many-to-many join table:\n * Name and index/FK structure must match the renderer's canonical shape.\n * Referenced primary keys are checked later, once target models exist.\n * Callers remain responsible for refusing unrepresented catalog guarantees.\n */\nexport function detectJoinTable(params: {\n table: string;\n columnNames: readonly string[];\n fkGroups: readonly FkGroup[];\n indexes: readonly IntrospectedIndex[];\n}): JoinTableInfo | null {\n const { table, columnNames, fkGroups, indexes } = params;\n if (!table.startsWith(\"_\")) return null;\n\n const names = [...columnNames].sort();\n if (names.length !== 2 || names[0] !== \"A\" || names[1] !== \"B\") return null;\n\n const tableFks = fkGroups.filter((group) => group.table === table);\n if (tableFks.length !== 2) return null;\n const fkA = tableFks.find((group) => group.columns.length === 1 && group.columns[0] === \"A\");\n const fkB = tableFks.find((group) => group.columns.length === 1 && group.columns[0] === \"B\");\n if (fkA === undefined || fkB === undefined) return null;\n if (fkA.refTable > fkB.refTable || tableFks.some((fk) => !fk.required || fk.onDelete !== \"Cascade\" || fk.onUpdate !== \"Cascade\")) return null;\n\n const tableIndexes = indexes.filter((index) => index.table === table);\n const canonicalAb = (index: IntrospectedIndex): boolean => index.unique && index.kind === \"btree\" && index.where === undefined && index.nullsNotDistinct !== true && index.columns.length === 2 && index.columns[0]?.name === \"A\" && index.columns[1]?.name === \"B\" && index.columns.every((column) => !column.desc && column.operatorClass === undefined);\n const canonicalB = (index: IntrospectedIndex): boolean => !index.unique && index.kind === \"btree\" && index.where === undefined && index.columns.length === 1 && index.columns[0]?.name === \"B\" && !index.columns[0].desc && index.columns[0].operatorClass === undefined;\n if (tableIndexes.length !== 2 || tableIndexes.filter(canonicalAb).length !== 1 || tableIndexes.filter(canonicalB).length !== 1) return null;\n\n const sorted = [fkA.refTable, fkB.refTable].sort();\n const defaultName = `_${sorted[0]}To${sorted[1]}`;\n return {\n tableA: fkA.refTable,\n tableB: fkB.refTable,\n ...(table === defaultName ? {} : { relationName: table.slice(1) }),\n };\n}\n\n// ─── Relation building ────────────────────────────────────────────\n\n/** Add manyToOne + inverse oneToMany relation pairs for every FK group. */\nexport function addFkRelations(params: {\n models: ModelIR[];\n fkGroups: readonly FkGroup[];\n joinTables: ReadonlyMap<string, JoinTableInfo>;\n}): void {\n const { models, fkGroups, joinTables } = params;\n const modelsByName = new Map(models.map((model) => [model.name, model]));\n // Detection happens before models exist. Verify the endpoint keys here,\n // before a compressed result can escape any dialect introspector.\n for (const [table] of joinTables) for (const fk of fkGroups.filter((group) => group.table === table)) {\n const target = modelsByName.get(fk.refTable);\n const primary = target?.primaryKey?.fields ?? target?.fields.filter((field) => field.isId).map((field) => field.name) ?? [];\n const columns = primary.map((name) => target?.fields.find((field) => field.name === name)?.dbName ?? name);\n if (columns.length !== 1 || fk.refColumns.length !== 1 || columns[0] !== fk.refColumns[0]) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `Join table \"${table}\" does not reference the single-column primary key of \"${fk.refTable}\"; automatic join compression is unavailable`, meta: { feature: \"implicitJoinReferencedKey\", table, target: fk.refTable } });\n }\n const relationsByModel = new Map<string, RelationIR[]>();\n const takeName = nameAllocator({ models });\n const ambiguousPairs = detectAmbiguousPairs({ fkGroups, joinTables, modelsByName });\n\n for (const group of fkGroups) {\n if (joinTables.has(group.table)) continue;\n const owner = modelsByName.get(group.table);\n const target = modelsByName.get(group.refTable);\n if (owner === undefined || target === undefined) continue;\n\n // Prisma's pull convention: `<Table>_<col[_col]>To<RefTable>`, carried by\n // BOTH sides so they pair back deterministically on re-parse.\n const relationName = ambiguousPairs.has(modelPairKey({ a: group.table, b: group.refTable }))\n ? `${owner.dbName ?? owner.name}_${group.columns.join(\"_\")}To${target.dbName ?? target.name}`\n : undefined;\n\n const fkSide: RelationIR = {\n name: takeName({ model: owner.name, base: lowerFirst(target.dbName ?? target.name) }),\n model: owner.name,\n targetModel: group.refTable,\n type: \"manyToOne\",\n fields: group.columns,\n references: group.refColumns,\n constraintName: group.constraintName,\n onDelete: group.onDelete,\n onUpdate: group.onUpdate,\n isList: false,\n isOptional: !group.required,\n ...(relationName === undefined ? {} : { relationName }),\n };\n pushRelation({ relationsByModel, relation: fkSide });\n\n const listSide: RelationIR = {\n name: takeName({ model: target.name, base: lowerFirst(owner.dbName ?? owner.name) }),\n model: target.name,\n targetModel: group.table,\n type: \"oneToMany\",\n isList: true,\n isOptional: false,\n ...(relationName === undefined ? {} : { relationName }),\n };\n pushRelation({ relationsByModel, relation: listSide });\n }\n\n applyRelations({ models, relationsByModel });\n}\n\n/** Add the two unnamed oneToMany list sides for every detected join table. */\nexport function addJoinTableRelations(params: {\n models: ModelIR[];\n joinTables: ReadonlyMap<string, JoinTableInfo>;\n}): void {\n const { models, joinTables } = params;\n const modelsByName = new Map(models.map((model) => [model.name, model]));\n const relationsByModel = new Map<string, RelationIR[]>();\n const takeName = nameAllocator({ models });\n\n for (const [, joinTable] of joinTables) {\n const modelA = modelsByName.get(joinTable.tableA);\n const modelB = modelsByName.get(joinTable.tableB);\n if (modelA === undefined || modelB === undefined) continue;\n\n const shared = joinTable.relationName;\n pushRelation({\n relationsByModel,\n relation: {\n name: takeName({ model: modelA.name, base: lowerFirst(modelB.dbName ?? modelB.name) }),\n model: modelA.name,\n targetModel: modelB.name,\n type: \"oneToMany\",\n isList: true,\n isOptional: false,\n ...(shared === undefined ? {} : { relationName: shared }),\n },\n });\n pushRelation({\n relationsByModel,\n relation: {\n name: takeName({ model: modelB.name, base: lowerFirst(modelA.dbName ?? modelA.name) }),\n model: modelB.name,\n targetModel: modelA.name,\n type: \"oneToMany\",\n isList: true,\n isOptional: false,\n ...(shared === undefined ? {} : { relationName: shared }),\n },\n });\n }\n\n applyRelations({ models, relationsByModel });\n}\n\n// ─── Disambiguation ──────────────────────────────────────\n\n/** Collision-free key for an UNORDERED model pair (self-pairs included). */\nfunction modelPairKey(params: { a: string; b: string }): string {\n const { a, b } = params;\n return [a, b].sort().join(\"\\u0000\");\n}\n\n/**\n * Model pairs whose introspected relations would be ambiguous if every side\n * stayed unnamed: more than one unnamed relation pair between the same two\n * models — mutual FKs, twin FKs to one target, two self-FKs, or an FK\n * alongside a default-named join table. The parser rejects that shape as\n * `ambiguous-relation` (so `db pull` output would not re-parse), and migrate's\n * sole-counterpart M2M rule refuses to pair inside it (so a REAL join table\n * next to an FK would stop round-tripping). FK pairs on these model pairs get\n * synthesized names; join-table sides never do — their physical table name IS\n * their name, so the FK pairs yield.\n */\nfunction detectAmbiguousPairs(params: {\n fkGroups: readonly FkGroup[];\n joinTables: ReadonlyMap<string, JoinTableInfo>;\n modelsByName: ReadonlyMap<string, ModelIR>;\n}): ReadonlySet<string> {\n const { fkGroups, joinTables, modelsByName } = params;\n const counts = new Map<string, number>();\n const bump = (key: string): void => {\n counts.set(key, (counts.get(key) ?? 0) + 1);\n };\n for (const group of fkGroups) {\n if (joinTables.has(group.table)) continue;\n if (!modelsByName.has(group.table) || !modelsByName.has(group.refTable)) continue;\n bump(modelPairKey({ a: group.table, b: group.refTable }));\n }\n for (const [, joinTable] of joinTables) {\n if (joinTable.relationName !== undefined) continue;\n bump(modelPairKey({ a: joinTable.tableA, b: joinTable.tableB }));\n }\n return new Set(\n [...counts.entries()].filter(([, count]) => count > 1).map(([key]) => key),\n );\n}\n\n// ─── Internals ────────────────────────────────────────────────────\n\nfunction pushRelation(params: {\n relationsByModel: Map<string, RelationIR[]>;\n relation: RelationIR;\n}): void {\n const { relationsByModel, relation } = params;\n const list = relationsByModel.get(relation.model);\n if (list === undefined) relationsByModel.set(relation.model, [relation]);\n else list.push(relation);\n}\n\nfunction applyRelations(params: {\n models: ModelIR[];\n relationsByModel: ReadonlyMap<string, RelationIR[]>;\n}): void {\n const { models, relationsByModel } = params;\n for (let index = 0; index < models.length; index += 1) {\n const model = models[index] as ModelIR;\n const additions = relationsByModel.get(model.name);\n if (additions === undefined) continue;\n models[index] = { ...model, relations: [...model.relations, ...additions] };\n }\n}\n\n/** Allocate relation names unique per model AND clashing with no column name. */\nfunction nameAllocator(params: {\n models: readonly ModelIR[];\n}): (args: { model: string; base: string }) => string {\n const { models } = params;\n const used = new Map<string, Set<string>>();\n for (const model of models) {\n used.set(\n model.name,\n new Set([\n ...model.fields.map((field) => field.name),\n ...model.relations.map((relation) => relation.name),\n ]),\n );\n }\n return ({ model, base }) => {\n const names = used.get(model) ?? new Set<string>();\n used.set(model, names);\n let candidate = base;\n let suffix = 2;\n while (names.has(candidate)) {\n candidate = `${base}_${suffix}`;\n suffix += 1;\n }\n names.add(candidate);\n return candidate;\n };\n}\n\n/** Lower-case the first character (relation field names from table names). */\nexport function lowerFirst(value: string): string {\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n",
|
|
21
21
|
"import { VibeError, qualifiedSqlName } from \"@vibeorm/schema\";\nimport type { FieldIR, SchemaIR, SqlObjectIdentity } from \"@vibeorm/schema\";\nimport { postgresDialect, renderPostgresTypeIdentity } from \"@vibeorm/sql\";\nimport { parseUnsupportedPostgresType } from \"./postgres-types.ts\";\nimport type { SqlExecutor } from \"./types.ts\";\n\n/** Resolved migration fields and columns whose authored identity cannot be proven. */\nexport type PostgresTypeResolution = { readonly schema: SchemaIR; readonly unavailable: readonly SqlObjectIdentity[] };\n\n/** Resolve only from explicit names, independent evidence, or PostgreSQL's system catalog. */\nexport async function resolvePostgresTypeIdentities(params: {\n executor: SqlExecutor;\n schema: SchemaIR;\n previous?: SchemaIR;\n mode: \"catalog\" | \"reference\" | \"verify\";\n}): Promise<PostgresTypeResolution> {\n const unavailable: SqlObjectIdentity[] = [];\n const models = [];\n for (const model of params.schema.models) {\n const table = qualifiedSqlName({ name: model.dbName ?? model.name, namespace: model.namespace });\n const previous = params.previous?.models.find((entry) => (entry.dbName ?? entry.name) === table.name && (entry.namespace ?? \"public\") === table.namespace);\n const fields: FieldIR[] = [];\n for (const field of model.fields) {\n if (field.isUnsupported !== true) { fields.push(field); continue; }\n const column = field.dbName ?? field.name;\n const parsed = parseUnsupportedPostgresType({ raw: field.nativeType ?? \"\" });\n const evidence = field.nativeTypeIdentity;\n if (evidence !== undefined && (evidence.source !== field.nativeType || (parsed?.namespace !== undefined && parsed.namespace !== evidence.namespace))) {\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL type evidence no longer matches its declaration; recapture the independent reference\", meta: { reason: \"type-reference-invalid\", shadowReusable: true, table: table.name, column } });\n }\n const prior = previous?.fields.find((entry) => (entry.dbName ?? entry.name) === column && entry.isUnsupported === true);\n const priorType = parseUnsupportedPostgresType({ raw: prior?.nativeType ?? \"\" });\n const priorNamespace = prior?.nativeTypeIdentity?.source === prior?.nativeType ? prior?.nativeTypeIdentity?.namespace : priorType?.namespace;\n // Only carry the namespace of an unchanged base name. Modifiers and array\n // shape remain authored, so changing vector(1536) to vector(768) still diffs.\n let namespace = parsed?.namespace ?? evidence?.namespace ?? (priorType?.name === parsed?.name ? priorNamespace : undefined);\n if (params.mode === \"catalog\" || params.mode === \"reference\" || namespace === undefined) {\n const source = params.mode === \"catalog\" ? { table, column }\n : { type: { name: parsed?.name ?? \"\", ...(namespace === undefined && params.mode === \"reference\" ? {} : { namespace: namespace ?? \"pg_catalog\" }) } };\n const query = renderPostgresTypeIdentity({ dialect: postgresDialect, source });\n const rows = parsed === undefined && params.mode !== \"catalog\" ? [] : await params.executor({ text: query.text, values: [...query.values] }).then((rows) => rows, (cause: unknown): never => {\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"PostgreSQL type identity inspection failed\", meta: { reason: \"type-inspection-unavailable\", table: table.name, column }, cause });\n });\n const resolved = rows.length === 1 ? rows[0] : undefined;\n namespace = typeof resolved?.namespace === \"string\" && (resolved.name === parsed?.name || parsed === undefined && params.mode === \"catalog\") ? resolved.namespace : undefined;\n }\n if (parsed === undefined && params.mode !== \"catalog\" || namespace === undefined || field.nativeType === undefined) {\n unavailable.push({ kind: \"column\", table, column });\n fields.push(field);\n } else {\n fields.push({ ...field, nativeTypeIdentity: { source: field.nativeType, namespace } });\n }\n }\n models.push({ ...model, fields });\n }\n return { schema: { ...params.schema, models }, unavailable };\n}\n",
|
|
22
22
|
"/** PostgreSQL catalog security facts and owner-side, server-deparsed policy comparison. */\nimport { VibeError, assertValidSchemaIR } from \"@vibeorm/schema\";\nimport type { ModelIR, RlsPolicyIR, SchemaIR } from \"@vibeorm/schema\";\nimport { NATIVE_RLS, postgresDialect, renderRlsPolicy } from \"@vibeorm/sql\";\nimport { isRlsProtected } from \"../ddl/rls.ts\";\nimport type { SqlExecutor } from \"../types.ts\";\n\n/** Catalog attributes are intentionally not represented as authored policy declarations. */\nexport type PostgresRlsPolicy = {\n readonly name: string;\n readonly command: string;\n readonly permissive: boolean;\n readonly roles: string;\n readonly using: string | null;\n readonly withCheck: string | null;\n readonly comment: string | null;\n};\n/** Every public ordinary/partitioned table, including tables with flags but no policies. */\nexport type PostgresRlsTable = {\n readonly table: string;\n readonly enabled: boolean;\n readonly force: boolean;\n readonly policies: readonly PostgresRlsPolicy[];\n};\n\nconst CATALOG_SQL = `SELECT c.relname AS table_name, c.relrowsecurity AS enabled,\n c.relforcerowsecurity AS force, p.polname AS policy_name, p.polcmd AS command,\n p.polpermissive AS permissive, p.polroles::text AS roles,\n pg_catalog.pg_get_expr(p.polqual, p.polrelid) AS using_expression,\n pg_catalog.pg_get_expr(p.polwithcheck, p.polrelid) AS check_expression,\n pg_catalog.obj_description(p.oid, 'pg_policy') AS comment\nFROM pg_catalog.pg_class c\nJOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\nLEFT JOIN pg_catalog.pg_policy p ON p.polrelid = c.oid\nWHERE n.nspname = 'public' AND c.relkind IN ('r', 'p')\nORDER BY c.relname, p.polname`;\nconst PROBE = \"vibeorm_probe\";\n\n/** Read both clauses and all structural attributes; callers pin search_path and transaction. */\nexport async function readPostgresRls(params: { executor: SqlExecutor }): Promise<PostgresRlsTable[]> {\n const rows = await params.executor({ text: CATALOG_SQL, values: [] });\n const tables = new Map<string, { table: string; enabled: boolean; force: boolean; policies: PostgresRlsPolicy[] }>();\n for (const row of rows) {\n const table = String(row.table_name);\n let state = tables.get(table);\n if (state === undefined) {\n state = { table, enabled: row.enabled === true, force: row.force === true, policies: [] };\n tables.set(table, state);\n }\n if (row.policy_name !== null && row.policy_name !== undefined) {\n state.policies.push({ name: String(row.policy_name), command: String(row.command), permissive: row.permissive === true, roles: String(row.roles), using: row.using_expression === null ? null : String(row.using_expression), withCheck: row.check_expression === null ? null : String(row.check_expression), comment: row.comment === null ? null : String(row.comment) });\n }\n }\n return [...tables.values()];\n}\n\nfunction conflict(params: { table: string; reason: \"rls-conflict\" | \"rls-unmanaged\" | \"rls-drift\"; attributes: readonly string[] }): never {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `Native RLS on public.${params.table} cannot be managed safely (${params.attributes.join(\", \")}). Review the live policies and restore the deployed declaration, or remove conflicting policies explicitly with administrator credentials. Supply rlsSchema/previousSchema for the deployed policy; no policy is deleted or adopted automatically.`,\n meta: params,\n });\n}\n\n/**\n * Compare against a trusted deployed declaration, not a policy name/comment/hash.\n * An explicit previousSchema/status check requires every declared policy to exist.\n * Push without a previous schema permits installing protection on an ordinary table.\n * Must run inside the caller's transaction. Locks survive the rolled-back probe.\n */\nexport async function verifyPostgresRls(params: {\n executor: SqlExecutor;\n schema?: SchemaIR;\n requireInstalled?: boolean;\n}): Promise<ReadonlySet<string>> {\n const { executor, schema } = params;\n if (schema !== undefined && schema.rls !== undefined) assertValidSchemaIR({ schema });\n await executor({ text: \"SET LOCAL search_path = ''\" });\n const declared = (schema?.models ?? []).filter((model) => model.namespace === undefined || model.namespace === \"public\");\n const byTable = new Map(declared.map((model) => [model.dbName ?? model.name, model]));\n let tables = await readPostgresRls({ executor });\n // Acquire in physical-name order BEFORE the savepoint so rollback of the probe retains locks.\n for (const state of tables) {\n const model = byTable.get(state.table);\n if (!state.enabled && !state.force && state.policies.length === 0 && (model === undefined || !isRlsProtected({ model }))) continue;\n await executor({ text: `LOCK TABLE \"public\".${postgresDialect.quoteIdent({ name: state.table })} IN ACCESS EXCLUSIVE MODE` });\n }\n tables = await readPostgresRls({ executor });\n const matched = new Set<string>();\n for (const state of tables) {\n const model = byTable.get(state.table);\n const active = state.enabled || state.force || state.policies.length > 0;\n if (schema === undefined && active) conflict({ table: state.table, reason: \"rls-unmanaged\", attributes: [\"security metadata cannot be exported losslessly without a trusted declaration\"] });\n if (model === undefined || !isRlsProtected({ model })) {\n if (active) conflict({ table: state.table, reason: \"rls-conflict\", attributes: [\"unexpected native policies or RLS flags\"] });\n continue;\n }\n if (!active && params.requireInstalled !== true) continue;\n const unknown = state.policies.filter((policy) => policy.name !== NATIVE_RLS.policyName);\n if (unknown.length > 0) conflict({ table: state.table, reason: \"rls-conflict\", attributes: unknown.map((policy) => `unexpected policy ${policy.name}`) });\n const policy = state.policies.find((entry) => entry.name === NATIVE_RLS.policyName);\n if (policy === undefined) conflict({ table: state.table, reason: \"rls-drift\", attributes: [\"missing policy\"] });\n const structure = [\n ...(policy.command !== \"*\" ? [\"command\"] : []),\n ...(!policy.permissive ? [\"permissiveness\"] : []),\n ...(policy.roles !== \"{0}\" ? [\"roles\"] : []),\n ...(policy.withCheck === null ? [\"missing WITH CHECK\"] : []),\n ];\n if (structure.length > 0) conflict({ table: state.table, reason: \"rls-conflict\", attributes: structure });\n const attributes: string[] = [...(!state.enabled ? [\"enabled\"] : []), ...(!state.force ? [\"force\"] : [])];\n await executor({ text: \"SAVEPOINT vibeorm_rls_probe\" });\n let probe: PostgresRlsPolicy | undefined;\n try {\n const rendered = renderRlsPolicy({ dialect: postgresDialect, schema: schema!, model: model.name, policyName: PROBE });\n await executor({ text: rendered.text });\n probe = (await readPostgresRls({ executor })).find((entry) => entry.table === state.table)?.policies.find((entry) => entry.name === PROBE);\n } finally {\n await executor({ text: \"ROLLBACK TO SAVEPOINT vibeorm_rls_probe\" });\n await executor({ text: \"RELEASE SAVEPOINT vibeorm_rls_probe\" });\n }\n if (probe === undefined) conflict({ table: state.table, reason: \"rls-drift\", attributes: [\"probe unavailable\"] });\n if (policy.using !== probe.using) attributes.push(\"using\");\n if (policy.withCheck !== probe.withCheck) attributes.push(\"withCheck\");\n if (attributes.length > 0) conflict({ table: state.table, reason: \"rls-drift\", attributes });\n matched.add(state.table);\n }\n if (params.requireInstalled === true) {\n for (const [table, model] of byTable) {\n if (isRlsProtected({ model }) && !matched.has(table)) conflict({ table, reason: \"rls-drift\", attributes: [\"missing table\"] });\n }\n }\n return matched;\n}\n\n/** Attach only verified declarations, mapped to the physical names introspection uses. No SQL parsing. */\nexport function projectPostgresRls(params: { physical: SchemaIR; declared?: SchemaIR; matched: ReadonlySet<string> }): SchemaIR {\n const { physical, declared, matched } = params;\n if (declared?.rls === undefined || matched.size === 0) return physical;\n const models = physical.models.map((model): ModelIR => {\n const physicalName = model.dbName ?? model.name;\n const source = declared.models.find((entry) => (entry.dbName ?? entry.name) === physicalName && (entry.namespace ?? \"public\") === (model.namespace ?? \"public\"));\n if (source === undefined || model.namespace !== undefined && model.namespace !== \"public\" || !matched.has(physicalName)) return { ...model, rls: \"unprotected\" };\n const sourcePolicy = source.rls;\n let rls: RlsPolicyIR = \"deny\";\n if (typeof sourcePolicy === \"object\" && \"where\" in sourcePolicy) {\n rls = { where: Object.fromEntries(Object.entries(sourcePolicy.where).map(([field, reference]) => [source.fields.find((entry) => entry.name === field)?.dbName ?? field, reference])) };\n } else if (typeof sourcePolicy === \"object\" && \"through\" in sourcePolicy) {\n const sourceRelation = source.relations.find((entry) => entry.name === sourcePolicy.through)!;\n const target = declared.models.find((entry) => entry.name === sourceRelation.targetModel)!;\n const fields = sourceRelation.fields!.map((name) => source.fields.find((entry) => entry.name === name)?.dbName ?? name);\n const references = sourceRelation.references!.map((name) => target.fields.find((entry) => entry.name === name)?.dbName ?? name);\n const physicalTarget = physical.models.find((entry) => (entry.dbName ?? entry.name) === (target.dbName ?? target.name) && (entry.namespace ?? \"public\") === (target.namespace ?? \"public\"));\n const relation = model.relations.find((entry) => entry.targetModel === physicalTarget?.name && JSON.stringify(entry.fields) === JSON.stringify(fields) && JSON.stringify(entry.references) === JSON.stringify(references));\n if (relation === undefined) conflict({ table: model.name, reason: \"rls-drift\", attributes: [\"through foreign key\"] });\n rls = { through: relation.name };\n }\n return { ...model, rls };\n });\n return { ...physical, rls: declared.rls, models };\n}\n",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"import { VibeError } from \"@vibeorm/schema\";\nimport type { Dialect } from \"@vibeorm/schema\";\nimport { inspectSqlObject } from \"./inspect-objects.ts\";\nimport { MIGRATIONS_TABLE_NAME } from \"./journal-table.ts\";\nimport type { SqlExecutor } from \"./types.ts\";\n\n/** Validated journal data, shared by the runner and read-only history API. */\nexport type JournalRow = { readonly checksum: string; readonly statementIndex: number; readonly error?: string; readonly moduleEntry?: string };\n\nconst MISSING_TABLE_IDENTIFIERS: ReadonlySet<string> = new Set([\"42P01\", \"42S02\", \"ER_NO_SUCH_TABLE\"]);\n\nfunction isMissingTable(params: { cause: unknown }): boolean {\n let current = params.cause;\n for (let depth = 0; depth < 6 && current !== null && typeof current === \"object\"; depth++) {\n const record = current as Record<string, unknown>;\n for (const key of [\"code\", \"errno\", \"sqlState\"]) {\n const value = record[key];\n if (typeof value === \"string\" && MISSING_TABLE_IDENTIFIERS.has(value)) return true;\n }\n current = record.cause;\n }\n return false;\n}\n\n/**\n * Execute a journal read without creating it. Undefined means proven absence,\n * never a denied read. SQLite has no missing-table error code, so an unsuccessful\n * read is followed by catalog inspection rather than matching error messages.\n * This module never imports runner/history, keeping their shared reader acyclic.\n */\nexport async function readJournalRows(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n query: { readonly text: string; readonly values?: readonly unknown[] };\n}): Promise<Map<string, JournalRow> | undefined> {\n const rows = await params.executor({ text: params.query.text, values: [...(params.query.values ?? [])] }).catch(async (cause: unknown) => {\n if (params.dialect !== \"sqlite\" && isMissingTable({ cause })) return undefined;\n if (params.dialect === \"sqlite\") {\n const presence = await inspectSqlObject({ executor: params.executor, dialect: \"sqlite\", identity: { kind: \"table\", name: { namespace: \"main\", name: MIGRATIONS_TABLE_NAME } } });\n if (presence.state === \"missing\") return undefined;\n }\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Cannot inspect migration history; check SELECT privileges\", meta: { reason: \"history-unavailable\" }, cause });\n });\n if (rows === undefined) return undefined;\n const result = new Map<string, JournalRow>();\n for (const row of rows) {\n const index = row.statement_index;\n if (typeof row.name !== \"string\" || typeof row.checksum !== \"string\"\n || (typeof index !== \"number\" && typeof index !== \"string\") || (typeof index === \"string\" && !/^-?\\d+$/.test(index)) || !Number.isSafeInteger(Number(index))\n || (row.module_origin !== null && row.module_origin !== undefined && typeof row.module_origin !== \"string\")\n || (row.error !== null && row.error !== undefined && typeof row.error !== \"string\") || result.has(row.name)) {\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Malformed migration journal row\", meta: { reason: \"history-unavailable\" } });\n }\n result.set(row.name, { checksum: row.checksum, statementIndex: Number(index), ...(typeof row.error === \"string\" ? { error: row.error } : {}), ...(typeof row.module_origin === \"string\" ? { moduleEntry: row.module_origin } : {}) });\n }\n return result;\n}\n",
|
|
41
41
|
"/**\n * Migration runner: generate named migrations from IR diffs, apply them with\n * bookkeeping in `_vibe_migrations`, report status, and repair records.\n *\n * Concurrency: `applyMigrations` and `rollbackMigration` take an advisory lock\n * for the whole run — `pg_advisory_lock(1447645253)` on postgres (\"VIBE\" in\n * ASCII, blocking, released in a finally), `GET_LOCK('vibeorm_migrate', 60)`\n * on mysql (throws VIBE_MIGRATION on timeout). SQLite serializes individual\n * transactions only; callers must exclude concurrent whole-run operations.\n * Locks are session-scoped — the\n * SqlExecutor contract (types.ts) requires one session for the whole\n * operation.\n *\n * Lock ORDER matters: the lock is taken BEFORE `ensureMigrationsTable`, never\n * after. Two concurrent first-time runs against a fresh postgres database\n * would otherwise both issue `CREATE TABLE IF NOT EXISTS _vibe_migrations`,\n * which is a catalog race on postgres (a duplicate-key error on\n * `pg_type_typname_nsp_index`, not a no-op). Repair uses the same lock.\n * Status deliberately stays nonblocking and never creates the journal.\n *\n * Execution strategy per dialect (`DIALECT_CAPABILITIES[dialect]`) AND per\n * script:\n *\n * - transactionalDdl (postgres, sqlite): each migration runs inside\n * BEGIN/COMMIT with its bookkeeping INSERT — atomic.\n * - EXCEPT sqlite scripts containing a table-rebuild block, which manage their\n * own transactions (execute.ts `usesSelfManagedTransactions`) and therefore\n * cannot be wrapped. Those take the SAME per-statement bookkeeping as mysql\n * (below). They are NOT simply \"re-runnable\": a pure rebuild block is\n * effectively idempotent, but any plain statement in the same script\n * auto-commits on its own, so without a recorded statement_index a crash\n * wedged the migration forever (every later run replayed statements that had\n * already run). Resuming into a rebuild block rewinds to that block's\n * `PRAGMA foreign_keys=OFF` (execute.ts `selfManagedResumeStart`): the block\n * is transactional, so nothing of it survived, and the pragma is\n * session-scoped and gone after a crash.\n * - mysql (transactionalDdl: false — DDL auto-commits): the runner records\n * PER-STATEMENT progress instead. The row is inserted up front\n * (statement_index 0), advanced after every statement, and on failure the\n * error lands in the `error` column. Re-running RESUMES from the recorded\n * statement_index — and REFUSES if the migration's checksum changed since\n * the partial application. A row is \"complete\" when its statement_index\n * reaches the statement count (or its checksum is empty — resolveMigration\n * records, which store statement_index 2147483647).\n *\n * `usesStatementBookkeeping` is the ONE predicate deciding which of the two\n * regimes a (dialect, script) pair is in; apply, status and rollback all read\n * it, so they can never disagree about whether a record is complete.\n *\n * Checksums (sha256 over the joined SQL) pin a migration's content:\n * re-applying a renamed-or-edited migration is a VIBE_MIGRATION error, never\n * a silent divergence.\n */\n\nimport { migrationChecksum } from \"./migration-checksum.ts\";\nimport { assertDatabaseNotShadow, isShadowReplayExecutor } from \"./shadow-guard.ts\";\nimport { assertModuleAdoption } from \"./module-adoption.ts\";\nimport { parseExternalObjects, inspectExternalObjects, assertExternalOwnershipClaims, externalObjectOwner } from \"./external-objects.ts\";\nimport type { ExternalObjectOwner, ExternalObjectResolution } from \"./external-objects.ts\";\nimport { refuseExternalDependents } from \"./external-dependencies.ts\";\nimport { assertModuleOwnership, assertLiveModuleOwnership, assertApplicationModuleState, moduleNamespace } from \"./module-ownership.ts\";\nimport { assertModuleUpgradeHistory, applicationModuleOrigins } from \"./module-history.ts\";\nimport type { ModuleMigrationOrigin } from \"./module-origin.ts\";\nimport { completeModuleJournal, ensureModuleJournal, insertModuleJournal, moduleRecordComplete, readModuleJournal } from \"./module-journal.ts\";\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { Dialect, SchemaIR, SqlObjectIdentity, VibeExtension } from \"@vibeorm/schema\";\nimport { assertMaterializedModuleMigration } from \"./module-origin.ts\";\nimport { readJournalRows } from \"./journal-read.ts\";\nimport type { JournalRow } from \"./journal-read.ts\";\nimport { MIGRATIONS_TABLE_NAME } from \"./journal-table.ts\";\nimport {\n DIALECT_CAPABILITIES,\n getSqlDialect,\n renderMigrationSessionRead,\n renderMigrationSessionRestore,\n renderMigrationSessionSet,\n} from \"@vibeorm/sql\";\nimport { assertValidExecution, isDefaultExecution, operationFor } from \"./execution.ts\";\nimport type { MigrationExecution } from \"./execution.ts\";\nimport { establishOperationState } from \"./recovery.ts\";\nimport type { RenameIntent } from \"./renames.ts\";\nimport { diffSchemas } from \"./differ.ts\";\nimport { renderSteps } from \"./ddl/render.ts\";\nimport { assertSecurityAcknowledgement, securityChangesOf, withRlsSteps } from \"./ddl/rls.ts\";\nimport { introspectPostgres } from \"./introspect/postgres.ts\";\nimport {\n artifactCreateSql,\n artifactDropSql,\n collectExtensionArtifacts,\n planChangedArtifacts,\n planMissingArtifacts,\n stripExtensionArtifacts,\n} from \"./extensions.ts\";\nimport {\n assertSupportedSelfManagedScript,\n assertSelfManagedResumeSafe,\n isSelfManagedCommit,\n canCheckpointAtomically,\n cleanupSelfManagedFailure,\n executeStatement,\n selfManagedResumeStart,\n usesSelfManagedTransactions,\n} from \"./execute.ts\";\nimport type {\n AppliedResult,\n MigrationFile,\n MigrationHistoryMode,\n MigrationReplayOptions,\n MigrationStatus,\n RecordedMigration,\n RollbackResult,\n SqlExecutor,\n} from \"./types.ts\";\n\n/** Recompute authorization from the trusted declarations; omitted preview arrays cannot bypass it. */\nfunction migrationRlsSecurityChanges(params: { migration: MigrationFile; down: boolean }): string[] {\n const source = params.migration.rls;\n if (source === undefined) return [];\n return securityChangesOf({ steps: withRlsSteps({ from: params.down ? source.to : source.from, to: params.down ? source.from : source.to, steps: [] }) });\n}\n\n/** Classify operation tokens, never words inside identifiers, literals or comments. */\nfunction containsNativeRlsSql(params: { sql: string; dialect: Dialect }): boolean {\n const { sql, dialect } = params;\n const tokens: string[] = [];\n let i = 0;\n while (i < sql.length) {\n const ch = sql[i]!;\n if (/\\s/.test(ch)) { i++; continue; }\n if (sql.startsWith(\"--\", i) || (dialect === \"mysql\" && ch === \"#\")) {\n const end = sql.indexOf(\"\\n\", i);\n i = end === -1 ? sql.length : end + 1;\n continue;\n }\n if (sql.startsWith(\"/*\", i)) {\n let depth = 1;\n i += 2;\n while (i < sql.length && depth > 0) {\n if (sql.startsWith(\"/*\", i)) { depth++; i += 2; }\n else if (sql.startsWith(\"*/\", i)) { depth--; i += 2; }\n else i++;\n }\n continue;\n }\n if (ch === \"'\" || ch === '\"' || ch === \"`\" || (dialect === \"sqlite\" && ch === \"[\")) {\n const endQuote = ch === \"[\" ? \"]\" : ch;\n const backslash = dialect === \"mysql\" || (ch === \"'\" && /(?:^|[^\\w$])[eE]$/.test(sql.slice(0, i)));\n i++;\n while (i < sql.length) {\n if (backslash && sql[i] === \"\\\\\") { i += 2; continue; }\n if (sql[i] === endQuote) {\n if (sql[i + 1] === endQuote) { i += 2; continue; }\n i++;\n break;\n }\n i++;\n }\n tokens.push(\"@\"); // Keep a boundary: CREATE \"ignored\" POLICY is not CREATE POLICY.\n continue;\n }\n if (ch === \"$\") {\n const tag = /^(?:\\$\\$|\\$[A-Za-z_][A-Za-z_0-9]*\\$)/.exec(sql.slice(i))?.[0];\n if (tag !== undefined) {\n const end = sql.indexOf(tag, i + tag.length);\n i = end === -1 ? sql.length : end + tag.length;\n tokens.push(\"@\");\n continue;\n }\n }\n const word = /^[A-Za-z_][A-Za-z_0-9$]*/.exec(sql.slice(i))?.[0];\n tokens.push(word === undefined ? ch : word.toUpperCase());\n i += word?.length ?? 1;\n }\n // A MigrationFile may carry multiple SQL statements in one array entry.\n return tokens.join(\" \").split(/\\s*;\\s*/).some((statement) => {\n const operation = statement.trim();\n return /^(?:CREATE|ALTER|DROP) POLICY\\b/.test(operation)\n || /^COMMENT ON POLICY\\b/.test(operation)\n || (/^ALTER TABLE\\b/.test(operation) && /\\b(?:ENABLE|DISABLE|FORCE) ROW LEVEL SECURITY\\b/.test(operation));\n });\n}\n\n/** SQL-only native-policy files lack the trusted pre/post declarations required for drift checks. */\nfunction assertNativeMigrationMetadata(params: { migration: MigrationFile; sql: readonly string[]; dialect: Dialect }): void {\n const native = params.migration.rls !== undefined || params.sql.some((sql) => containsNativeRlsSql({ sql, dialect: params.dialect }));\n if (!native) return;\n if (!DIALECT_CAPABILITIES[params.dialect].nativeRowLevelSecurity) {\n throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `Native RLS migrations are unsupported on ${params.dialect}`, meta: { feature: \"nativeRowLevelSecurity\", dialect: params.dialect } });\n }\n if (params.migration.rls === undefined) {\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Native RLS migration files require trusted rls.from/rls.to schema metadata. SQL alone cannot prove policy ownership or drift; regenerate with preserved security metadata.\", meta: { reason: \"rls-migration-metadata-required\", migration: params.migration.name } });\n }\n}\n\n// ─── Bookkeeping table ────────────────────────────────────────────\n\nexport { MIGRATIONS_TABLE_NAME } from \"./journal-table.ts\";\n\n/** Advisory-lock key for postgres — \"VIBE\" as a big-endian ASCII int32. */\nconst PG_ADVISORY_LOCK_KEY = 1447645253;\nconst MYSQL_LOCK_NAME = \"vibeorm_migrate\";\nconst MYSQL_LOCK_TIMEOUT_SECONDS = 60;\n\n/** statement_index recorded by resolveMigration — \"complete, content unseen\". */\nconst RESOLVED_STATEMENT_INDEX = 2147483647;\n\nconst CREATE_TABLE_SQL: Readonly<Record<Dialect, string>> = {\n postgres: `CREATE TABLE IF NOT EXISTS \"${MIGRATIONS_TABLE_NAME}\" (\n \"id\" integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,\n \"name\" text NOT NULL UNIQUE,\n \"checksum\" text NOT NULL,\n \"applied_at\" timestamptz(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"statement_index\" integer NOT NULL DEFAULT 0,\n \"error\" text\n);`,\n sqlite: `CREATE TABLE IF NOT EXISTS \"${MIGRATIONS_TABLE_NAME}\" (\n \"id\" INTEGER PRIMARY KEY AUTOINCREMENT,\n \"name\" TEXT NOT NULL UNIQUE,\n \"checksum\" TEXT NOT NULL,\n \"applied_at\" TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"statement_index\" INTEGER NOT NULL DEFAULT 0,\n \"error\" TEXT\n);`,\n mysql: `CREATE TABLE IF NOT EXISTS \\`${MIGRATIONS_TABLE_NAME}\\` (\n \\`id\\` int NOT NULL AUTO_INCREMENT,\n \\`name\\` varchar(191) NOT NULL UNIQUE,\n \\`checksum\\` text NOT NULL,\n \\`applied_at\\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),\n \\`statement_index\\` int NOT NULL DEFAULT 0,\n \\`error\\` text,\n PRIMARY KEY (\\`id\\`)\n);`,\n};\n\n/** Create the bookkeeping table when missing. */\nexport async function ensureMigrationsTable(params: {\n executor: SqlExecutor;\n dialect?: Dialect;\n}): Promise<void> {\n await params.executor({ text: CREATE_TABLE_SQL[params.dialect ?? \"postgres\"] });\n}\n\n/**\n * sha256 hex over the migration's statements — its identity across runs.\n *\n * A NON-default execution block (execution.ts) folds a canonical description\n * of itself in, so changing how a migration executes after it was applied is\n * caught by the same checksum refusal that catches changing its SQL. A default\n * or absent block contributes NOTHING, which is what keeps every migration\n * written before this feature — and every journal row recording one — valid.\n */\nexport { migrationChecksum } from \"./migration-checksum.ts\";\n\n/** The migration's own checksum, execution block included. */\nfunction checksumOf(params: { migration: MigrationFile }): string {\n const { migration } = params;\n return migrationChecksum(migration);\n}\n\nimport { createDesiredState, assertDesiredState } from \"./desired-state.ts\";\nimport { migrationNamespace, verifyMigrationState, verifyMigrationTransition, verifySqliteTransitionBeforeRestore, assertMigrationState, assertProbeMode } from \"./inspect-objects.ts\";\nimport { assertNamedRemovals, assertRemovalAuthorization, preserveMigrationObjects, sqlitePreservedSchema, orderedMigrationObjects, assertRetainedMigrationObjects } from \"./object-ownership.ts\";\nimport type { MigrationDesiredState } from \"./desired-state.ts\";\n\n/** Re-apply may start at the checksum-bound actual down target after an irreversible rollback. */\nasync function assertForwardStart(params: { executor: SqlExecutor; dialect: Dialect; migration: MigrationFile; external?: ExternalObjectResolution; probe?: \"none\" | \"rollback\" | \"temporary\" }): Promise<void> {\n const state = params.migration.desiredState;\n if (state === undefined) return;\n const report = await verifyMigrationState({ executor: params.executor, dialect: params.dialect, expected: state.from, external: params.external, ...(params.probe === undefined ? {} : { probe: params.probe }) });\n if (report.inSync) return;\n if (state.down !== undefined) {\n const restored = await verifyMigrationState({ executor: params.executor, dialect: params.dialect, expected: state.down, external: params.external, ...(params.probe === undefined ? {} : { probe: params.probe }) });\n if (restored.inSync) return;\n }\n assertMigrationState({ report });\n}\n\n// ─── Generate ─────────────────────────────────────────────────────\n\n/**\n * Diff two IRs and render a named migration for a dialect (postgres if\n * omitted). `destructive` aggregates the steps' flags so callers can gate\n * confirmation before applying.\n */\nexport function generateMigration(params: {\n from: SchemaIR;\n to: SchemaIR;\n name: string;\n /** Rendering dialect; postgres if omitted. */\n dialect?: Dialect;\n /** Configured extension instances — their artifacts land in the migration. */\n extensions?: readonly VibeExtension[];\n /** Explicit physical renames (renames.ts); never inferred from the diff. */\n renames?: readonly RenameIntent[];\n /** Explicit execution semantics for the generated file. */\n execution?: MigrationExecution;\n /** Independent authored baseline; required by live generation on an existing database. */\n desiredState?: MigrationDesiredState;\n}): MigrationFile {\n const { from, to, name } = params;\n const dialect = params.dialect ?? \"postgres\";\n\n const artifacts = collectExtensionArtifacts({\n schema: to,\n dialect,\n extensions: params.extensions ?? [],\n });\n const allArtifacts = [...artifacts.setup, ...artifacts.objects];\n // `from` is authored: every artifact it declared exists after the previous\n // migration, so a changed definition is a rebuild, not a fresh create.\n const rebuilt = planChangedArtifacts({ previous: collectExtensionArtifacts({ schema: from, dialect, extensions: params.extensions ?? [] }), current: artifacts, missing: [] });\n assertRetainedMigrationObjects({ from: from.migrationObjects ?? [], to: to.migrationObjects ?? [] });\n const strippedFrom = preserveMigrationObjects({ from: stripExtensionArtifacts({ schema: from, artifacts: allArtifacts }), to, objects: [...(from.migrationObjects ?? []), ...(to.migrationObjects ?? [])] });\n\n const steps = diffSchemas({ from: strippedFrom, to, dialect, ...(params.renames === undefined ? {} : { renames: params.renames }) });\n const coreSql = renderSteps({ steps, dialect, from: dialect === \"sqlite\" ? from : strippedFrom, to: dialect === \"sqlite\" ? sqlitePreservedSchema({ from, to, objects: [...(from.migrationObjects ?? []), ...(to.migrationObjects ?? [])] }) : to });\n const missing = planMissingArtifacts({ introspected: from, artifacts: allArtifacts });\n const sql = [\n ...artifactCreateSql({\n artifacts: missing.filter((artifact) => artifact.owns.kind === \"postgresExtension\"),\n }),\n ...coreSql,\n ...artifactDropSql({ artifacts: rebuilt }),\n ...artifactCreateSql({\n artifacts: missing.filter((artifact) => artifact.owns.kind !== \"postgresExtension\"),\n }),\n ...orderedMigrationObjects({ objects: to.migrationObjects ?? [] }).flatMap((object) => {\n if (object.dialect !== dialect) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `Migration object ${object.id} requires ${object.dialect}` });\n const previous = (params.desiredState?.from.schema.migrationObjects ?? from.migrationObjects)?.find((entry) => entry.id === object.id);\n if (previous === undefined) return [...object.create];\n if (JSON.stringify(previous) !== JSON.stringify(object)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration-owned object ${object.id} changed; supply a reviewed forward SQL migration`, meta: { reason: \"migration-object-replacement-required\", shadowReusable: true, id: object.id } });\n return [];\n }),\n ];\n return {\n name,\n sql,\n destructive: steps.some((step) => step.destructive),\n ...(securityChangesOf({ steps }).length === 0 ? {} : { securityChanges: securityChangesOf({ steps }) }),\n ...(from.rls === undefined && to.rls === undefined ? {} : { rls: { from, to } }),\n ...(params.execution === undefined ? {} : { execution: params.execution }),\n desiredState: params.desiredState ?? { version: 1, dialect, from: createDesiredState({ schema: from, dialect }), to: createDesiredState({ schema: to, dialect }) },\n };\n}\n\n// ─── Apply ────────────────────────────────────────────────────────\n\n/** Run one operation on a dedicated session under the existing migration lock. */\nexport async function withMigrationLock<T>(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n run: (executor: SqlExecutor) => Promise<T>;\n}): Promise<T> {\n const runLocked = async (executor: SqlExecutor): Promise<T> => {\n await acquireLock({ executor, dialect: params.dialect });\n return Promise.resolve().then(async () => {\n await assertDatabaseNotShadow({ executor, dialect: params.dialect });\n return params.run(executor);\n }).then(\n async (value) => { await releaseLock({ executor, dialect: params.dialect }); return value; },\n (cause: unknown) => releaseLock({ executor, dialect: params.dialect }).then(\n () => { throw cause; },\n (cleanupCause: unknown) => {\n // The operation failure stays the primary outcome: a backend that dies\n // mid-migration fails BOTH the body and the unlock, and the operator\n // must act on the body's uncertainty verdict, not on lock cleanup.\n // The unlock failure is retained as evidence, never as the headline.\n if (cause instanceof VibeError) throw new VibeError({ code: cause.code, message: cause.message, meta: { ...cause.meta, cleanupCause }, cause });\n throw cause;\n },\n ),\n );\n };\n // Reserve once: the callback already receives the pinned executor, even if it\n // exposes withSession itself. Never recursively reserve through that handle.\n return params.executor.withSession === undefined ? runLocked(params.executor) : params.executor.withSession({ run: runLocked });\n}\n\n/** Validate replay declarations and approvals without reading or writing a database. */\nexport function validateMigrationReplay(params: MigrationReplayOptions): void {\n const dialect = params.dialect ?? \"postgres\";\n assertProbeMode({ dialect, probe: params.probe });\n assertDistinctMigrationNames({ migrations: params.migrations });\n for (const migration of params.migrations) {\n assertMigrationMetadata({ migration, dialect });\n if (dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: migration.sql })) assertSupportedSelfManagedScript({ sql: migration.sql, migration: migration.name, direction: \"up\" });\n assertNamedRemovals({ removals: migration.desiredState?.unmanagedRemovals ?? [], approved: params.removeUnmanaged, acceptIntegrityLoss: params.acceptIntegrityLoss });\n if (migration.desiredState !== undefined) {\n const state = migration.desiredState;\n assertRemovalAuthorization({ steps: diffSchemas({ from: state.from.schema, to: state.to.schema, dialect }), previous: state.from, dialect, namespace: dialect === \"sqlite\" ? \"main\" : \"public\", ...(params.acceptIntegrityLoss === undefined ? {} : { acceptIntegrityLoss: params.acceptIntegrityLoss }) });\n }\n assertSecurityAcknowledgement({ securityChanges: [...(migration.securityChanges ?? []), ...migrationRlsSecurityChanges({ migration, down: false })], ...(params.acceptSecurityChanges === undefined ? {} : { acceptSecurityChanges: params.acceptSecurityChanges }) });\n }\n}\n\nfunction assertMigrationMetadata(params: { migration: MigrationFile; dialect: Dialect }): void {\n const { migration, dialect } = params;\n assertModuleAdoption({ migration });\n if (migration.moduleOrigin !== undefined) {\n assertMaterializedModuleMigration({ migration });\n assertModuleOwnership({ origin: migration.moduleOrigin, desiredState: migration.desiredState });\n }\n if (migration.desiredStatePending === true) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration ${migration.name} has unfinalized desired state; finalize its reviewed before/after declarations before applying`, meta: { reason: \"desired-state-unfinalized\", migration: migration.name } });\n if (migration.desiredState !== undefined) {\n assertDesiredState({ value: migration.desiredState, migration: migration.name });\n if (migration.desiredState.dialect !== dialect) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Migration desired-state dialect mismatch\", meta: { reason: \"desired-state-dialect-mismatch\", migration: migration.name } });\n }\n assertNativeMigrationMetadata({ migration, sql: migration.sql, dialect });\n assertExecutable({ migration, execution: migration.execution, sql: migration.sql, dialect });\n}\n\n/**\n * Apply under the migration lock after preflight, preserving recorded progress.\n * Complete mode requires a full ordered chain; subset mode remains the default.\n * Empty-checksum resolve records deliberately skip content verification.\n */\nexport async function applyMigrations(params: {\n executor: SqlExecutor;\n migrations: readonly MigrationFile[];\n /** Plain external declarations are resolved on the lock-held target, never imported from another database. */\n external?: readonly ExternalObjectOwner[];\n /** Complete requires the recorded journal to be a prefix of this ordered chain. */\n history?: MigrationHistoryMode;\n acceptSecurityChanges?: boolean;\n acceptIntegrityLoss?: boolean;\n removeUnmanaged?: readonly SqlObjectIdentity[];\n /** Explicit permission for rollback-only PostgreSQL CHECK normalization probes. */\n probe?: \"none\" | \"rollback\" | \"temporary\";\n /** Execution dialect; postgres if omitted. */\n dialect?: Dialect;\n}): Promise<AppliedResult> {\n const { executor, migrations } = params;\n const dialect = params.dialect ?? \"postgres\";\n const trustedReplay = isShadowReplayExecutor({ executor });\n if (params.history !== undefined && params.history !== \"complete\" && params.history !== \"subset\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Unknown migration history validation mode\", meta: { reason: \"history-mode-invalid\" } });\n if (params.history === \"complete\") assertDistinctMigrationNames({ migrations });\n for (const migration of migrations) assertMigrationMetadata({ migration, dialect });\n const externalDeclarations = await parseExternalObjects({ value: params.external ?? [], dialect });\n // Pin the session and acquire the lock before inspecting or creating journals.\n return withMigrationLock({ executor, dialect, run: async (executor) => {\n const external = externalDeclarations.length === 0 ? undefined : await inspectExternalObjects({ executor, dialect, external: externalDeclarations });\n let moduleRecords = await readModuleJournal({ executor, dialect });\n const recorded = new Map([...moduleRecords].map(([name, record]) => [name, record.row]));\n if (external !== undefined) assertExternalOwnershipClaims({ external, identities: [...migrations.flatMap((migration) => migration.moduleOrigin?.owned ?? []), ...[...moduleRecords.values()].flatMap((record) => record.entry?.migration.moduleOrigin?.owned ?? [])] });\n if (migrations.some((migration) => migration.moduleOrigin !== undefined) || [...moduleRecords.values()].some((record) => record.entry !== undefined)) {\n assertModuleUpgradeHistory({ migrations, records: moduleRecords });\n const namespace = await migrationNamespace({ executor, dialect });\n // PostgreSQL placement is fixed by the immutable source/owned identities\n // admitted above, not by the application's public migration journal.\n if (dialect !== \"postgres\" && migrations.some((migration) => migration.moduleOrigin !== undefined && moduleNamespace({ origin: migration.moduleOrigin }) !== namespace)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Module placement differs from the active database namespace\", meta: { reason: \"module-placement-mismatch\" } });\n }\n if (params.history === \"complete\") assertCompleteHistory({ migrations, recorded, dialect });\n await assertApplyHistory({ executor, dialect, migrations, recorded });\n const pending = migrations.filter((migration) => {\n const stored = recorded.get(migration.name);\n return stored === undefined || !isCompleteRecord({ dialect, migration, stored });\n });\n const adopted = pending.find((migration) => migration.moduleAdoption !== undefined);\n if (adopted !== undefined && !trustedReplay) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"An adopted source must be recorded by the verified adoption workflow, never executed by ordinary apply\", meta: { reason: \"module-adoption-recording-required\", migration: adopted.name } });\n if (external !== undefined && !trustedReplay) for (const migration of pending) await assertExternalMigrationMutation({ executor, migration, dialect, namespace: await migrationNamespace({ executor, dialect }), external });\n validateMigrationReplay({ ...params, migrations: pending, dialect });\n await ensureMigrationsTable({ executor, dialect });\n if (migrations.some((migration) => migration.moduleOrigin !== undefined)) await ensureModuleJournal({ executor, dialect });\n\n const applied: string[] = [];\n const skipped: string[] = [];\n\n for (const migration of migrations) {\n const stored = recorded.get(migration.name);\n if (migration.moduleOrigin !== undefined && (stored === undefined || !isCompleteRecord({ dialect, migration, stored }))) await assertLiveModuleOwnership({ executor, origin: migration.moduleOrigin, resume: stored !== undefined });\n if (stored !== undefined) {\n // Negative statement_index = a mysql rollback started but did not\n // finish (see rollbackMigration). Applying over it would corrupt both\n // directions — finish or repair first.\n if (stored.statementIndex < 0) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `migration \"${migration.name}\" is mid-rollback (${-stored.statementIndex - 1} down statement(s) done) — finish it with \\`migrate down\\` or repair with resolveMigration before applying`,\n meta: { migration: migration.name, statementIndex: stored.statementIndex },\n });\n }\n if (isCompleteRecord({ dialect, migration, stored })) {\n assertChecksumMatches({ migration, stored: stored.checksum });\n skipped.push(migration.name);\n continue;\n }\n // Partial row (mysql, a self-managed sqlite script, or a declared\n // nontransactional migration) → resume, but only for unchanged content.\n assertResumable({ migration, stored });\n await withSessionLimits({\n executor,\n dialect,\n ...(migration.execution === undefined ? {} : { execution: migration.execution }),\n run: () => runNonTransactional({\n executor,\n dialect,\n migration,\n start: stored.statementIndex,\n moduleOrigins: applicationModuleOrigins({ migration, records: moduleRecords }),\n external,\n ...(params.probe === undefined ? {} : { probe: params.probe }),\n insertRecord: false,\n ...(stored.error === undefined ? {} : { storedError: stored.error }),\n }),\n });\n if (migration.moduleOrigin !== undefined) moduleRecords = await readModuleJournal({ executor, dialect });\n applied.push(migration.name);\n continue;\n }\n\n if (usesStatementBookkeeping({ dialect, sql: migration.sql, ...(migration.execution === undefined ? {} : { execution: migration.execution }) })) {\n await withSessionLimits({\n executor,\n dialect,\n ...(migration.execution === undefined ? {} : { execution: migration.execution }),\n run: () => runNonTransactional({ executor, dialect, migration, external, moduleOrigins: applicationModuleOrigins({ migration, records: moduleRecords }), start: 0, insertRecord: true, ...(params.probe === undefined ? {} : { probe: params.probe }) }),\n });\n } else {\n await runTransactional({ executor, dialect, migration, external, moduleOrigins: applicationModuleOrigins({ migration, records: moduleRecords }), ...(params.probe === undefined ? {} : { probe: params.probe }) });\n }\n if (migration.moduleOrigin !== undefined) moduleRecords = await readModuleJournal({ executor, dialect });\n applied.push(migration.name);\n }\n\n // Verify only the final deployed declaration, never intermediate historical targets.\n const final = migrations.at(-1);\n if (final?.desiredState !== undefined) {\n const finalExternal = externalDeclarations.length === 0 ? undefined : await inspectExternalObjects({ executor, dialect, external: externalDeclarations });\n if (params.probe === \"rollback\") await executor({ text: \"BEGIN\" });\n try {\n assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: final.desiredState.from, to: final.desiredState.to, external: finalExternal, removals: comparisonRemovals({ migration: final, external: finalExternal }), ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n } finally {\n if (params.probe === \"rollback\") await executor({ text: \"ROLLBACK\" });\n }\n }\n return { applied, skipped };\n } });\n}\n\nfunction comparisonRemovals(params: { migration: MigrationFile; external?: ExternalObjectResolution }): readonly SqlObjectIdentity[] | undefined {\n return params.migration.desiredState?.unmanagedRemovals?.filter((identity) => params.external === undefined || externalObjectOwner({ identity, external: params.external }) === undefined);\n}\n\nasync function assertExternalMigrationMutation(params: { executor: SqlExecutor; migration: MigrationFile; dialect: Dialect; namespace: string; external: ExternalObjectResolution }): Promise<void> {\n assertExternalOwnershipClaims({ external: params.external, identities: params.migration.desiredState?.unmanagedRemovals ?? [] });\n const state = params.migration.desiredState;\n if (state === undefined) return;\n const identities: SqlObjectIdentity[] = [];\n const steps = diffSchemas({ from: state.from.schema, to: state.to.schema, dialect: params.dialect });\n for (const step of steps) {\n if (step.kind === \"createNamespace\") identities.push({ kind: \"namespace\", name: step.namespace });\n else if (\"table\" in step && typeof step.table === \"string\") identities.push({ kind: \"table\", name: { namespace: step.namespace ?? params.namespace, name: step.table } });\n else if (\"enumName\" in step) identities.push({ kind: \"enum\", name: { namespace: step.namespace ?? params.namespace, name: step.enumName } });\n }\n assertExternalOwnershipClaims({ external: params.external, identities });\n // The snapshot names what this migration drops or retypes; external dependents refuse before its SQL runs.\n await refuseExternalDependents({ executor: params.executor, dialect: params.dialect, external: params.external, steps, namespace: params.namespace });\n}\n\n// ─── Status ───────────────────────────────────────────────────────\n\n/** Compare known migrations against the bookkeeping table. */\nexport async function migrationStatus(params: {\n executor: SqlExecutor;\n migrations: readonly MigrationFile[];\n /** Bookkeeping dialect; postgres if omitted. */\n dialect?: Dialect;\n /** Trusted current deployment; policy state is verified independently of migration records. */\n schema?: SchemaIR;\n}): Promise<MigrationStatus> {\n const { executor, migrations } = params;\n const dialect = params.dialect ?? \"postgres\";\n // No lock or journal creation: status stays nonblocking and read-only.\n const recorded = await recordedRows({ executor, dialect, modules: migrations.some((migration) => migration.moduleOrigin !== undefined) });\n\n const applied: string[] = [];\n const pending: string[] = [];\n const mismatched: string[] = [];\n const rollingBack: string[] = [];\n const known = new Set(migrations.map((migration) => migration.name));\n const unknownFiles: string[] = [];\n for (const [name, stored] of recorded) {\n if (!known.has(name)) {\n unknownFiles.push(name);\n if (stored.statementIndex < 0) rollingBack.push(name);\n }\n }\n\n for (const migration of migrations) {\n const stored = recorded.get(migration.name);\n if (stored === undefined) {\n pending.push(migration.name);\n continue;\n }\n if (stored.statementIndex < 0) {\n rollingBack.push(migration.name);\n continue;\n }\n if (stored.checksum === \"\" && stored.error === undefined) {\n applied.push(migration.name);\n continue;\n }\n if (stored.checksum !== \"\" && stored.checksum !== checksumOf({ migration })) {\n mismatched.push(migration.name);\n continue;\n }\n // A partial row re-applies (resumes) — report it as pending. The SAME\n // predicate apply uses: reporting a partial self-managed sqlite record as\n // \"applied\" while apply would resume it is a lie about the database.\n if (isCompleteRecord({ dialect, migration, stored }) && stored.error === undefined) applied.push(migration.name);\n else pending.push(migration.name);\n }\n\n if (dialect === \"postgres\") {\n const expected = params.schema ?? [...migrations].reverse().find((migration) => applied.includes(migration.name) && migration.rls !== undefined)?.rls?.to;\n await introspectPostgres({ executor, ...(expected === undefined ? {} : { rlsSchema: expected }), requireInstalledRls: true });\n }\n return { applied, pending, mismatched, rollingBack, ...(unknownFiles.length === 0 ? {} : { unknownFiles }) };\n}\n\n/**\n * The bookkeeping journal itself, in the order rows were written — i.e. the\n * order migrations were actually applied, which is what a rollback must walk\n * backwards. Every row is returned with its checksum, cursor and classification;\n * mismatched, partial and fileless rows still occupy their position in history.\n *\n * Takes no lock, exactly like `migrationStatus`.\n */\nexport async function recordedMigrations(params: {\n executor: SqlExecutor;\n /** Known migration files — classification needs their SQL. */\n migrations: readonly MigrationFile[];\n /** Bookkeeping dialect; postgres if omitted. */\n dialect?: Dialect;\n}): Promise<RecordedMigration[]> {\n const { executor, migrations } = params;\n const dialect = params.dialect ?? \"postgres\";\n const recorded = await recordedRows({ executor, dialect, modules: migrations.some((migration) => migration.moduleOrigin !== undefined) });\n return classifyJournal({ dialect, migrations, recorded });\n}\n\n/** Shared journal classification; history imports this, never the reverse. */\nexport function classifyJournal(params: { dialect: Dialect; migrations: readonly MigrationFile[]; recorded: ReadonlyMap<string, JournalRow> }): RecordedMigration[] {\n const { dialect, migrations, recorded } = params;\n const byName = new Map(migrations.map((migration) => [migration.name, migration]));\n\n const journal: RecordedMigration[] = [];\n for (const [name, stored] of recorded) {\n const migration = byName.get(name);\n journal.push({\n name,\n checksum: stored.checksum,\n statementIndex: stored.statementIndex,\n state:\n migration === undefined\n ? \"unknown-file\"\n : stored.checksum !== \"\" && stored.checksum !== checksumOf({ migration })\n ? \"mismatched\"\n : stored.statementIndex < 0\n ? \"rolling-back\"\n : isCompleteRecord({ dialect, migration, stored }) && stored.error === undefined\n ? \"applied\"\n : \"partial\",\n });\n }\n return journal;\n}\n\n// ─── Resolve (repair) ─────────────────────────────────────────────\n\n/**\n * Repair the bookkeeping table without running SQL: mark a migration as\n * `\"applied\"` (upsert its record; pass `checksum` to also pin its content —\n * omitted, the record stores an empty checksum and later runs skip\n * verification for it) or `\"rolled-back\"` (delete its record).\n */\nexport async function resolveMigration(params: {\n executor: SqlExecutor;\n name: string;\n as: \"applied\" | \"rolled-back\";\n checksum?: string;\n /** Bookkeeping dialect; postgres if omitted. */\n dialect?: Dialect;\n}): Promise<void> {\n const dialect = params.dialect ?? \"postgres\";\n await withMigrationLock({ executor: params.executor, dialect, run: (executor) => repairMigration({ ...params, executor, dialect }) });\n}\n\nasync function repairMigration(params: {\n executor: SqlExecutor;\n name: string;\n as: \"applied\" | \"rolled-back\";\n checksum?: string;\n dialect: Dialect;\n}): Promise<void> {\n const { executor, name, dialect } = params;\n const moduleRecord = (await readModuleJournal({ executor, dialect })).get(name);\n if (moduleRecord?.entry !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Module history cannot be marked applied or deleted without verified module recovery\", meta: { reason: \"module-resolution-required\", moduleId: moduleRecord.entry.migration.moduleOrigin!.moduleId } });\n await ensureMigrationsTable({ executor, dialect });\n\n if (params.as === \"applied\") {\n const insert = `INSERT INTO ${q(dialect, MIGRATIONS_TABLE_NAME)} (${q(dialect, \"name\")}, ${q(dialect, \"checksum\")}, ${q(dialect, \"statement_index\")}) VALUES (${ph(dialect, 1)}, ${ph(dialect, 2)}, ${RESOLVED_STATEMENT_INDEX})`;\n // `error` is cleared on every dialect. That column also carries the\n // in-flight marker, and a repaired record still reading \"VIBE_INFLIGHT:2\"\n // would show a migration recorded as applied as though it were stuck\n // mid-statement.\n const upsert =\n dialect === \"mysql\"\n ? `${insert} ON DUPLICATE KEY UPDATE \\`checksum\\` = VALUES(\\`checksum\\`), \\`statement_index\\` = VALUES(\\`statement_index\\`), \\`error\\` = NULL`\n : `${insert} ON CONFLICT (\"name\") DO UPDATE SET \"checksum\" = EXCLUDED.\"checksum\", \"statement_index\" = EXCLUDED.\"statement_index\", \"error\" = NULL`;\n await executor({ text: upsert, values: [name, params.checksum ?? \"\"] });\n return;\n }\n await executor({\n text: `DELETE FROM ${q(dialect, MIGRATIONS_TABLE_NAME)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 1)}`,\n values: [name],\n });\n}\n\n// ─── Rollback ─────────────────────────────────────────────────────\n\n/**\n * Roll back ONE applied migration by executing its `downSql` and deleting its\n * bookkeeping row, under the same advisory lock as `applyMigrations`.\n *\n * Guards, in order: the migration must carry `downSql` (older migrations\n * predate down-migration support), must be recorded as applied, and — when\n * the record pins a checksum — its up SQL must still match (rolling back with\n * drifted files would run a down that no longer mirrors what was applied).\n *\n * Dialect behavior mirrors apply exactly (same `usesStatementBookkeeping`\n * predicate, read over the DOWN script): postgres/sqlite run the down inside\n * BEGIN/COMMIT with the bookkeeping DELETE (atomic). mysql DDL auto-commits,\n * and a sqlite down containing a table-rebuild block cannot be wrapped, so\n * both record progress per-statement in the existing `statement_index`\n * column, NEGATIVE to mark the rollback direction: after k down statements,\n * the row stores -(k+1). A failed rollback resumes from the recorded\n * statement on the next call; `applyMigrations` refuses a mid-rollback record\n * (that check reads the sign only, so it holds for every dialect). A\n * partially APPLIED migration cannot be rolled back — its down mirrors the\n * full up; finish applying (apply resumes) or repair with `resolveMigration`.\n */\ntype RollbackOptions = {\n executor: SqlExecutor;\n acceptSecurityChanges?: boolean;\n acceptIntegrityLoss?: boolean;\n probe?: \"none\" | \"rollback\" | \"temporary\";\n dialect?: Dialect;\n};\n\n/** Reverse one file only if it is still newest when the lock is acquired. */\nexport async function rollbackMigration(params: RollbackOptions & { migration: MigrationFile }): Promise<void> {\n const { executor, migration } = params;\n const dialect = params.dialect ?? \"postgres\";\n const downSql = validateRollbackFile({ ...params, dialect });\n await withMigrationLock({ executor, dialect, run: async (executor) => {\n const recorded = await recordedRows({ executor, dialect, modules: true });\n const stored = assertRollbackRecord({ migration, stored: recorded.get(migration.name), dialect });\n const newest = [...recorded.keys()].at(-1);\n if (newest !== migration.name) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration \"${migration.name}\" is not the newest recorded migration; select rollback again`, meta: { reason: \"rollback-not-latest\", migration: migration.name, newest } });\n await validateRollbackRecovery({ executor, migration, downSql, stored, dialect });\n await executeRollback({ ...params, executor, dialect, downSql, stored });\n } });\n}\n\n/**\n * Select from the current journal under one lock. With to, retain that applied\n * migration and reverse every newer row; without it, reverse only the newest.\n * All selected declarations/approvals/progress are checked before any reversal.\n * A later SQL failure can still leave a successfully reversed prefix on disk.\n * SQLite cross-connection ownership remains the caller's responsibility.\n */\nexport async function rollbackMigrations(params: RollbackOptions & {\n migrations: readonly MigrationFile[];\n to?: string;\n}): Promise<RollbackResult> {\n const { executor, migrations } = params;\n const dialect = params.dialect ?? \"postgres\";\n assertDistinctMigrationNames({ migrations });\n return withMigrationLock({ executor, dialect, run: async (executor): Promise<RollbackResult> => {\n const recorded = await recordedRows({ executor, dialect, modules: true });\n const journal = classifyJournal({ migrations, recorded, dialect });\n const byName = new Map(migrations.map((migration) => [migration.name, migration]));\n let start = Math.max(0, journal.length - 1);\n if (params.to !== undefined) {\n const target = journal.findIndex((row) => row.name === params.to);\n const row = journal[target];\n if (row?.state !== \"applied\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Rollback target \"${params.to}\" is not a known applied migration`, meta: { reason: \"rollback-target-invalid\", to: params.to, state: row?.state } });\n assertMigrationMetadata({ migration: byName.get(row.name)!, dialect });\n start = target + 1;\n }\n const plan: { migration: MigrationFile; downSql: readonly string[]; stored: RecordedRow }[] = [];\n for (const row of journal.slice(start).reverse()) {\n const migration = byName.get(row.name);\n if (migration === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Cannot roll back \"${row.name}\" without its migration file`, meta: { reason: \"rollback-file-missing\", migration: row.name } });\n const stored = assertRollbackRecord({ migration, stored: recorded.get(row.name), dialect });\n const downSql = validateRollbackFile({ ...params, migration, dialect });\n plan.push({ migration, downSql, stored });\n }\n for (const entry of plan) await validateRollbackRecovery({ executor, dialect, ...entry });\n const rolledBack: string[] = [];\n for (const entry of plan) {\n await executeRollback({ ...params, executor, dialect, ...entry });\n rolledBack.push(entry.migration.name);\n }\n return { rolledBack };\n } });\n}\n\nfunction validateRollbackFile(params: RollbackOptions & { migration: MigrationFile; dialect: Dialect }): readonly string[] {\n const { migration, dialect } = params;\n assertModuleAdoption({ migration });\n if (migration.moduleAdoption !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Reversal across verified module adoption is refused; it would execute destructive source down SQL against pre-existing data\", meta: { reason: \"module-adoption-reverse-refused\", migration: migration.name } });\n if (migration.desiredStatePending === true) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Unfinalized desired state cannot be rolled back\", meta: { reason: \"desired-state-unfinalized\", migration: migration.name } });\n if (migration.moduleOrigin !== undefined) {\n assertMaterializedModuleMigration({ migration });\n assertModuleOwnership({ origin: migration.moduleOrigin, desiredState: migration.desiredState });\n }\n const downSql = migration.downSql;\n if (downSql === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `migration \"${migration.name}\" has no down.sql; roll it back manually, then repair with resolveMigration (as: \"rolled-back\")`, meta: { reason: \"rollback-down-missing\", migration: migration.name } });\n assertProbeMode({ dialect, probe: params.probe });\n if (migration.desiredState !== undefined) {\n assertDesiredState({ value: migration.desiredState, migration: migration.name });\n if (migration.desiredState.dialect !== dialect) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Migration desired-state dialect mismatch\", meta: { reason: \"desired-state-dialect-mismatch\" } });\n assertRemovalAuthorization({ steps: diffSchemas({ from: migration.desiredState.to.schema, to: (migration.desiredState.down ?? migration.desiredState.from).schema, dialect }), previous: migration.desiredState.to, dialect, namespace: dialect === \"sqlite\" ? \"main\" : \"public\", ...(params.acceptIntegrityLoss === undefined ? {} : { acceptIntegrityLoss: params.acceptIntegrityLoss }) });\n }\n assertNativeMigrationMetadata({ migration, sql: downSql, dialect });\n assertExecutable({ migration, execution: migration.downExecution, sql: downSql, dialect });\n assertSecurityAcknowledgement({ securityChanges: [...(migration.downSecurityChanges ?? []), ...migrationRlsSecurityChanges({ migration, down: true })], ...(params.acceptSecurityChanges === undefined ? {} : { acceptSecurityChanges: params.acceptSecurityChanges }) });\n if (dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: downSql })) assertSupportedSelfManagedScript({ sql: downSql, migration: migration.name, direction: \"down\" });\n return downSql;\n}\n\nfunction assertRollbackRecord(params: { migration: MigrationFile; stored?: RecordedRow; dialect: Dialect }): RecordedRow {\n const { migration, stored, dialect } = params;\n if (stored === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `migration \"${migration.name}\" is not recorded as applied; nothing to roll back`, meta: { migration: migration.name } });\n assertChecksumMatches({ migration, stored: stored.checksum });\n if (stored.statementIndex >= 0 && (!isCompleteRecord({ dialect, migration, stored }) || stored.error !== undefined)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `migration \"${migration.name}\" is only partially applied or has an unresolved error; its down mirrors the FULL up. Finish or repair with resolveMigration`, meta: { reason: \"rollback-partial-up\", migration: migration.name, statementIndex: stored.statementIndex } });\n return stored;\n}\n\nasync function validateRollbackRecovery(params: { executor: SqlExecutor; dialect: Dialect; migration: MigrationFile; downSql: readonly string[]; stored: RecordedRow }): Promise<void> {\n const { executor, dialect, migration, downSql, stored } = params;\n if (stored.statementIndex >= 0) return;\n const start = -stored.statementIndex - 1;\n if (start > downSql.length) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Rollback progress exceeds its statement count\", meta: { reason: \"rollback-progress-invalid\", migration: migration.name } });\n if (dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: downSql })) assertSelfManagedResumeSafe({ sql: downSql, start, migration: migration.name, direction: \"down\" });\n if (!marksInflight({ dialect, execution: migration.downExecution }) || start >= downSql.length) return;\n const operation = migration.downExecution?.transaction === \"none\" ? operationFor({ execution: migration.downExecution, statement: start }) : undefined;\n if (operation !== undefined) await establishOperationState({ executor, dialect, operation });\n else if (inflightStatement({ error: stored.error }) === start) throw uncertainStatement({ migration: migration.name, statements: downSql, index: start, dialect, direction: \"down\" });\n}\n\nasync function executeRollback(params: RollbackOptions & { migration: MigrationFile; dialect: Dialect; downSql: readonly string[]; stored: RecordedRow }): Promise<void> {\n const { executor, dialect, migration, downSql, stored } = params;\n const moduleOrigins = applicationModuleOrigins({ migration, records: await readModuleJournal({ executor, dialect }) });\n if (usesStatementBookkeeping({ dialect, sql: downSql, ...(migration.downExecution === undefined ? {} : { execution: migration.downExecution }) })) {\n const start = stored.statementIndex < 0 ? -stored.statementIndex - 1 : 0;\n await withSessionLimits({\n executor, dialect, execution: migration.downExecution,\n run: () => runNonTransactionalDown({ executor, dialect, migration, moduleOrigins, downSql, start, probe: params.probe, storedError: stored.error }),\n });\n } else await runTransactionalDown({ executor, dialect, migration, moduleOrigins, downSql, probe: params.probe });\n}\n\n/** Atomic down path (postgres, sqlite): statements + record DELETE in one tx. */\nasync function runTransactionalDown(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n migration: MigrationFile;\n moduleOrigins: readonly ModuleMigrationOrigin[];\n downSql: readonly string[];\n probe?: \"none\" | \"rollback\" | \"temporary\";\n}): Promise<void> {\n const { executor, dialect, migration, downSql } = params;\n const selfManaged = dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: downSql });\n const wrap = !selfManaged;\n\n if (wrap) await executor({ text: \"BEGIN\" });\n try {\n const limits = migration.downExecution;\n if (wrap && dialect === \"postgres\" && limits !== undefined) {\n if ((limits.lockTimeoutMs ?? 0) > 0) await executor({ text: renderMigrationSessionSet({ dialect: getSqlDialect({ dialect }), setting: \"lock_timeout\", milliseconds: limits.lockTimeoutMs as number, local: true }).text });\n if ((limits.statementTimeoutMs ?? 0) > 0) await executor({ text: renderMigrationSessionSet({ dialect: getSqlDialect({ dialect }), setting: \"statement_timeout\", milliseconds: limits.statementTimeoutMs as number, local: true }).text });\n }\n if (migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.from, to: migration.desiredState.to, removals: migration.desiredState.unmanagedRemovals, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (migration.rls !== undefined) await introspectPostgres({ executor, rlsSchema: migration.rls.to, inTransaction: true, requireInstalledRls: true });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n for (const statement of downSql) {\n await executeStatement({ executor, statement, dialect });\n }\n if (migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.to, to: migration.desiredState.down ?? migration.desiredState.from, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (migration.rls !== undefined) await introspectPostgres({ executor, rlsSchema: migration.rls.from, inTransaction: true, requireInstalledRls: true });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n await executor({\n text: `DELETE FROM ${q(dialect, MIGRATIONS_TABLE_NAME)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 1)}`,\n values: [migration.name],\n });\n if (wrap) await executor({ text: \"COMMIT\" });\n } catch (error) {\n if (wrap) {\n try {\n await executor({ text: \"ROLLBACK\" });\n } catch {\n // Rollback is best-effort; the original failure matters more.\n }\n } else {\n await cleanupSelfManagedFailure({ executor });\n }\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `rollback of \"${migration.name}\" failed: ${error instanceof Error ? error.message : String(error)}`,\n meta: { migration: migration.name, ...timeoutDiagnostic({ error }) },\n cause: error,\n });\n }\n}\n\n/**\n * Per-statement down path (mysql, and self-managed sqlite down scripts):\n * progress in `statement_index`, stored NEGATIVE (-(completed + 1)) so\n * apply/status can tell the direction apart.\n */\nasync function runNonTransactionalDown(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n migration: MigrationFile;\n moduleOrigins: readonly ModuleMigrationOrigin[];\n downSql: readonly string[];\n start: number;\n /** The journal row's `error` text when resuming — may hold an in-flight marker. */\n storedError?: string;\n probe?: \"none\" | \"rollback\" | \"temporary\";\n}): Promise<void> {\n const { executor, dialect, migration, downSql } = params;\n const table = q(dialect, MIGRATIONS_TABLE_NAME);\n const selfManagedDown = dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: downSql });\n // Same rule, same moment, in the down direction (see the up path above).\n if (selfManagedDown) {\n assertSupportedSelfManagedScript({ sql: downSql, migration: migration.name, direction: \"down\" });\n assertSelfManagedResumeSafe({ sql: downSql, start: params.start, migration: migration.name, direction: \"down\" });\n }\n const execution = migration.downExecution;\n const declared = execution?.transaction === \"none\";\n // Identical regime to the up direction: mysql always has the window, postgres\n // only when declared, sqlite closes it with a per-statement transaction.\n const marks = marksInflight({ dialect, ...(execution === undefined ? {} : { execution }) });\n const selfManaged = selfManagedDown;\n // A recorded index can point INSIDE a rebuild block, one past its\n // session-scoped pragma — rewind to the block's start (see execute.ts).\n const start = selfManaged\n ? selfManagedResumeStart({ sql: downSql, start: params.start })\n : params.start;\n\n const recordProgress = async (completed: number): Promise<void> => {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"statement_index\")} = ${ph(dialect, 1)}, ${q(dialect, \"error\")} = NULL WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [-(completed + 1), migration.name],\n });\n };\n\n // Same resume contract as the up direction: a down statement whose effect\n // cannot be established is never replayed automatically.\n const resumeOperation = marks && declared && start < downSql.length\n ? operationFor({ ...(execution === undefined ? {} : { execution }), statement: start })\n : undefined;\n\n // This refusal is checked BEFORE the \"rollback started\" write below, and the\n // order is the whole point: that write sets `error` to NULL and would take\n // the in-flight marker with it. A refusal thrown after it is SPENT — the\n // operator's next `migrate down` reads a clean row, finds nothing in flight\n // and replays the statement silently, which is the defect itself.\n if (\n marks\n && start < downSql.length\n && resumeOperation === undefined\n && inflightStatement({ ...(params.storedError === undefined ? {} : { error: params.storedError }) }) === start\n ) {\n throw uncertainStatement({ migration: migration.name, statements: downSql, index: start, dialect, direction: \"down\" });\n }\n\n // Probe before any write that could clear the interrupted statement's marker.\n const resumeState = resumeOperation === undefined ? undefined : await establishOperationState({ executor, dialect, operation: resumeOperation });\n\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n // Mark the rollback as started before the first statement runs, so a crash\n // between statements can never be mistaken for a completed apply.\n if (start === 0) {\n if (migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.from, to: migration.desiredState.to, removals: migration.desiredState.unmanagedRemovals, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n await recordProgress(0);\n }\n\n let cursor = start;\n if (\n resumeOperation !== undefined\n && resumeState === \"satisfied\"\n ) {\n if (start + 1 === downSql.length && migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.to, to: migration.desiredState.down ?? migration.desiredState.from, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (start + 1 === downSql.length) await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n await recordProgress(start + 1);\n cursor = start + 1;\n }\n\n for (let index = cursor; index < downSql.length; index += 1) {\n const atomic = selfManaged && canCheckpointAtomically({ sql: downSql, index });\n const commitsBlock = selfManaged && isSelfManagedCommit({ statement: downSql[index] as string });\n if (marks) {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"error\")} = ${ph(dialect, 1)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [`${INFLIGHT_PREFIX}${index}`, migration.name],\n });\n }\n if (atomic) await executor({ text: \"BEGIN\" });\n try {\n // Persist the index AFTER COMMIT in the transaction it describes. A kill\n // before COMMIT rolls back both; a kill after it cannot replay the block.\n if (commitsBlock) {\n if (migration.desiredState !== undefined && downSql.slice(index + 1).every((statement) => /^\\s*PRAGMA\\s+foreign_keys\\s*=\\s*ON\\s*;?\\s*$/i.test(statement))) assertMigrationState({ report: await verifySqliteTransitionBeforeRestore({ executor, dialect, from: migration.desiredState.to, to: migration.desiredState.down ?? migration.desiredState.from, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe, sqliteRestorePending: true });\n await recordProgress(index + 1);\n }\n await executeStatement({ executor, statement: downSql[index] as string, dialect });\n if (index === downSql.length - 1 && migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.to, to: migration.desiredState.down ?? migration.desiredState.from, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (index === downSql.length - 1) await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n if (atomic) {\n await recordProgress(index + 1);\n await executor({ text: \"COMMIT\" });\n }\n } catch (error) {\n // Self-managed scripts fail INSIDE their own transaction: close it first\n // or the error UPDATE below is rolled back with it (see the apply path).\n if (selfManaged) await cleanupSelfManagedFailure({ executor });\n try {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"error\")} = ${ph(dialect, 1)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [marks ? `${INFLIGHT_PREFIX}${index}` : error instanceof Error ? error.message : String(error), migration.name],\n });\n } catch {\n // Progress row update is best-effort; the original failure matters more.\n }\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `rollback of \"${migration.name}\" failed at down statement ${index + 1} of ${downSql.length}: ${error instanceof Error ? error.message : String(error)}. ${marks ? \"The statement outcome is unknown; inspect its effects before resolving or retrying.\" : \"Progress is recorded; re-running the rollback resumes from this statement.\"}`,\n meta: { migration: migration.name, statementIndex: index, ...(marks ? { outcome: \"unknown\" } : {}), ...timeoutDiagnostic({ error }) },\n cause: error,\n });\n }\n if (!atomic && !commitsBlock) await recordProgress(index + 1);\n }\n\n if (migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.to, to: migration.desiredState.down ?? migration.desiredState.from, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n await executor({\n text: `DELETE FROM ${table} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 1)}`,\n values: [migration.name],\n });\n}\n\n// ─── Execution paths ──────────────────────────────────────────────\n\n/** Transactional path (postgres, sqlite) — see module doc. */\nasync function runTransactional(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n migration: MigrationFile;\n moduleOrigins: readonly ModuleMigrationOrigin[];\n external?: ExternalObjectResolution;\n probe?: \"none\" | \"rollback\" | \"temporary\";\n}): Promise<void> {\n const { executor, dialect, migration } = params;\n // sqlite rebuild scripts manage their own transactions — never wrap them.\n const selfManaged = dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: migration.sql });\n const wrap = !selfManaged;\n\n if (wrap) await executor({ text: \"BEGIN\" });\n try {\n // Declared limits ride the transaction itself here (SET LOCAL), so COMMIT\n // or ROLLBACK restores them with no separate bookkeeping.\n const limits = migration.execution;\n if (wrap && dialect === \"postgres\" && limits !== undefined) {\n if ((limits.lockTimeoutMs ?? 0) > 0) await executor({ text: renderMigrationSessionSet({ dialect: getSqlDialect({ dialect }), setting: \"lock_timeout\", milliseconds: limits.lockTimeoutMs as number, local: true }).text });\n if ((limits.statementTimeoutMs ?? 0) > 0) await executor({ text: renderMigrationSessionSet({ dialect: getSqlDialect({ dialect }), setting: \"statement_timeout\", milliseconds: limits.statementTimeoutMs as number, local: true }).text });\n }\n await assertForwardStart({ executor, dialect, migration, external: params.external, ...(params.probe === undefined ? {} : { probe: params.probe }) });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n if (migration.rls !== undefined) await introspectPostgres({ executor, rlsSchema: migration.rls.from, inTransaction: true, requireInstalledRls: true });\n let statementIndex = 0;\n for (const statement of migration.sql) {\n await executeStatement({ executor, statement, dialect });\n statementIndex += 1;\n }\n if (migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, from: migration.desiredState.from, to: migration.desiredState.to, external: params.external, removals: comparisonRemovals({ migration, external: params.external }), dialect, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (migration.rls !== undefined) await introspectPostgres({ executor, rlsSchema: migration.rls.to, inTransaction: true, requireInstalledRls: true });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n if (migration.moduleOrigin !== undefined) await insertModuleJournal({ executor, dialect, migration, index: statementIndex, complete: true });\n else await executor({\n text: `INSERT INTO ${q(dialect, MIGRATIONS_TABLE_NAME)} (${q(dialect, \"name\")}, ${q(dialect, \"checksum\")}, ${q(dialect, \"statement_index\")}) VALUES (${ph(dialect, 1)}, ${ph(dialect, 2)}, ${ph(dialect, 3)})`,\n values: [migration.name, checksumOf({ migration }), statementIndex],\n });\n if (wrap) await executor({ text: \"COMMIT\" });\n } catch (error) {\n if (wrap) {\n try {\n await executor({ text: \"ROLLBACK\" });\n } catch {\n // Rollback is best-effort; the original failure matters more.\n }\n } else {\n await cleanupSelfManagedFailure({ executor });\n }\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `migration \"${migration.name}\" failed: ${error instanceof Error ? error.message : String(error)}`,\n meta: { migration: migration.name },\n cause: error,\n });\n }\n}\n\n/**\n * Per-statement path (mysql — DDL auto-commits — and self-managed sqlite\n * scripts, which cannot be wrapped): per-statement progress in the\n * bookkeeping row; failures record the error and later runs resume.\n */\nasync function runNonTransactional(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n migration: MigrationFile;\n moduleOrigins: readonly ModuleMigrationOrigin[];\n external?: ExternalObjectResolution;\n start: number;\n insertRecord: boolean;\n /** The journal row's `error` text when resuming — may hold an in-flight marker. */\n storedError?: string;\n probe?: \"none\" | \"rollback\" | \"temporary\";\n}): Promise<void> {\n const { executor, dialect, migration, insertRecord } = params;\n const table = q(dialect, MIGRATIONS_TABLE_NAME);\n const selfManaged = dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: migration.sql });\n // Before the journal row, before the first statement: a self-managed script\n // is only recoverable in the shape the generator emits (execute.ts). This\n // sits HERE rather than up front with the other validations so that a\n // deviant migration already recorded as applied cannot wedge `migrate apply`\n // for the whole history — a record repaired with `resolveMigration` skips\n // before reaching this point, which is the operator's way out.\n if (selfManaged) {\n assertSupportedSelfManagedScript({ sql: migration.sql, migration: migration.name, direction: \"up\" });\n assertSelfManagedResumeSafe({ sql: migration.sql, start: params.start, migration: migration.name, direction: \"up\" });\n }\n const execution = migration.execution;\n const declared = execution?.transaction === \"none\";\n // mysql has this window whether or not anyone declared anything; postgres\n // only when the migration opted out of transactions. sqlite closes it instead\n // of recording it (see the atomic checkpoint below).\n const marks = marksInflight({ dialect, ...(execution === undefined ? {} : { execution }) });\n // A recorded index can point INSIDE a rebuild block, one past its\n // session-scoped `PRAGMA foreign_keys=OFF` — resuming there would replay the\n // rebuild (DROP TABLE included) with foreign keys ON. Rewind to the block.\n const start = selfManaged\n ? selfManagedResumeStart({ sql: migration.sql, start: params.start })\n : params.start;\n\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n if (insertRecord) {\n if (migration.desiredState !== undefined) {\n await assertForwardStart({ executor, dialect, migration, external: params.external, ...(params.probe === undefined ? {} : { probe: params.probe }) });\n if (migration.sql.length === 0) assertMigrationState({ report: await verifyMigrationTransition({ executor, from: migration.desiredState.from, to: migration.desiredState.to, external: params.external, removals: comparisonRemovals({ migration, external: params.external }), dialect, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n }\n if (migration.moduleOrigin !== undefined) await insertModuleJournal({ executor, dialect, migration, index: 0, complete: false });\n else await executor({\n text: `INSERT INTO ${table} (${q(dialect, \"name\")}, ${q(dialect, \"checksum\")}, ${q(dialect, \"statement_index\")}) VALUES (${ph(dialect, 1)}, ${ph(dialect, 2)}, 0)`,\n values: [migration.name, checksumOf({ migration })],\n });\n }\n\n const checkpoint = async (completed: number): Promise<void> => {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"statement_index\")} = ${ph(dialect, 1)}, ${q(dialect, \"error\")} = NULL WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [completed, migration.name],\n });\n };\n\n // RESUME: establish what happened to the statement we stopped on, before\n // touching the database again. This is the whole point of the declared\n // regime — a statement whose effect cannot be established is never replayed.\n let cursor = start;\n if (marks && !insertRecord && start < migration.sql.length) {\n // Declared operations exist on postgres only — they are the one way a\n // statement's outcome can be READ back instead of guessed.\n const operation = declared ? operationFor({ ...(execution === undefined ? {} : { execution }), statement: start }) : undefined;\n if (operation !== undefined) {\n const state = await establishOperationState({ executor, dialect, operation });\n if (state === \"satisfied\") {\n if (start + 1 === migration.sql.length && migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, dialect, from: migration.desiredState.from, to: migration.desiredState.to, external: params.external, removals: comparisonRemovals({ migration, external: params.external }), ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (start + 1 === migration.sql.length) await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n await checkpoint(start + 1);\n cursor = start + 1;\n }\n } else if (inflightStatement({ ...(params.storedError === undefined ? {} : { error: params.storedError }) }) === start) {\n throw uncertainStatement({ migration: migration.name, statements: migration.sql, index: start, dialect, direction: \"up\" });\n }\n }\n\n for (let index = cursor; index < migration.sql.length; index += 1) {\n // sqlite: hold the statement and its checkpoint in ONE transaction, so the\n // gap never opens. Either both landed or neither did.\n const atomic = selfManaged && canCheckpointAtomically({ sql: migration.sql, index });\n const commitsBlock = selfManaged && isSelfManagedCommit({ statement: migration.sql[index] as string });\n // Record the intent to run BEFORE running it, so a crash in the gap\n // between the statement committing and its checkpoint is distinguishable\n // from a statement that never started.\n if (marks) {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"error\")} = ${ph(dialect, 1)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [`${INFLIGHT_PREFIX}${index}`, migration.name],\n });\n }\n if (atomic) await executor({ text: \"BEGIN\" });\n try {\n // Same atomic commit checkpoint as the down direction above.\n if (commitsBlock) {\n if (migration.desiredState !== undefined && migration.sql.slice(index + 1).every((statement) => /^\\s*PRAGMA\\s+foreign_keys\\s*=\\s*ON\\s*;?\\s*$/i.test(statement))) assertMigrationState({ report: await verifySqliteTransitionBeforeRestore({ executor, dialect, from: migration.desiredState.from, to: migration.desiredState.to, removals: migration.desiredState.unmanagedRemovals, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe, sqliteRestorePending: true });\n await checkpoint(index + 1);\n }\n await executeStatement({ executor, statement: migration.sql[index] as string, dialect });\n if (index === migration.sql.length - 1 && migration.desiredState !== undefined) assertMigrationState({ report: await verifyMigrationTransition({ executor, from: migration.desiredState.from, to: migration.desiredState.to, external: params.external, removals: comparisonRemovals({ migration, external: params.external }), dialect, ...(params.probe === undefined ? {} : { probe: params.probe }) }) });\n if (index === migration.sql.length - 1) await assertApplicationModuleState({ executor, origins: params.moduleOrigins, probe: params.probe });\n if (atomic) {\n await checkpoint(index + 1);\n await executor({ text: \"COMMIT\" });\n }\n } catch (error) {\n // A self-managed script fails INSIDE its own BEGIN, with foreign_keys\n // OFF. Close that transaction FIRST: otherwise the error UPDATE below\n // joins it and is rolled back with it, and the session keeps running\n // inside a stale transaction (every later statement on this connection).\n if (selfManaged) await cleanupSelfManagedFailure({ executor });\n // Record the failure (best-effort) — statement_index already points at\n // the failed statement, so a re-run resumes exactly here.\n try {\n await executor({\n text: `UPDATE ${table} SET ${q(dialect, \"error\")} = ${ph(dialect, 1)} WHERE ${q(dialect, \"name\")} = ${ph(dialect, 2)}`,\n values: [marks ? `${INFLIGHT_PREFIX}${index}` : error instanceof Error ? error.message : String(error), migration.name],\n });\n } catch {\n // Progress row update is best-effort; the original failure matters more.\n }\n const sqlState = sqlStateOf(error);\n const timeout = sqlState === \"55P03\" ? \"lock-timeout\" : sqlState === \"57014\" ? \"statement-timeout\" : undefined;\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: timeout === \"lock-timeout\"\n ? `migration \"${migration.name}\" gave up waiting for a lock at statement ${index + 1} of ${migration.sql.length} (lock_timeout ${String(execution?.lockTimeoutMs ?? 0)}ms, SQLSTATE 55P03). Another session holds a conflicting lock; inspect the declared operation before retrying.`\n : timeout === \"statement-timeout\"\n ? `migration \"${migration.name}\" exceeded its statement_timeout at statement ${index + 1} of ${migration.sql.length} (${String(execution?.statementTimeoutMs ?? 0)}ms, SQLSTATE 57014). Inspect the declared operation before retrying.`\n : `migration \"${migration.name}\" failed at statement ${index + 1} of ${migration.sql.length}: ${error instanceof Error ? error.message : String(error)}. ${marks ? \"The statement outcome is unknown; inspect its effects before resolving or retrying.\" : \"Progress is recorded; re-running applyMigrations resumes from this statement.\"}`,\n meta: { migration: migration.name, statementIndex: index, ...(marks ? { outcome: \"unknown\" } : {}), ...(timeout === undefined ? {} : { reason: timeout, sqlState }) },\n cause: error,\n });\n }\n if (!atomic && !commitsBlock) await checkpoint(index + 1);\n }\n if (migration.moduleOrigin !== undefined) {\n assertMigrationState({ report: await verifyMigrationState({ executor, dialect, expected: migration.desiredState!.to, external: params.external }) });\n await completeModuleJournal({ executor, dialect, migration });\n }\n}\n\n// ─── Advisory locks ───────────────────────────────────────────────\n\nasync function acquireLock(params: { executor: SqlExecutor; dialect: Dialect }): Promise<void> {\n const { executor, dialect } = params;\n if (dialect === \"postgres\") {\n await executor({ text: `SELECT pg_advisory_lock(${PG_ADVISORY_LOCK_KEY})` });\n return;\n }\n if (dialect === \"mysql\") {\n // values: [] forces the row-returning executor path (adapter contract:\n // value-less text may run as a row-less batch statement).\n const rows = await executor({\n text: `SELECT GET_LOCK('${MYSQL_LOCK_NAME}', ${MYSQL_LOCK_TIMEOUT_SECONDS}) AS \\`vibe_lock\\``,\n values: [],\n });\n const acquired = Number(rows[0]?.vibe_lock) === 1;\n if (!acquired) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `could not acquire the migration lock ('${MYSQL_LOCK_NAME}') within ${MYSQL_LOCK_TIMEOUT_SECONDS}s — another migration run is in progress`,\n meta: { lock: MYSQL_LOCK_NAME },\n });\n }\n }\n // SQLite has no advisory lock here. Individual BEGINs do not protect a\n // whole self-managed run; callers must provide cross-connection ownership.\n}\n\nasync function releaseLock(params: { executor: SqlExecutor; dialect: Dialect }): Promise<void> {\n const { executor, dialect } = params;\n if (dialect === \"postgres\") {\n await executor({ text: `SELECT pg_advisory_unlock(${PG_ADVISORY_LOCK_KEY})` });\n } else if (dialect === \"mysql\") {\n await executor({ text: `SELECT RELEASE_LOCK('${MYSQL_LOCK_NAME}')` });\n }\n}\n\n// ─── Internals ────────────────────────────────────────────────────\n\ntype RecordedRow = JournalRow;\n\n// ─── Declared execution semantics ────────────────────────────\n\n/**\n * Sentinel written into the EXISTING nullable `error` column before a\n * statement of a declared-nontransactional migration runs, and cleared by that\n * statement's success checkpoint.\n *\n * Reusing `error` is deliberate: the column has been in all three dialects'\n * CREATE TABLE since the journal was introduced, so no installed database\n * needs migrating and an older binary reading the row simply sees a string it\n * reports as an error. There is no on-disk format change.\n */\nconst INFLIGHT_PREFIX = \"VIBE_INFLIGHT:\";\n\n/**\n * The statement index an in-flight marker refers to, if the stored text is one.\n *\n * The whole remainder must be digits. A driver error message that merely opens\n * with the sentinel is an ERROR, and reading it as a marker would stop a\n * migration that is safe to resume.\n */\nfunction inflightStatement(params: { error?: string }): number | undefined {\n const error = params.error;\n if (error === undefined || !error.startsWith(INFLIGHT_PREFIX)) return undefined;\n const digits = error.slice(INFLIGHT_PREFIX.length);\n if (!/^\\d+$/.test(digits)) return undefined;\n const index = Number.parseInt(digits, 10);\n return Number.isSafeInteger(index) ? index : undefined;\n}\n\n/**\n * Does this (dialect, script) pair have a window between a statement\n * committing and its journal checkpoint that nothing can close?\n *\n * - **mysql: yes, always.** Every statement auto-commits on its own, DDL\n * unconditionally, and no transaction can hold a statement and its checkpoint\n * together. Nobody has to declare anything for the window to exist.\n * - **postgres: only when the migration declared `transaction: \"none\"`.**\n * Otherwise the migration and its journal row are one transaction.\n * - **sqlite: no.** A self-managed script's statements are covered either by\n * their rebuild block's own transaction or by the per-statement transaction\n * {@link canCheckpointAtomically} authorises, and any other sqlite script\n * runs wholly inside `runTransactional`.\n *\n * Where the answer is yes, an in-flight marker is written before the statement\n * runs and cleared by its checkpoint, so a resume can tell \"this statement was\n * running when we died\" from \"this statement never started\".\n */\nfunction marksInflight(params: { dialect: Dialect; execution?: MigrationExecution }): boolean {\n return params.execution?.transaction === \"none\" || params.dialect === \"mysql\";\n}\n\n/**\n * The refusal a still-present in-flight marker produces: this statement was\n * running when the process died, and nothing in the database says whether it\n * committed.\n *\n * Replaying it is the one thing that must not happen automatically. A DDL\n * replay usually fails loudly, but `CREATE TABLE IF NOT EXISTS` and its\n * siblings do not, and a data statement such as `UPDATE t SET n = n + 1`\n * applies twice in silence. So the runner stops and hands the decision to an\n * operator, who can see the rows and VibeORM cannot.\n */\nfunction uncertainStatement(params: {\n migration: string;\n statements: readonly string[];\n index: number;\n dialect: Dialect;\n direction: \"up\" | \"down\";\n}): VibeError {\n const { migration, statements, index, dialect, direction } = params;\n const subject = direction === \"down\" ? `rollback of \"${migration}\"` : `migration \"${migration}\"`;\n const position = `${direction === \"down\" ? \"down statement\" : \"statement\"} ${index + 1} of ${statements.length}`;\n const why =\n dialect === \"mysql\"\n ? \"MySQL commits every statement on its own, so nothing outside the statement records whether it finished.\"\n : \"That statement declares no operation whose effect recovery can read back from the catalog.\";\n return new VibeError({\n code: \"VIBE_MIGRATION\",\n message:\n `${subject} was interrupted while ${position} was running. ${why} ` +\n \"It may or may not have committed, and replaying it could apply it twice, so VibeORM stops here instead of guessing. \" +\n \"Inspect what that statement did to the database, then follow \\\"Recovering from a stopped migration\\\" in docs/migrations.md: \" +\n `clear the \\`error\\` column of this migration's journal row if the statement did NOT land, set \\`statement_index\\` to ${direction === \"down\" ? -(index + 2) : index + 1} if it DID, ` +\n \"or finish the whole migration by hand and record that with `vibeorm migrate resolve --applied`. \" +\n `The statement was: ${(statements[index] as string).slice(0, 200)}`,\n meta: {\n reason: \"uncertain-statement\",\n outcome: \"unknown\",\n migration,\n statementIndex: index,\n ...(direction === \"down\" ? { direction } : {}),\n },\n });\n}\n\n/**\n * Validate a migration's declared execution block and refuse the combinations\n * no dialect can honour — at apply time, which is the earliest moment the\n * dialect is known.\n *\n * `transaction: \"none\"` is a PostgreSQL concept here. sqlite and mysql have no\n * separate nontransactional regime to opt into: mysql's DDL auto-commits\n * already, and a sqlite script either wraps or manages its own transactions.\n * Silently accepting the flag there would promise a guarantee that is not\n * being made.\n */\nfunction assertExecutable(params: {\n migration: MigrationFile;\n execution?: MigrationExecution;\n sql: readonly string[];\n dialect: Dialect;\n}): void {\n const { migration, execution, dialect } = params;\n assertValidExecution({ ...(execution === undefined ? {} : { execution }), statements: params.sql.length, migration: migration.name });\n if (execution === undefined || isDefaultExecution({ execution })) return;\n if (dialect !== \"postgres\") {\n throw new VibeError({\n code: \"VIBE_UNSUPPORTED_CAPABILITY\",\n message: `migration \"${migration.name}\" declares explicit execution semantics (transaction: \"${execution.transaction}\"), which only the postgres runner implements — ${dialect} has no separate nontransactional regime to opt into`,\n meta: { reason: \"nontransactional-unsupported\", dialect, migration: migration.name, feature: \"nontransactionalMigrations\" },\n });\n }\n}\n\n/** SQLSTATE of a driver error, however deeply the adapter wrapped it. */\nfunction sqlStateOf(error: unknown): string | undefined {\n let current: unknown = error;\n for (let depth = 0; depth < 5 && current !== null && typeof current === \"object\"; depth += 1) {\n const code = (current as { code?: unknown }).code;\n if (typeof code === \"string\" && /^[0-9A-Z]{5}$/.test(code)) return code;\n current = (current as { cause?: unknown }).cause;\n }\n return undefined;\n}\n\n/** Migration-owned limits, applied to the pinned session and restored after. */\nasync function withSessionLimits<T>(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n execution?: MigrationExecution;\n run: () => Promise<T>;\n}): Promise<T> {\n const { executor, dialect, execution } = params;\n const lock = execution?.lockTimeoutMs ?? 0;\n const statement = execution?.statementTimeoutMs ?? 0;\n if (dialect !== \"postgres\" || (lock === 0 && statement === 0)) return params.run();\n\n const sqlDialect = getSqlDialect({ dialect });\n const previous = (await executor({ text: renderMigrationSessionRead({ dialect: sqlDialect }).text, values: [] }))[0];\n if (lock > 0) await executor({ text: renderMigrationSessionSet({ dialect: sqlDialect, setting: \"lock_timeout\", milliseconds: lock }).text });\n if (statement > 0) await executor({ text: renderMigrationSessionSet({ dialect: sqlDialect, setting: \"statement_timeout\", milliseconds: statement }).text });\n try {\n return await params.run();\n } finally {\n // Restore what the session had, not a guessed default: this connection is\n // pinned for the whole migrate operation and outlives one migration.\n for (const [setting, value] of [[\"lock_timeout\", previous?.lockTimeout], [\"statement_timeout\", previous?.statementTimeout]] as const) {\n if (setting === \"lock_timeout\" ? lock === 0 : statement === 0) continue;\n try {\n await executor({ text: renderMigrationSessionRestore({ dialect: sqlDialect, setting, value: typeof value === \"string\" ? value : \"\" }).text });\n } catch {\n // Restoring is best-effort; the original outcome matters more.\n }\n }\n }\n}\n\n/**\n * Which bookkeeping regime a (dialect, script) pair runs in: `true` when\n * progress is recorded PER STATEMENT — mysql (DDL auto-commits) and sqlite\n * scripts that manage their own transactions — `false` when the migration and\n * its record are one atomic unit.\n *\n * ONE predicate on purpose. Spelled per call site it was wrong in three places\n * at once: status called a partial self-managed record \"applied\", rollback's\n * partial-up guard went blind on sqlite, and apply wedged the migration.\n */\nfunction usesStatementBookkeeping(params: {\n dialect: Dialect;\n sql: readonly string[];\n execution?: MigrationExecution;\n}): boolean {\n const { dialect, sql } = params;\n // A migration that declares it runs outside a transaction cannot have an\n // atomic bookkeeping INSERT: there is no transaction for the record to join.\n // This clause fires ONLY on an explicit declaration, so mysql and\n // self-managed sqlite scripts keep exactly the two rules they always had.\n if (params.execution?.transaction === \"none\") return true;\n if (!DIALECT_CAPABILITIES[dialect].transactionalDdl) return true;\n return dialect === \"sqlite\" && usesSelfManagedTransactions({ sql });\n}\n\n/**\n * Is a bookkeeping row a COMPLETE application of its migration?\n *\n * Atomic regime: the row exists at all ⇒ the whole migration ran. Per-statement\n * regime: only once `statement_index` reached the statement count. An empty\n * checksum is a `resolveMigration` repair — complete by definition, content\n * unseen.\n *\n * Backward compatible with rows written before per-statement bookkeeping\n * covered self-managed sqlite scripts: `runTransactional` records\n * `statement_index = sql.length`, so those rows satisfy the last clause and\n * are never falsely resumed.\n */\nfunction isCompleteRecord(params: {\n dialect: Dialect;\n migration: MigrationFile;\n stored: RecordedRow;\n}): boolean {\n const { dialect, migration, stored } = params;\n if (migration.moduleOrigin !== undefined) return moduleRecordComplete({ migration, stored });\n if (stored.checksum === \"\") return true;\n if (!usesStatementBookkeeping({ dialect, sql: migration.sql, ...(migration.execution === undefined ? {} : { execution: migration.execution }) })) return true;\n return stored.statementIndex >= migration.sql.length;\n}\n\nasync function recordedRows(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n modules?: boolean;\n}): Promise<Map<string, RecordedRow>> {\n const { executor, dialect } = params;\n if (params.modules === true) return new Map([...(await readModuleJournal({ executor, dialect }))].map(([name, record]) => [name, record.row]));\n // values: [] forces the row-returning executor path (adapter contract:\n // value-less text may run as a row-less multi-statement batch on sqlite).\n const rows = await readJournalRows({ executor, dialect, query: {\n text: `SELECT ${q(dialect, \"name\")}, ${q(dialect, \"checksum\")}, ${q(dialect, \"statement_index\")}, ${q(dialect, \"error\")} FROM ${q(dialect, MIGRATIONS_TABLE_NAME)} ORDER BY ${q(dialect, \"id\")}`,\n values: [],\n } });\n return rows ?? new Map<string, RecordedRow>();\n}\n\nfunction assertChecksumMatches(params: { migration: MigrationFile; stored: string }): void {\n const { migration, stored } = params;\n if (stored === \"\") return; // resolveMigration record — content unknown by design.\n const actual = checksumOf({ migration });\n if (stored === actual) return;\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `checksum mismatch for migration \"${migration.name}\" — its SQL changed after it was applied (recorded ${stored.slice(0, 12)}…, current ${actual.slice(0, 12)}…)`,\n meta: { migration: migration.name, recorded: stored, current: actual },\n });\n}\n\nfunction assertResumable(params: { migration: MigrationFile; stored: RecordedRow }): void {\n const { migration, stored } = params;\n const actual = checksumOf({ migration });\n if (stored.checksum === actual) return;\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `migration \"${migration.name}\" is partially applied (${stored.statementIndex} statement(s) done) and its SQL has CHANGED since — refusing to resume; restore the original SQL or repair with resolveMigration`,\n meta: {\n migration: migration.name,\n statementIndex: stored.statementIndex,\n recorded: stored.checksum,\n current: actual,\n },\n });\n}\n\n/** Classify timeout diagnostics without treating cancellation as proof of no effects. */\nfunction timeoutDiagnostic(params: { error: unknown }): Record<string, unknown> {\n const sqlState = sqlStateOf(params.error);\n const reason = sqlState === \"55P03\" ? \"lock-timeout\" : sqlState === \"57014\" ? \"statement-timeout\" : undefined;\n return reason === undefined ? {} : { reason, sqlState };\n}\n\n/** Duplicate file identities cannot describe a replayable chain. */\nfunction assertDistinctMigrationNames(params: { migrations: readonly MigrationFile[] }): void {\n const names = new Set<string>();\n for (const migration of params.migrations) {\n if (names.has(migration.name)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Duplicate migration file identity \"${migration.name}\"`, meta: { reason: \"history-duplicate-file\", migration: migration.name } });\n names.add(migration.name);\n }\n}\n\n/** A complete chain must preserve journal order and append new work only. */\nfunction assertCompleteHistory(params: { migrations: readonly MigrationFile[]; recorded: ReadonlyMap<string, RecordedRow>; dialect: Dialect }): void {\n const byName = new Map(params.migrations.map((migration) => [migration.name, migration]));\n for (const name of params.recorded.keys()) {\n if (!byName.has(name)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Recorded migration \"${name}\" has no file in the complete chain`, meta: { reason: \"history-unknown-file\", migration: name } });\n }\n let index = 0;\n for (const [name, stored] of params.recorded) {\n const migration = params.migrations[index]!;\n if (migration?.name !== name) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Recorded migration order is not a prefix of the supplied complete chain\", meta: { reason: \"history-order-conflict\", migration: name, expected: migration?.name, position: index } });\n if (stored.statementIndex >= 0 && !isCompleteRecord({ dialect: params.dialect, migration, stored }) && index !== params.recorded.size - 1) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Partial migration \"${name}\" precedes later recorded work`, meta: { reason: \"history-partial-not-last\", migration: name } });\n index++;\n }\n}\n\n/** Validate all known identities and dirty journal rows before any migration runs. */\nasync function assertApplyHistory(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n migrations: readonly MigrationFile[];\n recorded: ReadonlyMap<string, RecordedRow>;\n}): Promise<void> {\n const { executor, dialect, migrations, recorded } = params;\n const byName = new Map(migrations.map((migration) => [migration.name, migration]));\n for (const [name, stored] of recorded) {\n if (stored.statementIndex < 0) {\n throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration \"${name}\" is mid-rollback; finish or resolve it before applying`, meta: { reason: \"history-rolling-back\", migration: name, statementIndex: stored.statementIndex } });\n }\n const migration = byName.get(name);\n if (migration === undefined) {\n if (stored.error !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration \"${name}\" has an unresolved journal error but no supplied file`, meta: { reason: \"history-unknown-dirty\", migration: name } });\n continue; // Intentional programmatic subsets remain supported.\n }\n if (isCompleteRecord({ dialect, migration, stored }) && stored.error !== undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: `Migration \"${name}\" has an unresolved journal error`, meta: { reason: \"history-dirty\", migration: name } });\n if (isCompleteRecord({ dialect, migration, stored })) assertChecksumMatches({ migration, stored: stored.checksum });\n else assertResumable({ migration, stored });\n }\n for (const migration of migrations) {\n const stored = recorded.get(migration.name);\n if (stored === undefined || isCompleteRecord({ dialect, migration, stored })) continue;\n const start = stored.statementIndex;\n if (dialect === \"sqlite\" && usesSelfManagedTransactions({ sql: migration.sql })) {\n assertSupportedSelfManagedScript({ sql: migration.sql, migration: migration.name, direction: \"up\" });\n assertSelfManagedResumeSafe({ sql: migration.sql, start, migration: migration.name, direction: \"up\" });\n }\n if (!marksInflight({ dialect, execution: migration.execution }) || start >= migration.sql.length) continue;\n const operation = migration.execution?.transaction === \"none\" ? operationFor({ execution: migration.execution, statement: start }) : undefined;\n if (operation !== undefined) await establishOperationState({ executor, dialect, operation });\n else if (inflightStatement({ error: stored.error }) === start) throw uncertainStatement({ migration: migration.name, statements: migration.sql, index: start, dialect, direction: \"up\" });\n }\n}\n\n// ─── Quoting / placeholders ───────────────────────────────────────\n\nfunction q(dialect: Dialect, name: string): string {\n return getSqlDialect({ dialect }).quoteIdent({ name });\n}\n\nfunction ph(dialect: Dialect, index: number): string {\n return getSqlDialect({ dialect }).placeholder({ index });\n}\n",
|
|
42
42
|
"/**\n * Establishing what actually happened, before a nontransactional migration\n * re-runs anything.\n *\n * A migration that runs outside a transaction can die between a statement\n * committing and the journal recording it. The only honest recovery is to ask\n * the database what the world looks like now and compare it against the\n * statement's DECLARED postcondition (execution.ts). Three answers exist:\n *\n * - `\"satisfied\"` — the live catalog already matches the declaration. Skip it.\n * - `\"runnable\"` — the declaration is demonstrably not in effect, and running\n * the statement is the way to get there.\n * - a thrown `VibeError` — the state is neither, and no automatic action is\n * safe. Nothing is dropped, nothing is re-run: the operator decides.\n *\n * There is deliberately NO fourth answer of the form \"probably fine, re-run\n * it\". This module never claims exactly-once execution of arbitrary SQL; it\n * only decides the cases a declared postcondition can actually settle.\n *\n * Comparison is conservative by design. Expressions must match verbatim apart\n * from surrounding whitespace. Quotes and whitespace inside literals can change\n * meaning; any difference is a CONFLICT — a false conflict costs an operator one\n * look, a false match corrupts a schema.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { Dialect } from \"@vibeorm/schema\";\nimport {\n getSqlDialect,\n renderColumnStateQuery,\n renderConstraintStateQuery,\n renderIndexStateQuery,\n renderRelationStateQuery,\n} from \"@vibeorm/sql\";\nimport { describeOperation } from \"./execution.ts\";\nimport type { MigrationOperation } from \"./execution.ts\";\nimport type { SqlExecutor } from \"./types.ts\";\n\n/** Name-only legacy metadata cannot establish a constraint's definition. */\nfunction constraintUnverifiable(params: {\n operation: Extract<MigrationOperation, { kind: \"addConstraintNotValid\" | \"validateConstraint\" }>;\n definition: unknown;\n}): VibeError {\n return conflict({\n reason: \"constraint-definition-unverifiable\",\n message: `Constraint \"${params.operation.constraint}\" on \"${params.operation.table}\" exists, but the migration declares no expected definition. Inspect its definition and resolve the interrupted statement before continuing.`,\n meta: { table: params.operation.table, constraint: params.operation.constraint, definition: params.definition },\n });\n}\n\n/** Whether a declared operation's postcondition already holds. */\nexport type OperationState = \"satisfied\" | \"runnable\";\n\nfunction conflict(params: { reason: string; message: string; meta?: Record<string, unknown> }): VibeError {\n return new VibeError({\n code: \"VIBE_MIGRATION\",\n message: params.message,\n meta: { reason: params.reason, ...params.meta },\n });\n}\n\n/** Driver booleans arrive as `true`, `\"t\"`, `1` or `\"true\"` depending on the adapter. */\nfunction truthy(value: unknown): boolean {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return value === 1;\n if (typeof value === \"string\") return value === \"t\" || value === \"true\" || value === \"1\";\n return false;\n}\n\n/** Preserve expression semantics; recovery must never guess equivalence. */\nfunction normalizeSql(value: string): string {\n return value.trim();\n}\n\nfunction sameShape(params: { live?: string | undefined; declared?: string | undefined }): boolean {\n const live = params.live === undefined || params.live === null ? \"\" : normalizeSql(params.live);\n const declared = params.declared === undefined ? \"\" : normalizeSql(params.declared);\n return live === declared;\n}\n\n/**\n * Ask the database whether a declared operation is already in effect.\n *\n * PostgreSQL only: it is the one dialect with a nontransactional migration\n * regime here, and every probe reads its catalogs.\n */\nexport async function establishOperationState(params: {\n executor: SqlExecutor;\n dialect: Dialect;\n operation: MigrationOperation;\n}): Promise<OperationState> {\n const { executor, operation } = params;\n const dialect = getSqlDialect({ dialect: params.dialect });\n const run = async (query: { text: string; values: readonly unknown[] }): Promise<Record<string, unknown>[]> =>\n executor({ text: query.text, values: [...query.values] });\n\n switch (operation.kind) {\n case \"createIndexConcurrently\": {\n const rows = await run(renderIndexStateQuery({ dialect, index: operation.index }));\n const row = rows[0];\n if (row === undefined) return \"runnable\";\n // An INVALID index is the signature failure of CREATE INDEX\n // CONCURRENTLY: it exists, the planner ignores it, and writes still\n // maintain it. IF NOT EXISTS would call this success. Dropping it is a\n // deliberate operator decision, never something recovery does silently.\n if (!truthy(row.valid) || !truthy(row.ready)) {\n throw conflict({\n reason: \"index-invalid\",\n message: `index \"${operation.index}\" exists but is INVALID — a previous CREATE INDEX CONCURRENTLY did not finish. Nothing is dropped automatically: inspect it, then \\`DROP INDEX CONCURRENTLY \"${operation.index}\"\\` and re-run this migration. Definition: ${String(row.definition)}`,\n meta: { index: operation.index, definition: row.definition },\n });\n }\n const mismatch =\n String(row.table) !== operation.table\n ? `table ${String(row.table)} ≠ ${operation.table}`\n : truthy(row.unique) !== operation.unique\n ? `unique ${String(truthy(row.unique))} ≠ ${String(operation.unique)}`\n : String(row.method) !== operation.method\n ? `method ${String(row.method)} ≠ ${operation.method}`\n : !sameShape({ live: row.columns === null || row.columns === undefined ? \"\" : String(row.columns).split(\"\\n\").join(\", \"), declared: operation.columns.join(\", \") })\n ? `columns (${String(row.columns).split(\"\\n\").join(\", \")}) ≠ (${operation.columns.join(\", \")})`\n : !sameShape({ live: row.predicate === null || row.predicate === undefined ? \"\" : String(row.predicate), ...(operation.where === undefined ? {} : { declared: operation.where }) })\n ? `predicate ${String(row.predicate)} ≠ ${String(operation.where)}`\n : undefined;\n if (mismatch !== undefined) {\n throw conflict({\n reason: \"index-definition-conflict\",\n message: `index \"${operation.index}\" already exists with a DIFFERENT definition (${mismatch}) — this is a name collision, not a completed step. Nothing is dropped automatically. Live definition: ${String(row.definition)}`,\n meta: { index: operation.index, definition: row.definition, declared: describeOperation({ operation }) },\n });\n }\n return \"satisfied\";\n }\n\n case \"dropIndexConcurrently\": {\n const rows = await run(renderIndexStateQuery({ dialect, index: operation.index }));\n // Absent = done. Present (valid or invalid) = the drop is what removes\n // it; DROP INDEX CONCURRENTLY is the sanctioned cleanup for an index\n // this operation is explicitly declared to remove.\n return rows[0] === undefined ? \"satisfied\" : \"runnable\";\n }\n\n case \"addConstraintNotValid\": {\n const rows = await run(renderConstraintStateQuery({ dialect, table: operation.table, constraint: operation.constraint }));\n if (rows[0] === undefined) return \"runnable\";\n throw constraintUnverifiable({ operation, definition: rows[0].definition });\n }\n\n case \"validateConstraint\": {\n const rows = await run(renderConstraintStateQuery({ dialect, table: operation.table, constraint: operation.constraint }));\n const row = rows[0];\n if (row === undefined) {\n throw conflict({\n reason: \"constraint-missing\",\n message: `constraint \"${operation.constraint}\" on \"${operation.table}\" does not exist, so it cannot be validated — the staged NOT VALID step it belongs to is not in effect`,\n meta: { table: operation.table, constraint: operation.constraint },\n });\n }\n throw constraintUnverifiable({ operation, definition: row.definition });\n }\n\n case \"renameTable\": {\n const before = await run(renderRelationStateQuery({ dialect, table: operation.from }));\n const after = await run(renderRelationStateQuery({ dialect, table: operation.to }));\n if (before.length === 0 && after.length === 1) return \"satisfied\";\n if (before.length === 1 && after.length === 0) return \"runnable\";\n throw conflict({\n reason: \"rename-ambiguous\",\n message: before.length === 0\n ? `neither \"${operation.from}\" nor \"${operation.to}\" exists — the rename cannot be completed or verified from here`\n : `both \"${operation.from}\" and \"${operation.to}\" exist — refusing to guess which one holds the data`,\n meta: { from: operation.from, to: operation.to },\n });\n }\n\n case \"renameColumn\": {\n const before = await run(renderColumnStateQuery({ dialect, table: operation.table, column: operation.from }));\n const after = await run(renderColumnStateQuery({ dialect, table: operation.table, column: operation.to }));\n if (before.length === 0 && after.length === 1) return \"satisfied\";\n if (before.length === 1 && after.length === 0) return \"runnable\";\n throw conflict({\n reason: \"rename-ambiguous\",\n message: before.length === 0\n ? `\"${operation.table}\" has neither column \"${operation.from}\" nor \"${operation.to}\" — the rename cannot be completed or verified from here`\n : `\"${operation.table}\" has BOTH \"${operation.from}\" and \"${operation.to}\" — refusing to guess which one holds the data`,\n meta: { table: operation.table, from: operation.from, to: operation.to },\n });\n }\n }\n}\n",
|
|
43
|
-
"/**\n * IR-vs-IR schema differ → dialect-neutral migration steps.\n *\n * The contract that matters most: `diffSchemas({ from: introspect(push(X)),\n * to: X })` is EMPTY — both sides normalize through normalize.ts before\n * comparison, so representation differences (implicit list sides vs explicit\n * M2M fields, `@unique` vs `@@unique`, app-level defaults, cascade-action\n * defaults) never produce phantom steps and `db push` twice is a no-op.\n *\n * No rename detection (v1 parity): a renamed table/column diffs as drop +\n * create. Removing a value from a surviving enum throws\n * VIBE_UNSUPPORTED_CAPABILITY — postgres cannot drop enum values without a\n * manual type rebuild, and silence would be dialect dishonesty.\n */\n\nimport { assertIndexOperatorClasses, isEnumType, qualifiedSqlName, unsupportedCapability } from \"@vibeorm/schema\";\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { Dialect, EnumIR, SchemaIR } from \"@vibeorm/schema\";\nimport { assertEnumStringTransition, isEnumStringTransition, resolveEnumValues } from \"./enum-values.ts\";\nimport { assertStringEnumLabelsFit, normalizeSchema, physicalNameKey, schemaNamespaces } from \"./normalize.ts\";\nimport type { NormalizedSchema, NormalizedTable } from \"./normalize.ts\";\nimport { isScalarToArrayChange } from \"./postgres-types.ts\";\nimport { assertRlsDialect, withRlsSteps } from \"./ddl/rls.ts\";\nimport { planRenames } from \"./renames.ts\";\nimport type { RenameIntent } from \"./renames.ts\";\nimport type { AlterColumnAspect, MigrationStep } from \"./types.ts\";\n\n// ─── Ordered step buckets ─────────────────────────────────────────\n\n/**\n * Steps are emitted in dependency-safe buckets: view drops first of all (a\n * leftover view blocks dropping any column it references — postgres 2BP01,\n * board #26), enums next (columns reference the types), FK/index drops before\n * the objects they attach to disappear, table creates before the\n * FKs/indexes/join tables that need them, enum drops last (after every column\n * using the type is gone).\n */\ntype StepBuckets = {\n createNamespace: MigrationStep[];\n dropExclusion: MigrationStep[];\n addExclusion: MigrationStep[];\n dropView: MigrationStep[];\n createEnum: MigrationStep[];\n addEnumValue: MigrationStep[];\n dropForeignKey: MigrationStep[];\n dropIndex: MigrationStep[];\n dropJoinTable: MigrationStep[];\n dropTable: MigrationStep[];\n createTable: MigrationStep[];\n addColumn: MigrationStep[];\n alterColumn: MigrationStep[];\n dropColumn: MigrationStep[];\n dropPrimaryKey: MigrationStep[];\n addPrimaryKey: MigrationStep[];\n dropCheck: MigrationStep[];\n addCheck: MigrationStep[];\n createIndex: MigrationStep[];\n addForeignKey: MigrationStep[];\n createJoinTable: MigrationStep[];\n dropEnum: MigrationStep[];\n};\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/**\n * Diff two Schema IRs into an ordered list of dialect-neutral migration steps\n * that transform the `from` database shape into the `to` shape.\n *\n * `dialect` (default postgres) selects the comparison rules: sqlite/mysql\n * compare columns by physical type (see normalize.ts), refuse scalar-list\n * columns up front (no array types — VIBE_UNSUPPORTED_CAPABILITY naming the\n * model.field), skip standalone enum steps (their enums are inline: TEXT +\n * CHECK on sqlite, `ENUM(…)` on mysql — value changes flow through\n * `alterColumn`), and refuse enum-value REMOVAL at the column level.\n */\nexport function diffSchemas(params: {\n from: SchemaIR;\n to: SchemaIR;\n dialect?: Dialect;\n /**\n * EXPLICIT physical renames, written down by whoever wants them (renames.ts).\n * Applied to the source schema before the diff runs, so a renamed table or\n * column produces a rename step instead of the drop/create pair the differ\n * would otherwise — correctly — derive. Nothing here is ever inferred.\n */\n renames?: readonly RenameIntent[];\n}): MigrationStep[] {\n const dialect = params.dialect ?? \"postgres\";\n assertIndexOperatorClasses({ schema: params.to, dialect });\n for (const kind of [\"models\", \"enums\"] as const) for (const entry of params.to[kind]) {\n const key = physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect });\n const before = params.from[kind].find((candidate) => candidate.name === entry.name) ?? params.from[kind].find((candidate) => (candidate.dbName ?? candidate.name) === (entry.dbName ?? entry.name) && !params.to[kind].some((target) => physicalNameKey({ name: target.dbName ?? target.name, namespace: target.namespace, dialect }) === physicalNameKey({ name: candidate.dbName ?? candidate.name, namespace: candidate.namespace, dialect })));\n if (before !== undefined && qualifiedSqlName({ name: entry.name, namespace: before.namespace }).namespace !== qualifiedSqlName({ name: entry.name, namespace: entry.namespace }).namespace && !params.from[kind].some((candidate) => physicalNameKey({ name: candidate.dbName ?? candidate.name, namespace: candidate.namespace, dialect }) === key)) throw unsupportedCapability({ dialect, feature: \"automaticNamespaceMove\", hint: \"Moving populated objects to a fixed namespace requires an explicit reviewed migration\" });\n }\n for (const schema of [params.from, params.to]) normalizeSchema({ schema, dialect });\n for (const schema of [params.from, params.to]) if (dialect !== \"postgres\" && schema.models.some((model) => (model.exclusions?.length ?? 0) > 0)) throw unsupportedCapability({ dialect, feature: \"exclusionConstraints\" });\n assertRlsDialect({ schema: params.from, dialect });\n assertRlsDialect({ schema: params.to, dialect });\n if (dialect !== \"postgres\") refuseScalarListColumns({ schema: params.to, dialect });\n\n const renamed = planRenames({ from: params.from, to: params.to, renames: params.renames ?? [], dialect });\n params = { ...params, from: renamed.from };\n\n const from = normalizeSchema({ schema: params.from, dialect });\n const to = normalizeSchema({ schema: params.to, dialect });\n\n const buckets: StepBuckets = {\n createNamespace: dialect === \"postgres\" ? schemaNamespaces({ schema: params.to }).filter((namespace) => !schemaNamespaces({ schema: params.from }).includes(namespace)).map((namespace) => ({ kind: \"createNamespace\", namespace, destructive: false })) : [],\n dropExclusion: [],\n addExclusion: [],\n dropView: [],\n createEnum: [],\n addEnumValue: [],\n dropForeignKey: [],\n dropIndex: [],\n dropJoinTable: [],\n dropTable: [],\n createTable: [],\n addColumn: [],\n alterColumn: [],\n dropColumn: [],\n dropPrimaryKey: [],\n addPrimaryKey: [],\n dropCheck: [],\n addCheck: [],\n createIndex: [],\n addForeignKey: [],\n createJoinTable: [],\n dropEnum: [],\n };\n\n // Standalone enum objects only exist on postgres (CREATE TYPE); sqlite and\n // mysql inline their enums into the columns, so value changes surface as\n // alterColumn steps via the value-based type keys instead.\n if (dialect === \"postgres\") diffEnums({ from, to, buckets });\n diffViews({ from, to, buckets });\n diffJoinTables({ from, to, buckets });\n diffTables({ from, to, buckets, dialect });\n for (const model of params.to.models) {\n const table = model.dbName ?? model.name;\n const placement = model.namespace === undefined ? {} : { namespace: model.namespace };\n const previous = params.from.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect }));\n for (const exclusion of model.exclusions ?? []) {\n const before = previous?.exclusions?.find((entry) => entry.name === exclusion.name);\n if (before?.definition === exclusion.definition) continue;\n if (before?.catalogDefinition) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Exclusion comparison requires normalized evidence\", meta: { reason: \"exclusion-inspection-unavailable\", table, name: exclusion.name } });\n if (before !== undefined) buckets.dropExclusion.push({ kind: \"dropExclusion\", table, ...placement, exclusion: before, destructive: false });\n buckets.addExclusion.push({ kind: \"addExclusion\", table, ...placement, exclusion, destructive: false });\n }\n for (const exclusion of previous?.exclusions ?? []) if (!model.exclusions?.some((entry) => entry.name === exclusion.name)) buckets.dropExclusion.push({ kind: \"dropExclusion\", table, exclusion, destructive: false });\n }\n refuseDependentEnumStorageChanges({ from, to, buckets, dialect });\n\n return withRlsSteps({ from: params.from, to: params.to, steps: [\n // Renames run FIRST: every later step (and the normalized comparison\n // above) already refers to the objects by their new physical names.\n ...buckets.createNamespace,\n ...renamed.steps,\n ...buckets.dropView,\n ...buckets.createEnum,\n ...buckets.addEnumValue,\n ...buckets.dropForeignKey,\n ...buckets.dropExclusion,\n ...buckets.dropIndex,\n ...buckets.dropCheck,\n ...buckets.dropPrimaryKey,\n ...buckets.dropJoinTable,\n ...buckets.dropTable,\n ...buckets.createTable,\n ...buckets.addColumn,\n ...buckets.alterColumn,\n ...buckets.dropColumn,\n ...buckets.addPrimaryKey,\n ...buckets.addCheck,\n ...buckets.addExclusion,\n ...buckets.createIndex,\n ...buckets.addForeignKey,\n ...buckets.createJoinTable,\n ...buckets.dropEnum,\n ] });\n}\n\n// ─── Enums ────────────────────────────────────────────────────────\n\ntype NormalizedPair = {\n from: NormalizedSchema;\n to: NormalizedSchema;\n buckets: StepBuckets;\n};\n\n// ─── Capability guards ────────────────────────────────────────────\n\n/** sqlite/mysql have no array columns — refuse every scalar-list field loudly. */\nfunction refuseScalarListColumns(params: { schema: SchemaIR; dialect: Dialect }): void {\n const { schema, dialect } = params;\n for (const model of schema.models) {\n if (model.isView) continue;\n for (const field of model.fields) {\n if (!field.isList || field.isUnsupported === true) continue;\n throw unsupportedCapability({\n dialect,\n feature: `scalar list column \"${model.name}.${field.name}\"`,\n hint: `${dialect} has no array column type — model the list as a separate table or a ${\n dialect === \"mysql\" ? \"JSON\" : \"Json\"\n } column`,\n });\n }\n }\n}\n\nfunction diffEnums(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n\n for (const [name, enumDef] of to.enums) {\n const previous = from.enums.get(name);\n if (previous === undefined) {\n buckets.createEnum.push({ kind: \"createEnum\", enumDef, destructive: false });\n continue;\n }\n\n const previousValues = new Set(previous.values);\n const currentValues = new Set(enumDef.values);\n for (const value of enumDef.values) {\n if (!previousValues.has(value)) {\n buckets.addEnumValue.push({ kind: \"addEnumValue\", enumName: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }), value, destructive: false });\n }\n }\n for (const value of previous.values) {\n if (!currentValues.has(value)) {\n throw unsupportedCapability({\n dialect: \"postgres\",\n feature: `removing value \"${value}\" from enum \"${name}\"`,\n hint: \"postgres cannot drop enum values — recreate the type manually (create new type, ALTER COLUMN ... USING, drop old type)\",\n });\n }\n }\n }\n\n for (const [name, enumDef] of from.enums) {\n if (!to.enums.has(name)) {\n buckets.dropEnum.push({ kind: \"dropEnum\", enumName: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }), destructive: true });\n }\n }\n}\n\n/** Existing FK/join dependencies need a coordinated migration, not isolated ALTERs. */\nfunction refuseDependentEnumStorageChanges(params: NormalizedPair & { dialect: Dialect }): void {\n const { from, to, buckets, dialect } = params;\n for (const step of buckets.alterColumn) {\n if (step.kind !== \"alterColumn\" || !isEnumStringTransition({ from: step.from, to: step.to })) continue;\n for (const normalized of [from, to]) {\n const hasFk = [...normalized.tables.values()].some((table) => [...table.fks.values()].some((fk) =>\n (table.table === step.table && (table.namespace ?? \"public\") === (step.namespace ?? \"public\") && fk.columns.includes(step.column)) ||\n (fk.refTable === step.table && (fk.refNamespace ?? \"public\") === (step.namespace ?? \"public\") && fk.refColumns.includes(step.column)),\n ));\n const hasJoin = [...normalized.joinTables.values()].some((join) => [join.a, join.b].some((end) =>\n end.table === step.table && (end.namespace ?? \"public\") === (step.namespace ?? \"public\") && end.column === step.column,\n ));\n if (hasFk || hasJoin) {\n throw unsupportedCapability({\n dialect,\n feature: `enum storage conversion on \"${step.table}\".\"${step.column}\" with foreign-key dependencies`,\n hint: \"migrate the referencing columns and constraints together in a reviewed manual migration\",\n });\n }\n }\n }\n}\n\n// ─── Views (#26) ──────────────────────────────────────────\n\n/**\n * A view in `from` the target no longer declares gets a `dropView` step — a\n * leftover view otherwise blocks the column drops beneath it (postgres 2BP01)\n * and `push` fails on a schema the user considers valid. Views only in `to`\n * emit nothing: view CREATION stays out-of-band in this wave (see #11), and\n * whatever design lands there must keep this drop rule.\n */\nfunction diffViews(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n for (const [name, view] of from.views) {\n if (!to.views.has(name)) {\n buckets.dropView.push({ kind: \"dropView\", table: view.dbName ?? view.name, ...(view.namespace === undefined ? {} : { namespace: view.namespace }), destructive: true });\n }\n }\n}\n\n// ─── Join tables ──────────────────────────────────────────────────\n\nfunction diffJoinTables(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n\n for (const [key, joinTable] of to.joinTables) {\n if (!from.joinTables.has(key)) {\n const table = joinTable.table;\n const placement = joinTable.namespace === undefined ? {} : { namespace: joinTable.namespace };\n buckets.createJoinTable.push({\n kind: \"createJoinTable\",\n table,\n ...placement,\n a: joinTable.a,\n b: joinTable.b,\n destructive: false,\n });\n }\n }\n for (const [key, joinTable] of from.joinTables) {\n if (!to.joinTables.has(key)) {\n buckets.dropJoinTable.push({ kind: \"dropJoinTable\", table: joinTable.table, ...(joinTable.namespace === undefined ? {} : { namespace: joinTable.namespace }), destructive: true });\n }\n }\n}\n\n// ─── Tables ───────────────────────────────────────────────────────\n\nfunction diffTables(params: NormalizedPair & { dialect: Dialect }): void {\n const { from, to, buckets, dialect } = params;\n\n for (const [name, table] of to.tables) {\n const previous = from.tables.get(name);\n if (previous === undefined) createWholeTable({ table, buckets });\n else\n diffOneTable({\n previous,\n current: table,\n buckets,\n dialect,\n fromEnums: from.enums,\n toEnums: to.enums,\n });\n }\n\n // PostgreSQL/MySQL drops are RESTRICT, not CASCADE. Remove outgoing edges\n // explicitly, including cycles inside a removed group. SQLite instead orders\n // child drops and must not rebuild a table that is itself being removed.\n for (const [name, table] of from.tables) {\n if (to.tables.has(name)) continue;\n if (dialect !== \"sqlite\") for (const fk of table.fks.values()) {\n buckets.dropForeignKey.push({ kind: \"dropForeignKey\", table: table.table, ...(table.namespace === undefined ? {} : { namespace: table.namespace }), constraintName: fk.constraintName, destructive: false });\n }\n buckets.dropTable.push({ kind: \"dropTable\", table: table.table, ...(table.namespace === undefined ? {} : { namespace: table.namespace }), destructive: true });\n }\n}\n\nfunction createWholeTable(params: { table: NormalizedTable; buckets: StepBuckets }): void {\n const { table, buckets } = params;\n\n buckets.createTable.push({\n kind: \"createTable\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n columns: [...table.columns.values()].map((column) => column.field),\n primaryKey: table.pk,\n ...(table.model.primaryKeyConstraintName === undefined ? {} : { primaryKeyConstraintName: table.model.primaryKeyConstraintName }),\n checks: [...table.checks].map(([name, expression]) => ({ name, expression })),\n destructive: false,\n });\n\n for (const index of table.indexes.values()) {\n buckets.createIndex.push({\n kind: \"createIndex\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n name: index.name,\n indexKind: index.kind,\n unique: index.unique,\n columns: index.columns,\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n destructive: false,\n });\n }\n\n for (const fk of table.fks.values()) {\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n }\n}\n\nfunction diffOneTable(params: {\n previous: NormalizedTable;\n current: NormalizedTable;\n buckets: StepBuckets;\n dialect: Dialect;\n fromEnums: ReadonlyMap<string, EnumIR>;\n toEnums: ReadonlyMap<string, EnumIR>;\n}): void {\n const { previous, current, buckets, dialect, fromEnums, toEnums } = params;\n const table = current.table;\n const placement = current.namespace === undefined ? {} : { namespace: current.namespace };\n\n // Columns.\n for (const [name, column] of current.columns) {\n const before = previous.columns.get(name);\n if (before === undefined) {\n buckets.addColumn.push({ kind: \"addColumn\", table, ...placement, column: column.field, destructive: false });\n continue;\n }\n\n const changes: AlterColumnAspect[] = [];\n if (before.typeKey !== column.typeKey) changes.push(\"type\");\n if (before.nullable !== column.nullable) changes.push(\"nullability\");\n if (before.defaultKey !== column.defaultKey) changes.push(\"default\");\n // An omitted declaration leaves the physical collation unchanged. Explicit\n // declarations are compared with catalog truth, not with a guessed default.\n const collationChanged = dialect === \"mysql\" && column.field.collation !== undefined &&\n before.field.collation?.toLowerCase() !== column.field.collation.toLowerCase();\n if (collationChanged) changes.push(\"collation\");\n if (changes.length === 0) continue;\n if (changes.includes(\"type\") && [...previous.checks].some(([name, expression]) => current.checks.get(name) === expression)) {\n throw unsupportedCapability({ dialect, feature: \"alterColumnWithRetainedCheck\", hint: \"CHECK dependencies and type compatibility are not proven; use a reviewed migration that replaces and revalidates the affected constraints\" });\n }\n\n const storageChange = isEnumStringTransition({ from: before.field, to: column.field });\n if (storageChange) {\n assertEnumStringTransition({ from: before.field, to: column.field, dialect, table, column: name });\n if (isEnumType(before.field.type) && column.field.type === \"String\") {\n const values = resolveEnumValues({ name: before.field.type.enum, namespace: before.field.type.namespace, enums: fromEnums });\n if (values !== undefined) assertStringEnumLabelsFit({ field: column.field, values, dialect, table });\n }\n }\n let narrowingType =\n changes.includes(\"type\") &&\n !isScalarToArrayChange({ from: before.field, to: column.field }) &&\n !(storageChange && column.field.type === \"String\");\n\n // Inline-enum dialects: an enum→enum type change is a value-list change.\n // Pure widening (values only added) is safe and non-destructive; REMOVING\n // a value is refused outright — existing rows may hold it, and silence\n // would be dialect dishonesty.\n if (\n dialect !== \"postgres\" &&\n changes.includes(\"type\") &&\n isEnumType(before.field.type) &&\n isEnumType(column.field.type)\n ) {\n const fromValues = resolveEnumValues({ name: before.field.type.enum, enums: fromEnums });\n const toValues = resolveEnumValues({ name: column.field.type.enum, enums: toEnums });\n if (fromValues !== undefined && toValues !== undefined) {\n const removed = fromValues.filter((value) => !toValues.includes(value));\n if (removed.length > 0) {\n throw unsupportedCapability({\n dialect,\n feature: `removing value(s) ${removed.map((value) => `\"${value}\"`).join(\", \")} from enum column \"${table}\".\"${name}\"`,\n hint: \"migrate the stored values away first, then recreate the column with the narrower enum\",\n });\n }\n narrowingType = false; // Pure widening — no data can be lost.\n }\n }\n\n buckets.alterColumn.push({\n kind: \"alterColumn\",\n table,\n ...placement,\n column: name,\n from: before.field,\n to: column.field,\n changes,\n destructive: narrowingType || collationChanged,\n });\n }\n\n for (const [name] of previous.columns) {\n if (!current.columns.has(name)) {\n buckets.dropColumn.push({ kind: \"dropColumn\", table, ...placement, column: name, destructive: true });\n }\n }\n\n // Primary key.\n const pkBefore = previous.pk.join(\",\");\n const pkAfter = current.pk.join(\",\");\n if (pkBefore !== pkAfter) {\n if (previous.pk.length > 0) {\n buckets.dropPrimaryKey.push({ kind: \"dropPrimaryKey\", table, ...placement, destructive: false, ...(previous.model.primaryKeyConstraintName === undefined ? {} : { constraintName: previous.model.primaryKeyConstraintName }) });\n }\n if (current.pk.length > 0) {\n buckets.addPrimaryKey.push({\n kind: \"addPrimaryKey\",\n table,\n ...placement,\n columns: current.pk,\n ...(current.model.primaryKeyConstraintName === undefined ? {} : { constraintName: current.model.primaryKeyConstraintName }),\n destructive: false,\n });\n }\n }\n\n // Authored expression changes replace the named constraint. Live callers\n // must establish expression equivalence before passing catalog IR here.\n for (const [name, expression] of current.checks) {\n const before = previous.checks.get(name);\n if (before === expression) continue;\n if (before !== undefined && previous.model.checks?.some((check) => check.name === name && check.catalogExpression === true)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Unequal catalog CHECK text requires normalized evidence or explicit replacement through the live planner\", meta: { reason: \"check-inspection-unavailable\", table, name } });\n if (before !== undefined) buckets.dropCheck.push({ kind: \"dropCheck\", table, ...placement, name, destructive: false });\n buckets.addCheck.push({ kind: \"addCheck\", table, ...placement, name, expression, destructive: false });\n }\n for (const [name] of previous.checks) {\n if (current.checks.has(name)) continue;\n buckets.dropCheck.push({ kind: \"dropCheck\", table, ...placement, name, destructive: false });\n }\n\n // Indexes (uniques included — normalize.ts already merged @unique fields in).\n for (const [key, index] of current.indexes) {\n if (previous.indexes.has(key)) continue;\n buckets.createIndex.push({\n kind: \"createIndex\",\n table,\n ...placement,\n name: index.name,\n indexKind: index.kind,\n unique: index.unique,\n columns: index.columns,\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n destructive: false,\n });\n }\n for (const [key, index] of previous.indexes) {\n if (current.indexes.has(key)) continue;\n buckets.dropIndex.push({ kind: \"dropIndex\", name: index.name, table, ...placement, destructive: false, ...(index.constraintName === undefined ? {} : { constraintName: index.constraintName }) });\n }\n\n // Foreign keys. Cascade-action drift needs DROP + ADD — postgres has no\n // ALTER CONSTRAINT ... ON DELETE for FKs (LEARNINGS).\n for (const [key, fk] of current.fks) {\n const before = previous.fks.get(key);\n if (before === undefined) {\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n ...(fk.refNamespace === undefined ? {} : { refNamespace: fk.refNamespace }),\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n continue;\n }\n if (before.onDelete !== fk.onDelete || before.onUpdate !== fk.onUpdate) {\n buckets.dropForeignKey.push({\n kind: \"dropForeignKey\",\n table,\n ...placement,\n constraintName: before.constraintName,\n destructive: false,\n });\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n ...(fk.refNamespace === undefined ? {} : { refNamespace: fk.refNamespace }),\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n }\n }\n for (const [key, fk] of previous.fks) {\n if (current.fks.has(key)) continue;\n buckets.dropForeignKey.push({\n kind: \"dropForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n destructive: false,\n });\n }\n}\n",
|
|
43
|
+
"/**\n * IR-vs-IR schema differ → dialect-neutral migration steps.\n *\n * The contract that matters most: `diffSchemas({ from: introspect(push(X)),\n * to: X })` is EMPTY — both sides normalize through normalize.ts before\n * comparison, so representation differences (implicit list sides vs explicit\n * M2M fields, `@unique` vs `@@unique`, app-level defaults, cascade-action\n * defaults) never produce phantom steps and `db push` twice is a no-op.\n *\n * No rename detection (v1 parity): a renamed table/column diffs as drop +\n * create. Removing a value from a surviving enum throws\n * VIBE_UNSUPPORTED_CAPABILITY — postgres cannot drop enum values without a\n * manual type rebuild, and silence would be dialect dishonesty.\n */\n\nimport { assertIndexOperatorClasses, isEnumType, qualifiedSqlName, unsupportedCapability } from \"@vibeorm/schema\";\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { Dialect, EnumIR, SchemaIR } from \"@vibeorm/schema\";\nimport { assertEnumStringTransition, isEnumStringTransition, resolveEnumValues } from \"./enum-values.ts\";\nimport { assertStringEnumLabelsFit, columnTypeChanged, normalizeSchema, physicalNameKey, schemaNamespaces } from \"./normalize.ts\";\nimport type { NormalizedSchema, NormalizedTable } from \"./normalize.ts\";\nimport { isScalarToArrayChange, isTimestamptzPrecisionWidening } from \"./postgres-types.ts\";\nimport { assertRlsDialect, withRlsSteps } from \"./ddl/rls.ts\";\nimport { planRenames } from \"./renames.ts\";\nimport type { RenameIntent } from \"./renames.ts\";\nimport type { AlterColumnAspect, MigrationStep } from \"./types.ts\";\n\n// ─── Ordered step buckets ─────────────────────────────────────────\n\n/**\n * Steps are emitted in dependency-safe buckets: view drops first of all (a\n * leftover view blocks dropping any column it references — postgres 2BP01,\n * board #26), enums next (columns reference the types), FK/index drops before\n * the objects they attach to disappear, table creates before the\n * FKs/indexes/join tables that need them, enum drops last (after every column\n * using the type is gone).\n */\ntype StepBuckets = {\n createNamespace: MigrationStep[];\n dropExclusion: MigrationStep[];\n addExclusion: MigrationStep[];\n dropView: MigrationStep[];\n createEnum: MigrationStep[];\n addEnumValue: MigrationStep[];\n dropForeignKey: MigrationStep[];\n dropIndex: MigrationStep[];\n dropJoinTable: MigrationStep[];\n dropTable: MigrationStep[];\n createTable: MigrationStep[];\n addColumn: MigrationStep[];\n alterColumn: MigrationStep[];\n dropColumn: MigrationStep[];\n dropPrimaryKey: MigrationStep[];\n addPrimaryKey: MigrationStep[];\n dropCheck: MigrationStep[];\n addCheck: MigrationStep[];\n createIndex: MigrationStep[];\n addForeignKey: MigrationStep[];\n createJoinTable: MigrationStep[];\n dropEnum: MigrationStep[];\n};\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/**\n * Diff two Schema IRs into an ordered list of dialect-neutral migration steps\n * that transform the `from` database shape into the `to` shape.\n *\n * `dialect` (default postgres) selects the comparison rules: sqlite/mysql\n * compare columns by physical type (see normalize.ts), refuse scalar-list\n * columns up front (no array types — VIBE_UNSUPPORTED_CAPABILITY naming the\n * model.field), skip standalone enum steps (their enums are inline: TEXT +\n * CHECK on sqlite, `ENUM(…)` on mysql — value changes flow through\n * `alterColumn`), and refuse enum-value REMOVAL at the column level.\n */\nexport function diffSchemas(params: {\n from: SchemaIR;\n to: SchemaIR;\n dialect?: Dialect;\n /**\n * EXPLICIT physical renames, written down by whoever wants them (renames.ts).\n * Applied to the source schema before the diff runs, so a renamed table or\n * column produces a rename step instead of the drop/create pair the differ\n * would otherwise — correctly — derive. Nothing here is ever inferred.\n */\n renames?: readonly RenameIntent[];\n}): MigrationStep[] {\n const dialect = params.dialect ?? \"postgres\";\n assertIndexOperatorClasses({ schema: params.to, dialect });\n for (const kind of [\"models\", \"enums\"] as const) for (const entry of params.to[kind]) {\n const key = physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect });\n const before = params.from[kind].find((candidate) => candidate.name === entry.name) ?? params.from[kind].find((candidate) => (candidate.dbName ?? candidate.name) === (entry.dbName ?? entry.name) && !params.to[kind].some((target) => physicalNameKey({ name: target.dbName ?? target.name, namespace: target.namespace, dialect }) === physicalNameKey({ name: candidate.dbName ?? candidate.name, namespace: candidate.namespace, dialect })));\n if (before !== undefined && qualifiedSqlName({ name: entry.name, namespace: before.namespace }).namespace !== qualifiedSqlName({ name: entry.name, namespace: entry.namespace }).namespace && !params.from[kind].some((candidate) => physicalNameKey({ name: candidate.dbName ?? candidate.name, namespace: candidate.namespace, dialect }) === key)) throw unsupportedCapability({ dialect, feature: \"automaticNamespaceMove\", hint: \"Moving populated objects to a fixed namespace requires an explicit reviewed migration\" });\n }\n for (const schema of [params.from, params.to]) normalizeSchema({ schema, dialect });\n for (const schema of [params.from, params.to]) if (dialect !== \"postgres\" && schema.models.some((model) => (model.exclusions?.length ?? 0) > 0)) throw unsupportedCapability({ dialect, feature: \"exclusionConstraints\" });\n assertRlsDialect({ schema: params.from, dialect });\n assertRlsDialect({ schema: params.to, dialect });\n if (dialect !== \"postgres\") refuseScalarListColumns({ schema: params.to, dialect });\n\n const renamed = planRenames({ from: params.from, to: params.to, renames: params.renames ?? [], dialect });\n params = { ...params, from: renamed.from };\n\n const from = normalizeSchema({ schema: params.from, dialect });\n const to = normalizeSchema({ schema: params.to, dialect });\n\n const buckets: StepBuckets = {\n createNamespace: dialect === \"postgres\" ? schemaNamespaces({ schema: params.to }).filter((namespace) => !schemaNamespaces({ schema: params.from }).includes(namespace)).map((namespace) => ({ kind: \"createNamespace\", namespace, destructive: false })) : [],\n dropExclusion: [],\n addExclusion: [],\n dropView: [],\n createEnum: [],\n addEnumValue: [],\n dropForeignKey: [],\n dropIndex: [],\n dropJoinTable: [],\n dropTable: [],\n createTable: [],\n addColumn: [],\n alterColumn: [],\n dropColumn: [],\n dropPrimaryKey: [],\n addPrimaryKey: [],\n dropCheck: [],\n addCheck: [],\n createIndex: [],\n addForeignKey: [],\n createJoinTable: [],\n dropEnum: [],\n };\n\n // Standalone enum objects only exist on postgres (CREATE TYPE); sqlite and\n // mysql inline their enums into the columns, so value changes surface as\n // alterColumn steps via the value-based type keys instead.\n if (dialect === \"postgres\") diffEnums({ from, to, buckets });\n diffViews({ from, to, buckets });\n diffJoinTables({ from, to, buckets });\n diffTables({ from, to, buckets, dialect });\n for (const model of params.to.models) {\n const table = model.dbName ?? model.name;\n const placement = model.namespace === undefined ? {} : { namespace: model.namespace };\n const previous = params.from.models.find((entry) => physicalNameKey({ name: entry.dbName ?? entry.name, namespace: entry.namespace, dialect }) === physicalNameKey({ name: table, namespace: model.namespace, dialect }));\n for (const exclusion of model.exclusions ?? []) {\n const before = previous?.exclusions?.find((entry) => entry.name === exclusion.name);\n if (before?.definition === exclusion.definition) continue;\n if (before?.catalogDefinition) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Exclusion comparison requires normalized evidence\", meta: { reason: \"exclusion-inspection-unavailable\", table, name: exclusion.name } });\n if (before !== undefined) buckets.dropExclusion.push({ kind: \"dropExclusion\", table, ...placement, exclusion: before, destructive: false });\n buckets.addExclusion.push({ kind: \"addExclusion\", table, ...placement, exclusion, destructive: false });\n }\n for (const exclusion of previous?.exclusions ?? []) if (!model.exclusions?.some((entry) => entry.name === exclusion.name)) buckets.dropExclusion.push({ kind: \"dropExclusion\", table, exclusion, destructive: false });\n }\n refuseDependentEnumStorageChanges({ from, to, buckets, dialect });\n\n return withRlsSteps({ from: params.from, to: params.to, steps: [\n // Renames run FIRST: every later step (and the normalized comparison\n // above) already refers to the objects by their new physical names.\n ...buckets.createNamespace,\n ...renamed.steps,\n ...buckets.dropView,\n ...buckets.createEnum,\n ...buckets.addEnumValue,\n ...buckets.dropForeignKey,\n ...buckets.dropExclusion,\n ...buckets.dropIndex,\n ...buckets.dropCheck,\n ...buckets.dropPrimaryKey,\n ...buckets.dropJoinTable,\n ...buckets.dropTable,\n ...buckets.createTable,\n ...buckets.addColumn,\n ...buckets.alterColumn,\n ...buckets.dropColumn,\n ...buckets.addPrimaryKey,\n ...buckets.addCheck,\n ...buckets.addExclusion,\n ...buckets.createIndex,\n ...buckets.addForeignKey,\n ...buckets.createJoinTable,\n ...buckets.dropEnum,\n ] });\n}\n\n// ─── Enums ────────────────────────────────────────────────────────\n\ntype NormalizedPair = {\n from: NormalizedSchema;\n to: NormalizedSchema;\n buckets: StepBuckets;\n};\n\n// ─── Capability guards ────────────────────────────────────────────\n\n/** sqlite/mysql have no array columns — refuse every scalar-list field loudly. */\nfunction refuseScalarListColumns(params: { schema: SchemaIR; dialect: Dialect }): void {\n const { schema, dialect } = params;\n for (const model of schema.models) {\n if (model.isView) continue;\n for (const field of model.fields) {\n if (!field.isList || field.isUnsupported === true) continue;\n throw unsupportedCapability({\n dialect,\n feature: `scalar list column \"${model.name}.${field.name}\"`,\n hint: `${dialect} has no array column type — model the list as a separate table or a ${\n dialect === \"mysql\" ? \"JSON\" : \"Json\"\n } column`,\n });\n }\n }\n}\n\nfunction diffEnums(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n\n for (const [name, enumDef] of to.enums) {\n const previous = from.enums.get(name);\n if (previous === undefined) {\n buckets.createEnum.push({ kind: \"createEnum\", enumDef, destructive: false });\n continue;\n }\n\n const previousValues = new Set(previous.values);\n const currentValues = new Set(enumDef.values);\n for (const value of enumDef.values) {\n if (!previousValues.has(value)) {\n buckets.addEnumValue.push({ kind: \"addEnumValue\", enumName: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }), value, destructive: false });\n }\n }\n for (const value of previous.values) {\n if (!currentValues.has(value)) {\n throw unsupportedCapability({\n dialect: \"postgres\",\n feature: `removing value \"${value}\" from enum \"${name}\"`,\n hint: \"postgres cannot drop enum values — recreate the type manually (create new type, ALTER COLUMN ... USING, drop old type)\",\n });\n }\n }\n }\n\n for (const [name, enumDef] of from.enums) {\n if (!to.enums.has(name)) {\n buckets.dropEnum.push({ kind: \"dropEnum\", enumName: enumDef.dbName ?? enumDef.name, ...(enumDef.namespace === undefined ? {} : { namespace: enumDef.namespace }), destructive: true });\n }\n }\n}\n\n/** Existing FK/join dependencies need a coordinated migration, not isolated ALTERs. */\nfunction refuseDependentEnumStorageChanges(params: NormalizedPair & { dialect: Dialect }): void {\n const { from, to, buckets, dialect } = params;\n for (const step of buckets.alterColumn) {\n if (step.kind !== \"alterColumn\" || !isEnumStringTransition({ from: step.from, to: step.to })) continue;\n for (const normalized of [from, to]) {\n const hasFk = [...normalized.tables.values()].some((table) => [...table.fks.values()].some((fk) =>\n (table.table === step.table && (table.namespace ?? \"public\") === (step.namespace ?? \"public\") && fk.columns.includes(step.column)) ||\n (fk.refTable === step.table && (fk.refNamespace ?? \"public\") === (step.namespace ?? \"public\") && fk.refColumns.includes(step.column)),\n ));\n const hasJoin = [...normalized.joinTables.values()].some((join) => [join.a, join.b].some((end) =>\n end.table === step.table && (end.namespace ?? \"public\") === (step.namespace ?? \"public\") && end.column === step.column,\n ));\n if (hasFk || hasJoin) {\n throw unsupportedCapability({\n dialect,\n feature: `enum storage conversion on \"${step.table}\".\"${step.column}\" with foreign-key dependencies`,\n hint: \"migrate the referencing columns and constraints together in a reviewed manual migration\",\n });\n }\n }\n }\n}\n\n// ─── Views (#26) ──────────────────────────────────────────\n\n/**\n * A view in `from` the target no longer declares gets a `dropView` step — a\n * leftover view otherwise blocks the column drops beneath it (postgres 2BP01)\n * and `push` fails on a schema the user considers valid. Views only in `to`\n * emit nothing: view CREATION stays out-of-band in this wave (see #11), and\n * whatever design lands there must keep this drop rule.\n */\nfunction diffViews(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n for (const [name, view] of from.views) {\n if (!to.views.has(name)) {\n buckets.dropView.push({ kind: \"dropView\", table: view.dbName ?? view.name, ...(view.namespace === undefined ? {} : { namespace: view.namespace }), destructive: true });\n }\n }\n}\n\n// ─── Join tables ──────────────────────────────────────────────────\n\nfunction diffJoinTables(params: NormalizedPair): void {\n const { from, to, buckets } = params;\n\n for (const [key, joinTable] of to.joinTables) {\n if (!from.joinTables.has(key)) {\n const table = joinTable.table;\n const placement = joinTable.namespace === undefined ? {} : { namespace: joinTable.namespace };\n buckets.createJoinTable.push({\n kind: \"createJoinTable\",\n table,\n ...placement,\n a: joinTable.a,\n b: joinTable.b,\n destructive: false,\n });\n }\n }\n for (const [key, joinTable] of from.joinTables) {\n if (!to.joinTables.has(key)) {\n buckets.dropJoinTable.push({ kind: \"dropJoinTable\", table: joinTable.table, ...(joinTable.namespace === undefined ? {} : { namespace: joinTable.namespace }), destructive: true });\n }\n }\n}\n\n// ─── Tables ───────────────────────────────────────────────────────\n\nfunction diffTables(params: NormalizedPair & { dialect: Dialect }): void {\n const { from, to, buckets, dialect } = params;\n\n for (const [name, table] of to.tables) {\n const previous = from.tables.get(name);\n if (previous === undefined) createWholeTable({ table, buckets });\n else\n diffOneTable({\n previous,\n current: table,\n buckets,\n dialect,\n fromEnums: from.enums,\n toEnums: to.enums,\n });\n }\n\n // PostgreSQL/MySQL drops are RESTRICT, not CASCADE. Remove outgoing edges\n // explicitly, including cycles inside a removed group. SQLite instead orders\n // child drops and must not rebuild a table that is itself being removed.\n for (const [name, table] of from.tables) {\n if (to.tables.has(name)) continue;\n if (dialect !== \"sqlite\") for (const fk of table.fks.values()) {\n buckets.dropForeignKey.push({ kind: \"dropForeignKey\", table: table.table, ...(table.namespace === undefined ? {} : { namespace: table.namespace }), constraintName: fk.constraintName, destructive: false });\n }\n buckets.dropTable.push({ kind: \"dropTable\", table: table.table, ...(table.namespace === undefined ? {} : { namespace: table.namespace }), destructive: true });\n }\n}\n\nfunction createWholeTable(params: { table: NormalizedTable; buckets: StepBuckets }): void {\n const { table, buckets } = params;\n\n buckets.createTable.push({\n kind: \"createTable\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n columns: [...table.columns.values()].map((column) => column.field),\n primaryKey: table.pk,\n ...(table.model.primaryKeyConstraintName === undefined ? {} : { primaryKeyConstraintName: table.model.primaryKeyConstraintName }),\n checks: [...table.checks].map(([name, expression]) => ({ name, expression })),\n destructive: false,\n });\n\n for (const index of table.indexes.values()) {\n buckets.createIndex.push({\n kind: \"createIndex\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n name: index.name,\n indexKind: index.kind,\n unique: index.unique,\n columns: index.columns,\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n destructive: false,\n });\n }\n\n for (const fk of table.fks.values()) {\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table: table.table,\n ...(table.namespace === undefined ? {} : { namespace: table.namespace }),\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n }\n}\n\nfunction diffOneTable(params: {\n previous: NormalizedTable;\n current: NormalizedTable;\n buckets: StepBuckets;\n dialect: Dialect;\n fromEnums: ReadonlyMap<string, EnumIR>;\n toEnums: ReadonlyMap<string, EnumIR>;\n}): void {\n const { previous, current, buckets, dialect, fromEnums, toEnums } = params;\n const table = current.table;\n const placement = current.namespace === undefined ? {} : { namespace: current.namespace };\n\n // Columns.\n for (const [name, column] of current.columns) {\n const before = previous.columns.get(name);\n if (before === undefined) {\n buckets.addColumn.push({ kind: \"addColumn\", table, ...placement, column: column.field, destructive: false });\n continue;\n }\n\n const changes: AlterColumnAspect[] = [];\n if (columnTypeChanged({ declared: column, actual: before })) changes.push(\"type\");\n if (before.nullable !== column.nullable) changes.push(\"nullability\");\n if (before.defaultKey !== column.defaultKey) changes.push(\"default\");\n // An omitted declaration leaves the physical collation unchanged. Explicit\n // declarations are compared with catalog truth, not with a guessed default.\n const collationChanged = dialect === \"mysql\" && column.field.collation !== undefined &&\n before.field.collation?.toLowerCase() !== column.field.collation.toLowerCase();\n if (collationChanged) changes.push(\"collation\");\n if (changes.length === 0) continue;\n if (changes.includes(\"type\") && [...previous.checks].some(([name, expression]) => current.checks.get(name) === expression)) {\n throw unsupportedCapability({ dialect, feature: \"alterColumnWithRetainedCheck\", hint: \"CHECK dependencies and type compatibility are not proven; use a reviewed migration that replaces and revalidates the affected constraints\" });\n }\n\n const storageChange = isEnumStringTransition({ from: before.field, to: column.field });\n if (storageChange) {\n assertEnumStringTransition({ from: before.field, to: column.field, dialect, table, column: name });\n if (isEnumType(before.field.type) && column.field.type === \"String\") {\n const values = resolveEnumValues({ name: before.field.type.enum, namespace: before.field.type.namespace, enums: fromEnums });\n if (values !== undefined) assertStringEnumLabelsFit({ field: column.field, values, dialect, table });\n }\n }\n let narrowingType =\n changes.includes(\"type\") &&\n !isScalarToArrayChange({ from: before.field, to: column.field }) &&\n !(dialect === \"postgres\" && isTimestamptzPrecisionWidening({ from: before.field, to: column.field })) &&\n !(storageChange && column.field.type === \"String\");\n\n // Inline-enum dialects: an enum→enum type change is a value-list change.\n // Pure widening (values only added) is safe and non-destructive; REMOVING\n // a value is refused outright — existing rows may hold it, and silence\n // would be dialect dishonesty.\n if (\n dialect !== \"postgres\" &&\n changes.includes(\"type\") &&\n isEnumType(before.field.type) &&\n isEnumType(column.field.type)\n ) {\n const fromValues = resolveEnumValues({ name: before.field.type.enum, enums: fromEnums });\n const toValues = resolveEnumValues({ name: column.field.type.enum, enums: toEnums });\n if (fromValues !== undefined && toValues !== undefined) {\n const removed = fromValues.filter((value) => !toValues.includes(value));\n if (removed.length > 0) {\n throw unsupportedCapability({\n dialect,\n feature: `removing value(s) ${removed.map((value) => `\"${value}\"`).join(\", \")} from enum column \"${table}\".\"${name}\"`,\n hint: \"migrate the stored values away first, then recreate the column with the narrower enum\",\n });\n }\n narrowingType = false; // Pure widening — no data can be lost.\n }\n }\n\n buckets.alterColumn.push({\n kind: \"alterColumn\",\n table,\n ...placement,\n column: name,\n from: before.field,\n to: column.field,\n changes,\n destructive: narrowingType || collationChanged,\n });\n }\n\n for (const [name] of previous.columns) {\n if (!current.columns.has(name)) {\n buckets.dropColumn.push({ kind: \"dropColumn\", table, ...placement, column: name, destructive: true });\n }\n }\n\n // Primary key.\n const pkBefore = previous.pk.join(\",\");\n const pkAfter = current.pk.join(\",\");\n if (pkBefore !== pkAfter) {\n if (previous.pk.length > 0) {\n buckets.dropPrimaryKey.push({ kind: \"dropPrimaryKey\", table, ...placement, destructive: false, ...(previous.model.primaryKeyConstraintName === undefined ? {} : { constraintName: previous.model.primaryKeyConstraintName }) });\n }\n if (current.pk.length > 0) {\n buckets.addPrimaryKey.push({\n kind: \"addPrimaryKey\",\n table,\n ...placement,\n columns: current.pk,\n ...(current.model.primaryKeyConstraintName === undefined ? {} : { constraintName: current.model.primaryKeyConstraintName }),\n destructive: false,\n });\n }\n }\n\n // Authored expression changes replace the named constraint. Live callers\n // must establish expression equivalence before passing catalog IR here.\n for (const [name, expression] of current.checks) {\n const before = previous.checks.get(name);\n if (before === expression) continue;\n if (before !== undefined && previous.model.checks?.some((check) => check.name === name && check.catalogExpression === true)) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Unequal catalog CHECK text requires normalized evidence or explicit replacement through the live planner\", meta: { reason: \"check-inspection-unavailable\", table, name } });\n if (before !== undefined) buckets.dropCheck.push({ kind: \"dropCheck\", table, ...placement, name, destructive: false });\n buckets.addCheck.push({ kind: \"addCheck\", table, ...placement, name, expression, destructive: false });\n }\n for (const [name] of previous.checks) {\n if (current.checks.has(name)) continue;\n buckets.dropCheck.push({ kind: \"dropCheck\", table, ...placement, name, destructive: false });\n }\n\n // Indexes (uniques included — normalize.ts already merged @unique fields in).\n for (const [key, index] of current.indexes) {\n if (previous.indexes.has(key)) continue;\n buckets.createIndex.push({\n kind: \"createIndex\",\n table,\n ...placement,\n name: index.name,\n indexKind: index.kind,\n unique: index.unique,\n columns: index.columns,\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n destructive: false,\n });\n }\n for (const [key, index] of previous.indexes) {\n if (current.indexes.has(key)) continue;\n buckets.dropIndex.push({ kind: \"dropIndex\", name: index.name, table, ...placement, destructive: false, ...(index.constraintName === undefined ? {} : { constraintName: index.constraintName }) });\n }\n\n // Foreign keys. Cascade-action drift needs DROP + ADD — postgres has no\n // ALTER CONSTRAINT ... ON DELETE for FKs (LEARNINGS).\n for (const [key, fk] of current.fks) {\n const before = previous.fks.get(key);\n if (before === undefined) {\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n ...(fk.refNamespace === undefined ? {} : { refNamespace: fk.refNamespace }),\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n continue;\n }\n if (before.onDelete !== fk.onDelete || before.onUpdate !== fk.onUpdate) {\n buckets.dropForeignKey.push({\n kind: \"dropForeignKey\",\n table,\n ...placement,\n constraintName: before.constraintName,\n destructive: false,\n });\n buckets.addForeignKey.push({\n kind: \"addForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n columns: fk.columns,\n refTable: fk.refTable,\n ...(fk.refNamespace === undefined ? {} : { refNamespace: fk.refNamespace }),\n refColumns: fk.refColumns,\n onDelete: fk.onDelete,\n onUpdate: fk.onUpdate,\n destructive: false,\n });\n }\n }\n for (const [key, fk] of previous.fks) {\n if (current.fks.has(key)) continue;\n buckets.dropForeignKey.push({\n kind: \"dropForeignKey\",\n table,\n ...placement,\n constraintName: fk.constraintName,\n destructive: false,\n });\n }\n}\n",
|
|
44
44
|
"/**\n * EXPLICIT physical renames.\n *\n * The differ deliberately has no rename detection: two schemas that differ by\n * a name are indistinguishable from a drop plus a create, and guessing between\n * them from \"similar shapes\" is how a migration tool silently destroys a\n * column. A rename therefore only ever happens because someone WROTE one down,\n * as an old physical name and a new physical name, and it is validated against\n * both schemas before a single statement is rendered.\n *\n * `@map` / `@@map` remains the no-DDL option: mapping a model or field to the\n * name the database already uses changes generated code only. Use a rename\n * intent when the DATABASE object must actually move.\n *\n * What a physical rename preserves, on every dialect that supports it: the\n * rows, the column defaults, the indexes and constraints attached to the\n * object, and inbound foreign keys — the object keeps its identity, only its\n * name changes. PostgreSQL policy expressions follow the rename too, because\n * they are stored parsed and reference the object by identity, not by text.\n *\n * What refuses instead of guessing: renaming a table and one of its columns in\n * the same plan (the second intent's table name is then ambiguous), an intent\n * whose endpoints do not both check out against the two schemas, and two\n * intents pointing at the same object.\n */\n\nimport { VibeError, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { Dialect, ModelIR, SchemaIR } from \"@vibeorm/schema\";\nimport type { MigrationStep } from \"./types.ts\";\n\n/** One deliberately written rename, in PHYSICAL (database) names. */\nexport type RenameIntent =\n | { readonly kind: \"table\"; readonly from: string; readonly to: string }\n | { readonly kind: \"column\"; readonly table: string; readonly from: string; readonly to: string };\n\n/** Physical table name of a model. */\nfunction tableOf(model: ModelIR): string {\n return model.dbName ?? model.name;\n}\n\nfunction findTable(params: { schema: SchemaIR; table: string }): ModelIR | undefined {\n return params.schema.models.find((model) => !model.isView && tableOf(model) === params.table);\n}\n\nfunction hasColumn(params: { model: ModelIR; column: string }): boolean {\n return params.model.fields.some((field) => (field.dbName ?? field.name) === params.column);\n}\n\nfunction ambiguous(params: { detail: string; meta: Record<string, unknown> }): VibeError {\n return new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `rename refused: ${params.detail}`,\n meta: { reason: \"rename-ambiguous\", ...params.meta },\n });\n}\n\n/**\n * Validate rename intents against the two schemas and turn them into steps,\n * returning the SOURCE schema rewritten as if the renames had happened.\n *\n * The rewrite is what keeps the rest of the diff honest: once the source model\n * carries the new physical name, the ordinary differ sees one table on both\n * sides and emits no drop/create pair for it. Only `dbName` moves — the\n * logical IR graph (relations, index field lists) is untouched, so nothing\n * downstream has to know a rename happened.\n */\nexport function planRenames(params: {\n from: SchemaIR;\n to: SchemaIR;\n renames: readonly RenameIntent[];\n dialect: Dialect;\n}): { readonly steps: readonly MigrationStep[]; readonly from: SchemaIR } {\n const { to, dialect } = params;\n if (params.renames.length === 0) return { steps: [], from: params.from };\n // The existing rename vocabulary has no qualified endpoint. Do not select\n // a namespaced sibling by basename or silently move physical placement.\n if ([params.from, params.to].some((schema) => schema.models.some((model) => model.namespace !== undefined && model.namespace !== \"public\" && params.renames.some((intent) => intent.kind === \"table\" ? [intent.from, intent.to].includes(tableOf(model)) : intent.table === tableOf(model))))) throw unsupportedCapability({ dialect, feature: \"qualifiedRenameIntent\", hint: \"Use reviewed namespace-qualified SQL for a physical rename in a fixed namespace\" });\n\n const renamedTables = new Map<string, string>();\n const renamedColumns = new Map<string, Map<string, string>>();\n const steps: MigrationStep[] = [];\n\n for (const intent of params.renames) {\n if (intent.kind === \"table\") {\n if (intent.from === intent.to) {\n throw ambiguous({ detail: `table \"${intent.from}\" renames to itself`, meta: { dialect, from: intent.from } });\n }\n if (renamedTables.has(intent.from) || [...renamedTables.values()].includes(intent.to)) {\n throw ambiguous({ detail: `table \"${intent.from}\" or \"${intent.to}\" appears in more than one rename`, meta: { dialect, from: intent.from, to: intent.to } });\n }\n const source = findTable({ schema: params.from, table: intent.from });\n if (source === undefined) {\n throw ambiguous({ detail: `the current database has no table \"${intent.from}\" to rename`, meta: { dialect, from: intent.from, to: intent.to } });\n }\n if (findTable({ schema: params.from, table: intent.to }) !== undefined) {\n throw ambiguous({ detail: `the current database already has a table named \"${intent.to}\"`, meta: { dialect, from: intent.from, to: intent.to } });\n }\n if (findTable({ schema: to, table: intent.to }) === undefined) {\n throw ambiguous({ detail: `the target schema has no table \"${intent.to}\" — a rename must name a table that exists on BOTH sides`, meta: { dialect, from: intent.from, to: intent.to } });\n }\n if (findTable({ schema: to, table: intent.from }) !== undefined) {\n throw ambiguous({ detail: `the target schema still has a table \"${intent.from}\", so this is not a rename`, meta: { dialect, from: intent.from, to: intent.to } });\n }\n renamedTables.set(intent.from, intent.to);\n steps.push({ kind: \"renameTable\", from: intent.from, to: intent.to, destructive: false });\n continue;\n }\n\n if (intent.from === intent.to) {\n throw ambiguous({ detail: `column \"${intent.table}\".\"${intent.from}\" renames to itself`, meta: { dialect, table: intent.table } });\n }\n if (renamedTables.has(intent.table) || [...renamedTables.values()].includes(intent.table)) {\n throw ambiguous({\n detail: `\"${intent.table}\" is renamed in the same plan, so a column rename on it is ambiguous — split the table rename and the column rename into two migrations`,\n meta: { dialect, table: intent.table, from: intent.from, to: intent.to },\n });\n }\n const sourceTable = findTable({ schema: params.from, table: intent.table });\n const targetTable = findTable({ schema: to, table: intent.table });\n if (sourceTable === undefined || targetTable === undefined) {\n throw ambiguous({ detail: `table \"${intent.table}\" must exist in both the current database and the target schema to rename one of its columns`, meta: { dialect, table: intent.table } });\n }\n const columns = renamedColumns.get(intent.table) ?? new Map<string, string>();\n if (columns.has(intent.from) || [...columns.values()].includes(intent.to)) {\n throw ambiguous({ detail: `column \"${intent.table}\".\"${intent.from}\" or \"${intent.to}\" appears in more than one rename`, meta: { dialect, table: intent.table } });\n }\n if (!hasColumn({ model: sourceTable, column: intent.from })) {\n throw ambiguous({ detail: `the current database has no column \"${intent.table}\".\"${intent.from}\" to rename`, meta: { dialect, table: intent.table, from: intent.from } });\n }\n if (hasColumn({ model: sourceTable, column: intent.to })) {\n throw ambiguous({ detail: `the current database already has a column \"${intent.table}\".\"${intent.to}\"`, meta: { dialect, table: intent.table, to: intent.to } });\n }\n if (!hasColumn({ model: targetTable, column: intent.to })) {\n throw ambiguous({ detail: `the target schema has no column \"${intent.table}\".\"${intent.to}\" — a rename must name a column that exists on BOTH sides`, meta: { dialect, table: intent.table, to: intent.to } });\n }\n if (hasColumn({ model: targetTable, column: intent.from })) {\n throw ambiguous({ detail: `the target schema still has a column \"${intent.table}\".\"${intent.from}\", so this is not a rename`, meta: { dialect, table: intent.table, from: intent.from } });\n }\n columns.set(intent.from, intent.to);\n renamedColumns.set(intent.table, columns);\n steps.push({ kind: \"renameColumn\", table: intent.table, from: intent.from, to: intent.to, destructive: false });\n }\n\n const rewritten: SchemaIR = {\n ...params.from,\n models: params.from.models.map((model) => {\n const table = tableOf(model);\n const columns = renamedColumns.get(table);\n const newTable = renamedTables.get(table);\n if (columns === undefined && newTable === undefined) return model;\n return {\n ...model,\n ...(newTable === undefined ? {} : { dbName: newTable }),\n ...(columns === undefined\n ? {}\n : {\n fields: model.fields.map((field) => {\n const renamed = columns.get(field.dbName ?? field.name);\n return renamed === undefined ? field : { ...field, dbName: renamed };\n }),\n }),\n };\n }),\n };\n\n // Table renames first: a column rename on a renamed table is refused above,\n // so the two groups never interact, but keeping the order explicit makes the\n // rendered SQL read the way an operator expects.\n return {\n steps: [...steps.filter((step) => step.kind === \"renameTable\"), ...steps.filter((step) => step.kind === \"renameColumn\")],\n from: rewritten,\n };\n}\n",
|
|
45
45
|
"/**\n * Dialect dispatcher for DDL rendering — the ONE public entry point. Routes to\n * the per-dialect renderers (ddl/postgres.ts, ddl/sqlite.ts, ddl/mysql.ts) so\n * every SQL-text decision stays in exactly one dialect module.\n */\n\nimport { VibeError, sqlObjectKey } from \"@vibeorm/schema\";\nimport type { Dialect, SchemaIR } from \"@vibeorm/schema\";\nimport { renderPostgresSteps } from \"./postgres.ts\";\nimport { renderSqliteSteps, sqliteInvalidatedTables } from \"./sqlite.ts\";\nimport { renderMysqlSteps } from \"./mysql.ts\";\nimport type { MigrationStep } from \"../types.ts\";\n\ntype SqlitePreservation = {\n to?: SchemaIR;\n restore: Map<string, string[]>;\n columns: Map<string, Map<string, { sql: string; generated: boolean }>>;\n};\n\n/** Authored up/down generation uses the same trusted clauses the live planner verifies. */\nfunction declaredSqlitePreservation(params: { steps: readonly MigrationStep[]; from?: SchemaIR; to?: SchemaIR }): SqlitePreservation {\n const restore = new Map<string, string[]>();\n const columns = new Map<string, Map<string, { sql: string; generated: boolean }>>();\n let to = params.to;\n if (params.from === undefined || to === undefined || (params.from.migrationObjects?.length ?? 0) === 0) return { to, restore, columns };\n const invalid = sqliteInvalidatedTables({ steps: params.steps, from: params.from });\n const retained = new Set((to.migrationObjects ?? []).map((object) => sqlObjectKey({ identity: object.identity })));\n for (const object of params.from.migrationObjects ?? []) {\n const identity = object.identity;\n if (!(\"table\" in identity) || identity.table.namespace !== \"main\" || !invalid.rebuilt.has(identity.table.name) || !retained.has(sqlObjectKey({ identity }))) continue;\n const facts = object.expected?.facts;\n if (facts === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"SQLite rebuild requires independently declared preservation definitions\", meta: { reason: \"sqlite-preservation-unavailable\", identity } });\n if (identity.kind === \"trigger\" || identity.kind === \"index\") {\n if (identity.kind === \"index\" && to.models.some((model) => (model.dbName ?? model.name) === identity.table.name && model.indexes.some((index) => index.name === identity.name))) continue;\n if (typeof facts.definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Missing SQLite restoration SQL\", meta: { reason: \"sqlite-preservation-unavailable\", identity } });\n const statements = restore.get(identity.table.name) ?? [];\n statements.push(facts.definition);\n restore.set(identity.table.name, statements);\n } else if (identity.kind === \"column\" || identity.kind === \"generatedColumn\") {\n if (typeof facts.columnDefinition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Missing SQLite column clause\", meta: { reason: \"sqlite-preservation-unavailable\", identity } });\n const fields = columns.get(identity.table.name) ?? new Map<string, { sql: string; generated: boolean }>();\n fields.set(identity.column, { sql: facts.columnDefinition, generated: Number(facts.generated) > 1 });\n columns.set(identity.table.name, fields);\n } else if (identity.kind === \"columnDefault\") {\n if (facts.definition !== null && typeof facts.definition !== \"string\") throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Missing SQLite default clause\", meta: { reason: \"sqlite-preservation-unavailable\", identity } });\n const expression = facts.definition;\n to = { ...to, models: to.models.map((model) => (model.dbName ?? model.name) !== identity.table.name ? model : { ...model, fields: model.fields.map((field) => {\n if ((field.dbName ?? field.name) !== identity.column) return field;\n const { default: ignored, ...rest } = field;\n return { ...rest, ...(expression === null ? {} : { default: { kind: \"dbgenerated\" as const, sql: expression } }) };\n }) }) };\n }\n }\n return { to, restore, columns };\n}\n\n/**\n * Render migration steps to SQL statements (one string per statement, in\n * order) for a dialect.\n *\n * `from`/`to` — the schemas the steps were diffed from — are OPTIONAL for\n * postgres (ignored) but needed by sqlite whenever a step compiles to the\n * table-rebuild recipe (the target table shape lives on the schema, not the\n * step) and by sqlite/mysql for enum columns (CHECK / inline ENUM values).\n * `generateMigration` and `push` always pass them; direct callers rendering\n * rebuild-free, enum-free steps may omit them.\n */\nexport function renderSteps(params: {\n steps: readonly MigrationStep[];\n dialect: Dialect;\n from?: SchemaIR;\n to?: SchemaIR;\n /** Captured trigger/index SQL restored inside each SQLite rebuild transaction. */\n sqliteRestore?: ReadonlyMap<string, readonly string[]>;\n /** Verified generated/extra column clauses copied into rebuilt SQLite tables. */\n sqliteColumns?: ReadonlyMap<string, ReadonlyMap<string, { readonly sql: string; readonly generated: boolean }>>;\n}): string[] {\n const { steps, dialect, from, to } = params;\n // @collation (board #36) follows the @db.* native-type precedent: a\n // dialect-specific column annotation, rendered where it has meaning (mysql)\n // and inert elsewhere — NOT a capability refusal, so one portable schema\n // can carry it across the dialect matrix.\n switch (dialect) {\n case \"postgres\":\n return renderPostgresSteps({ steps });\n case \"sqlite\": {\n const preserved = declaredSqlitePreservation({ ...params, ...(from === undefined ? {} : { from }), ...(to === undefined ? {} : { to }) });\n return renderSqliteSteps({\n steps,\n restore: params.sqliteRestore ?? preserved.restore,\n preservedColumns: params.sqliteColumns ?? preserved.columns,\n ...(from === undefined ? {} : { from }),\n ...(preserved.to === undefined ? {} : { to: preserved.to }),\n });\n }\n case \"mysql\":\n return renderMysqlSteps({\n steps,\n ...(from === undefined ? {} : { from }),\n ...(to === undefined ? {} : { to }),\n });\n }\n}\n",
|
|
46
46
|
"/**\n * Postgres DDL renderer: migration steps → SQL statements.\n *\n * Every identifier is quoted through `postgresDialect.quoteIdent` — the ONE\n * quoting decision point (@vibeorm/sql). Choices, each pinned by a renderer\n * test:\n *\n * - autoincrement renders as `GENERATED BY DEFAULT AS IDENTITY` (SQL-standard,\n * no sequence-name coupling; postgres ≥10 and pglite both support it) — not\n * SERIAL. The introspector maps identity columns back to autoincrement.\n * - DROP TABLE is restricted; the differ drops dependent foreign keys first.\n * - Explicit namespaces qualify identifiers; omitted steps retain public DDL.\n * - scalar→array type changes carry the LEARNINGS `USING CASE WHEN col IS NULL\n * THEN NULL ELSE ARRAY[col] END` repair clause (postgres cannot implicit-cast).\n * - `ALTER TYPE ... ADD VALUE IF NOT EXISTS` appends at the end of the enum\n * (no BEFORE/AFTER positioning); fine inside a transaction on postgres ≥12.\n * - Unsupported columns render their `nativeType` verbatim and migrate like\n * any other column.\n */\n\nimport { renderExclusionSetup } from \"@vibeorm/sql\";\nimport { VibeError, assertSqlNamespace, defaultPrimaryKeyName, implicitJoinTableObjectNames, isEnumType } from \"@vibeorm/schema\";\nimport type { FieldIR } from \"@vibeorm/schema\";\nimport { postgresDialect, renderRlsPolicyPath, renderIndexColumns } from \"@vibeorm/sql\";\nimport {\n CASCADE_ACTION_SQL,\n columnTypeSql,\n defaultSql,\n isIdentityColumn,\n quotePgString,\n} from \"../postgres-types.ts\";\nimport type { MigrationStep } from \"../types.ts\";\nimport { renderRlsStep } from \"./rls.ts\";\nimport { assertEnumStringTransition, isEnumStringTransition } from \"../enum-values.ts\";\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/** Render migration steps to postgres SQL (one string per statement, in order). */\nexport function renderPostgresSteps(params: { steps: readonly MigrationStep[] }): string[] {\n refuseSameTransactionEnumUse({ steps: params.steps });\n return params.steps.flatMap((step) => renderStep({ step }));\n}\n\n/**\n * PostgreSQL refuses to USE an enum member that was added in the same\n * transaction (\"unsafe use of new value of enum type\") — the member exists but\n * is not committed, so a DEFAULT or a backfill referring to it fails AT APPLY\n * TIME, after part of the migration already ran. Migrations run in one\n * transaction here (`push`, `runTransactional`), so this combination can never\n * succeed: refuse while rendering, naming the split, instead of shipping a\n * migration that cannot be applied (F34).\n *\n * Only NATIVE enums reach this: string-backed enums produce no `addEnumValue`\n * step, and sqlite/mysql inline their enums into the column.\n */\nfunction refuseSameTransactionEnumUse(params: { steps: readonly MigrationStep[] }): void {\n const added = new Map<string, Set<string>>();\n for (const step of params.steps) {\n if (step.kind !== \"addEnumValue\") continue;\n const key = JSON.stringify([step.namespace ?? \"public\", step.enumName]);\n const values = added.get(key) ?? new Set<string>();\n values.add(step.value);\n added.set(key, values);\n }\n if (added.size === 0) return;\n\n const use = (field: FieldIR): { enumName: string; value: string } | undefined => {\n if (!isEnumType(field.type)) return undefined;\n const type = field.type;\n const enumName = type.enum;\n const def = field.default;\n const candidates = def?.kind === \"list\" ? def.values : def?.kind === \"enumValue\" || def?.kind === \"literal\" ? [def.value] : [];\n const value = candidates.find((entry): entry is string => typeof entry === \"string\" && added.get(JSON.stringify([type.namespace ?? \"public\", enumName]))?.has(entry) === true);\n return value === undefined ? undefined : { enumName, value };\n };\n\n for (const step of params.steps) {\n if (step.kind !== \"createTable\" && step.kind !== \"addColumn\" && step.kind !== \"alterColumn\") {\n continue;\n }\n const fields: readonly FieldIR[] =\n step.kind === \"createTable\" ? step.columns : step.kind === \"addColumn\" ? [step.column] : [step.to];\n for (const field of fields) {\n const found = use(field);\n if (found === undefined) continue;\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `enum value \"${found.value}\" is added to \"${found.enumName}\" and used as a default on \"${step.table}\".\"${field.dbName ?? field.name}\" in the same migration — PostgreSQL cannot use an enum member before the transaction that added it commits. Split this into two migrations: the first containing only the ALTER TYPE ... ADD VALUE, the second the column change`,\n meta: { enum: found.enumName, value: found.value, table: step.table, column: field.dbName ?? field.name, rule: \"enum-value-used-in-adding-transaction\" },\n });\n }\n }\n}\n\n// ─── Per-step rendering ───────────────────────────────────────────\n\nfunction renderStep(params: { step: MigrationStep }): string[] {\n const { step } = params;\n switch (step.kind) {\n case \"createNamespace\":\n assertSqlNamespace({ namespace: step.namespace, dialect: \"postgres\", allowPublic: false });\n return [`CREATE SCHEMA ${q(step.namespace)};`];\n case \"addExclusion\":\n return [...renderExclusionSetup({ dialect: postgresDialect, exclusion: step.exclusion }), `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.exclusion.name)} ${step.exclusion.definition};`];\n case \"dropExclusion\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP CONSTRAINT ${q(step.exclusion.name)};`];\n case \"enableRls\":\n case \"forceRls\":\n case \"disableRls\":\n case \"noForceRls\":\n case \"createPolicy\":\n case \"dropPolicy\":\n return step.kind === \"createPolicy\"\n ? [renderRlsPolicyPath({ dialect: postgresDialect, stage: \"save\" }).text, renderRlsPolicyPath({ dialect: postgresDialect, stage: \"empty\" }).text, ...renderRlsStep({ step, dialect: \"postgres\" }), renderRlsPolicyPath({ dialect: postgresDialect, stage: \"restore\" }).text]\n : renderRlsStep({ step, dialect: \"postgres\" });\n case \"createEnum\": {\n const name = step.enumDef.dbName ?? step.enumDef.name;\n const values = step.enumDef.values.map((value) => quotePgString({ value })).join(\", \");\n return [`CREATE TYPE ${qualifiedName(name, step.enumDef.namespace)} AS ENUM (${values});`];\n }\n case \"dropEnum\":\n return [`DROP TYPE ${qualifiedName(step.enumName, step.namespace)};`];\n case \"addEnumValue\":\n return [\n `ALTER TYPE ${qualifiedName(step.enumName, step.namespace)} ADD VALUE IF NOT EXISTS ${quotePgString({ value: step.value })};`,\n ];\n case \"createTable\": {\n const lines = step.columns.map((column) => ` ${columnDefSql({ field: column })}`);\n if (step.primaryKey.length > 0) {\n const pkCols = step.primaryKey.map((column) => q(column)).join(\", \");\n lines.push(` CONSTRAINT ${q(step.primaryKeyConstraintName ?? defaultPrimaryKeyName({ table: step.table, dialect: \"postgres\" }))} PRIMARY KEY (${pkCols})`);\n }\n for (const check of step.checks ?? []) {\n lines.push(` CONSTRAINT ${q(check.name)} CHECK (${check.expression})`);\n }\n return [`CREATE TABLE ${qualifiedName(step.table, step.namespace)} (\\n${lines.join(\",\\n\")}\\n);`];\n }\n case \"dropTable\":\n case \"dropJoinTable\":\n return [`DROP TABLE ${qualifiedName(step.table, step.namespace)};`];\n case \"dropView\":\n // No CASCADE: a view-on-view dependency fails LOUDLY instead of silently\n // taking a surviving dependent view with it (#26).\n return [`DROP VIEW IF EXISTS ${qualifiedName(step.table, step.namespace)};`];\n case \"addColumn\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD COLUMN ${columnDefSql({ field: step.column })};`];\n case \"dropColumn\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP COLUMN ${q(step.column)};`];\n case \"alterColumn\":\n return renderAlterColumn({ step });\n case \"createIndex\": {\n const unique = step.unique ? \"UNIQUE \" : \"\";\n const using = !step.unique && step.indexKind !== \"btree\" ? ` USING ${step.indexKind}` : \"\";\n const cols = renderIndexColumns({ dialect: postgresDialect, columns: step.columns, unique: step.unique }).join(\", \");\n // pg 15+ clause; the flag sits between the column list and WHERE.\n const nulls = step.nullsNotDistinct === true ? \" NULLS NOT DISTINCT\" : \"\";\n const where = step.where === undefined ? \"\" : ` WHERE ${step.where}`;\n return [\n `CREATE ${unique}INDEX ${q(step.name)} ON ${qualifiedName(step.table, step.namespace)}${using} (${cols})${nulls}${where};`,\n ];\n }\n case \"dropIndex\":\n if (step.constraintName !== undefined) {\n if (step.table === undefined) throw new VibeError({ code: \"VIBE_MIGRATION\", message: \"Constraint-backed index removal requires its owning table\" });\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP CONSTRAINT ${q(step.constraintName)};`];\n }\n return [`DROP INDEX ${qualifiedName(step.name, step.namespace)};`];\n case \"addCheck\":\n return [\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.name)} CHECK (${step.expression});`,\n ];\n case \"dropCheck\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP CONSTRAINT ${q(step.name)};`];\n case \"addForeignKey\": {\n const cols = step.columns.map((column) => q(column)).join(\", \");\n const refCols = step.refColumns.map((column) => q(column)).join(\", \");\n return [\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.constraintName)} FOREIGN KEY (${cols}) REFERENCES ${qualifiedName(step.refTable, step.refNamespace)} (${refCols}) ON DELETE ${CASCADE_ACTION_SQL[step.onDelete]} ON UPDATE ${CASCADE_ACTION_SQL[step.onUpdate]};`,\n ];\n }\n case \"addForeignKeyNotValid\": {\n // NOT VALID skips the scan of existing rows, so the ACCESS EXCLUSIVE lock\n // is held for a catalog write instead of a full table read. New and\n // changed rows are enforced immediately; the existing ones are only\n // proven by the separate VALIDATE CONSTRAINT step below.\n const cols = step.columns.map((column) => q(column)).join(\", \");\n const refCols = step.refColumns.map((column) => q(column)).join(\", \");\n return [\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.constraintName)} FOREIGN KEY (${cols}) REFERENCES ${qualifiedName(step.refTable, step.refNamespace)} (${refCols}) ON DELETE ${CASCADE_ACTION_SQL[step.onDelete]} ON UPDATE ${CASCADE_ACTION_SQL[step.onUpdate]} NOT VALID;`,\n ];\n }\n case \"addCheckNotValid\":\n return [\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.name)} CHECK (${step.expression}) NOT VALID;`,\n ];\n case \"validateConstraint\":\n // SHARE UPDATE EXCLUSIVE: concurrent reads and writes continue while the\n // scan runs. Cheaper than the combined ADD, not free.\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} VALIDATE CONSTRAINT ${q(step.name)};`];\n case \"renameTable\":\n // Rows, defaults, indexes, constraints, inbound foreign keys and policy\n // expressions all follow the object: PostgreSQL stores them against its\n // identity, not its name.\n return [`ALTER TABLE ${qualifiedName(step.from, step.namespace)} RENAME TO ${q(step.to)};`];\n case \"renameColumn\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} RENAME COLUMN ${q(step.from)} TO ${q(step.to)};`];\n case \"dropForeignKey\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP CONSTRAINT ${q(step.constraintName)};`];\n case \"createJoinTable\": {\n // Prisma's implicit join-table shape: columns \"A\"/\"B\", a unique index on\n // (A, B), an index on B, both FKs cascading (see @vibeorm/schema m2m.ts).\n const aType = columnTypeSql({ field: { ...step.a.field, isList: false } });\n const bType = columnTypeSql({ field: { ...step.b.field, isList: false } });\n const names = implicitJoinTableObjectNames({ table: step.table });\n return [\n `CREATE TABLE ${qualifiedName(step.table, step.namespace)} (\\n \"A\" ${aType} NOT NULL,\\n \"B\" ${bType} NOT NULL\\n);`,\n `CREATE UNIQUE INDEX ${q(names.uniqueIndex)} ON ${qualifiedName(step.table, step.namespace)} (\"A\", \"B\");`,\n `CREATE INDEX ${q(names.indexB)} ON ${qualifiedName(step.table, step.namespace)} (\"B\");`,\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(names.foreignKeyA)} FOREIGN KEY (\"A\") REFERENCES ${qualifiedName(step.a.table, step.a.namespace)} (${q(step.a.column)}) ON DELETE CASCADE ON UPDATE CASCADE;`,\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(names.foreignKeyB)} FOREIGN KEY (\"B\") REFERENCES ${qualifiedName(step.b.table, step.b.namespace)} (${q(step.b.column)}) ON DELETE CASCADE ON UPDATE CASCADE;`,\n ];\n }\n case \"addPrimaryKey\": {\n const cols = step.columns.map((column) => q(column)).join(\", \");\n return [\n `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ADD CONSTRAINT ${q(step.constraintName ?? defaultPrimaryKeyName({ table: step.table, dialect: \"postgres\" }))} PRIMARY KEY (${cols});`,\n ];\n }\n case \"dropPrimaryKey\":\n return [`ALTER TABLE ${qualifiedName(step.table, step.namespace)} DROP CONSTRAINT ${q(step.constraintName ?? defaultPrimaryKeyName({ table: step.table, dialect: \"postgres\" }))};`];\n }\n}\n\n// ─── Column pieces ────────────────────────────────────────────────\n\nfunction columnDefSql(params: { field: FieldIR }): string {\n const { field } = params;\n const name = q(field.dbName ?? field.name);\n\n if (field.default?.kind === \"autoincrement\" && !isIdentityColumn({ field })) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `autoincrement default on \"${field.name}\" requires a non-list Int or BigInt column`,\n meta: { field: field.name },\n });\n }\n\n let def = `${name} ${columnTypeSql({ field })}`;\n if (isIdentityColumn({ field })) def += \" GENERATED BY DEFAULT AS IDENTITY\";\n if (!field.isOptional) def += \" NOT NULL\";\n const defaultExpr = defaultSql({ field });\n if (defaultExpr !== undefined) def += ` DEFAULT ${defaultExpr}`;\n return def;\n}\n\nfunction renderAlterColumn(params: {\n step: Extract<MigrationStep, { kind: \"alterColumn\" }>;\n}): string[] {\n const { step } = params;\n const statements: string[] = [];\n const column = q(step.column);\n const alterPrefix = `ALTER TABLE ${qualifiedName(step.table, step.namespace)} ALTER COLUMN ${column}`;\n\n const storageChange = step.changes.includes(\"type\") && isEnumStringTransition({ from: step.from, to: step.to });\n if (storageChange) assertEnumStringTransition({ from: step.from, to: step.to, dialect: \"postgres\", table: step.table, column: step.column });\n // USING only casts stored rows, not the default expression. Drop a text\n // default before casting to a native enum, then restore the target default.\n const droppedDefault = storageChange && isEnumType(step.to.type) && defaultSql({ field: step.from }) !== undefined;\n if (droppedDefault) statements.push(`${alterPrefix} DROP DEFAULT;`);\n\n if (step.changes.includes(\"type\")) {\n // LEARNINGS: scalar→array of the same base type needs a USING repair —\n // postgres cannot implicit-cast a scalar into a one-element array.\n const scalarToArray =\n step.to.isList && !step.from.isList\n ? ` USING CASE WHEN ${column} IS NULL THEN NULL ELSE ARRAY[${column}] END`\n : \"\";\n statements.push(\n `${alterPrefix} SET DATA TYPE ${columnTypeSql({ field: step.to })}${storageChange ? ` USING ${column}::${columnTypeSql({ field: step.to })}` : scalarToArray};`,\n );\n }\n\n if (step.changes.includes(\"nullability\")) {\n statements.push(`${alterPrefix} ${step.to.isOptional ? \"DROP\" : \"SET\"} NOT NULL;`);\n }\n\n if (step.changes.includes(\"default\") || droppedDefault) {\n if (step.to.default?.kind === \"autoincrement\") {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `cannot add autoincrement to existing column \"${step.table}\".\"${step.column}\" — drop and recreate the column instead`,\n meta: { table: step.table, column: step.column },\n });\n }\n const defaultExpr = defaultSql({ field: step.to });\n statements.push(\n defaultExpr === undefined\n ? `${alterPrefix} DROP DEFAULT;`\n : `${alterPrefix} SET DEFAULT ${defaultExpr};`,\n );\n }\n\n return statements;\n}\n\n// ─── Quoting ──────────────────────────────────────────────────────\n\nfunction qualifiedName(name: string, namespace: string = \"public\"): string {\n assertSqlNamespace({ namespace, dialect: \"postgres\" });\n return `${q(namespace)}.${q(name)}`;\n}\n\nfunction q(name: string): string {\n return postgresDialect.quoteIdent({ name });\n}\n",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"/**\n * MySQL DDL renderer: migration steps → SQL statements.\n *\n * Every identifier is backtick-quoted through `mysqlDialect.quoteIdent` — the\n * ONE quoting decision point. Pinned choices:\n *\n * - String → varchar(191): utf8mb4 × 4 bytes keeps indexed String columns\n * inside the 767-byte legacy InnoDB index-key limit (`@db.Text` opts out —\n * TEXT columns are never indexed by us; indexing one would need a prefix\n * length we do not emit).\n * - autoincrement renders `AUTO_INCREMENT` (the column must be a key — the\n * PRIMARY KEY clause in the same CREATE TABLE satisfies that; ALTERing one\n * onto an existing column is refused, pg parity).\n * - Enums are inline `ENUM('A', 'B')` column types; the standalone enum steps\n * (createEnum/dropEnum/addEnumValue) render NOTHING — value changes arrive\n * as alterColumn steps (value-based type keys) and render as MODIFY COLUMN\n * with the widened list.\n * - alterColumn type/nullability → one `MODIFY COLUMN` with the full target\n * definition (mysql redefines the column wholesale); default-only changes\n * use `ALTER COLUMN … SET/DROP DEFAULT`.\n * - No partial indexes on mysql → VIBE_UNSUPPORTED_CAPABILITY naming the\n * index. Index kinds other than btree are refused the same way.\n * - `DROP INDEX … ON table` needs the table — the differ's dropIndex steps\n * carry it; a step without one is a VIBE_MIGRATION error.\n * - `DROP TABLE` has no cascade (mysql parses `CASCADE` and ignores it), and\n * dropping a parent still referenced by another to-be-dropped table fails\n * with errno 3730 `ER_FK_CANNOT_DROP_PARENT` (observed live on 8.4). FK\n * drops on SURVIVING tables come from the differ's bucket order; drops of\n * whole dependent groups are topologically reordered children-first here\n * (the shared `orderDropsChildrenFirst`, same rule as sqlite).\n */\n\nimport { VibeError, implicitJoinTableObjectNames, unsupportedCapability } from \"@vibeorm/schema\";\nimport type { EnumIR, FieldIR, SchemaIR } from \"@vibeorm/schema\";\nimport { mysqlDialect } from \"@vibeorm/sql\";\nimport { orderDropsChildrenFirst } from \"./drop-order.ts\";\nimport { normalizeSchema } from \"../normalize.ts\";\nimport { CASCADE_ACTION_SQL } from \"../postgres-types.ts\";\nimport { mysqlColumnTypeSql, mysqlDefaultSql } from \"../mysql-types.ts\";\nimport type { MigrationStep } from \"../types.ts\";\nimport { isRlsStep, renderRlsStep } from \"./rls.ts\";\nimport { assertEnumStringTransition } from \"../enum-values.ts\";\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/**\n * Render migration steps to mysql SQL. `to` (the target schema) is required\n * whenever an enum column is rendered — the inline `ENUM(…)` type needs the\n * enum's values, which live on the schema, not the step. `from` enables the\n * topological drop order (children before referenced parents); without it,\n * drops render in step order.\n */\nexport function renderMysqlSteps(params: {\n steps: readonly MigrationStep[];\n from?: SchemaIR;\n to?: SchemaIR;\n}): string[] {\n for (const step of params.steps) {\n if (step.namespace !== undefined || step.refNamespace !== undefined || step.kind === \"createNamespace\") throw unsupportedCapability({ dialect: \"mysql\", feature: \"fixedNamespaces\" });\n if (step.kind === \"createIndex\" && step.columns.some((column) => column.operatorClass !== undefined)) throw unsupportedCapability({ dialect: \"mysql\", feature: \"indexOperatorClasses\" });\n if (isRlsStep({ step })) renderRlsStep({ step, dialect: \"mysql\" });\n if (step.kind !== \"alterColumn\" || !step.changes.some((change) => change === \"type\" || change === \"nullability\" || change === \"collation\")) continue;\n const owner = [...(params.from?.migrationObjects ?? []), ...(params.to?.migrationObjects ?? [])].find((object) => {\n const identity = object.identity;\n return object.dialect === \"mysql\" && (identity.kind === \"columnDefault\" || identity.kind === \"generatedColumn\" || identity.kind === \"column\") && identity.table.name === step.table && identity.column === step.column;\n });\n if (owner !== undefined) throw unsupportedCapability({ dialect: \"mysql\", feature: \"mysqlOwnedColumnRewrite\", hint: `MODIFY COLUMN would overwrite migration-owned ${owner.id}; use a reviewed migration that preserves the complete column definition` });\n }\n const enums = new Map<string, EnumIR>();\n for (const enumDef of params.to?.enums ?? []) {\n enums.set(enumDef.dbName ?? enumDef.name, enumDef);\n }\n\n // Topological drop order — mysql refuses to drop a parent that another\n // to-be-dropped table still references (no cascade; see module doc).\n const dropNames = params.steps\n .filter((step) => step.kind === \"dropTable\" || step.kind === \"dropJoinTable\")\n .map((step) => (step as Extract<MigrationStep, { kind: \"dropTable\" }>).table);\n const fromNorm =\n params.from === undefined ? undefined : normalizeSchema({ schema: params.from, dialect: \"mysql\" });\n const orderedDrops = orderDropsChildrenFirst({ names: dropNames, fromNorm });\n for (const step of params.steps) {\n if (step.kind !== \"dropPrimaryKey\") continue;\n const table = fromNorm?.tables.get(step.table);\n if (table === undefined) continue;\n const auto = [...table.columns].find(([, column]) => column.field.default?.kind === \"autoincrement\")?.[0];\n if (auto === undefined) continue;\n const retainedIndex = [...table.indexes.values()].some((index) => index.columns[0]?.name === auto && !params.steps.some((candidate) => candidate.kind === \"dropIndex\" && candidate.table === step.table && candidate.name === index.name));\n if (!retainedIndex) throw unsupportedCapability({ dialect: \"mysql\", feature: \"mysqlAutoIncrementKeyRemoval\", hint: `Removing the last leading key of AUTO_INCREMENT column \"${step.table}.${auto}\" requires a reviewed combined ALTER` });\n }\n let dropCursor = 0;\n\n const inlineIndexes = new Map<MigrationStep, Extract<MigrationStep, { kind: \"createIndex\" }>>();\n const consumed = new Set<MigrationStep>();\n for (const step of params.steps) {\n const columns = step.kind === \"createTable\" ? step.columns : step.kind === \"addColumn\" ? [step.column] : [];\n const counters = columns.filter((field) => field.default?.kind === \"autoincrement\");\n if (counters.length > 1) throw unsupportedCapability({ dialect: \"mysql\", feature: \"multiple auto-increment columns\" });\n for (const column of counters) {\n const name = column.dbName ?? column.name;\n if (step.kind === \"createTable\" && step.primaryKey[0] === name) continue;\n if (step.kind !== \"createTable\" && step.kind !== \"addColumn\") continue;\n const key = params.steps.find((candidate): candidate is Extract<MigrationStep, { kind: \"createIndex\" }> => candidate.kind === \"createIndex\" && candidate.table === step.table && candidate.columns[0]?.name === name && !candidate.columns[0]?.desc && candidate.where === undefined && candidate.nullsNotDistinct !== true && (candidate.unique || candidate.indexKind === \"btree\"));\n if (key === undefined) throw unsupportedCapability({ dialect: \"mysql\", feature: `auto-increment column ${step.table}.${name} without an accompanying leading index` });\n inlineIndexes.set(step, key);\n consumed.add(key);\n }\n }\n return params.steps.flatMap((step) => {\n if (consumed.has(step)) return [];\n if (step.kind === \"dropTable\" || step.kind === \"dropJoinTable\") {\n const table = orderedDrops[dropCursor] as string;\n dropCursor += 1;\n return [`DROP TABLE ${q(table)};`];\n }\n return renderStep({ step, enums, inlineIndex: inlineIndexes.get(step) });\n });\n}\n\n// ─── Per-step rendering ───────────────────────────────────────────\n\nfunction renderStep(params: {\n step: MigrationStep;\n enums: ReadonlyMap<string, EnumIR>;\n inlineIndex?: Extract<MigrationStep, { kind: \"createIndex\" }>;\n}): string[] {\n const { step, enums } = params;\n switch (step.kind) {\n case \"createNamespace\": throw unsupportedCapability({ dialect: \"mysql\", feature: \"fixedNamespaces\" });\n case \"enableRls\":\n case \"forceRls\":\n case \"disableRls\":\n case \"noForceRls\":\n case \"createPolicy\":\n case \"dropPolicy\":\n return renderRlsStep({ step, dialect: \"mysql\" });\n case \"createEnum\":\n case \"dropEnum\":\n case \"addEnumValue\":\n return []; // Enums are inline column types on mysql.\n case \"createTable\": {\n const lines = step.columns.map((column) => ` ${columnDefSql({ field: column, enums })}`);\n if (step.primaryKey.length > 0) {\n lines.push(` PRIMARY KEY (${step.primaryKey.map((column) => q(column)).join(\", \")})`);\n }\n if (params.inlineIndex !== undefined) lines.push(` ${inlineIndexSql({ index: params.inlineIndex })}`);\n for (const check of step.checks ?? []) {\n lines.push(` CONSTRAINT ${q(check.name)} CHECK (${check.expression})`);\n }\n return [`CREATE TABLE ${q(step.table)} (\\n${lines.join(\",\\n\")}\\n);`];\n }\n case \"dropTable\":\n case \"dropJoinTable\":\n return [`DROP TABLE ${q(step.table)};`];\n case \"dropView\":\n return [`DROP VIEW IF EXISTS ${q(step.table)};`];\n case \"addColumn\":\n return [\n `ALTER TABLE ${q(step.table)} ADD COLUMN ${columnDefSql({ field: step.column, enums })}${params.inlineIndex === undefined ? \"\" : `, ADD ${inlineIndexSql({ index: params.inlineIndex })}`};`,\n ];\n case \"dropColumn\":\n return [`ALTER TABLE ${q(step.table)} DROP COLUMN ${q(step.column)};`];\n case \"alterColumn\":\n return renderAlterColumn({ step, enums });\n case \"createIndex\": {\n if (step.where !== undefined) {\n throw unsupportedCapability({\n dialect: \"mysql\",\n feature: `partial index \"${step.name}\"`,\n hint: \"mysql has no partial indexes — drop the WHERE predicate or gate the index per dialect\",\n });\n }\n if (step.nullsNotDistinct === true) {\n throw unsupportedCapability({\n dialect: \"mysql\",\n feature: `UNIQUE NULLS NOT DISTINCT (index \"${step.name}\")`,\n hint: \"mysql treats NULLs as distinct in unique indexes and has no switch — gate the flag per dialect\",\n });\n }\n if (!step.unique && step.indexKind !== \"btree\") {\n throw unsupportedCapability({\n dialect: \"mysql\",\n feature: `index kind \"${step.indexKind}\" (index \"${step.name}\")`,\n hint: \"mysql secondary indexes are btree only\",\n });\n }\n const cols = step.columns\n .map((column) => `${q(column.name)}${column.desc ? \" DESC\" : \"\"}`)\n .join(\", \");\n return [\n `CREATE ${step.unique ? \"UNIQUE \" : \"\"}INDEX ${q(step.name)} ON ${q(step.table)} (${cols});`,\n ];\n }\n case \"addCheck\":\n // MySQL 8.0.16+ parses AND enforces CHECK constraints.\n return [\n `ALTER TABLE ${q(step.table)} ADD CONSTRAINT ${q(step.name)} CHECK (${step.expression});`,\n ];\n case \"addExclusion\": case \"dropExclusion\": throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Exclusion constraints require PostgreSQL\", meta: { dialect: \"mysql\", feature: \"exclusionConstraints\" } });\n case \"dropCheck\":\n return [`ALTER TABLE ${q(step.table)} DROP CHECK ${q(step.name)};`];\n case \"dropIndex\": {\n if (step.table === undefined) {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `dropIndex \"${step.name}\" carries no table — mysql's DROP INDEX requires one`,\n meta: { index: step.name },\n });\n }\n return [`DROP INDEX ${q(step.name)} ON ${q(step.table)};`];\n }\n case \"addForeignKey\": {\n const cols = step.columns.map((column) => q(column)).join(\", \");\n const refCols = step.refColumns.map((column) => q(column)).join(\", \");\n return [\n `ALTER TABLE ${q(step.table)} ADD CONSTRAINT ${q(step.constraintName)} FOREIGN KEY (${cols}) REFERENCES ${q(step.refTable)} (${refCols}) ON DELETE ${CASCADE_ACTION_SQL[step.onDelete]} ON UPDATE ${CASCADE_ACTION_SQL[step.onUpdate]};`,\n ];\n }\n case \"renameTable\":\n return [`ALTER TABLE ${q(step.from)} RENAME TO ${q(step.to)};`];\n case \"renameColumn\":\n // MySQL 8.0.0+. The column keeps its type, default, indexes and inbound\n // foreign keys; only the name moves.\n return [`ALTER TABLE ${q(step.table)} RENAME COLUMN ${q(step.from)} TO ${q(step.to)};`];\n case \"addForeignKeyNotValid\":\n case \"addCheckNotValid\":\n case \"validateConstraint\":\n // MySQL has no NOT VALID / VALIDATE split: a constraint is checked when\n // it is added, full stop. Refusing is the honest answer — silently\n // emitting the ordinary ADD would promise a staged rollout that is not\n // happening. (`ALTER TABLE ... WITHOUT VALIDATION` exists only for\n // partition exchange, not for constraints.)\n throw unsupportedCapability({\n dialect: \"mysql\",\n feature: \"stagedConstraints\",\n hint: \"MySQL validates a constraint when it is added; add it in one step, or take the outage window that scan needs\",\n });\n case \"dropForeignKey\":\n return [`ALTER TABLE ${q(step.table)} DROP FOREIGN KEY ${q(step.constraintName)};`];\n case \"createJoinTable\": {\n const aType = mysqlColumnTypeSql({ field: { ...step.a.field, isList: false }, enums });\n const bType = mysqlColumnTypeSql({ field: { ...step.b.field, isList: false }, enums });\n const names = implicitJoinTableObjectNames({ table: step.table });\n return [\n `CREATE TABLE ${q(step.table)} (\\n \\`A\\` ${aType} NOT NULL,\\n \\`B\\` ${bType} NOT NULL\\n);`,\n `CREATE UNIQUE INDEX ${q(names.uniqueIndex)} ON ${q(step.table)} (\\`A\\`, \\`B\\`);`,\n `CREATE INDEX ${q(names.indexB)} ON ${q(step.table)} (\\`B\\`);`,\n `ALTER TABLE ${q(step.table)} ADD CONSTRAINT ${q(names.foreignKeyA)} FOREIGN KEY (\\`A\\`) REFERENCES ${q(step.a.table)} (${q(step.a.column)}) ON DELETE CASCADE ON UPDATE CASCADE;`,\n `ALTER TABLE ${q(step.table)} ADD CONSTRAINT ${q(names.foreignKeyB)} FOREIGN KEY (\\`B\\`) REFERENCES ${q(step.b.table)} (${q(step.b.column)}) ON DELETE CASCADE ON UPDATE CASCADE;`,\n ];\n }\n case \"addPrimaryKey\":\n return [\n `ALTER TABLE ${q(step.table)} ADD PRIMARY KEY (${step.columns.map((column) => q(column)).join(\", \")});`,\n ];\n case \"dropPrimaryKey\":\n return [`ALTER TABLE ${q(step.table)} DROP PRIMARY KEY;`];\n }\n}\n\n// ─── Column pieces ────────────────────────────────────────────────\n\nfunction columnDefSql(params: { field: FieldIR; enums: ReadonlyMap<string, EnumIR> }): string {\n const { field, enums } = params;\n const name = q(field.dbName ?? field.name);\n\n const autoincrement = field.default?.kind === \"autoincrement\";\n if (autoincrement && field.type !== \"Int\" && field.type !== \"BigInt\") {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `autoincrement default on \"${field.name}\" requires a non-list Int or BigInt column`,\n meta: { field: field.name },\n });\n }\n\n let def = `${name} ${mysqlColumnTypeSql({ field, enums })}`;\n if (field.collation !== undefined) def += ` COLLATE ${q(field.collation)}`;\n if (!field.isOptional) def += \" NOT NULL\";\n if (autoincrement) def += \" AUTO_INCREMENT\";\n const defaultExpr = mysqlDefaultSql({ field });\n if (defaultExpr !== undefined) def += ` DEFAULT ${defaultExpr}`;\n return def;\n}\n\nfunction renderAlterColumn(params: {\n step: Extract<MigrationStep, { kind: \"alterColumn\" }>;\n enums: ReadonlyMap<string, EnumIR>;\n}): string[] {\n const { step, enums } = params;\n assertEnumStringTransition({ from: step.from, to: step.to, dialect: \"mysql\", table: step.table, column: step.column });\n\n if (step.to.default?.kind === \"autoincrement\" && step.from.default?.kind !== \"autoincrement\") {\n throw new VibeError({\n code: \"VIBE_MIGRATION\",\n message: `cannot add autoincrement to existing column \"${step.table}\".\"${step.column}\" — drop and recreate the column instead`,\n meta: { table: step.table, column: step.column },\n });\n }\n\n // Type or nullability changes redefine the whole column (MODIFY COLUMN\n // carries type + nullability + default in one definition).\n if (step.changes.includes(\"type\") || step.changes.includes(\"nullability\") || step.changes.includes(\"collation\")) {\n const field = step.to.type === \"String\" && step.to.collation === undefined && step.from.collation !== undefined\n ? { ...step.to, collation: step.from.collation }\n : step.to;\n return [\n `ALTER TABLE ${q(step.table)} MODIFY COLUMN ${columnDefSql({ field, enums })};`,\n ];\n }\n\n // Default-only change.\n const defaultExpr = mysqlDefaultSql({ field: step.to });\n return [\n defaultExpr === undefined\n ? `ALTER TABLE ${q(step.table)} ALTER COLUMN ${q(step.column)} DROP DEFAULT;`\n : `ALTER TABLE ${q(step.table)} ALTER COLUMN ${q(step.column)} SET DEFAULT ${defaultExpr};`,\n ];\n}\n\n// ─── Quoting ──────────────────────────────────────────────────────\n\nfunction q(name: string): string {\n return mysqlDialect.quoteIdent({ name });\n}\n\nfunction inlineIndexSql(params: { index: Extract<MigrationStep, { kind: \"createIndex\" }> }): string {\n const { index } = params;\n return `${index.unique ? \"UNIQUE \" : \"\"}INDEX ${q(index.name)} (${index.columns.map((column) => `${q(column.name)}${column.desc ? \" DESC\" : \"\"}`).join(\", \")})`;\n}\n",
|
|
51
51
|
"/**\n * Extension artifacts in the migrate pipeline (extensions.md §3 migrate plane).\n *\n * Extensions own database objects the core differ does not model: CREATE\n * EXTENSION, generated tsvector columns, FTS5 shadow tables + triggers,\n * specialty indexes (gin_trgm_ops, hnsw, bm25, FULLTEXT). The contract:\n *\n * 1. `collectExtensionArtifacts` asks each configured extension for its\n * artifacts (dialect-correct, idempotent SQL + a structured owner).\n * 2. `stripExtensionArtifacts` removes owned objects from the INTROSPECTED\n * IR before diffing, so the core differ never schedules their drop —\n * the introspector-representation-is-the-contract rule (LEARNINGS).\n * 3. `planMissingArtifacts` decides which artifacts must be created, by\n * checking the introspected IR for their owners (columns, indexes,\n * tables by name); non-introspectable owners (postgres extensions,\n * triggers) rely on their idempotent IF NOT EXISTS forms and always run.\n * 4. `planChangedArtifacts` decides which PRESENT artifacts must be dropped\n * and created again because their definition changed since the last\n * authored schema — `IF NOT EXISTS` would keep the old object silently.\n *\n * Removing a declaration does NOT auto-drop its artifacts (mirrors the v1\n * phantom-join-table precedent) — `drop` SQL is carried for tooling, not\n * scheduled by push.\n */\n\nimport { extensionDeclarations } from \"@vibeorm/schema\";\nimport type {\n Dialect,\n ExtensionArtifact,\n ModelIR,\n SchemaIR,\n VibeExtension,\n} from \"@vibeorm/schema\";\nimport type { MigrationFile } from \"./types.ts\";\n\n// ─── Collection ───────────────────────────────────────────────────\n\n/** The object artifacts one extension contributed, in its own order. */\nexport type ArtifactGroup = {\n readonly extension: string;\n readonly objects: readonly ExtensionArtifact[];\n};\n\n/** Artifacts of every configured extension for this schema, in order. */\nexport type CollectedArtifacts = {\n /** CREATE EXTENSION-class artifacts — run BEFORE the core diff SQL. */\n readonly setup: readonly ExtensionArtifact[];\n /** Object artifacts (columns, indexes, shadow tables, triggers) — run AFTER. */\n readonly objects: readonly ExtensionArtifact[];\n /** `objects`, grouped by the extension that contributed them (rebuild scope). */\n readonly groups: readonly ArtifactGroup[];\n};\n\nexport function collectExtensionArtifacts(params: {\n schema: SchemaIR;\n dialect: Dialect;\n extensions: readonly VibeExtension[];\n}): CollectedArtifacts {\n const { schema, dialect, extensions } = params;\n const setup: ExtensionArtifact[] = [];\n const objects: ExtensionArtifact[] = [];\n const groups: ArtifactGroup[] = [];\n\n for (const extension of extensions) {\n const artifactsHook = extension.migrate?.artifacts;\n if (artifactsHook === undefined) continue;\n const declarations = extensionDeclarations({ schema, name: extension.name });\n // A configured extension with no schema presence contributes nothing —\n // unless it is a config-only (replication-class) extension.\n if (Object.keys(declarations).length === 0 && extension.schema?.configOnly !== true) continue;\n\n const contributed: ExtensionArtifact[] = [];\n for (const artifact of artifactsHook({\n schema,\n dialect,\n provider: schema.datasource.provider,\n options: extension.options,\n declarations,\n })) {\n if (artifact.owns.kind === \"postgresExtension\") setup.push(artifact);\n else {\n objects.push(artifact);\n contributed.push(artifact);\n }\n }\n groups.push({ extension: extension.name, objects: contributed });\n }\n return { setup, objects, groups };\n}\n\n/**\n * The last authored schema in a migration chain — the declarations its newest\n * snapshot-bearing migration was generated from. Only extension declarations\n * are read from it (`planChangedArtifacts`), never physical expectations, so\n * an ordinary SQL successor does not disqualify it the way it disqualifies a\n * deployed desired state: a hand-written index change after the snapshot is\n * at worst rebuilt once more, visibly, in reviewed SQL.\n */\nexport function lastDeclaredSchema(params: { migrations: readonly MigrationFile[] }): SchemaIR | undefined {\n return [...params.migrations].reverse().find((migration) => migration.desiredState !== undefined)?.desiredState?.to.schema;\n}\n\n// ─── Introspection filtering ──────────────────────────────────────\n\nfunction ownedTableNames(params: { artifacts: readonly ExtensionArtifact[] }): {\n exact: Set<string>;\n prefixes: string[];\n} {\n const exact = new Set<string>();\n const prefixes: string[] = [];\n for (const artifact of params.artifacts) {\n if (artifact.owns.kind !== \"table\") continue;\n exact.add(artifact.owns.name);\n prefixes.push(...(artifact.owns.auxiliaryPrefixes ?? []));\n }\n return { exact, prefixes };\n}\n\n/**\n * Remove extension-owned objects from an INTROSPECTED SchemaIR so the core\n * differ never sees them (they are neither dropped nor re-created by it).\n */\nexport function stripExtensionArtifacts(params: {\n schema: SchemaIR;\n artifacts: readonly ExtensionArtifact[];\n}): SchemaIR {\n const { schema, artifacts } = params;\n if (artifacts.length === 0) return schema;\n\n const tables = ownedTableNames({ artifacts });\n const ownedColumns = new Map<string, Set<string>>();\n const ownedIndexes = new Map<string, Set<string>>();\n for (const artifact of artifacts) {\n if (artifact.owns.kind === \"column\") {\n const set = ownedColumns.get(artifact.owns.table) ?? new Set<string>();\n set.add(artifact.owns.column);\n ownedColumns.set(artifact.owns.table, set);\n } else if (artifact.owns.kind === \"index\") {\n const set = ownedIndexes.get(artifact.owns.table) ?? new Set<string>();\n set.add(artifact.owns.name);\n ownedIndexes.set(artifact.owns.table, set);\n }\n }\n\n const models: ModelIR[] = [];\n for (const model of schema.models) {\n const tableName = model.dbName ?? model.name;\n if (tables.exact.has(tableName) || tables.prefixes.some((prefix) => tableName.startsWith(prefix))) {\n continue;\n }\n const columns = ownedColumns.get(tableName);\n const indexes = ownedIndexes.get(tableName);\n if (columns === undefined && indexes === undefined) {\n models.push(model);\n continue;\n }\n models.push({\n ...model,\n fields: model.fields.filter((field) => !(columns?.has(field.dbName ?? field.name) ?? false)),\n indexes: model.indexes.filter(\n (index) => !(index.name !== undefined && (indexes?.has(index.name) ?? false)),\n ),\n });\n }\n\n return { ...schema, models };\n}\n\n// ─── Presence planning ────────────────────────────────────────────\n\n/** Owner presence the IR cannot answer, probed live by push (both optional). */\nexport type InstalledExtensionState = {\n /** `SELECT extname FROM pg_extension` — postgres only. */\n readonly pgExtensions?: ReadonlySet<string>;\n /** `sqlite_master WHERE type='trigger'` names — sqlite only. */\n readonly triggers?: ReadonlySet<string>;\n};\n\n/**\n * The artifacts whose owner is missing from the introspected IR (must be\n * created). Owners the IR cannot see — postgres extensions and triggers —\n * consult the live-probed `installed` state when given, else always plan;\n * their `create` SQL is idempotent (IF NOT EXISTS) so replays converge.\n */\nexport function planMissingArtifacts(params: {\n introspected: SchemaIR;\n artifacts: readonly ExtensionArtifact[];\n installed?: InstalledExtensionState;\n}): ExtensionArtifact[] {\n const { introspected, artifacts, installed } = params;\n if (artifacts.length === 0) return [];\n\n const modelByTable = new Map<string, ModelIR>();\n for (const model of introspected.models) {\n modelByTable.set(model.dbName ?? model.name, model);\n }\n\n return artifacts.filter((artifact) => {\n const owner = artifact.owns;\n switch (owner.kind) {\n case \"postgresExtension\":\n return installed?.pgExtensions === undefined ? true : !installed.pgExtensions.has(owner.name);\n case \"trigger\":\n return installed?.triggers === undefined ? true : !installed.triggers.has(owner.name);\n case \"table\":\n return !modelByTable.has(owner.name);\n case \"column\": {\n const model = modelByTable.get(owner.table);\n if (model === undefined) return true;\n return !model.fields.some((field) => (field.dbName ?? field.name) === owner.column);\n }\n case \"index\": {\n const model = modelByTable.get(owner.table);\n if (model === undefined) return true;\n return !model.indexes.some((index) => index.name === owner.name);\n }\n }\n });\n}\n\n/** Probe live owner state the IR cannot carry (used by push before planning). */\nexport async function probeInstalledExtensionState(params: {\n executor: (execParams: { text: string; values?: unknown[] }) => Promise<Record<string, unknown>[]>;\n dialect: Dialect;\n artifacts: readonly ExtensionArtifact[];\n}): Promise<InstalledExtensionState> {\n const { executor, dialect, artifacts } = params;\n const state: { pgExtensions?: ReadonlySet<string>; triggers?: ReadonlySet<string> } = {};\n\n if (dialect === \"postgres\" && artifacts.some((artifact) => artifact.owns.kind === \"postgresExtension\")) {\n const rows = await executor({ text: \"SELECT extname FROM pg_extension\" });\n state.pgExtensions = new Set(rows.map((row) => String(row[\"extname\"])));\n }\n if (dialect === \"sqlite\" && artifacts.some((artifact) => artifact.owns.kind === \"trigger\")) {\n // `values: []` is the adapter-sqlite READ contract on the raw path.\n const rows = await executor({\n text: \"SELECT name FROM sqlite_master WHERE type = 'trigger'\",\n values: [],\n });\n state.triggers = new Set(rows.map((row) => String(row[\"name\"])));\n }\n return state;\n}\n\n/** Flatten artifacts to their create statements, in order. */\nexport function artifactCreateSql(params: {\n artifacts: readonly ExtensionArtifact[];\n}): string[] {\n return params.artifacts.flatMap((artifact) => [...artifact.create]);\n}\n\n// ─── Definition changes ───────────────────────────────────────────\n\n/**\n * Present object artifacts whose definition changed since the previously\n * authored schema. The same extension code renders both sides, so only a real\n * declaration, column or option change differs — and for such a change an\n * idempotent `CREATE … IF NOT EXISTS` keeps the OLD object silently (a bm25\n * index its old tokenizer, a tsvector column its old weights, an hnsw index\n * its old `m`). Those artifacts are dropped and created again.\n *\n * Two sources say \"changed\": the previous authored declarations, when the\n * caller has them, and `probed` — artifacts a server-side probe found to\n * differ from their own create statements (`probeChangedArtifacts`).\n *\n * A rebuilt COLUMN takes the same extension's indexes and triggers on that\n * table with it: dropping a generated column drops the index on it, whose own\n * text is unchanged. The rebuild never touches CREATE EXTENSION-class\n * artifacts (dropping an extension drops everything depending on it),\n * artifacts in `missing` (their create runs anyway and their drop may not be\n * idempotent) or artifacts whose owner moved (a renamed index is left to\n * presence planning and the core differ's unmanaged-removal review).\n */\nexport function planChangedArtifacts(params: {\n previous?: CollectedArtifacts;\n current: CollectedArtifacts;\n missing: readonly ExtensionArtifact[];\n probed?: readonly ExtensionArtifact[];\n}): ExtensionArtifact[] {\n const previousById = new Map((params.previous?.objects ?? []).map((artifact) => [artifact.id, artifact]));\n const probedIds = new Set((params.probed ?? []).map((artifact) => artifact.id));\n const missingIds = new Set(params.missing.map((artifact) => artifact.id));\n const rebuilt = new Set<string>();\n for (const group of params.current.groups) {\n const changed = group.objects.filter((artifact) => {\n if (missingIds.has(artifact.id)) return false;\n if (probedIds.has(artifact.id)) return true;\n const before = previousById.get(artifact.id);\n return before !== undefined\n && JSON.stringify(before.owns) === JSON.stringify(artifact.owns)\n && JSON.stringify(before.create) !== JSON.stringify(artifact.create);\n });\n if (changed.length === 0) continue;\n const rebuiltColumnTables = new Set(changed.flatMap((artifact) => artifact.owns.kind === \"column\" ? [artifact.owns.table] : []));\n for (const artifact of group.objects) {\n if (missingIds.has(artifact.id)) continue;\n const dependent = (artifact.owns.kind === \"index\" || artifact.owns.kind === \"trigger\") && rebuiltColumnTables.has(artifact.owns.table);\n if (changed.includes(artifact) || dependent) rebuilt.add(artifact.id);\n }\n }\n return params.current.objects.filter((artifact) => rebuilt.has(artifact.id));\n}\n\n/** Drops of a rebuild, newest artifact first, so a dependent index goes before its column. */\nexport function artifactDropSql(params: { artifacts: readonly ExtensionArtifact[] }): string[] {\n return [...params.artifacts].reverse().flatMap((artifact) => [...artifact.drop]);\n}\n"
|
|
52
52
|
],
|
|
53
|
-
"mappings": "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",
|
|
54
|
-
"debugId": "
|
|
53
|
+
"mappings": "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",
|
|
54
|
+
"debugId": "000F8CFDEDF957F264756E2164756E21",
|
|
55
55
|
"names": []
|
|
56
56
|
}
|