@prisma/orm-target-sqlite 8.0.0-rc.17-dev.28 → 8.0.0-rc.17-dev.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { n as createSqliteBuiltinCodecLookup, r as createSqliteCodecRegistryWithBuiltins, t as assembleSqliteCodecRegistry } from "./codecs-ZVRcQFS8.mjs";
2
2
  import { n as quoteIdentifier, t as escapeLiteral } from "./sql-utils-C2O4zVkP-Dz3Hb85I.mjs";
3
3
  import { t as parseSqliteDefault } from "./default-normalizer-Ch3VFnEH-C-h1XtlJ.mjs";
4
- import { n as sqlitePslTypeConstructors } from "./control-DFTHNTG7.mjs";
4
+ import { n as sqlitePslTypeConstructors } from "./control-DJq7MF_s.mjs";
5
5
  import { t as normalizeSqliteNativeType } from "./native-type-normalizer-GpQMEyN5.mjs";
6
6
  import { t as SqliteControlAdapter } from "./adapter-Cfp6xn4m-BtODbERC.mjs";
7
7
  import { t as sqliteAdapterDescriptorMeta } from "./descriptor-meta-CFPBLIHW-CUgnXvu7.mjs";
@@ -4,8 +4,8 @@ import { t as sqliteTargetDescriptorMeta } from "./descriptor-meta-CthMyZ9m-BJfU
4
4
  import { n as quoteIdentifier } from "./sql-utils-C2O4zVkP-Dz3Hb85I.mjs";
5
5
  import { r as MARKER_TABLE_NAME } from "./control-tables-D_o8dKRB-BXi43noL.mjs";
6
6
  import { t as SqliteContractSerializer } from "./sqlite-contract-view-BrXalcTm-DYDH4LQC.mjs";
7
- import { h as sqliteContractToSchema, o as diffSqliteSchema, y as verifySqliteDatabaseSchema } from "./sqlite-migration-DocfLYRw-Bry1VeFm.mjs";
8
- import { n as createSqliteMigrationPlanner } from "./planner-BMV6uAgt-5I9GVELd.mjs";
7
+ import { b as verifySqliteDatabaseSchema, h as sqliteContractToSchema, o as diffSqliteSchema } from "./sqlite-migration-D7DWt0JL-D_5jFkOx.mjs";
8
+ import { n as createSqliteMigrationPlanner } from "./planner-Ddpm7j-w-BzyQ-raY.mjs";
9
9
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
10
10
  import { blindCast } from "@prisma/orm-framework/utils/casts";
11
11
  import { APP_SPACE_ID } from "@prisma/orm-framework/components/control";
@@ -489,4 +489,4 @@ const sqlitePslTypeConstructors = {
489
489
  //#endregion
490
490
  export { sqlitePslTypeConstructors as n, sqliteControlTargetDescriptor as t };
491
491
 
492
- //# sourceMappingURL=control-DFTHNTG7.mjs.map
492
+ //# sourceMappingURL=control-DJq7MF_s.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-DFTHNTG7.mjs","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/control.mjs"],"sourcesContent":["import { a as SQLITE_INTEGER_CODEC_ID, c as SQLITE_TEXT_CODEC_ID, i as SQLITE_DATETIME_CODEC_ID, o as SQLITE_JSON_CODEC_ID, r as SQLITE_BLOB_CODEC_ID, s as SQLITE_REAL_CODEC_ID, t as SQLITE_BIGINT_CODEC_ID } from \"./codec-ids-KMliSCRp.mjs\";\nimport { n as sqliteError } from \"./errors-DnR-sMHS.mjs\";\nimport { t as sqliteTargetDescriptorMeta } from \"./descriptor-meta-CthMyZ9m.mjs\";\nimport { n as quoteIdentifier } from \"./sql-utils-C2O4zVkP.mjs\";\nimport { g as diffSqliteSchema, v as sqliteContractToSchema, y as verifySqliteDatabaseSchema } from \"./sqlite-migration-DocfLYRw.mjs\";\nimport { r as MARKER_TABLE_NAME } from \"./control-tables-D_o8dKRB.mjs\";\nimport { n as createSqliteMigrationPlanner } from \"./planner-BMV6uAgt.mjs\";\nimport { i as sqliteCreateNamespace, n as SqliteContractSerializer, r as SqliteUnboundDatabase } from \"./sqlite-contract-view-BrXalcTm.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { APP_SPACE_ID } from \"@internal/framework-components/control\";\nimport { runnerFailure, runnerSuccess, sqlTypeLookupsOf } from \"@internal/family-sql/control\";\nimport { SqlStorage } from \"@internal/sql-contract/types\";\nimport { relationalNodeEntityKind, relationalNodeGranularity } from \"@internal/sql-schema-ir/types\";\nimport { notOk, ok, okVoid } from \"@internal/utils/result\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { SqlSchemaVerifierBase } from \"@internal/family-sql/ir\";\n//#region src/core/migrations/runner.ts\nfunction createSqliteMigrationRunner(family) {\n\treturn new SqliteMigrationRunner(family);\n}\nvar SqliteMigrationRunner = class {\n\tfamily;\n\tconstructor(family) {\n\t\tthis.family = family;\n\t}\n\t/**\n\t* Apply the plan against an already-open connection without managing\n\t* the transaction lifecycle. The caller ({@link SqliteMigrationRunner.execute})\n\t* owns BEGIN/COMMIT/ROLLBACK and any connection-level setup (FK pragma\n\t* toggle, FK integrity check).\n\t*/\n\tasync executeOnConnection(options) {\n\t\tconst driver = options.driver;\n\t\tif (options.space !== void 0 && options.space !== options.plan.spaceId) throw sqliteError(\"MIGRATION.CONTRACT_SPACE_VIOLATION\", `SqlMigrationRunner: options.space (${options.space}) does not match plan.spaceId (${options.plan.spaceId})`, { meta: {\n\t\t\tspace: options.space,\n\t\t\tplanSpaceId: options.plan.spaceId\n\t\t} });\n\t\tconst space = options.plan.spaceId;\n\t\tconst planOps = blindCast(await Promise.all(options.plan.operations));\n\t\tconst destinationCheck = this.ensurePlanMatchesDestinationContract(options.plan.destination, options.destinationContract);\n\t\tif (!destinationCheck.ok) return destinationCheck;\n\t\tconst policyCheck = this.enforcePolicyCompatibility(options.policy, planOps);\n\t\tif (!policyCheck.ok) return policyCheck;\n\t\tconst ensureResult = await this.ensureControlTables(driver, options.destinationContract);\n\t\tif (!ensureResult.ok) return ensureResult;\n\t\tconst existingMarker = await this.family.readMarker({\n\t\t\tdriver,\n\t\t\tspace\n\t\t});\n\t\tconst markerCheck = this.ensureMarkerCompatibility(existingMarker, options.plan);\n\t\tif (!markerCheck.ok) return markerCheck;\n\t\tconst markerAtDestination = this.markerMatchesDestination(existingMarker, options.plan);\n\t\tconst isSelfEdge = options.plan.origin?.storageHash === options.plan.destination.storageHash;\n\t\tconst skipOperations = markerAtDestination && options.plan.origin != null && !isSelfEdge;\n\t\tlet operationsExecuted;\n\t\tlet executedOperations;\n\t\tif (skipOperations) {\n\t\t\toperationsExecuted = 0;\n\t\t\texecutedOperations = [];\n\t\t} else {\n\t\t\tconst applyResult = await this.applyPlan(driver, options, planOps);\n\t\t\tif (!applyResult.ok) return applyResult;\n\t\t\toperationsExecuted = applyResult.value.operationsExecuted;\n\t\t\texecutedOperations = applyResult.value.executedOperations;\n\t\t}\n\t\tif (space === APP_SPACE_ID) {\n\t\t\tconst schemaNode = await this.family.introspect({\n\t\t\t\tdriver,\n\t\t\t\tcontract: options.destinationContract\n\t\t\t});\n\t\t\tconst schemaVerifyResult = verifySqliteDatabaseSchema({\n\t\t\t\tcontract: options.destinationContract,\n\t\t\t\tactualSchema: schemaNode,\n\t\t\t\tstrict: options.strictVerification ?? true,\n\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t});\n\t\t\tif (!schemaVerifyResult.ok) return runnerFailure(\"MIGRATION.SCHEMA_VERIFY_FAILED\", schemaVerifyResult.summary, {\n\t\t\t\twhy: \"The resulting database schema does not satisfy the destination contract.\",\n\t\t\t\tmeta: { issues: schemaVerifyResult.schema.issues }\n\t\t\t});\n\t\t}\n\t\tconst incomingInvariants = options.plan.providedInvariants;\n\t\tconst existingInvariants = new Set(existingMarker?.invariants ?? []);\n\t\tconst incomingIsSubsetOfExisting = incomingInvariants.every((id) => existingInvariants.has(id));\n\t\tif (!(isSelfEdge && operationsExecuted === 0 && incomingIsSubsetOfExisting)) {\n\t\t\tconst markerResult = await this.upsertMarker(driver, options, existingMarker, space);\n\t\t\tif (!markerResult.ok) return markerResult;\n\t\t\tawait this.recordLedgerEntries(driver, options, executedOperations);\n\t\t}\n\t\treturn runnerSuccess({\n\t\t\toperationsPlanned: planOps.length,\n\t\t\toperationsExecuted\n\t\t});\n\t}\n\tasync execute(options) {\n\t\tconst driver = options.driver;\n\t\tconst perSpaceOptions = options.perSpaceOptions;\n\t\tif (perSpaceOptions.length === 0) return ok({ perSpaceResults: [] });\n\t\tconst fkWasEnabled = await this.readForeignKeysEnabled(driver);\n\t\tif (fkWasEnabled) await driver.query(\"PRAGMA foreign_keys = OFF\");\n\t\ttry {\n\t\t\tawait this.beginExclusiveTransaction(driver);\n\t\t\tlet committed = false;\n\t\t\ttry {\n\t\t\t\tconst perSpaceResults = [];\n\t\t\t\tlet lastProcessedSpace;\n\t\t\t\tfor (const spaceOptions of perSpaceOptions) {\n\t\t\t\t\tconst space = spaceOptions.space ?? spaceOptions.plan.spaceId;\n\t\t\t\t\tconst result = await this.executeOnConnection({\n\t\t\t\t\t\t...spaceOptions,\n\t\t\t\t\t\tdriver,\n\t\t\t\t\t\tspace\n\t\t\t\t\t});\n\t\t\t\t\tif (!result.ok) return notOk({\n\t\t\t\t\t\t...result.failure,\n\t\t\t\t\t\tfailingSpace: space\n\t\t\t\t\t});\n\t\t\t\t\tperSpaceResults.push({\n\t\t\t\t\t\tspace,\n\t\t\t\t\t\tvalue: result.value\n\t\t\t\t\t});\n\t\t\t\t\tlastProcessedSpace = space;\n\t\t\t\t}\n\t\t\t\tif (fkWasEnabled) {\n\t\t\t\t\tconst fkIntegrityCheck = await this.verifyForeignKeyIntegrity(driver);\n\t\t\t\t\tif (!fkIntegrityCheck.ok) return notOk({\n\t\t\t\t\t\t...fkIntegrityCheck.failure,\n\t\t\t\t\t\tfailingSpace: lastProcessedSpace ?? APP_SPACE_ID\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait this.commitTransaction(driver);\n\t\t\t\tcommitted = true;\n\t\t\t\treturn ok({ perSpaceResults });\n\t\t\t} finally {\n\t\t\t\tif (!committed) await this.rollbackTransaction(driver);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (fkWasEnabled) await driver.query(\"PRAGMA foreign_keys = ON\");\n\t\t}\n\t}\n\tasync readForeignKeysEnabled(driver) {\n\t\treturn (await driver.query(\"PRAGMA foreign_keys\")).rows[0]?.foreign_keys === 1;\n\t}\n\tasync verifyForeignKeyIntegrity(driver) {\n\t\tconst result = await driver.query(\"PRAGMA foreign_key_check\");\n\t\tif (result.rows.length === 0) return okVoid();\n\t\treturn runnerFailure(\"MIGRATION.FOREIGN_KEY_VIOLATION\", `Foreign key integrity check failed after migration: ${result.rows.length} violation(s).`, {\n\t\t\twhy: \"PRAGMA foreign_key_check reported violations after applying recreate-table operations.\",\n\t\t\tmeta: { violations: result.rows }\n\t\t});\n\t}\n\tasync applyPlan(driver, options, ops) {\n\t\tconst checks = options.executionChecks;\n\t\tconst runPrechecks = checks?.prechecks !== false;\n\t\tconst runPostchecks = checks?.postchecks !== false;\n\t\tconst runIdempotency = checks?.idempotencyChecks !== false;\n\t\tlet operationsExecuted = 0;\n\t\tconst executedOperations = [];\n\t\tfor (const operation of ops) {\n\t\t\toptions.callbacks?.onOperationStart?.(operation);\n\t\t\ttry {\n\t\t\t\tif (runPostchecks && runIdempotency) {\n\t\t\t\t\tif (await this.expectationsAreSatisfied(driver, operation.postcheck)) {\n\t\t\t\t\t\texecutedOperations.push(this.createSkipRecord(operation));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (runPrechecks) {\n\t\t\t\t\tconst precheckResult = await this.runExpectationSteps(driver, operation.precheck, operation, \"precheck\");\n\t\t\t\t\tif (!precheckResult.ok) return precheckResult;\n\t\t\t\t}\n\t\t\t\tconst executeResult = await this.runExecuteSteps(driver, operation.execute, operation);\n\t\t\t\tif (!executeResult.ok) return executeResult;\n\t\t\t\tif (runPostchecks) {\n\t\t\t\t\tconst postcheckResult = await this.runExpectationSteps(driver, operation.postcheck, operation, \"postcheck\");\n\t\t\t\t\tif (!postcheckResult.ok) return postcheckResult;\n\t\t\t\t}\n\t\t\t\texecutedOperations.push(operation);\n\t\t\t\toperationsExecuted += 1;\n\t\t\t} finally {\n\t\t\t\toptions.callbacks?.onOperationComplete?.(operation);\n\t\t\t}\n\t\t}\n\t\treturn ok({\n\t\t\toperationsExecuted,\n\t\t\texecutedOperations\n\t\t});\n\t}\n\tasync ensureControlTables(driver, contract) {\n\t\tconst legacyDetection = await this.detectLegacyMarkerShape(driver);\n\t\tif (!legacyDetection.ok) return legacyDetection;\n\t\tconst lowererContext = { contract };\n\t\tfor (const query of this.family.bootstrapControlTableQueries()) await this.executeStatement(driver, await this.family.lowerAst(query, lowererContext));\n\t\treturn okVoid();\n\t}\n\tasync detectLegacyMarkerShape(driver) {\n\t\tconst tableInfo = await driver.query(`PRAGMA table_info(${quoteIdentifier(MARKER_TABLE_NAME)})`);\n\t\tif (tableInfo.rows.length === 0) return okVoid();\n\t\tconst columns = new Set(tableInfo.rows.map((row) => row.name));\n\t\tif (columns.has(\"space\")) return okVoid();\n\t\treturn runnerFailure(\"MIGRATION.LEGACY_MARKER_SHAPE\", `Legacy marker-table shape detected on ${MARKER_TABLE_NAME} (no \\`space\\` column). Prisma 8 is in pre-1.0; the previous transitional auto-migration to the per-space-row schema has been removed. Drop \\`${MARKER_TABLE_NAME}\\` and re-run \\`dbInit\\` to reinitialise from a clean baseline.`, { meta: {\n\t\t\ttable: MARKER_TABLE_NAME,\n\t\t\tcolumns: [...columns].sort()\n\t\t} });\n\t}\n\tasync runExpectationSteps(driver, steps, operation, phase) {\n\t\tfor (const step of steps) {\n\t\t\tconst result = await driver.query(step.sql, step.params ?? []);\n\t\t\tif (!this.stepResultIsTrue(result.rows)) return runnerFailure(phase === \"precheck\" ? \"MIGRATION.PRECHECK_FAILED\" : \"MIGRATION.POSTCHECK_FAILED\", `Operation ${operation.id} failed during ${phase}: ${step.description}`, { meta: {\n\t\t\t\toperationId: operation.id,\n\t\t\t\tphase,\n\t\t\t\tstepDescription: step.description\n\t\t\t} });\n\t\t}\n\t\treturn okVoid();\n\t}\n\tasync runExecuteSteps(driver, steps, operation) {\n\t\tfor (const step of steps) try {\n\t\t\tawait driver.query(step.sql, step.params ?? []);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn runnerFailure(\"MIGRATION.EXECUTION_FAILED\", `Operation ${operation.id} failed during execution: ${step.description}`, {\n\t\t\t\twhy: message,\n\t\t\t\tmeta: {\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tstepDescription: step.description,\n\t\t\t\t\tsql: step.sql\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn okVoid();\n\t}\n\tstepResultIsTrue(rows) {\n\t\tif (!rows || rows.length === 0) return false;\n\t\tconst firstRow = rows[0];\n\t\tconst firstValue = firstRow ? Object.values(firstRow)[0] : void 0;\n\t\tif (typeof firstValue === \"number\") return firstValue !== 0;\n\t\tif (typeof firstValue === \"boolean\") return firstValue;\n\t\tif (typeof firstValue === \"string\") {\n\t\t\tconst lower = firstValue.toLowerCase();\n\t\t\tif (lower === \"true\" || lower === \"1\") return true;\n\t\t\tif (lower === \"false\" || lower === \"0\") return false;\n\t\t\treturn firstValue.length > 0;\n\t\t}\n\t\treturn Boolean(firstValue);\n\t}\n\tasync expectationsAreSatisfied(driver, steps) {\n\t\tif (steps.length === 0) return false;\n\t\tfor (const step of steps) {\n\t\t\tconst result = await driver.query(step.sql, step.params ?? []);\n\t\t\tif (!this.stepResultIsTrue(result.rows)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tcreateSkipRecord(operation) {\n\t\treturn Object.freeze({\n\t\t\tid: operation.id,\n\t\t\tlabel: operation.label,\n\t\t\t...ifDefined(\"summary\", operation.summary),\n\t\t\toperationClass: operation.operationClass,\n\t\t\ttarget: operation.target,\n\t\t\tprecheck: Object.freeze([]),\n\t\t\texecute: Object.freeze([]),\n\t\t\tpostcheck: Object.freeze([...operation.postcheck]),\n\t\t\tmeta: Object.freeze({\n\t\t\t\t...operation.meta ?? {},\n\t\t\t\trunner: Object.freeze({\n\t\t\t\t\tskipped: true,\n\t\t\t\t\treason: \"postcheck_pre_satisfied\"\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\t}\n\tmarkerMatchesDestination(marker, plan) {\n\t\tif (!marker) return false;\n\t\tif (marker.storageHash !== plan.destination.storageHash) return false;\n\t\tif (plan.destination.profileHash && marker.profileHash !== plan.destination.profileHash) return false;\n\t\treturn true;\n\t}\n\tenforcePolicyCompatibility(policy, operations) {\n\t\tconst allowedClasses = new Set(policy.allowedOperationClasses);\n\t\tfor (const operation of operations) if (!allowedClasses.has(operation.operationClass)) return runnerFailure(\"MIGRATION.POLICY_VIOLATION\", `Operation ${operation.id} has class \"${operation.operationClass}\" which is not allowed by policy.`, {\n\t\t\twhy: `Policy only allows: ${policy.allowedOperationClasses.join(\", \")}.`,\n\t\t\tmeta: {\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationClass: operation.operationClass,\n\t\t\t\tallowedClasses: policy.allowedOperationClasses\n\t\t\t}\n\t\t});\n\t\treturn okVoid();\n\t}\n\tensureMarkerCompatibility(marker, plan) {\n\t\tconst origin = plan.origin ?? null;\n\t\tif (!origin) return okVoid();\n\t\tif (!marker) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Missing contract marker: expected origin storage hash ${origin.storageHash}.`, { meta: { expectedOriginStorageHash: origin.storageHash } });\n\t\tif (marker.storageHash !== origin.storageHash) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Existing contract marker (${marker.storageHash}) does not match plan origin (${origin.storageHash}).`, { meta: {\n\t\t\tmarkerStorageHash: marker.storageHash,\n\t\t\texpectedOriginStorageHash: origin.storageHash\n\t\t} });\n\t\tif (origin.profileHash && marker.profileHash !== origin.profileHash) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Existing contract marker profile hash (${marker.profileHash}) does not match plan origin profile hash (${origin.profileHash}).`, { meta: {\n\t\t\tmarkerProfileHash: marker.profileHash,\n\t\t\texpectedOriginProfileHash: origin.profileHash\n\t\t} });\n\t\treturn okVoid();\n\t}\n\tensurePlanMatchesDestinationContract(destination, contract) {\n\t\tif (destination.storageHash !== contract.storage.storageHash) return runnerFailure(\"MIGRATION.DESTINATION_CONTRACT_MISMATCH\", `Plan destination storage hash (${destination.storageHash}) does not match provided contract storage hash (${contract.storage.storageHash}).`, { meta: {\n\t\t\tplanStorageHash: destination.storageHash,\n\t\t\tcontractStorageHash: contract.storage.storageHash\n\t\t} });\n\t\tif (destination.profileHash && contract.profileHash && destination.profileHash !== contract.profileHash) return runnerFailure(\"MIGRATION.DESTINATION_CONTRACT_MISMATCH\", `Plan destination profile hash (${destination.profileHash}) does not match provided contract profile hash (${contract.profileHash}).`, { meta: {\n\t\t\tplanProfileHash: destination.profileHash,\n\t\t\tcontractProfileHash: contract.profileHash\n\t\t} });\n\t\treturn okVoid();\n\t}\n\tasync upsertMarker(driver, options, existingMarker, space) {\n\t\tconst destination = {\n\t\t\tstorageHash: options.plan.destination.storageHash,\n\t\t\tprofileHash: options.plan.destination.profileHash ?? options.destinationContract.profileHash ?? options.plan.destination.storageHash,\n\t\t\tinvariants: options.plan.providedInvariants ?? []\n\t\t};\n\t\tif (!existingMarker) {\n\t\t\tawait this.family.initMarker({\n\t\t\t\tdriver,\n\t\t\t\tspace,\n\t\t\t\tdestination\n\t\t\t});\n\t\t\treturn okVoid();\n\t\t}\n\t\tif (!await this.family.updateMarker({\n\t\t\tdriver,\n\t\t\tspace,\n\t\t\texpectedFrom: existingMarker.storageHash,\n\t\t\tdestination\n\t\t})) {\n\t\t\tconst found = await this.family.readMarker({\n\t\t\t\tdriver,\n\t\t\t\tspace\n\t\t\t});\n\t\t\treturn runnerFailure(\"MIGRATION.MARKER_CAS_FAILURE\", \"Marker was modified by another process during migration execution.\", { meta: {\n\t\t\t\tspace,\n\t\t\t\texpectedStorageHash: existingMarker.storageHash,\n\t\t\t\tfoundStorageHash: found?.storageHash ?? null,\n\t\t\t\tdestinationStorageHash: options.plan.destination.storageHash\n\t\t\t} });\n\t\t}\n\t\treturn okVoid();\n\t}\n\tasync recordLedgerEntries(driver, options, executedOperations) {\n\t\tconst plan = options.plan;\n\t\tconst space = plan.spaceId;\n\t\tconst edges = options.migrationEdges;\n\t\tconst totalEdgeOps = edges.reduce((sum, edge) => sum + edge.operationCount, 0);\n\t\tif (totalEdgeOps !== plan.operations.length) throw new InternalError(`Ledger write: plan.operations length (${plan.operations.length}) does not match sum of migrationEdges operationCount (${totalEdgeOps})`);\n\t\tlet offset = 0;\n\t\tfor (const edge of edges) {\n\t\t\tconst edgeOps = executedOperations.slice(offset, offset + edge.operationCount);\n\t\t\toffset += edge.operationCount;\n\t\t\tawait this.family.writeLedgerEntry({\n\t\t\t\tdriver,\n\t\t\t\tspace,\n\t\t\t\tentry: {\n\t\t\t\t\tedgeId: `${edge.from}->${edge.to}`,\n\t\t\t\t\tfrom: edge.from,\n\t\t\t\t\tto: edge.to,\n\t\t\t\t\tmigrationName: edge.dirName,\n\t\t\t\t\tmigrationHash: edge.migrationHash,\n\t\t\t\t\toperations: edgeOps\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tasync beginExclusiveTransaction(driver) {\n\t\tawait driver.query(\"BEGIN EXCLUSIVE\");\n\t}\n\tasync commitTransaction(driver) {\n\t\tawait driver.query(\"COMMIT\");\n\t}\n\tasync rollbackTransaction(driver) {\n\t\tawait driver.query(\"ROLLBACK\");\n\t}\n\tasync executeStatement(driver, statement) {\n\t\tawait driver.query(statement.sql, statement.params);\n\t}\n};\n//#endregion\n//#region src/core/sqlite-schema-verifier.ts\n/**\n* SQLite target `SchemaVerifier` concretion. Mirrors the Postgres\n* shape: hooks return the empty list pending the call-site migration\n* that routes the existing verifier behaviour through the SPI.\n*/\nvar SqliteSchemaVerifier = class extends SqlSchemaVerifierBase {\n\tverifyCommonSqlSchema(_options) {\n\t\treturn [];\n\t}\n\tverifyTargetExtensions(_options) {\n\t\treturn [];\n\t}\n};\n//#endregion\n//#region src/core/control-target.ts\nfunction isSqlContract(contract) {\n\treturn contract === null || contract.storage instanceof SqlStorage;\n}\nconst sqliteControlTargetDescriptor = {\n\t...sqliteTargetDescriptorMeta,\n\tcontractSerializer: new SqliteContractSerializer(),\n\tschemaVerifier: new SqliteSchemaVerifier(),\n\tdiffSchema(input) {\n\t\treturn diffSqliteSchema(input);\n\t},\n\tclassifySubjectGranularity: relationalNodeGranularity,\n\tclassifyEntityKind: relationalNodeEntityKind,\n\tmigrations: {\n\t\tcreatePlanner(adapter) {\n\t\t\treturn createSqliteMigrationPlanner(adapter);\n\t\t},\n\t\tcreateRunner(family) {\n\t\t\treturn createSqliteMigrationRunner(family);\n\t\t},\n\t\tcontractToSchema(contract, frameworkComponents) {\n\t\t\tif (!isSqlContract(contract)) throw sqliteError(\"CONTRACT.TARGET_MISMATCH\", \"sqliteControlTargetDescriptor.contractToSchema received a non-SQL contract; expected Contract<SqlStorage>\");\n\t\t\treturn sqliteContractToSchema(contract, sqlTypeLookupsOf(frameworkComponents));\n\t\t}\n\t},\n\tcreate() {\n\t\treturn {\n\t\t\tfamilyId: \"sql\",\n\t\t\ttargetId: \"sqlite\"\n\t\t};\n\t},\n\tcreatePlanner(adapter) {\n\t\treturn createSqliteMigrationPlanner(adapter);\n\t},\n\tcreateRunner(family) {\n\t\treturn createSqliteMigrationRunner(family);\n\t}\n};\n//#endregion\n//#region src/core/type-constructors.ts\n/**\n* The base PSL scalars as zero-arg type constructors in the unified authoring\n* channel. Each names a codec; the column's database type is its data type's.\n*\n* The type position is the only storage decider: a mutation-default generator\n* (`@default(uuid())`) never re-picks a column's storage.\n*\n* These are the constructors only PSL offers. They are defined here, next to the codecs they name, but the adapter contributes them: the TypeScript contract builder builds its `type.*` helpers from the target, so a target contribution would add `type.String()` and the like there. The constructors that should also be `type.*` helpers are the target's own (`sqliteAuthoringTypes`).\n*/\nconst sqlitePslTypeConstructors = {\n\tString: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"Variable-length text stored as SQLite text.\",\n\t\toutput: { codecId: SQLITE_TEXT_CODEC_ID }\n\t},\n\tInt: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"An integer stored as SQLite integer and represented as a JavaScript number.\",\n\t\toutput: { codecId: SQLITE_INTEGER_CODEC_ID }\n\t},\n\tBigInt: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"An integer stored as SQLite integer and represented as a JavaScript bigint.\",\n\t\toutput: { codecId: SQLITE_BIGINT_CODEC_ID }\n\t},\n\tFloat: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A floating-point number stored as SQLite real.\",\n\t\toutput: { codecId: SQLITE_REAL_CODEC_ID }\n\t},\n\tDecimal: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A decimal value stored and represented as text to preserve precision.\",\n\t\toutput: { codecId: SQLITE_TEXT_CODEC_ID }\n\t},\n\tDateTime: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A date and time stored as SQLite text.\",\n\t\toutput: { codecId: SQLITE_DATETIME_CODEC_ID }\n\t},\n\tJson: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A JSON value serialized to SQLite text.\",\n\t\toutput: { codecId: SQLITE_JSON_CODEC_ID }\n\t},\n\tBytes: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"Binary data stored as a SQLite blob.\",\n\t\toutput: { codecId: SQLITE_BLOB_CODEC_ID }\n\t}\n};\n//#endregion\nexport { SqliteUnboundDatabase, sqliteControlTargetDescriptor as default, sqliteCreateNamespace, sqlitePslTypeConstructors };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"control-DJq7MF_s.mjs","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/control.mjs"],"sourcesContent":["import { a as SQLITE_INTEGER_CODEC_ID, c as SQLITE_TEXT_CODEC_ID, i as SQLITE_DATETIME_CODEC_ID, o as SQLITE_JSON_CODEC_ID, r as SQLITE_BLOB_CODEC_ID, s as SQLITE_REAL_CODEC_ID, t as SQLITE_BIGINT_CODEC_ID } from \"./codec-ids-KMliSCRp.mjs\";\nimport { n as sqliteError } from \"./errors-DnR-sMHS.mjs\";\nimport { t as sqliteTargetDescriptorMeta } from \"./descriptor-meta-CthMyZ9m.mjs\";\nimport { n as quoteIdentifier } from \"./sql-utils-C2O4zVkP.mjs\";\nimport { _ as diffSqliteSchema, b as verifySqliteDatabaseSchema, y as sqliteContractToSchema } from \"./sqlite-migration-D7DWt0JL.mjs\";\nimport { r as MARKER_TABLE_NAME } from \"./control-tables-D_o8dKRB.mjs\";\nimport { n as createSqliteMigrationPlanner } from \"./planner-Ddpm7j-w.mjs\";\nimport { i as sqliteCreateNamespace, n as SqliteContractSerializer, r as SqliteUnboundDatabase } from \"./sqlite-contract-view-BrXalcTm.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { APP_SPACE_ID } from \"@internal/framework-components/control\";\nimport { runnerFailure, runnerSuccess, sqlTypeLookupsOf } from \"@internal/family-sql/control\";\nimport { SqlStorage } from \"@internal/sql-contract/types\";\nimport { relationalNodeEntityKind, relationalNodeGranularity } from \"@internal/sql-schema-ir/types\";\nimport { notOk, ok, okVoid } from \"@internal/utils/result\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { SqlSchemaVerifierBase } from \"@internal/family-sql/ir\";\n//#region src/core/migrations/runner.ts\nfunction createSqliteMigrationRunner(family) {\n\treturn new SqliteMigrationRunner(family);\n}\nvar SqliteMigrationRunner = class {\n\tfamily;\n\tconstructor(family) {\n\t\tthis.family = family;\n\t}\n\t/**\n\t* Apply the plan against an already-open connection without managing\n\t* the transaction lifecycle. The caller ({@link SqliteMigrationRunner.execute})\n\t* owns BEGIN/COMMIT/ROLLBACK and any connection-level setup (FK pragma\n\t* toggle, FK integrity check).\n\t*/\n\tasync executeOnConnection(options) {\n\t\tconst driver = options.driver;\n\t\tif (options.space !== void 0 && options.space !== options.plan.spaceId) throw sqliteError(\"MIGRATION.CONTRACT_SPACE_VIOLATION\", `SqlMigrationRunner: options.space (${options.space}) does not match plan.spaceId (${options.plan.spaceId})`, { meta: {\n\t\t\tspace: options.space,\n\t\t\tplanSpaceId: options.plan.spaceId\n\t\t} });\n\t\tconst space = options.plan.spaceId;\n\t\tconst planOps = blindCast(await Promise.all(options.plan.operations));\n\t\tconst destinationCheck = this.ensurePlanMatchesDestinationContract(options.plan.destination, options.destinationContract);\n\t\tif (!destinationCheck.ok) return destinationCheck;\n\t\tconst policyCheck = this.enforcePolicyCompatibility(options.policy, planOps);\n\t\tif (!policyCheck.ok) return policyCheck;\n\t\tconst ensureResult = await this.ensureControlTables(driver, options.destinationContract);\n\t\tif (!ensureResult.ok) return ensureResult;\n\t\tconst existingMarker = await this.family.readMarker({\n\t\t\tdriver,\n\t\t\tspace\n\t\t});\n\t\tconst markerCheck = this.ensureMarkerCompatibility(existingMarker, options.plan);\n\t\tif (!markerCheck.ok) return markerCheck;\n\t\tconst markerAtDestination = this.markerMatchesDestination(existingMarker, options.plan);\n\t\tconst isSelfEdge = options.plan.origin?.storageHash === options.plan.destination.storageHash;\n\t\tconst skipOperations = markerAtDestination && options.plan.origin != null && !isSelfEdge;\n\t\tlet operationsExecuted;\n\t\tlet executedOperations;\n\t\tif (skipOperations) {\n\t\t\toperationsExecuted = 0;\n\t\t\texecutedOperations = [];\n\t\t} else {\n\t\t\tconst applyResult = await this.applyPlan(driver, options, planOps);\n\t\t\tif (!applyResult.ok) return applyResult;\n\t\t\toperationsExecuted = applyResult.value.operationsExecuted;\n\t\t\texecutedOperations = applyResult.value.executedOperations;\n\t\t}\n\t\tif (space === APP_SPACE_ID) {\n\t\t\tconst schemaNode = await this.family.introspect({\n\t\t\t\tdriver,\n\t\t\t\tcontract: options.destinationContract\n\t\t\t});\n\t\t\tconst schemaVerifyResult = verifySqliteDatabaseSchema({\n\t\t\t\tcontract: options.destinationContract,\n\t\t\t\tactualSchema: schemaNode,\n\t\t\t\tstrict: options.strictVerification ?? true,\n\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t});\n\t\t\tif (!schemaVerifyResult.ok) return runnerFailure(\"MIGRATION.SCHEMA_VERIFY_FAILED\", schemaVerifyResult.summary, {\n\t\t\t\twhy: \"The resulting database schema does not satisfy the destination contract.\",\n\t\t\t\tmeta: { issues: schemaVerifyResult.schema.issues }\n\t\t\t});\n\t\t}\n\t\tconst incomingInvariants = options.plan.providedInvariants;\n\t\tconst existingInvariants = new Set(existingMarker?.invariants ?? []);\n\t\tconst incomingIsSubsetOfExisting = incomingInvariants.every((id) => existingInvariants.has(id));\n\t\tif (!(isSelfEdge && operationsExecuted === 0 && incomingIsSubsetOfExisting)) {\n\t\t\tconst markerResult = await this.upsertMarker(driver, options, existingMarker, space);\n\t\t\tif (!markerResult.ok) return markerResult;\n\t\t\tawait this.recordLedgerEntries(driver, options, executedOperations);\n\t\t}\n\t\treturn runnerSuccess({\n\t\t\toperationsPlanned: planOps.length,\n\t\t\toperationsExecuted\n\t\t});\n\t}\n\tasync execute(options) {\n\t\tconst driver = options.driver;\n\t\tconst perSpaceOptions = options.perSpaceOptions;\n\t\tif (perSpaceOptions.length === 0) return ok({ perSpaceResults: [] });\n\t\tconst fkWasEnabled = await this.readForeignKeysEnabled(driver);\n\t\tif (fkWasEnabled) await driver.query(\"PRAGMA foreign_keys = OFF\");\n\t\ttry {\n\t\t\tawait this.beginExclusiveTransaction(driver);\n\t\t\tlet committed = false;\n\t\t\ttry {\n\t\t\t\tconst perSpaceResults = [];\n\t\t\t\tlet lastProcessedSpace;\n\t\t\t\tfor (const spaceOptions of perSpaceOptions) {\n\t\t\t\t\tconst space = spaceOptions.space ?? spaceOptions.plan.spaceId;\n\t\t\t\t\tconst result = await this.executeOnConnection({\n\t\t\t\t\t\t...spaceOptions,\n\t\t\t\t\t\tdriver,\n\t\t\t\t\t\tspace\n\t\t\t\t\t});\n\t\t\t\t\tif (!result.ok) return notOk({\n\t\t\t\t\t\t...result.failure,\n\t\t\t\t\t\tfailingSpace: space\n\t\t\t\t\t});\n\t\t\t\t\tperSpaceResults.push({\n\t\t\t\t\t\tspace,\n\t\t\t\t\t\tvalue: result.value\n\t\t\t\t\t});\n\t\t\t\t\tlastProcessedSpace = space;\n\t\t\t\t}\n\t\t\t\tif (fkWasEnabled) {\n\t\t\t\t\tconst fkIntegrityCheck = await this.verifyForeignKeyIntegrity(driver);\n\t\t\t\t\tif (!fkIntegrityCheck.ok) return notOk({\n\t\t\t\t\t\t...fkIntegrityCheck.failure,\n\t\t\t\t\t\tfailingSpace: lastProcessedSpace ?? APP_SPACE_ID\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait this.commitTransaction(driver);\n\t\t\t\tcommitted = true;\n\t\t\t\treturn ok({ perSpaceResults });\n\t\t\t} finally {\n\t\t\t\tif (!committed) await this.rollbackTransaction(driver);\n\t\t\t}\n\t\t} finally {\n\t\t\tif (fkWasEnabled) await driver.query(\"PRAGMA foreign_keys = ON\");\n\t\t}\n\t}\n\tasync readForeignKeysEnabled(driver) {\n\t\treturn (await driver.query(\"PRAGMA foreign_keys\")).rows[0]?.foreign_keys === 1;\n\t}\n\tasync verifyForeignKeyIntegrity(driver) {\n\t\tconst result = await driver.query(\"PRAGMA foreign_key_check\");\n\t\tif (result.rows.length === 0) return okVoid();\n\t\treturn runnerFailure(\"MIGRATION.FOREIGN_KEY_VIOLATION\", `Foreign key integrity check failed after migration: ${result.rows.length} violation(s).`, {\n\t\t\twhy: \"PRAGMA foreign_key_check reported violations after applying recreate-table operations.\",\n\t\t\tmeta: { violations: result.rows }\n\t\t});\n\t}\n\tasync applyPlan(driver, options, ops) {\n\t\tconst checks = options.executionChecks;\n\t\tconst runPrechecks = checks?.prechecks !== false;\n\t\tconst runPostchecks = checks?.postchecks !== false;\n\t\tconst runIdempotency = checks?.idempotencyChecks !== false;\n\t\tlet operationsExecuted = 0;\n\t\tconst executedOperations = [];\n\t\tfor (const operation of ops) {\n\t\t\toptions.callbacks?.onOperationStart?.(operation);\n\t\t\ttry {\n\t\t\t\tif (runPostchecks && runIdempotency) {\n\t\t\t\t\tif (await this.expectationsAreSatisfied(driver, operation.postcheck)) {\n\t\t\t\t\t\texecutedOperations.push(this.createSkipRecord(operation));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (runPrechecks) {\n\t\t\t\t\tconst precheckResult = await this.runExpectationSteps(driver, operation.precheck, operation, \"precheck\");\n\t\t\t\t\tif (!precheckResult.ok) return precheckResult;\n\t\t\t\t}\n\t\t\t\tconst executeResult = await this.runExecuteSteps(driver, operation.execute, operation);\n\t\t\t\tif (!executeResult.ok) return executeResult;\n\t\t\t\tif (runPostchecks) {\n\t\t\t\t\tconst postcheckResult = await this.runExpectationSteps(driver, operation.postcheck, operation, \"postcheck\");\n\t\t\t\t\tif (!postcheckResult.ok) return postcheckResult;\n\t\t\t\t}\n\t\t\t\texecutedOperations.push(operation);\n\t\t\t\toperationsExecuted += 1;\n\t\t\t} finally {\n\t\t\t\toptions.callbacks?.onOperationComplete?.(operation);\n\t\t\t}\n\t\t}\n\t\treturn ok({\n\t\t\toperationsExecuted,\n\t\t\texecutedOperations\n\t\t});\n\t}\n\tasync ensureControlTables(driver, contract) {\n\t\tconst legacyDetection = await this.detectLegacyMarkerShape(driver);\n\t\tif (!legacyDetection.ok) return legacyDetection;\n\t\tconst lowererContext = { contract };\n\t\tfor (const query of this.family.bootstrapControlTableQueries()) await this.executeStatement(driver, await this.family.lowerAst(query, lowererContext));\n\t\treturn okVoid();\n\t}\n\tasync detectLegacyMarkerShape(driver) {\n\t\tconst tableInfo = await driver.query(`PRAGMA table_info(${quoteIdentifier(MARKER_TABLE_NAME)})`);\n\t\tif (tableInfo.rows.length === 0) return okVoid();\n\t\tconst columns = new Set(tableInfo.rows.map((row) => row.name));\n\t\tif (columns.has(\"space\")) return okVoid();\n\t\treturn runnerFailure(\"MIGRATION.LEGACY_MARKER_SHAPE\", `Legacy marker-table shape detected on ${MARKER_TABLE_NAME} (no \\`space\\` column). Prisma 8 is in pre-1.0; the previous transitional auto-migration to the per-space-row schema has been removed. Drop \\`${MARKER_TABLE_NAME}\\` and re-run \\`dbInit\\` to reinitialise from a clean baseline.`, { meta: {\n\t\t\ttable: MARKER_TABLE_NAME,\n\t\t\tcolumns: [...columns].sort()\n\t\t} });\n\t}\n\tasync runExpectationSteps(driver, steps, operation, phase) {\n\t\tfor (const step of steps) {\n\t\t\tconst result = await driver.query(step.sql, step.params ?? []);\n\t\t\tif (!this.stepResultIsTrue(result.rows)) return runnerFailure(phase === \"precheck\" ? \"MIGRATION.PRECHECK_FAILED\" : \"MIGRATION.POSTCHECK_FAILED\", `Operation ${operation.id} failed during ${phase}: ${step.description}`, { meta: {\n\t\t\t\toperationId: operation.id,\n\t\t\t\tphase,\n\t\t\t\tstepDescription: step.description\n\t\t\t} });\n\t\t}\n\t\treturn okVoid();\n\t}\n\tasync runExecuteSteps(driver, steps, operation) {\n\t\tfor (const step of steps) try {\n\t\t\tawait driver.query(step.sql, step.params ?? []);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn runnerFailure(\"MIGRATION.EXECUTION_FAILED\", `Operation ${operation.id} failed during execution: ${step.description}`, {\n\t\t\t\twhy: message,\n\t\t\t\tmeta: {\n\t\t\t\t\toperationId: operation.id,\n\t\t\t\t\tstepDescription: step.description,\n\t\t\t\t\tsql: step.sql\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn okVoid();\n\t}\n\tstepResultIsTrue(rows) {\n\t\tif (!rows || rows.length === 0) return false;\n\t\tconst firstRow = rows[0];\n\t\tconst firstValue = firstRow ? Object.values(firstRow)[0] : void 0;\n\t\tif (typeof firstValue === \"number\") return firstValue !== 0;\n\t\tif (typeof firstValue === \"boolean\") return firstValue;\n\t\tif (typeof firstValue === \"string\") {\n\t\t\tconst lower = firstValue.toLowerCase();\n\t\t\tif (lower === \"true\" || lower === \"1\") return true;\n\t\t\tif (lower === \"false\" || lower === \"0\") return false;\n\t\t\treturn firstValue.length > 0;\n\t\t}\n\t\treturn Boolean(firstValue);\n\t}\n\tasync expectationsAreSatisfied(driver, steps) {\n\t\tif (steps.length === 0) return false;\n\t\tfor (const step of steps) {\n\t\t\tconst result = await driver.query(step.sql, step.params ?? []);\n\t\t\tif (!this.stepResultIsTrue(result.rows)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tcreateSkipRecord(operation) {\n\t\treturn Object.freeze({\n\t\t\tid: operation.id,\n\t\t\tlabel: operation.label,\n\t\t\t...ifDefined(\"summary\", operation.summary),\n\t\t\toperationClass: operation.operationClass,\n\t\t\ttarget: operation.target,\n\t\t\tprecheck: Object.freeze([]),\n\t\t\texecute: Object.freeze([]),\n\t\t\tpostcheck: Object.freeze([...operation.postcheck]),\n\t\t\tmeta: Object.freeze({\n\t\t\t\t...operation.meta ?? {},\n\t\t\t\trunner: Object.freeze({\n\t\t\t\t\tskipped: true,\n\t\t\t\t\treason: \"postcheck_pre_satisfied\"\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\t}\n\tmarkerMatchesDestination(marker, plan) {\n\t\tif (!marker) return false;\n\t\tif (marker.storageHash !== plan.destination.storageHash) return false;\n\t\tif (plan.destination.profileHash && marker.profileHash !== plan.destination.profileHash) return false;\n\t\treturn true;\n\t}\n\tenforcePolicyCompatibility(policy, operations) {\n\t\tconst allowedClasses = new Set(policy.allowedOperationClasses);\n\t\tfor (const operation of operations) if (!allowedClasses.has(operation.operationClass)) return runnerFailure(\"MIGRATION.POLICY_VIOLATION\", `Operation ${operation.id} has class \"${operation.operationClass}\" which is not allowed by policy.`, {\n\t\t\twhy: `Policy only allows: ${policy.allowedOperationClasses.join(\", \")}.`,\n\t\t\tmeta: {\n\t\t\t\toperationId: operation.id,\n\t\t\t\toperationClass: operation.operationClass,\n\t\t\t\tallowedClasses: policy.allowedOperationClasses\n\t\t\t}\n\t\t});\n\t\treturn okVoid();\n\t}\n\tensureMarkerCompatibility(marker, plan) {\n\t\tconst origin = plan.origin ?? null;\n\t\tif (!origin) return okVoid();\n\t\tif (!marker) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Missing contract marker: expected origin storage hash ${origin.storageHash}.`, { meta: { expectedOriginStorageHash: origin.storageHash } });\n\t\tif (marker.storageHash !== origin.storageHash) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Existing contract marker (${marker.storageHash}) does not match plan origin (${origin.storageHash}).`, { meta: {\n\t\t\tmarkerStorageHash: marker.storageHash,\n\t\t\texpectedOriginStorageHash: origin.storageHash\n\t\t} });\n\t\tif (origin.profileHash && marker.profileHash !== origin.profileHash) return runnerFailure(\"MIGRATION.MARKER_ORIGIN_MISMATCH\", `Existing contract marker profile hash (${marker.profileHash}) does not match plan origin profile hash (${origin.profileHash}).`, { meta: {\n\t\t\tmarkerProfileHash: marker.profileHash,\n\t\t\texpectedOriginProfileHash: origin.profileHash\n\t\t} });\n\t\treturn okVoid();\n\t}\n\tensurePlanMatchesDestinationContract(destination, contract) {\n\t\tif (destination.storageHash !== contract.storage.storageHash) return runnerFailure(\"MIGRATION.DESTINATION_CONTRACT_MISMATCH\", `Plan destination storage hash (${destination.storageHash}) does not match provided contract storage hash (${contract.storage.storageHash}).`, { meta: {\n\t\t\tplanStorageHash: destination.storageHash,\n\t\t\tcontractStorageHash: contract.storage.storageHash\n\t\t} });\n\t\tif (destination.profileHash && contract.profileHash && destination.profileHash !== contract.profileHash) return runnerFailure(\"MIGRATION.DESTINATION_CONTRACT_MISMATCH\", `Plan destination profile hash (${destination.profileHash}) does not match provided contract profile hash (${contract.profileHash}).`, { meta: {\n\t\t\tplanProfileHash: destination.profileHash,\n\t\t\tcontractProfileHash: contract.profileHash\n\t\t} });\n\t\treturn okVoid();\n\t}\n\tasync upsertMarker(driver, options, existingMarker, space) {\n\t\tconst destination = {\n\t\t\tstorageHash: options.plan.destination.storageHash,\n\t\t\tprofileHash: options.plan.destination.profileHash ?? options.destinationContract.profileHash ?? options.plan.destination.storageHash,\n\t\t\tinvariants: options.plan.providedInvariants ?? []\n\t\t};\n\t\tif (!existingMarker) {\n\t\t\tawait this.family.initMarker({\n\t\t\t\tdriver,\n\t\t\t\tspace,\n\t\t\t\tdestination\n\t\t\t});\n\t\t\treturn okVoid();\n\t\t}\n\t\tif (!await this.family.updateMarker({\n\t\t\tdriver,\n\t\t\tspace,\n\t\t\texpectedFrom: existingMarker.storageHash,\n\t\t\tdestination\n\t\t})) {\n\t\t\tconst found = await this.family.readMarker({\n\t\t\t\tdriver,\n\t\t\t\tspace\n\t\t\t});\n\t\t\treturn runnerFailure(\"MIGRATION.MARKER_CAS_FAILURE\", \"Marker was modified by another process during migration execution.\", { meta: {\n\t\t\t\tspace,\n\t\t\t\texpectedStorageHash: existingMarker.storageHash,\n\t\t\t\tfoundStorageHash: found?.storageHash ?? null,\n\t\t\t\tdestinationStorageHash: options.plan.destination.storageHash\n\t\t\t} });\n\t\t}\n\t\treturn okVoid();\n\t}\n\tasync recordLedgerEntries(driver, options, executedOperations) {\n\t\tconst plan = options.plan;\n\t\tconst space = plan.spaceId;\n\t\tconst edges = options.migrationEdges;\n\t\tconst totalEdgeOps = edges.reduce((sum, edge) => sum + edge.operationCount, 0);\n\t\tif (totalEdgeOps !== plan.operations.length) throw new InternalError(`Ledger write: plan.operations length (${plan.operations.length}) does not match sum of migrationEdges operationCount (${totalEdgeOps})`);\n\t\tlet offset = 0;\n\t\tfor (const edge of edges) {\n\t\t\tconst edgeOps = executedOperations.slice(offset, offset + edge.operationCount);\n\t\t\toffset += edge.operationCount;\n\t\t\tawait this.family.writeLedgerEntry({\n\t\t\t\tdriver,\n\t\t\t\tspace,\n\t\t\t\tentry: {\n\t\t\t\t\tedgeId: `${edge.from}->${edge.to}`,\n\t\t\t\t\tfrom: edge.from,\n\t\t\t\t\tto: edge.to,\n\t\t\t\t\tmigrationName: edge.dirName,\n\t\t\t\t\tmigrationHash: edge.migrationHash,\n\t\t\t\t\toperations: edgeOps\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tasync beginExclusiveTransaction(driver) {\n\t\tawait driver.query(\"BEGIN EXCLUSIVE\");\n\t}\n\tasync commitTransaction(driver) {\n\t\tawait driver.query(\"COMMIT\");\n\t}\n\tasync rollbackTransaction(driver) {\n\t\tawait driver.query(\"ROLLBACK\");\n\t}\n\tasync executeStatement(driver, statement) {\n\t\tawait driver.query(statement.sql, statement.params);\n\t}\n};\n//#endregion\n//#region src/core/sqlite-schema-verifier.ts\n/**\n* SQLite target `SchemaVerifier` concretion. Mirrors the Postgres\n* shape: hooks return the empty list pending the call-site migration\n* that routes the existing verifier behaviour through the SPI.\n*/\nvar SqliteSchemaVerifier = class extends SqlSchemaVerifierBase {\n\tverifyCommonSqlSchema(_options) {\n\t\treturn [];\n\t}\n\tverifyTargetExtensions(_options) {\n\t\treturn [];\n\t}\n};\n//#endregion\n//#region src/core/control-target.ts\nfunction isSqlContract(contract) {\n\treturn contract === null || contract.storage instanceof SqlStorage;\n}\nconst sqliteControlTargetDescriptor = {\n\t...sqliteTargetDescriptorMeta,\n\tcontractSerializer: new SqliteContractSerializer(),\n\tschemaVerifier: new SqliteSchemaVerifier(),\n\tdiffSchema(input) {\n\t\treturn diffSqliteSchema(input);\n\t},\n\tclassifySubjectGranularity: relationalNodeGranularity,\n\tclassifyEntityKind: relationalNodeEntityKind,\n\tmigrations: {\n\t\tcreatePlanner(adapter) {\n\t\t\treturn createSqliteMigrationPlanner(adapter);\n\t\t},\n\t\tcreateRunner(family) {\n\t\t\treturn createSqliteMigrationRunner(family);\n\t\t},\n\t\tcontractToSchema(contract, frameworkComponents) {\n\t\t\tif (!isSqlContract(contract)) throw sqliteError(\"CONTRACT.TARGET_MISMATCH\", \"sqliteControlTargetDescriptor.contractToSchema received a non-SQL contract; expected Contract<SqlStorage>\");\n\t\t\treturn sqliteContractToSchema(contract, sqlTypeLookupsOf(frameworkComponents));\n\t\t}\n\t},\n\tcreate() {\n\t\treturn {\n\t\t\tfamilyId: \"sql\",\n\t\t\ttargetId: \"sqlite\"\n\t\t};\n\t},\n\tcreatePlanner(adapter) {\n\t\treturn createSqliteMigrationPlanner(adapter);\n\t},\n\tcreateRunner(family) {\n\t\treturn createSqliteMigrationRunner(family);\n\t}\n};\n//#endregion\n//#region src/core/type-constructors.ts\n/**\n* The base PSL scalars as zero-arg type constructors in the unified authoring\n* channel. Each names a codec; the column's database type is its data type's.\n*\n* The type position is the only storage decider: a mutation-default generator\n* (`@default(uuid())`) never re-picks a column's storage.\n*\n* These are the constructors only PSL offers. They are defined here, next to the codecs they name, but the adapter contributes them: the TypeScript contract builder builds its `type.*` helpers from the target, so a target contribution would add `type.String()` and the like there. The constructors that should also be `type.*` helpers are the target's own (`sqliteAuthoringTypes`).\n*/\nconst sqlitePslTypeConstructors = {\n\tString: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"Variable-length text stored as SQLite text.\",\n\t\toutput: { codecId: SQLITE_TEXT_CODEC_ID }\n\t},\n\tInt: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"An integer stored as SQLite integer and represented as a JavaScript number.\",\n\t\toutput: { codecId: SQLITE_INTEGER_CODEC_ID }\n\t},\n\tBigInt: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"An integer stored as SQLite integer and represented as a JavaScript bigint.\",\n\t\toutput: { codecId: SQLITE_BIGINT_CODEC_ID }\n\t},\n\tFloat: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A floating-point number stored as SQLite real.\",\n\t\toutput: { codecId: SQLITE_REAL_CODEC_ID }\n\t},\n\tDecimal: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A decimal value stored and represented as text to preserve precision.\",\n\t\toutput: { codecId: SQLITE_TEXT_CODEC_ID }\n\t},\n\tDateTime: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A date and time stored as SQLite text.\",\n\t\toutput: { codecId: SQLITE_DATETIME_CODEC_ID }\n\t},\n\tJson: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A JSON value serialized to SQLite text.\",\n\t\toutput: { codecId: SQLITE_JSON_CODEC_ID }\n\t},\n\tBytes: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"Binary data stored as a SQLite blob.\",\n\t\toutput: { codecId: SQLITE_BLOB_CODEC_ID }\n\t}\n};\n//#endregion\nexport { SqliteUnboundDatabase, sqliteControlTargetDescriptor as default, sqliteCreateNamespace, sqlitePslTypeConstructors };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migration-CIKnw9my.mjs","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/migration.mjs"],"sourcesContent":["import { v as step } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { t as SqliteMigration } from \"./sqlite-migration-DocfLYRw.mjs\";\nimport { t as buildTargetDetails } from \"./planner-target-details-CIQ789Gc.mjs\";\nimport { placeholder } from \"@internal/errors/migration\";\nimport { col, fn, foreignKey, lit, primaryKey, unique } from \"@internal/sql-relational-core/contract-free\";\nimport { MigrationCLI } from \"@internal/cli/migration-cli\";\nimport { sql } from \"@internal/sql-contract/sql-expression\";\n//#region src/core/migrations/operations/data-transform.ts\n/**\n* User-facing `dataTransform` factory for the SQLite migration authoring\n* surface. Invoked directly inside a `migration.ts` file to supply a\n* user-authored SQL statement that runs with operation class `'data'`.\n*\n* Typical use: the planner emits a `DataTransformCall` stub when a NOT NULL\n* tightening requires a backfill. The rendered `migration.ts` exposes the\n* backfill as a `placeholder(\"…\")` slot the user fills in with an\n* `UPDATE … WHERE col IS NULL` statement. The filled-in `dataTransform(...)`\n* invocation returns a runnable operation the runner executes before the\n* subsequent recreate-table op copies data into the tightened schema.\n*/\nfunction dataTransform(opts) {\n\treturn {\n\t\tid: opts.id,\n\t\tlabel: opts.label,\n\t\tsummary: opts.description,\n\t\toperationClass: \"data\",\n\t\ttarget: {\n\t\t\tid: \"sqlite\",\n\t\t\tdetails: buildTargetDetails(\"table\", opts.table)\n\t\t},\n\t\tprecheck: [],\n\t\texecute: [step(opts.description, opts.run())],\n\t\tpostcheck: []\n\t};\n}\n//#endregion\n//#region src/core/migrations/operations/raw.ts\n/**\n* Identity factory for an already-materialized\n* `SqlMigrationPlanOperation<SqlitePlanTargetDetails>`. Mirrors the Postgres\n* `rawSql` factory: the planner uses this to carry ops produced by SQL-family\n* paths (codec lifecycle hooks, raw-SQL escape hatches) alongside structured\n* call IR without reverse-engineering their shape.\n*/\nfunction rawSql(op) {\n\treturn op;\n}\n//#endregion\nexport { SqliteMigration as Migration, MigrationCLI, col, dataTransform, fn, foreignKey, lit, placeholder, primaryKey, rawSql, sql, unique };\n\n//# sourceMappingURL=migration.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,SAAS,cAAc,MAAM;CAC5B,OAAO;EACN,IAAI,KAAK;EACT,OAAO,KAAK;EACZ,SAAS,KAAK;EACd,gBAAgB;EAChB,QAAQ;GACP,IAAI;GACJ,SAAS,mBAAmB,SAAS,KAAK,KAAK;EAChD;EACA,UAAU,CAAC;EACX,SAAS,CAAC,KAAK,KAAK,aAAa,KAAK,IAAI,CAAC,CAAC;EAC5C,WAAW,CAAC;CACb;AACD;;;;;;;;AAUA,SAAS,OAAO,IAAI;CACnB,OAAO;AACR"}
1
+ {"version":3,"file":"migration-CIKnw9my.mjs","names":[],"sources":["../../../../3-targets/3-targets/sqlite/dist/migration.mjs"],"sourcesContent":["import { v as step } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { t as SqliteMigration } from \"./sqlite-migration-D7DWt0JL.mjs\";\nimport { t as buildTargetDetails } from \"./planner-target-details-CIQ789Gc.mjs\";\nimport { placeholder } from \"@internal/errors/migration\";\nimport { col, fn, foreignKey, lit, primaryKey, unique } from \"@internal/sql-relational-core/contract-free\";\nimport { MigrationCLI } from \"@internal/cli/migration-cli\";\nimport { sql } from \"@internal/sql-contract/sql-expression\";\n//#region src/core/migrations/operations/data-transform.ts\n/**\n* User-facing `dataTransform` factory for the SQLite migration authoring\n* surface. Invoked directly inside a `migration.ts` file to supply a\n* user-authored SQL statement that runs with operation class `'data'`.\n*\n* Typical use: the planner emits a `DataTransformCall` stub when a NOT NULL\n* tightening requires a backfill. The rendered `migration.ts` exposes the\n* backfill as a `placeholder(\"…\")` slot the user fills in with an\n* `UPDATE … WHERE col IS NULL` statement. The filled-in `dataTransform(...)`\n* invocation returns a runnable operation the runner executes before the\n* subsequent recreate-table op copies data into the tightened schema.\n*/\nfunction dataTransform(opts) {\n\treturn {\n\t\tid: opts.id,\n\t\tlabel: opts.label,\n\t\tsummary: opts.description,\n\t\toperationClass: \"data\",\n\t\ttarget: {\n\t\t\tid: \"sqlite\",\n\t\t\tdetails: buildTargetDetails(\"table\", opts.table)\n\t\t},\n\t\tprecheck: [],\n\t\texecute: [step(opts.description, opts.run())],\n\t\tpostcheck: []\n\t};\n}\n//#endregion\n//#region src/core/migrations/operations/raw.ts\n/**\n* Identity factory for an already-materialized\n* `SqlMigrationPlanOperation<SqlitePlanTargetDetails>`. Mirrors the Postgres\n* `rawSql` factory: the planner uses this to carry ops produced by SQL-family\n* paths (codec lifecycle hooks, raw-SQL escape hatches) alongside structured\n* call IR without reverse-engineering their shape.\n*/\nfunction rawSql(op) {\n\treturn op;\n}\n//#endregion\nexport { SqliteMigration as Migration, MigrationCLI, col, dataTransform, fn, foreignKey, lit, placeholder, primaryKey, rawSql, sql, unique };\n\n//# sourceMappingURL=migration.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,SAAS,cAAc,MAAM;CAC5B,OAAO;EACN,IAAI,KAAK;EACT,OAAO,KAAK;EACZ,SAAS,KAAK;EACd,gBAAgB;EAChB,QAAQ;GACP,IAAI;GACJ,SAAS,mBAAmB,SAAS,KAAK,KAAK;EAChD;EACA,UAAU,CAAC;EACX,SAAS,CAAC,KAAK,KAAK,aAAa,KAAK,IAAI,CAAC,CAAC;EAC5C,WAAW,CAAC;CACb;AACD;;;;;;;;AAUA,SAAS,OAAO,IAAI;CACnB,OAAO;AACR"}
@@ -1,12 +1,12 @@
1
1
  import { a as DropColumnCall, c as RawSqlCall, l as RecreateTableCall, s as DropTableCall } from "./op-factory-call-gwVgzGbc-caCULmpj.mjs";
2
- import { _ as sqliteSchemaTables, a as createWorkingSchema, c as issueNode, d as renameTableByHandStatements, f as renderRenameTableCall, g as sqlitePlannerStrategies, i as conflictForDisallowedCall, l as pairIndexReplacements, m as sqliteColumnRenameCall, n as buildSqlitePlanDiff, p as sqliteActualSchema, r as coalesceSubtreeIssues, s as indexNameCaseChange, u as planIssues, v as sqliteTableRenameCall } from "./sqlite-migration-DocfLYRw-Bry1VeFm.mjs";
3
- import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-lz_ul9te-DoBx4YeG.mjs";
2
+ import { _ as sqliteSchemaTables, a as createWorkingSchema, c as issueNode, d as renameTableByHandStatements, f as renderRenameTableCall, g as sqlitePlannerStrategies, i as conflictForDisallowedCall, l as pairIndexReplacements, m as sqliteColumnRenameCall, n as buildSqlitePlanDiff, p as sqliteActualSchema, r as coalesceSubtreeIssues, s as indexNameCaseChange, u as planIssues, v as sqliteTableRenameByHand, y as sqliteTableRenameCall } from "./sqlite-migration-D7DWt0JL-D_5jFkOx.mjs";
3
+ import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-Cj_QCROn-0eatEGzt.mjs";
4
4
  import { issueOutcome } from "@prisma/orm-framework/components/control";
5
5
  import { UNBOUND_NAMESPACE_ID } from "@prisma/orm-framework/components/ir";
6
6
  import { detectTableNameCaseChanges, extractCodecControlHooks, fieldEventStorage, planFieldEventCalls, planStatements, plannerFailure, storageNameOfOperation, subjectsOfCalls, unknownCallNames } from "@prisma/orm-family-sql/family/control";
7
7
  import { RelationalSchemaNodeKind, SqlTableIR } from "@prisma/orm-family-sql/schema-ir/types";
8
8
  import { ok } from "@prisma/orm-framework/utils/result";
9
- //#region ../../../3-targets/3-targets/sqlite/dist/planner-BMV6uAgt.mjs
9
+ //#region ../../../3-targets/3-targets/sqlite/dist/planner-Ddpm7j-w.mjs
10
10
  function tableTarget(table) {
11
11
  return {
12
12
  storageName: table,
@@ -179,7 +179,8 @@ var SqliteMigrationPlanner = class {
179
179
  ...subjectsOfCalls(sqliteCallSubjects(calls, new Map(fieldEventCalls.map((fieldEvent) => [fieldEvent.call, fieldEvent]))), {
180
180
  fromContract: options.fromContract,
181
181
  contract: options.contract,
182
- statements: options.statements
182
+ statements: options.statements,
183
+ byHand: sqliteTableRenameByHand
183
184
  })
184
185
  };
185
186
  }
@@ -210,8 +211,7 @@ var SqliteMigrationPlanner = class {
210
211
  frameworkComponents: options.frameworkComponents
211
212
  }),
212
213
  apply: (call) => working.apply(call),
213
- renderTableRename: renderRenameTableCall,
214
- tableRenameByHand: renameTableByHandStatements
214
+ ...sqliteTableRenameByHand
215
215
  }
216
216
  });
217
217
  if (!planned.ok) return planned;
@@ -316,4 +316,4 @@ function retainUnownedExtras(issues, ownership) {
316
316
  //#endregion
317
317
  export { createSqliteMigrationPlanner as n, SqliteMigrationPlanner as t };
318
318
 
319
- //# sourceMappingURL=planner-BMV6uAgt-5I9GVELd.mjs.map
319
+ //# sourceMappingURL=planner-Ddpm7j-w-BzyQ-raY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-Ddpm7j-w-BzyQ-raY.mjs","names":["#lowerer"],"sources":["../../../../3-targets/3-targets/sqlite/dist/planner-Ddpm7j-w.mjs"],"sourcesContent":["import { a as DropColumnCall, c as RawSqlCall, l as RecreateTableCall, s as DropTableCall } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { a as sqliteTableRenameByHand, c as sqliteSchemaTables, d as coalesceSubtreeIssues, f as conflictForDisallowedCall, g as buildSqlitePlanDiff, h as sqlitePlannerStrategies, i as sqliteColumnRenameCall, l as indexNameCaseChange, m as planIssues, n as renameTableByHandStatements, o as sqliteTableRenameCall, p as issueNode, r as renderRenameTableCall, s as createWorkingSchema, u as pairIndexReplacements, v as sqliteActualSchema } from \"./sqlite-migration-D7DWt0JL.mjs\";\nimport { t as TypeScriptRenderableSqliteMigration } from \"./planner-produced-sqlite-migration-Cj_QCROn.mjs\";\nimport { issueOutcome } from \"@internal/framework-components/control\";\nimport { detectTableNameCaseChanges, extractCodecControlHooks, fieldEventStorage, planFieldEventCalls, planStatements, plannerFailure, storageNameOfOperation, subjectsOfCalls, unknownCallNames } from \"@internal/family-sql/control\";\nimport { RelationalSchemaNodeKind, SqlTableIR } from \"@internal/sql-schema-ir/types\";\nimport { UNBOUND_NAMESPACE_ID } from \"@internal/framework-components/ir\";\nimport { ok } from \"@internal/utils/result\";\n//#region src/core/migrations/operation-subjects.ts\nfunction tableTarget(table) {\n\treturn {\n\t\tstorageName: table,\n\t\ttable: {\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\ttable,\n\t\t\tcolumn: void 0\n\t\t}\n\t};\n}\nfunction columnTarget(table, column) {\n\treturn {\n\t\tstorageName: `${table}.${column}`,\n\t\ttable: {\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\ttable,\n\t\t\tcolumn\n\t\t}\n\t};\n}\nfunction operationCountOf(call) {\n\treturn \"companions\" in call && Array.isArray(call.companions) ? 1 + call.companions.length : 1;\n}\n/**\n* The columns a recreate loses: those the new table leaves out, whose values the copy drops, and,\n* when the recreate is destructive, those whose type it changes.\n*/\nfunction recreateLosses(call) {\n\tconst kept = new Set(call.contractTable.columns.map((column) => column.name));\n\treturn [...call.schemaColumnNames.filter((column) => !kept.has(column)), ...call.operationClass === \"destructive\" ? call.lossyColumns : []];\n}\n/**\n* What each call of a SQLite plan loses. A recreate that leaves a column out loses its values\n* itself, so a later drop of that column is not listed again.\n*/\nfunction sqliteCallSubjects(calls, fieldEvents) {\n\tconst lost = /* @__PURE__ */ new Set();\n\tconst unknownNames = unknownCallNames(calls.filter((call) => call.operationClass === \"destructive\" && !(call instanceof RecreateTableCall) && !(call instanceof DropColumnCall) && !(call instanceof DropTableCall) && !(call instanceof RawSqlCall) && !fieldEvents.has(call)));\n\treturn calls.map((call) => {\n\t\tconst operationCount = operationCountOf(call);\n\t\tif (call instanceof RecreateTableCall) {\n\t\t\tconst columns = recreateLosses(call);\n\t\t\tfor (const column of columns) lost.add(`${call.tableName}.${column}`);\n\t\t\treturn {\n\t\t\t\toperationCount,\n\t\t\t\tdataLoss: columns.length === 0 && call.operationClass === \"destructive\" ? [tableTarget(call.tableName)] : columns.map((column) => columnTarget(call.tableName, column)),\n\t\t\t\taccessWidening: []\n\t\t\t};\n\t\t}\n\t\tif (call instanceof DropColumnCall) return {\n\t\t\toperationCount,\n\t\t\tdataLoss: lost.has(`${call.tableName}.${call.columnName}`) ? [] : [columnTarget(call.tableName, call.columnName)],\n\t\t\taccessWidening: []\n\t\t};\n\t\tif (call instanceof DropTableCall) return {\n\t\t\toperationCount,\n\t\t\tdataLoss: [tableTarget(call.tableName)],\n\t\t\taccessWidening: []\n\t\t};\n\t\tif (call.operationClass !== \"destructive\") return {\n\t\t\toperationCount,\n\t\t\tdataLoss: [],\n\t\t\taccessWidening: []\n\t\t};\n\t\tconst fieldEvent = fieldEvents.get(call);\n\t\treturn {\n\t\t\toperationCount,\n\t\t\tdataLoss: [call instanceof RawSqlCall ? {\n\t\t\t\tstorageName: storageNameOfOperation(call.op),\n\t\t\t\ttable: void 0\n\t\t\t} : fieldEvent !== void 0 ? fieldEventStorage(fieldEvent) : {\n\t\t\t\tstorageName: unknownNames.get(call) ?? call.factoryName,\n\t\t\t\ttable: void 0\n\t\t\t}],\n\t\t\taccessWidening: []\n\t\t};\n\t});\n}\n//#endregion\n//#region src/core/migrations/planner.ts\nfunction createSqliteMigrationPlanner(lowerer) {\n\treturn new SqliteMigrationPlanner(lowerer);\n}\n/**\n* SQLite migration planner — a thin wrapper over `planIssues`.\n*\n* `plan()` diffs the live schema against the target contract via the one\n* differ (`buildSqlitePlanDiff`, producing node-typed `SchemaDiffIssue[]`)\n* and delegates to `planIssues` with the registered strategies. Strategies\n* absorb groups of related issues into composite recipes (e.g. recreating a\n* table to apply type/nullability/default/constraint changes at once);\n* anything not absorbed by a strategy flows through `mapNodeIssueToCall` in\n* the issue planner as a one-off call.\n*\n* FK-backing indexes are already merged into the expected table node's\n* `indexes` at derivation (`contractToSchemaIR`'s `convertTable`), so\n* `mapNodeIssueToCall` handles them uniformly alongside user-declared\n* indexes — no separate expansion step in the planner.\n*/\nvar SqliteMigrationPlanner = class {\n\t#lowerer;\n\tconstructor(lowerer) {\n\t\tthis.#lowerer = lowerer;\n\t}\n\tplan(options) {\n\t\treturn this.planSql(options);\n\t}\n\temptyMigration(context, spaceId) {\n\t\treturn new TypeScriptRenderableSqliteMigration([], {\n\t\t\tfrom: context.fromHash,\n\t\t\tto: context.toHash\n\t\t}, spaceId, context.snapshotsImportPath, void 0, this.#lowerer);\n\t}\n\tplanSql(options) {\n\t\tconst policyResult = this.ensureAdditivePolicy(options.policy);\n\t\tif (policyResult) return policyResult;\n\t\tconst statements = this.planStatements(options);\n\t\tif (!statements.ok) return plannerFailure([statements.failure]);\n\t\tconst { expected, actual, issues: diffIssues } = this.collectSchemaIssues(options, statements.value.schema);\n\t\tconst replacedIndexes = pairIndexReplacements(diffIssues, indexNameCaseChange);\n\t\tconst disallowedIndexCalls = replacedIndexes.calls.filter((call) => !options.policy.allowedOperationClasses.includes(call.operationClass));\n\t\tif (disallowedIndexCalls.length > 0) return plannerFailure(disallowedIndexCalls.map((call) => conflictForDisallowedCall(call, options.policy.allowedOperationClasses)));\n\t\tconst issues = diffIssues.filter((issue) => !replacedIndexes.consumed.has(issue));\n\t\tconst caseChangeConflicts = detectTableNameCaseChanges({\n\t\t\tissues,\n\t\t\ttableOf: (issue) => {\n\t\t\t\tconst node = issueNode(issue);\n\t\t\t\treturn node instanceof SqlTableIR ? node : void 0;\n\t\t\t},\n\t\t\tnamespaceIdOf: () => UNBOUND_NAMESPACE_ID,\n\t\t\trenameByHandStatements: renameTableByHandStatements,\n\t\t\trenameTableCall: renderRenameTableCall,\n\t\t\tcontract: options.contract,\n\t\t\tdefaultNamespaceId: UNBOUND_NAMESPACE_ID\n\t\t});\n\t\tif (caseChangeConflicts.length > 0) return plannerFailure(caseChangeConflicts);\n\t\tconst codecHooks = extractCodecControlHooks(options.frameworkComponents);\n\t\tconst result = planIssues({\n\t\t\tissues,\n\t\t\texpected,\n\t\t\tactual,\n\t\t\tpolicy: options.policy,\n\t\t\tframeworkComponents: options.frameworkComponents,\n\t\t\tstrategies: sqlitePlannerStrategies\n\t\t});\n\t\tif (!result.ok) return plannerFailure(result.failure);\n\t\tconst fieldEventCalls = planFieldEventCalls({\n\t\t\tpriorContract: options.origin === null ? null : options.fromContract,\n\t\t\tnewContract: options.contract,\n\t\t\tcodecHooks,\n\t\t\ttableRenames: statements.value.tableRenames,\n\t\t\tcolumnRenames: statements.value.columnRenames\n\t\t});\n\t\tconst fieldEventOps = fieldEventCalls.map(({ call }) => call);\n\t\tconst calls = [\n\t\t\t...statements.value.calls,\n\t\t\t...replacedIndexes.calls,\n\t\t\t...result.value.calls,\n\t\t\t...fieldEventOps\n\t\t];\n\t\tconst destination = {\n\t\t\tstorageHash: options.contract.storage.storageHash,\n\t\t\t...options.contract.profileHash !== void 0 ? { profileHash: options.contract.profileHash } : {}\n\t\t};\n\t\treturn {\n\t\t\tkind: \"success\",\n\t\t\tplan: new TypeScriptRenderableSqliteMigration(calls, {\n\t\t\t\tfrom: options.origin?.storageHash ?? null,\n\t\t\t\tto: options.contract.storage.storageHash\n\t\t\t}, options.spaceId, options.snapshotsImportPath, destination, this.#lowerer),\n\t\t\tappliedStatements: statements.value.appliedStatements,\n\t\t\t...subjectsOfCalls(sqliteCallSubjects(calls, new Map(fieldEventCalls.map((fieldEvent) => [fieldEvent.call, fieldEvent]))), {\n\t\t\t\tfromContract: options.fromContract,\n\t\t\t\tcontract: options.contract,\n\t\t\t\tstatements: options.statements,\n\t\t\t\tbyHand: sqliteTableRenameByHand\n\t\t\t})\n\t\t};\n\t}\n\t/**\n\t* Plans the statements against a working copy of the schema the plan starts from, in order, so\n\t* each rename's index replacements are computed against the schema the earlier statements left.\n\t* The diff then runs on that schema.\n\t*/\n\tplanStatements(options) {\n\t\tconst working = createWorkingSchema(sqliteActualSchema(options.schema));\n\t\tconst planned = planStatements({\n\t\t\tstatements: options.statements,\n\t\t\tfromContract: options.fromContract,\n\t\t\tcontract: options.contract,\n\t\t\tpolicy: options.policy,\n\t\t\ttarget: {\n\t\t\t\ttables: () => sqliteSchemaTables(working.current),\n\t\t\t\trenameTableCall: (rename) => sqliteTableRenameCall({\n\t\t\t\t\tprevious: working.current,\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t\trename,\n\t\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t\t}),\n\t\t\t\trenameColumnCall: (rename) => sqliteColumnRenameCall({\n\t\t\t\t\tprevious: working.current,\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t\trename,\n\t\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t\t}),\n\t\t\t\tapply: (call) => working.apply(call),\n\t\t\t\t...sqliteTableRenameByHand\n\t\t\t}\n\t\t});\n\t\tif (!planned.ok) return planned;\n\t\treturn ok({\n\t\t\t...planned.value,\n\t\t\tschema: working.current\n\t\t});\n\t}\n\tensureAdditivePolicy(policy) {\n\t\tif (!policy.allowedOperationClasses.includes(\"additive\")) return plannerFailure([{\n\t\t\tkind: \"unsupportedOperation\",\n\t\t\tsummary: \"Migration planner requires additive operations be allowed\",\n\t\t\twhy: \"The planner requires the \\\"additive\\\" operation class to be allowed in the policy.\"\n\t\t}]);\n\t\treturn null;\n\t}\n\t/**\n\t* Diffs the target contract against the live schema via the one differ\n\t* (the same tree-building `diffSqliteSchema` uses, plus the\n\t* op-render stamper) and prepares the issue list `planIssues` consumes.\n\t*\n\t* Three passes, in order:\n\t* 1. Subtree coalescing — the differ is total (a missing/extra table also\n\t* emits an issue for every column/constraint under it); those nested\n\t* issues are redundant once the table-level `CreateTable`/`DropTable`\n\t* call already accounts for the whole subtree. Runs FIRST, over the\n\t* complete diff: a sibling-owned extra table's column issues must\n\t* collapse into its one table-level issue before the ownership pass,\n\t* because a bare column node carries no table reference — if coalescing\n\t* ran after ownership dropped the table-level issue, the orphaned column\n\t* issues would survive and the planner would emit drops against a\n\t* sibling space's table.\n\t* 2. Ownership — a live extra is only this plan's to drop when no contract\n\t* space owns it. The differ ran against THIS space's contract, so a\n\t* table a sibling owns surfaces here as `not-expected`; the planner asks\n\t* the ownership oracle (the passive aggregate) whether any space declares\n\t* it and, if so, leaves it alone. A table no space owns stays a genuine\n\t* extra. Ownership lives in the aggregate; the planner only asks. No\n\t* oracle (single-space) keeps every extra.\n\t* 3. Strict-mode extras gating — `not-expected` (extra table/column/\n\t* constraint) issues are dropped entirely outside strict mode, mirroring\n\t* the retired coordinate walk's `if (strict) { ...extra_* } }` guards:\n\t* an additive-only plan must never even consider dropping an unclaimed\n\t* object, not just refuse to emit the drop.\n\t*/\n\tcollectSchemaIssues(options, schema) {\n\t\tconst allowed = options.policy.allowedOperationClasses;\n\t\tconst strict = allowed.includes(\"widening\") || allowed.includes(\"destructive\");\n\t\tconst { expected, actual, issues: rawIssues } = buildSqlitePlanDiff({\n\t\t\tcontract: options.contract,\n\t\t\tactualSchema: schema,\n\t\t\tframeworkComponents: options.frameworkComponents\n\t\t});\n\t\tconst owned = retainUnownedExtras(coalesceSubtreeIssues(rawIssues), options.ownership);\n\t\treturn {\n\t\t\texpected,\n\t\t\tactual,\n\t\t\tissues: strict ? owned : owned.filter((issue) => issueOutcome(issue) !== \"not-expected\")\n\t\t};\n\t}\n};\n/**\n* Drops a `not-expected` issue when it is a whole extra TABLE that some\n* contract space owns, asking the ownership oracle per node.\n*\n* The consultation applies ONLY to table-level extras — a live table this\n* space's contract lacks — identified by asking the issue's own node\n* (`nodeKind === table`), never by counting path segments. SQLite is a\n* single-namespace target, so every coordinate is qualified with the shared\n* `UNBOUND_NAMESPACE_ID` sentinel (the same one the aggregate's declared\n* entities carry for this target). `entityKind` is the literal `'table'`:\n* this function only ever asks about a node already confirmed to be\n* `RelationalSchemaNodeKind.table` (checked just above), and that's a\n* diff-tree `nodeKind` spelling (`'sql-table'`) distinct from the storage\n* `entries` vocabulary `elementCoordinates` walks (`'table'`) — the literal\n* is that storage-entries spelling. `declaresEntity` answers over the whole\n* composition (self included), so a positive answer on such a table means\n* another space owns it (a table this space owned would be in its expected\n* tree, never an extra): leave it. A negative answer means no space owns\n* it — a genuine orphan to drop.\n*\n* A DEEPER extra (an extra column/constraint on a table this space DOES own —\n* only the child drifted, so the table is in the expected tree) is this\n* space's own drift and is always kept for dropping; asking the oracle there\n* would wrongly suppress it, because the owned table answers `true`. No oracle\n* ⇒ every extra is kept (single-space plan).\n*/\nfunction retainUnownedExtras(issues, ownership) {\n\tif (ownership === void 0) return issues;\n\treturn issues.filter((issue) => {\n\t\tif (issueOutcome(issue) !== \"not-expected\") return true;\n\t\tconst node = issueNode(issue);\n\t\tif (node === void 0 || node.nodeKind !== RelationalSchemaNodeKind.table) return true;\n\t\tconst tableName = issue.path[1];\n\t\treturn tableName === void 0 || !ownership.declaresEntity({\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\tentityKind: \"table\",\n\t\t\tentityName: tableName\n\t\t});\n\t});\n}\n//#endregion\nexport { createSqliteMigrationPlanner as n, SqliteMigrationPlanner as t };\n\n//# sourceMappingURL=planner-Ddpm7j-w.mjs.map"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { t as SqliteMigration } from "./sqlite-migration-DocfLYRw-Bry1VeFm.mjs";
1
+ import { t as SqliteMigration } from "./sqlite-migration-D7DWt0JL-D_5jFkOx.mjs";
2
2
  import { t as renderOps } from "./render-ops-CBkWzmKj-6vfxyU3K.mjs";
3
3
  import { contractSnapshotJsonSpecifier, contractSnapshotTypesSpecifier } from "@prisma/orm-framework/components/control";
4
4
  import { renderImports } from "@prisma/orm-framework/ts-render";
5
5
  import { resolveRequirementSpecifiers } from "@prisma/orm-framework/components/emission";
6
6
  import { detectScaffoldRuntime, shebangLineFor } from "@prisma/orm-toolchain/migration-tools/migration-ts";
7
- //#region ../../../3-targets/3-targets/sqlite/dist/planner-produced-sqlite-migration-lz_ul9te.mjs
7
+ //#region ../../../3-targets/3-targets/sqlite/dist/planner-produced-sqlite-migration-Cj_QCROn.mjs
8
8
  /**
9
9
  * Polymorphic TypeScript emitter for the SQLite migration IR. Mirrors the
10
10
  * Postgres `render-typescript.ts` — different base-class + factory module
@@ -147,4 +147,4 @@ var TypeScriptRenderableSqliteMigration = class extends SqliteMigration {
147
147
  //#endregion
148
148
  export { TypeScriptRenderableSqliteMigration as t };
149
149
 
150
- //# sourceMappingURL=planner-produced-sqlite-migration-lz_ul9te-DoBx4YeG.mjs.map
150
+ //# sourceMappingURL=planner-produced-sqlite-migration-Cj_QCROn-0eatEGzt.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"planner-produced-sqlite-migration-lz_ul9te-DoBx4YeG.mjs","names":["#calls","#meta","#spaceId","#snapshotsImportPath","#destination","#lowerer","#operationsCache"],"sources":["../../../../3-targets/3-targets/sqlite/dist/planner-produced-sqlite-migration-lz_ul9te.mjs"],"sourcesContent":["import { t as SqliteMigration } from \"./sqlite-migration-DocfLYRw.mjs\";\nimport { t as renderOps } from \"./render-ops-CBkWzmKj.mjs\";\nimport { contractSnapshotJsonSpecifier, contractSnapshotTypesSpecifier } from \"@internal/framework-components/control\";\nimport { renderImports } from \"@internal/ts-render\";\nimport { resolveRequirementSpecifiers } from \"@internal/framework-components/emission\";\nimport { detectScaffoldRuntime, shebangLineFor } from \"@internal/migration-tools/migration-ts\";\n//#region src/core/migrations/render-typescript.ts\n/**\n* Polymorphic TypeScript emitter for the SQLite migration IR. Mirrors the\n* Postgres `render-typescript.ts` — different base-class + factory module\n* specifier, same overall shape.\n*/\n/**\n* Always-present base imports for the rendered scaffold. Both come from\n* `@internal/sqlite/migration` so an authored SQLite\n* `migration.ts` only needs a single dependency for its base class and\n* its CLI entrypoint. Mirrors Postgres's `BASE_IMPORTS`.\n*\n* - `Migration` — the facade re-export fixes the `SqlMigration`\n* generic to `SqlitePlanTargetDetails` and the abstract `targetId` to\n* `'sqlite'`.\n* - `MigrationCLI` — the migration-file CLI entrypoint, re-exported from\n* `@internal/cli/migration-cli`. Loads `prisma.config.ts`,\n* assembles a `ControlStack`, and instantiates the migration class.\n*/\nconst BASE_IMPORTS = [{\n\tmoduleSpecifier: \"@internal/sqlite/migration\",\n\tsymbol: \"Migration\"\n}, {\n\tmoduleSpecifier: \"@internal/sqlite/migration\",\n\tsymbol: \"MigrationCLI\"\n}];\nfunction renderCallsToTypeScript(calls, meta) {\n\tconst imports = buildImports(calls, meta);\n\tconst operationsBody = calls.map((c) => c.renderTypeScript()).join(\",\\n\");\n\tconst hasStart = meta.from !== null;\n\tconst startField = hasStart ? [\" override readonly startContractJson = startContract;\"] : [];\n\treturn [\n\t\tshebangLineFor(detectScaffoldRuntime()),\n\t\timports,\n\t\t\"\",\n\t\t`export default class M extends Migration<${hasStart ? \"Start\" : \"never\"}, End> {`,\n\t\t...startField,\n\t\t\" override readonly endContractJson = endContract;\",\n\t\t\"\",\n\t\t\" override get operations() {\",\n\t\t\" return [\",\n\t\tindent(operationsBody, 6),\n\t\t\" ];\",\n\t\t\" }\",\n\t\t\"}\",\n\t\t\"\",\n\t\t\"MigrationCLI.run(import.meta.url, M);\",\n\t\t\"\"\n\t].join(\"\\n\");\n}\nfunction buildImports(calls, meta) {\n\tconst requirements = [...BASE_IMPORTS, ...contractImports(meta)];\n\tfor (const call of calls) for (const req of call.importRequirements()) requirements.push(req);\n\treturn renderImports(resolveRequirementSpecifiers(requirements, meta.resolveImportSpecifier));\n}\n/**\n* The committed contract-JSON imports the scaffold reads its from/to identity\n* from, resolved to the deduplicated snapshot store under\n* `meta.snapshotsImportPath`. The end snapshot is always present; the start\n* snapshot is added only for a non-baseline migration (`meta.from !== null`).\n* The matching `Contract` type imports (aliased `Start`/`End`) feed the\n* `Migration<Start, End>` generics. Baseline emits `Migration<never, End>` with\n* no start imports — `never` is the honest \"no prior contract\" Start.\n*/\nfunction contractImports(meta) {\n\tconst reqs = [{\n\t\tmoduleSpecifier: contractSnapshotJsonSpecifier(meta.snapshotsImportPath, meta.to),\n\t\tsymbol: \"endContract\",\n\t\tkind: \"default\",\n\t\tattributes: { type: \"json\" }\n\t}, {\n\t\tmoduleSpecifier: contractSnapshotTypesSpecifier(meta.snapshotsImportPath, meta.to),\n\t\tsymbol: \"Contract\",\n\t\talias: \"End\",\n\t\ttypeOnly: true\n\t}];\n\tif (meta.from !== null) {\n\t\treqs.push({\n\t\t\tmoduleSpecifier: contractSnapshotJsonSpecifier(meta.snapshotsImportPath, meta.from),\n\t\t\tsymbol: \"startContract\",\n\t\t\tkind: \"default\",\n\t\t\tattributes: { type: \"json\" }\n\t\t});\n\t\treqs.push({\n\t\t\tmoduleSpecifier: contractSnapshotTypesSpecifier(meta.snapshotsImportPath, meta.from),\n\t\t\tsymbol: \"Contract\",\n\t\t\talias: \"Start\",\n\t\t\ttypeOnly: true\n\t\t});\n\t}\n\treturn reqs;\n}\nfunction indent(text, spaces) {\n\tconst pad = \" \".repeat(spaces);\n\treturn text.split(\"\\n\").map((line) => line.trim() ? `${pad}${line}` : line).join(\"\\n\");\n}\n//#endregion\n//#region src/core/migrations/planner-produced-sqlite-migration.ts\nvar TypeScriptRenderableSqliteMigration = class extends SqliteMigration {\n\t#calls;\n\t#meta;\n\t#destination;\n\t#spaceId;\n\t#snapshotsImportPath;\n\t#lowerer;\n\t#operationsCache;\n\tconstructor(calls, meta, spaceId, snapshotsImportPath, destination, lowerer) {\n\t\tsuper();\n\t\tthis.#calls = calls;\n\t\tthis.#meta = meta;\n\t\tthis.#spaceId = spaceId;\n\t\tthis.#snapshotsImportPath = snapshotsImportPath;\n\t\tthis.#destination = destination ?? { storageHash: meta.to };\n\t\tthis.#lowerer = lowerer;\n\t}\n\tget operations() {\n\t\tthis.#operationsCache ??= renderOps(this.#calls, this.#lowerer);\n\t\treturn this.#operationsCache;\n\t}\n\tdescribe() {\n\t\treturn this.#meta;\n\t}\n\tget destination() {\n\t\treturn this.#destination;\n\t}\n\t/**\n\t* Contract space this planner-produced plan applies to. Threaded\n\t* from {@link SqlMigrationPlannerPlanOptions.spaceId} so the runner\n\t* keys the marker row by the right space when executing the plan.\n\t*/\n\tget spaceId() {\n\t\treturn this.#spaceId;\n\t}\n\trenderTypeScript(resolveImportSpecifier) {\n\t\treturn renderCallsToTypeScript(this.#calls, {\n\t\t\tfrom: this.#meta.from,\n\t\t\tto: this.#meta.to,\n\t\t\tsnapshotsImportPath: this.#snapshotsImportPath,\n\t\t\tresolveImportSpecifier\n\t\t});\n\t}\n};\n//#endregion\nexport { TypeScriptRenderableSqliteMigration as t };\n\n//# sourceMappingURL=planner-produced-sqlite-migration-lz_ul9te.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,eAAe,CAAC;CACrB,iBAAiB;CACjB,QAAQ;AACT,GAAG;CACF,iBAAiB;CACjB,QAAQ;AACT,CAAC;AACD,SAAS,wBAAwB,OAAO,MAAM;CAC7C,MAAM,UAAU,aAAa,OAAO,IAAI;CACxC,MAAM,iBAAiB,MAAM,KAAK,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,KAAK;CACxE,MAAM,WAAW,KAAK,SAAS;CAC/B,MAAM,aAAa,WAAW,CAAC,wDAAwD,IAAI,CAAC;CAC5F,OAAO;EACN,eAAe,sBAAsB,CAAC;EACtC;EACA;EACA,4CAA4C,WAAW,UAAU,QAAQ;EACzE,GAAG;EACH;EACA;EACA;EACA;EACA,OAAO,gBAAgB,CAAC;EACxB;EACA;EACA;EACA;EACA;EACA;CACD,CAAC,CAAC,KAAK,IAAI;AACZ;AACA,SAAS,aAAa,OAAO,MAAM;CAClC,MAAM,eAAe,CAAC,GAAG,cAAc,GAAG,gBAAgB,IAAI,CAAC;CAC/D,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,OAAO,KAAK,mBAAmB,GAAG,aAAa,KAAK,GAAG;CAC5F,OAAO,cAAc,6BAA6B,cAAc,KAAK,sBAAsB,CAAC;AAC7F;;;;;;;;;;AAUA,SAAS,gBAAgB,MAAM;CAC9B,MAAM,OAAO,CAAC;EACb,iBAAiB,8BAA8B,KAAK,qBAAqB,KAAK,EAAE;EAChF,QAAQ;EACR,MAAM;EACN,YAAY,EAAE,MAAM,OAAO;CAC5B,GAAG;EACF,iBAAiB,+BAA+B,KAAK,qBAAqB,KAAK,EAAE;EACjF,QAAQ;EACR,OAAO;EACP,UAAU;CACX,CAAC;CACD,IAAI,KAAK,SAAS,MAAM;EACvB,KAAK,KAAK;GACT,iBAAiB,8BAA8B,KAAK,qBAAqB,KAAK,IAAI;GAClF,QAAQ;GACR,MAAM;GACN,YAAY,EAAE,MAAM,OAAO;EAC5B,CAAC;EACD,KAAK,KAAK;GACT,iBAAiB,+BAA+B,KAAK,qBAAqB,KAAK,IAAI;GACnF,QAAQ;GACR,OAAO;GACP,UAAU;EACX,CAAC;CACF;CACA,OAAO;AACR;AACA,SAAS,OAAO,MAAM,QAAQ;CAC7B,MAAM,MAAM,IAAI,OAAO,MAAM;CAC7B,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,IAAI,GAAG,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI;AACtF;AAGA,IAAI,sCAAsC,cAAc,gBAAgB;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,OAAO,MAAM,SAAS,qBAAqB,aAAa,SAAS;EAC5E,MAAM;EACN,KAAKA,SAAS;EACd,KAAKC,QAAQ;EACb,KAAKC,WAAW;EAChB,KAAKC,uBAAuB;EAC5B,KAAKC,eAAe,eAAe,EAAE,aAAa,KAAK,GAAG;EAC1D,KAAKC,WAAW;CACjB;CACA,IAAI,aAAa;EAChB,KAAKC,qBAAqB,UAAU,KAAKN,QAAQ,KAAKK,QAAQ;EAC9D,OAAO,KAAKC;CACb;CACA,WAAW;EACV,OAAO,KAAKL;CACb;CACA,IAAI,cAAc;EACjB,OAAO,KAAKG;CACb;;;;;;CAMA,IAAI,UAAU;EACb,OAAO,KAAKF;CACb;CACA,iBAAiB,wBAAwB;EACxC,OAAO,wBAAwB,KAAKF,QAAQ;GAC3C,MAAM,KAAKC,MAAM;GACjB,IAAI,KAAKA,MAAM;GACf,qBAAqB,KAAKE;GAC1B;EACD,CAAC;CACF;AACD"}
1
+ {"version":3,"file":"planner-produced-sqlite-migration-Cj_QCROn-0eatEGzt.mjs","names":["#calls","#meta","#spaceId","#snapshotsImportPath","#destination","#lowerer","#operationsCache"],"sources":["../../../../3-targets/3-targets/sqlite/dist/planner-produced-sqlite-migration-Cj_QCROn.mjs"],"sourcesContent":["import { t as SqliteMigration } from \"./sqlite-migration-D7DWt0JL.mjs\";\nimport { t as renderOps } from \"./render-ops-CBkWzmKj.mjs\";\nimport { contractSnapshotJsonSpecifier, contractSnapshotTypesSpecifier } from \"@internal/framework-components/control\";\nimport { renderImports } from \"@internal/ts-render\";\nimport { resolveRequirementSpecifiers } from \"@internal/framework-components/emission\";\nimport { detectScaffoldRuntime, shebangLineFor } from \"@internal/migration-tools/migration-ts\";\n//#region src/core/migrations/render-typescript.ts\n/**\n* Polymorphic TypeScript emitter for the SQLite migration IR. Mirrors the\n* Postgres `render-typescript.ts` — different base-class + factory module\n* specifier, same overall shape.\n*/\n/**\n* Always-present base imports for the rendered scaffold. Both come from\n* `@internal/sqlite/migration` so an authored SQLite\n* `migration.ts` only needs a single dependency for its base class and\n* its CLI entrypoint. Mirrors Postgres's `BASE_IMPORTS`.\n*\n* - `Migration` — the facade re-export fixes the `SqlMigration`\n* generic to `SqlitePlanTargetDetails` and the abstract `targetId` to\n* `'sqlite'`.\n* - `MigrationCLI` — the migration-file CLI entrypoint, re-exported from\n* `@internal/cli/migration-cli`. Loads `prisma.config.ts`,\n* assembles a `ControlStack`, and instantiates the migration class.\n*/\nconst BASE_IMPORTS = [{\n\tmoduleSpecifier: \"@internal/sqlite/migration\",\n\tsymbol: \"Migration\"\n}, {\n\tmoduleSpecifier: \"@internal/sqlite/migration\",\n\tsymbol: \"MigrationCLI\"\n}];\nfunction renderCallsToTypeScript(calls, meta) {\n\tconst imports = buildImports(calls, meta);\n\tconst operationsBody = calls.map((c) => c.renderTypeScript()).join(\",\\n\");\n\tconst hasStart = meta.from !== null;\n\tconst startField = hasStart ? [\" override readonly startContractJson = startContract;\"] : [];\n\treturn [\n\t\tshebangLineFor(detectScaffoldRuntime()),\n\t\timports,\n\t\t\"\",\n\t\t`export default class M extends Migration<${hasStart ? \"Start\" : \"never\"}, End> {`,\n\t\t...startField,\n\t\t\" override readonly endContractJson = endContract;\",\n\t\t\"\",\n\t\t\" override get operations() {\",\n\t\t\" return [\",\n\t\tindent(operationsBody, 6),\n\t\t\" ];\",\n\t\t\" }\",\n\t\t\"}\",\n\t\t\"\",\n\t\t\"MigrationCLI.run(import.meta.url, M);\",\n\t\t\"\"\n\t].join(\"\\n\");\n}\nfunction buildImports(calls, meta) {\n\tconst requirements = [...BASE_IMPORTS, ...contractImports(meta)];\n\tfor (const call of calls) for (const req of call.importRequirements()) requirements.push(req);\n\treturn renderImports(resolveRequirementSpecifiers(requirements, meta.resolveImportSpecifier));\n}\n/**\n* The committed contract-JSON imports the scaffold reads its from/to identity\n* from, resolved to the deduplicated snapshot store under\n* `meta.snapshotsImportPath`. The end snapshot is always present; the start\n* snapshot is added only for a non-baseline migration (`meta.from !== null`).\n* The matching `Contract` type imports (aliased `Start`/`End`) feed the\n* `Migration<Start, End>` generics. Baseline emits `Migration<never, End>` with\n* no start imports — `never` is the honest \"no prior contract\" Start.\n*/\nfunction contractImports(meta) {\n\tconst reqs = [{\n\t\tmoduleSpecifier: contractSnapshotJsonSpecifier(meta.snapshotsImportPath, meta.to),\n\t\tsymbol: \"endContract\",\n\t\tkind: \"default\",\n\t\tattributes: { type: \"json\" }\n\t}, {\n\t\tmoduleSpecifier: contractSnapshotTypesSpecifier(meta.snapshotsImportPath, meta.to),\n\t\tsymbol: \"Contract\",\n\t\talias: \"End\",\n\t\ttypeOnly: true\n\t}];\n\tif (meta.from !== null) {\n\t\treqs.push({\n\t\t\tmoduleSpecifier: contractSnapshotJsonSpecifier(meta.snapshotsImportPath, meta.from),\n\t\t\tsymbol: \"startContract\",\n\t\t\tkind: \"default\",\n\t\t\tattributes: { type: \"json\" }\n\t\t});\n\t\treqs.push({\n\t\t\tmoduleSpecifier: contractSnapshotTypesSpecifier(meta.snapshotsImportPath, meta.from),\n\t\t\tsymbol: \"Contract\",\n\t\t\talias: \"Start\",\n\t\t\ttypeOnly: true\n\t\t});\n\t}\n\treturn reqs;\n}\nfunction indent(text, spaces) {\n\tconst pad = \" \".repeat(spaces);\n\treturn text.split(\"\\n\").map((line) => line.trim() ? `${pad}${line}` : line).join(\"\\n\");\n}\n//#endregion\n//#region src/core/migrations/planner-produced-sqlite-migration.ts\nvar TypeScriptRenderableSqliteMigration = class extends SqliteMigration {\n\t#calls;\n\t#meta;\n\t#destination;\n\t#spaceId;\n\t#snapshotsImportPath;\n\t#lowerer;\n\t#operationsCache;\n\tconstructor(calls, meta, spaceId, snapshotsImportPath, destination, lowerer) {\n\t\tsuper();\n\t\tthis.#calls = calls;\n\t\tthis.#meta = meta;\n\t\tthis.#spaceId = spaceId;\n\t\tthis.#snapshotsImportPath = snapshotsImportPath;\n\t\tthis.#destination = destination ?? { storageHash: meta.to };\n\t\tthis.#lowerer = lowerer;\n\t}\n\tget operations() {\n\t\tthis.#operationsCache ??= renderOps(this.#calls, this.#lowerer);\n\t\treturn this.#operationsCache;\n\t}\n\tdescribe() {\n\t\treturn this.#meta;\n\t}\n\tget destination() {\n\t\treturn this.#destination;\n\t}\n\t/**\n\t* Contract space this planner-produced plan applies to. Threaded\n\t* from {@link SqlMigrationPlannerPlanOptions.spaceId} so the runner\n\t* keys the marker row by the right space when executing the plan.\n\t*/\n\tget spaceId() {\n\t\treturn this.#spaceId;\n\t}\n\trenderTypeScript(resolveImportSpecifier) {\n\t\treturn renderCallsToTypeScript(this.#calls, {\n\t\t\tfrom: this.#meta.from,\n\t\t\tto: this.#meta.to,\n\t\t\tsnapshotsImportPath: this.#snapshotsImportPath,\n\t\t\tresolveImportSpecifier\n\t\t});\n\t}\n};\n//#endregion\nexport { TypeScriptRenderableSqliteMigration as t };\n\n//# sourceMappingURL=planner-produced-sqlite-migration-Cj_QCROn.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,eAAe,CAAC;CACrB,iBAAiB;CACjB,QAAQ;AACT,GAAG;CACF,iBAAiB;CACjB,QAAQ;AACT,CAAC;AACD,SAAS,wBAAwB,OAAO,MAAM;CAC7C,MAAM,UAAU,aAAa,OAAO,IAAI;CACxC,MAAM,iBAAiB,MAAM,KAAK,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,KAAK;CACxE,MAAM,WAAW,KAAK,SAAS;CAC/B,MAAM,aAAa,WAAW,CAAC,wDAAwD,IAAI,CAAC;CAC5F,OAAO;EACN,eAAe,sBAAsB,CAAC;EACtC;EACA;EACA,4CAA4C,WAAW,UAAU,QAAQ;EACzE,GAAG;EACH;EACA;EACA;EACA;EACA,OAAO,gBAAgB,CAAC;EACxB;EACA;EACA;EACA;EACA;EACA;CACD,CAAC,CAAC,KAAK,IAAI;AACZ;AACA,SAAS,aAAa,OAAO,MAAM;CAClC,MAAM,eAAe,CAAC,GAAG,cAAc,GAAG,gBAAgB,IAAI,CAAC;CAC/D,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,OAAO,KAAK,mBAAmB,GAAG,aAAa,KAAK,GAAG;CAC5F,OAAO,cAAc,6BAA6B,cAAc,KAAK,sBAAsB,CAAC;AAC7F;;;;;;;;;;AAUA,SAAS,gBAAgB,MAAM;CAC9B,MAAM,OAAO,CAAC;EACb,iBAAiB,8BAA8B,KAAK,qBAAqB,KAAK,EAAE;EAChF,QAAQ;EACR,MAAM;EACN,YAAY,EAAE,MAAM,OAAO;CAC5B,GAAG;EACF,iBAAiB,+BAA+B,KAAK,qBAAqB,KAAK,EAAE;EACjF,QAAQ;EACR,OAAO;EACP,UAAU;CACX,CAAC;CACD,IAAI,KAAK,SAAS,MAAM;EACvB,KAAK,KAAK;GACT,iBAAiB,8BAA8B,KAAK,qBAAqB,KAAK,IAAI;GAClF,QAAQ;GACR,MAAM;GACN,YAAY,EAAE,MAAM,OAAO;EAC5B,CAAC;EACD,KAAK,KAAK;GACT,iBAAiB,+BAA+B,KAAK,qBAAqB,KAAK,IAAI;GACnF,QAAQ;GACR,OAAO;GACP,UAAU;EACX,CAAC;CACF;CACA,OAAO;AACR;AACA,SAAS,OAAO,MAAM,QAAQ;CAC7B,MAAM,MAAM,IAAI,OAAO,MAAM;CAC7B,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,IAAI,GAAG,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI;AACtF;AAGA,IAAI,sCAAsC,cAAc,gBAAgB;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,OAAO,MAAM,SAAS,qBAAqB,aAAa,SAAS;EAC5E,MAAM;EACN,KAAKA,SAAS;EACd,KAAKC,QAAQ;EACb,KAAKC,WAAW;EAChB,KAAKC,uBAAuB;EAC5B,KAAKC,eAAe,eAAe,EAAE,aAAa,KAAK,GAAG;EAC1D,KAAKC,WAAW;CACjB;CACA,IAAI,aAAa;EAChB,KAAKC,qBAAqB,UAAU,KAAKN,QAAQ,KAAKK,QAAQ;EAC9D,OAAO,KAAKC;CACb;CACA,WAAW;EACV,OAAO,KAAKL;CACb;CACA,IAAI,cAAc;EACjB,OAAO,KAAKG;CACb;;;;;;CAMA,IAAI,UAAU;EACb,OAAO,KAAKF;CACb;CACA,iBAAiB,wBAAwB;EACxC,OAAO,wBAAwB,KAAKF,QAAQ;GAC3C,MAAM,KAAKC,MAAM;GACjB,IAAI,KAAKA,MAAM;GACf,qBAAqB,KAAKE;GAC1B;EACD,CAAC;CACF;AACD"}
@@ -19,7 +19,7 @@ import { namingOf, namingOfLiveName, parseWireName } from "@prisma/orm-family-sq
19
19
  import { isArrayEqual } from "@prisma/orm-framework/utils/array-equal";
20
20
  import { Migration } from "@prisma/orm-family-sql/family/migration";
21
21
  import { MigrationContractViews } from "@prisma/orm-toolchain/migration-tools/migration";
22
- //#region ../../../3-targets/3-targets/sqlite/dist/sqlite-migration-DocfLYRw.mjs
22
+ //#region ../../../3-targets/3-targets/sqlite/dist/sqlite-migration-D7DWt0JL.mjs
23
23
  /** Renders a column default for the SQLite dialect. */
24
24
  function sqliteRenderDefault(def, column) {
25
25
  if (def.kind === "function") {
@@ -929,6 +929,11 @@ function renameTableByHandStatements(rename) {
929
929
  function renderRenameTableCall(rename) {
930
930
  return new RenameTableCall(rename.from, rename.to, []).renderTypeScript();
931
931
  }
932
+ /** How a user renames a table by hand on SQLite. */
933
+ const sqliteTableRenameByHand = {
934
+ renderTableRename: renderRenameTableCall,
935
+ tableRenameByHand: renameTableByHandStatements
936
+ };
932
937
  /**
933
938
  * The call that renames a table, carrying as companions a drop and a create under the new name of
934
939
  * each index whose wire name derives from the old table name, since SQLite cannot rename an index.
@@ -1156,6 +1161,6 @@ function columnSpecOf(column, operation, table) {
1156
1161
  };
1157
1162
  }
1158
1163
  //#endregion
1159
- export { sqliteSchemaTables as _, createWorkingSchema as a, issueNode as c, renameTableByHandStatements as d, renderRenameTableCall as f, sqlitePlannerStrategies as g, sqliteContractToSchema as h, conflictForDisallowedCall as i, pairIndexReplacements as l, sqliteColumnRenameCall as m, buildSqlitePlanDiff as n, diffSqliteSchema as o, sqliteActualSchema as p, coalesceSubtreeIssues as r, indexNameCaseChange as s, SqliteMigration as t, planIssues as u, sqliteTableRenameCall as v, verifySqliteDatabaseSchema as y };
1164
+ export { sqliteSchemaTables as _, createWorkingSchema as a, verifySqliteDatabaseSchema as b, issueNode as c, renameTableByHandStatements as d, renderRenameTableCall as f, sqlitePlannerStrategies as g, sqliteContractToSchema as h, conflictForDisallowedCall as i, pairIndexReplacements as l, sqliteColumnRenameCall as m, buildSqlitePlanDiff as n, diffSqliteSchema as o, sqliteActualSchema as p, coalesceSubtreeIssues as r, indexNameCaseChange as s, SqliteMigration as t, planIssues as u, sqliteTableRenameByHand as v, sqliteTableRenameCall as y };
1160
1165
 
1161
- //# sourceMappingURL=sqlite-migration-DocfLYRw-Bry1VeFm.mjs.map
1166
+ //# sourceMappingURL=sqlite-migration-D7DWt0JL-D_5jFkOx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-migration-DocfLYRw-Bry1VeFm.mjs","names":["#current","#endView","#startView","#renames"],"sources":["../../../../3-targets/3-targets/sqlite/dist/sqlite-migration-DocfLYRw.mjs"],"sourcesContent":["import { n as sqliteError, t as errorSqliteMigrationStackMissing } from \"./errors-DnR-sMHS.mjs\";\nimport { n as SQLITE_NOW_EXPRESSION } from \"./datetime-text-Bniwehv-.mjs\";\nimport { n as sqliteResolveDefault } from \"./default-normalizer-Ch3VFnEH.mjs\";\nimport { _ as sqliteDefaultToDdlColumnDefault, a as DropColumnCall, b as buildColumnTypeSql, d as RenameTableCall, f as indexReplacementCalls, g as renameTableSteps, h as buildRecreateSummary, i as DataTransformCall, l as RecreateTableCall, m as buildRecreatePostchecks, n as CreateIndexCall, o as DropIndexCall, r as CreateTableCall, s as DropTableCall, t as AddColumnCall, u as RenameColumnCall, x as renderDefaultLiteral, y as sqliteIdentifiersCollide } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { t as CONTROL_TABLE_NAMES } from \"./control-tables-D_o8dKRB.mjs\";\nimport { t as SqliteContractView } from \"./sqlite-contract-view-BrXalcTm.mjs\";\nimport { DdlColumn, ForeignKeyConstraint, PrimaryKeyConstraint, UniqueConstraint } from \"@internal/sql-relational-core/ast\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { diffSchemas, issueOutcome, orderIssuesByDependencies } from \"@internal/framework-components/control\";\nimport { contractToSchemaIR, resolveColumnRenameAgainst, resolveTableRenameAgainst, sqlTypeLookupsOf, unmatchedColumnRename, unmatchedTableRename } from \"@internal/family-sql/control\";\nimport { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlTableIR, SqlUniqueIR, contractDefaultRefusal, relationalNodeGranularity } from \"@internal/sql-schema-ir/types\";\nimport { UNBOUND_NAMESPACE_ID, entityAt } from \"@internal/framework-components/ir\";\nimport { verifySqlSchemaByDiff } from \"@internal/family-sql/diff\";\nimport { notOk, ok } from \"@internal/utils/result\";\nimport { namingOf, namingOfLiveName, parseWireName } from \"@internal/sql-schema-ir/naming\";\nimport { isArrayEqual } from \"@internal/utils/array-equal\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { sqlTextOf } from \"@internal/sql-relational-core/contract-free\";\nimport { Migration } from \"@internal/family-sql/migration\";\nimport { MigrationContractViews } from \"@internal/migration-tools/migration\";\n//#region src/core/migrations/diff-database-schema.ts\n/** Renders a column default for the SQLite dialect. */\nfunction sqliteRenderDefault(def, column) {\n\tif (def.kind === \"function\") {\n\t\tif (def.expression === \"now()\") return SQLITE_NOW_EXPRESSION;\n\t\treturn def.expression;\n\t}\n\treturn renderDefaultLiteral(def.value, column);\n}\n/**\n* The SQLite expected-side projection: contract → flat relational schema IR.\n*\n* Each column's type is written from the data type its codec represents.\n* Every expected column also carries its `codecRef` unconditionally\n* (Decision 5) — the planner's op-builders resolve DDL rendering from it at\n* plan time, so no separate render stamper is threaded here.\n*/\nfunction sqliteContractToSchema(contract, types) {\n\treturn contractToSchemaIR(contract, {\n\t\tannotationNamespace: \"sqlite\",\n\t\trenderDefault: sqliteRenderDefault,\n\t\tresolveDefault: sqliteResolveDefault,\n\t\tdataTypeLookup: types.dataTypeLookup,\n\t\tcodecLookup: types.codecLookup\n\t});\n}\n/**\n* The SQLite schema verify: the full-tree node-diff verdict wrapped in the\n* issue-based result envelope. Used by the runner's post-apply check; the\n* family `verifySchema` runs the same composition via the descriptor hook.\n*/\nfunction verifySqliteDatabaseSchema(input) {\n\treturn verifySqlSchemaByDiff({\n\t\tcontract: input.contract,\n\t\tschema: input.actualSchema,\n\t\tstrict: input.strict,\n\t\tframeworkComponents: input.frameworkComponents,\n\t\tdiffSchema: diffSqliteSchema,\n\t\tgranularityOf: relationalNodeGranularity\n\t});\n}\n/**\n* Resolves a verdict-diff issue's subject table's declared control policy\n* directly from the contract. SQLite's expected tree is flat, so the issue\n* path carries no namespace segment — `path[1]` is the table name (`path[0]`\n* is the tree root's own id); every contract namespace is searched for that\n* table name (table names are globally unique in the flat tree — duplicates\n* across namespaces are rejected earlier, at `contractToSchemaIR`).\n*/\nfunction resolveControlPolicy(issue, contract) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return void 0;\n\tfor (const namespaceId of Object.keys(contract.storage.namespaces)) {\n\t\tconst table = entityAt(contract.storage, {\n\t\t\tnamespaceId,\n\t\t\tentityKind: \"table\",\n\t\t\tentityName: tableName\n\t\t});\n\t\tif (table !== void 0) return table.control;\n\t}\n}\n/**\n* The SQLite full-tree node diff for the family verify verdict: derive the\n* expected flat tree with resolved leaf values (parameterized types written\n* with their parameters; FK nodes born with the flat empty\n* `resolvedReferencedNamespace`), and run the generic differ over the trees\n* as derived. Flat targets need no ownership scoping. The codec `verifyType`\n* hooks run once per contract namespace with tables, each against the sole\n* flat actual root — exactly the legacy per-namespace pairing.\n*/\nfunction diffSqliteSchema(input) {\n\tconst types = sqlTypeLookupsOf(input.frameworkComponents);\n\tconst expected = sqliteContractToSchema(input.contract, types);\n\tconst actual = input.schema instanceof SqlSchemaIR ? input.schema : blindCast(input.schema);\n\treturn {\n\t\tissues: diffSchemas(expected, actual),\n\t\tresolveControlPolicy: (issue) => resolveControlPolicy(issue, input.contract),\n\t\tnamespacePairs: Object.values(input.contract.storage.namespaces).filter((ns) => Object.keys(ns.entries.table ?? {}).length > 0).map(() => ({ actual }))\n\t};\n}\n/**\n* The SQLite planner's diff input: the same tree-building\n* `diffSqliteSchema` uses (FK nodes born flat). One differ\n* drives both verify and plan over the trees as derived; this is the plan-side\n* derivation — column DDL resolves from each expected column's `codecRef` at\n* plan time (`column-ddl-rendering.ts`), so no separate render stamping happens here.\n*/\nfunction buildSqlitePlanDiff(input) {\n\tconst types = sqlTypeLookupsOf(input.frameworkComponents);\n\tconst expected = sqliteContractToSchema(input.contract, types);\n\tconst actual = sqliteActualSchema(input.actualSchema);\n\treturn {\n\t\texpected,\n\t\tactual,\n\t\tissues: diffSchemas(expected, actual)\n\t};\n}\n/** The schema a plan starts from as a `SqlSchemaIR`, its table and column names taken from their keys. */\nfunction sqliteActualSchema(actualSchema) {\n\treturn new SqlSchemaIR(withRecordKeyNames(actualSchema));\n}\n/**\n* Every schema-tree builder in this codebase derives a table's / column's\n* `name` from the record key it's stored under (`contractToSchemaIR`,\n* the SQLite introspection adapter) rather than trusting a redundant\n* embedded field — the record key IS the identity. Mirrors that discipline\n* for the actual/live tree before construction, so `SqlTableIR.id` /\n* `SqlColumnIR.id` (both derived from `.name`) are always correct without\n* requiring every caller to duplicate the key onto the value. A no-op for a\n* tree that already carries matching names (the real introspection adapter\n* always does).\n*/\nfunction withRecordKeyNames(actualSchema) {\n\tconst raw = blindCast(actualSchema);\n\tconst tables = {};\n\tfor (const [tableName, table] of Object.entries(raw.tables ?? {})) {\n\t\tconst rawTable = blindCast(table);\n\t\tconst columns = {};\n\t\tfor (const [columnName, column] of Object.entries(blindCast(table).columns ?? {})) columns[columnName] = {\n\t\t\t...blindCast(column),\n\t\t\tname: columnName\n\t\t};\n\t\ttables[tableName] = {\n\t\t\t...rawTable,\n\t\t\tname: tableName,\n\t\t\tcolumns,\n\t\t\tforeignKeys: rawTable.foreignKeys ?? [],\n\t\t\tuniques: rawTable.uniques ?? [],\n\t\t\tindexes: rawTable.indexes ?? []\n\t\t};\n\t}\n\treturn { tables };\n}\n//#endregion\n//#region src/core/migrations/column-ddl-rendering.ts\n/**\n* Reconstructs the `StorageColumn`-shaped fields `buildColumnTypeSql`\n* expects, from a column node's own stamped codec\n* identity (`codecRef` / `codecBaseNativeType`, Decision 5) — never the\n* contract. `typeRef` is deliberately left unset here: setting it would send\n* `buildColumnTypeSql` back through a live `storageTypes` lookup the node's\n* fields have already resolved past, which throws for an unrecognized\n* reference.\n*/\nfunction columnLike(column) {\n\tif (column.codecRef === void 0 || column.codecBaseNativeType === void 0) throw new InternalError(`columnLike: expected column \"${column.name}\" carries no codec identity — the expected tree must be derived via contractToSchemaIR for planning`);\n\treturn {\n\t\tcodecId: column.codecRef.codecId,\n\t\tnullable: column.nullable,\n\t\tmany: column.many ?? column.codecRef.many ? { elementNullable: false } : false,\n\t\t...column.codecRef.typeParams !== void 0 ? { typeParams: blindCast(column.codecRef.typeParams) } : {},\n\t\t...ifDefined(\"default\", plannableDefault(column))\n\t};\n}\n/**\n* The default DDL writes. A contract default the canonical form of the column's values refuses,\n* which a contract emitted by an earlier version can hold, is refused rather than written.\n*/\nfunction plannableDefault(column) {\n\tconst columnDefault = column.authoredDefault ?? column.resolvedDefault;\n\tconst refusal = contractDefaultRefusal(columnDefault, column.toCanonicalForm, (column.many ?? column.codecRef?.many) === true);\n\tif (refusal !== void 0) throw sqliteError(\"CONTRACT.DEFAULT_INVALID\", `Column \"${column.name}\": ${refusal}`, { meta: {\n\t\treason: \"default-not-canonical\",\n\t\tcolumn: column.name\n\t} });\n\treturn columnDefault;\n}\n/**\n* True when the column is rendered inline as `INTEGER PRIMARY KEY\n* AUTOINCREMENT` — the sole member of the table's primary key with an\n* `autoincrement()` default. Node-based sibling of the retired\n* `isInlineAutoincrementPrimaryKey` (which read the raw `StorageTable`);\n* reads the table/column nodes instead.\n*/\nfunction isInlineAutoincrementPrimaryKeyNode(table, column) {\n\tif (table.primaryKey?.columns.length !== 1) return false;\n\tif (table.primaryKey.columns[0] !== column.name) return false;\n\treturn column.resolvedDefault?.kind === \"function\" && column.resolvedDefault.expression === \"autoincrement()\";\n}\n/**\n* Builds the flat `SqliteColumnSpec` `AddColumnCall` / `RecreateTableCall`\n* need, resolved from the column node's codec identity — the same builders\n* the pre-`plan(start, end)` op-path called, so the output is\n* byte-identical.\n*/\nfunction columnSpecFromNode(column, inline, types) {\n\tconst like = columnLike(column);\n\tconst typeSql = buildColumnTypeSql(like, types);\n\treturn {\n\t\tname: column.name,\n\t\ttypeSql,\n\t\t...inline ? {} : {\n\t\t\t...ifDefined(\"default\", like.default),\n\t\t\t...ifDefined(\"codecRef\", column.codecRef)\n\t\t},\n\t\tnullable: column.nullable,\n\t\t...inline ? { inlineAutoincrementPrimaryKey: true } : {}\n\t};\n}\n/**\n* Builds the `DdlColumn` the `CreateTableCall` path needs, resolved from the\n* column node's codec identity.\n*/\nfunction ddlColumnFromNode(column, inline, types) {\n\tconst like = columnLike(column);\n\tconst typeSql = buildColumnTypeSql(like, types);\n\tif (inline) return new DdlColumn({\n\t\tname: column.name,\n\t\ttype: `${typeSql} PRIMARY KEY AUTOINCREMENT`\n\t});\n\tconst colDefault = sqliteDefaultToDdlColumnDefault(like.default);\n\treturn new DdlColumn({\n\t\tname: column.name,\n\t\ttype: typeSql,\n\t\t...!column.nullable ? { notNull: true } : {},\n\t\t...colDefault !== void 0 ? { default: colDefault } : {},\n\t\t...column.codecRef !== void 0 ? { codecRef: column.codecRef } : {}\n\t});\n}\n/**\n* Builds the table-level constraints (PK / unique / FK) for a `CreateTable`\n* path from the table node — the node-sourced sibling of the retired\n* contract-based `tableToDdlParts`'s constraint half.\n*\n* A check constraint on the table node throws rather than being dropped.\n* `@@check` is refused earlier, by the `sql.checkConstraint` capability gate in\n* PSL interpretation. The TS `check()` builder is not gated there — capabilities\n* are adapter-reported and reach the contract only after it is built — so a\n* `check()` declared against SQLite arrives here, and this is where it is\n* refused. It is the primary enforcement point for that surface, and the safety\n* net for a contract that reached storage some other way.\n*/\nfunction tableConstraintsFromNode(table, hasInlinePk) {\n\tconst constraints = [];\n\tif (table.primaryKey && !hasInlinePk) constraints.push(new PrimaryKeyConstraint({ columns: table.primaryKey.columns }));\n\tfor (const check of table.checks ?? []) throw sqliteError(\"CONTRACT.CONSTRAINT_INVALID\", `The SQLite target does not support CHECK constraints (constraint \"${check.name}\" on table \"${table.name}\"). The \"checkConstraint\" capability is Postgres-only — remove the \"@@check\" / \"check()\" declaration, or target Postgres.`, { meta: {\n\t\tconstraintName: check.name,\n\t\ttableName: table.name\n\t} });\n\tfor (const u of table.uniques) constraints.push(new UniqueConstraint({\n\t\tcolumns: u.columns,\n\t\t...u.name !== void 0 ? { name: u.name } : {}\n\t}));\n\tfor (const fk of table.foreignKeys) constraints.push(new ForeignKeyConstraint({\n\t\tcolumns: fk.columns,\n\t\trefTable: fk.referencedTable,\n\t\trefColumns: fk.referencedColumns,\n\t\t...fk.name !== void 0 ? { name: fk.name } : {},\n\t\t...fk.onDelete !== void 0 ? { onDelete: fk.onDelete } : {},\n\t\t...fk.onUpdate !== void 0 ? { onUpdate: fk.onUpdate } : {}\n\t}));\n\treturn constraints;\n}\n//#endregion\n//#region src/core/migrations/planner-strategies.ts\n/**\n* Classifies a node issue into the operation class a recreate absorbing it\n* would need, or `null` when the strategy doesn't handle this node/reason at\n* all (table/column not-found-or-not-expected, and index issues — those are\n* standalone ops, never folded into a recreate).\n*\n* Column drift is a single `not-equal` issue (type and nullability compared\n* together by `SqlColumnIR.isEqualTo`): a type change is destructive, because\n* the copy can change values; a nullability change alone is widening, because\n* a tightening copy fails on a NULL rather than losing it.\n*/\n/** The column of a column issue, which `classifyNodeIssue` classes destructive only for a type change. */\nfunction columnNameOf(issue) {\n\treturn blindCast(issue.expected).name;\n}\nfunction classifyNodeIssue(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return null;\n\tswitch (blindCast(node).nodeKind) {\n\t\tcase RelationalSchemaNodeKind.column:\n\t\t\tif (issueOutcome(issue) !== \"not-equal\") return null;\n\t\t\treturn columnTypeChanged(blindCast(issue.expected), blindCast(issue.actual)) ? \"destructive\" : \"widening\";\n\t\tcase RelationalSchemaNodeKind.columnDefault:\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.foreignKey:\n\t\tcase RelationalSchemaNodeKind.unique: return \"widening\";\n\t\tdefault: return null;\n\t}\n}\n/**\n* Groups recreate-eligible issues by table, decides per-table operation class\n* (destructive wins over widening, and a recreate that leaves a live column\n* out of the new table loses its values, so it is destructive), and emits one `RecreateTableCall` per\n* table. Returns unchanged-or-smaller issue list — issues the strategy\n* consumed are removed so `mapNodeIssueToCall` doesn't double-handle them.\n*\n* The full desired/live table shapes come from `ctx.expected`/`ctx.actual`\n* directly (keyed by table name — SQLite is a flat, single-namespace target)\n* rather than from any individual issue, since a single drifted attribute's\n* issue only carries that attribute's own node, never the whole table.\n*/\nconst recreateTableStrategy = (issues, ctx) => {\n\tconst byTable = /* @__PURE__ */ new Map();\n\tconst consumed = /* @__PURE__ */ new Set();\n\tfor (const issue of issues) {\n\t\tconst cls = classifyNodeIssue(issue);\n\t\tif (!cls) continue;\n\t\tconst tableName = issue.path[1];\n\t\tif (tableName === void 0) continue;\n\t\tconst entry = byTable.get(tableName) ?? {\n\t\t\tissues: [],\n\t\t\thasDestructive: false,\n\t\t\tlossyColumns: []\n\t\t};\n\t\tentry.issues.push(issue);\n\t\tif (cls === \"destructive\") {\n\t\t\tentry.hasDestructive = true;\n\t\t\tentry.lossyColumns.push(columnNameOf(issue));\n\t\t}\n\t\tbyTable.set(tableName, entry);\n\t\tconsumed.add(issue);\n\t}\n\tif (byTable.size === 0) return { kind: \"no_match\" };\n\tconst calls = [];\n\tfor (const [tableName, entry] of byTable) {\n\t\tconst expectedTable = ctx.expected.tables[tableName];\n\t\tconst actualTable = ctx.actual.tables[tableName];\n\t\tif (!expectedTable || !actualTable) continue;\n\t\tconst leavesColumnsOut = Object.keys(actualTable.columns).some((column) => !Object.hasOwn(expectedTable.columns, column));\n\t\tconst operationClass = entry.hasDestructive || leavesColumnsOut ? \"destructive\" : \"widening\";\n\t\tconst tableSpec = tableSpecFromNode(expectedTable, ctx.types);\n\t\tconst indexes = expectedTable.indexes.map((idx) => ({\n\t\t\tname: idx.name,\n\t\t\tcolumns: idx.columns ?? []\n\t\t}));\n\t\tcalls.push(new RecreateTableCall({\n\t\t\ttableName,\n\t\t\tcontractTable: tableSpec,\n\t\t\tschemaColumnNames: Object.keys(actualTable.columns),\n\t\t\tindexes,\n\t\t\tsummary: buildRecreateSummary(tableName, entry.issues),\n\t\t\tpostchecks: buildRecreatePostchecks(tableName, entry.issues, tableSpec),\n\t\t\toperationClass\n\t\t}, entry.lossyColumns));\n\t}\n\treturn {\n\t\tkind: \"match\",\n\t\tissues: issues.filter((i) => !consumed.has(i)),\n\t\tcalls,\n\t\trecipe: true\n\t};\n};\n/**\n* When the policy allows `'data'` and the expected tree tightens one or more\n* columns from nullable to NOT NULL, emit a `DataTransformCall` stub per\n* tightened column. The user fills the backfill `UPDATE` in the rendered\n* `migration.ts` before the subsequent `RecreateTableCall` copies data into\n* the tightened schema (whose `INSERT INTO temp SELECT … FROM old` would\n* otherwise fail at runtime if any `NULL`s remain).\n*\n* Does NOT consume the tightening issue — `recreateTableStrategy` still\n* needs it to produce the actual recreate that enforces the NOT NULL at\n* the schema level. The backfill op and the recreate op end up in the\n* recipe slot in strategy order (backfill first, recreate second), which\n* matches the required execution order.\n*\n* Mirrors Postgres's `nullableTighteningCallStrategy`. When `'data'` is not\n* in the policy (the default `db update` / `db init` path), the strategy\n* short-circuits and the recreate alone runs, failing at runtime if NULLs\n* are present.\n*/\nconst nullabilityTighteningBackfillStrategy = (issues, ctx) => {\n\tif (!ctx.policy.allowedOperationClasses.includes(\"data\")) return { kind: \"no_match\" };\n\tconst calls = [];\n\tfor (const issue of issues) {\n\t\tif (issueOutcome(issue) !== \"not-equal\" || issue.expected === void 0 || issue.actual === void 0) continue;\n\t\tif (blindCast(issue.expected).nodeKind !== RelationalSchemaNodeKind.column) continue;\n\t\tconst expectedColumn = blindCast(issue.expected);\n\t\tconst actualColumn = blindCast(issue.actual);\n\t\tif (expectedColumn.nullable === actualColumn.nullable) continue;\n\t\tif (expectedColumn.nullable) continue;\n\t\tconst tableName = issue.path[1];\n\t\tif (tableName === void 0) continue;\n\t\tcalls.push(new DataTransformCall(`data_migration.backfill-${tableName}-${expectedColumn.name}`, `Backfill NULLs in \"${tableName}\".\"${expectedColumn.name}\" before NOT NULL tightening`, tableName, expectedColumn.name));\n\t}\n\tif (calls.length === 0) return { kind: \"no_match\" };\n\treturn {\n\t\tkind: \"match\",\n\t\tissues,\n\t\tcalls,\n\t\trecipe: true\n\t};\n};\nconst sqlitePlannerStrategies = [nullabilityTighteningBackfillStrategy, recreateTableStrategy];\n//#endregion\n//#region src/core/migrations/issue-planner.ts\n/**\n* The generic differ is total: a missing/extra table (or column) emits an\n* issue for itself AND for every node in its subtree (columns, defaults,\n* constraints, indexes). `CreateTableCall`/`DropTableCall` and\n* `AddColumnCall`/`DropColumnCall` already account for the whole subtree\n* (reading it directly off the table/column node), so the nested issues are\n* redundant — coalescing them is \"the planner's responsibility\" the differ's\n* own contract assigns (`schema-diff.ts`). Drops any issue whose path is a\n* strict descendant of a `not-found`/`not-expected` issue's path.\n*/\nfunction coalesceSubtreeIssues(issues) {\n\tconst collapsingPaths = issues.filter((issue) => issueOutcome(issue) === \"not-found\" || issueOutcome(issue) === \"not-expected\").map((issue) => issue.path);\n\tif (collapsingPaths.length === 0) return issues;\n\treturn issues.filter((issue) => !collapsingPaths.some((ancestor) => isStrictDescendantPath(issue.path, ancestor)));\n}\nfunction isStrictDescendantPath(path, ancestor) {\n\tif (path.length <= ancestor.length) return false;\n\tfor (let i = 0; i < ancestor.length; i += 1) if (path[i] !== ancestor[i]) return false;\n\treturn true;\n}\nfunction issueNode(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node);\n}\n/** Whether the expected/actual native type (resolved, or raw+many fallback) differs — mirrors `SqlColumnIR.isEqualTo`'s type comparison. */\nfunction columnTypeChanged(expected, actual) {\n\tif (expected.resolvedNativeType !== void 0 && actual.resolvedNativeType !== void 0) return expected.resolvedNativeType !== actual.resolvedNativeType;\n\treturn expected.nativeType !== actual.nativeType || Boolean(expected.many) !== Boolean(actual.many);\n}\n/**\n* Builds the flat `SqliteTableSpec` `RecreateTableCall` needs from the\n* expected table node — the node-sourced equivalent of the retired\n* `toTableSpec` (which read a raw contract `StorageTable`). Every column's\n* spec is resolved from its `codecRef` via `columnSpecFromNode`.\n*/\nfunction tableSpecFromNode(table, types) {\n\tconst columns = Object.values(table.columns).map((c) => columnSpecFromNode(c, isInlineAutoincrementPrimaryKeyNode(table, c), types));\n\tconst uniques = table.uniques.map((u) => ({\n\t\tcolumns: u.columns,\n\t\t...u.name !== void 0 ? { name: u.name } : {}\n\t}));\n\tconst foreignKeys = table.foreignKeys.map((fk) => ({\n\t\tcolumns: fk.columns,\n\t\treferences: {\n\t\t\ttable: fk.referencedTable,\n\t\t\tcolumns: fk.referencedColumns\n\t\t},\n\t\t...fk.name !== void 0 ? { name: fk.name } : {},\n\t\t...fk.onDelete !== void 0 ? { onDelete: fk.onDelete } : {},\n\t\t...fk.onUpdate !== void 0 ? { onUpdate: fk.onUpdate } : {}\n\t}));\n\treturn {\n\t\tcolumns,\n\t\t...table.primaryKey ? { primaryKey: { columns: table.primaryKey.columns } } : {},\n\t\tuniques,\n\t\tforeignKeys\n\t};\n}\nfunction issueConflict(kind, summary, location) {\n\treturn {\n\t\tkind,\n\t\tsummary,\n\t\twhy: \"Use `migration new` to author a custom migration for this change.\",\n\t\t...location ? { location } : {}\n\t};\n}\nfunction issueLocation(tableName, columnName) {\n\treturn columnName !== void 0 ? {\n\t\tentityKind: \"table\",\n\t\tentityName: tableName,\n\t\tcolumn: columnName\n\t} : {\n\t\tentityKind: \"table\",\n\t\tentityName: tableName\n\t};\n}\n/**\n* Conflict kind for a node kind that `recreateTableStrategy` absorbs for\n* every reachable production issue. Reaching `mapNodeIssueToCall` for one of\n* these means the recreate strategy didn't run — mirrors the legacy\n* `conflictKindForIssue` per-kind categorization.\n*/\nfunction absorbedConflictKind(nodeKind) {\n\tswitch (nodeKind) {\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.unique: return \"indexIncompatible\";\n\t\tcase RelationalSchemaNodeKind.foreignKey: return \"foreignKeyConflict\";\n\t\tdefault: return \"missingButNonAdditive\";\n\t}\n}\n/**\n* Builds the `CreateTableCall` + per-index `CreateIndexCall`s for a\n* newly-expected table. Reads only the table node's own children — indexes\n* (declared + FK-backing, deduped) are already merged and ordered at\n* derivation (`contractToSchemaIR`'s `convertTable`).\n*/\nfunction buildCreateTableCalls(table, types) {\n\tconst columns = Object.values(table.columns).map((c) => ddlColumnFromNode(c, isInlineAutoincrementPrimaryKeyNode(table, c), types));\n\tconst constraints = tableConstraintsFromNode(table, Object.values(table.columns).some((c) => isInlineAutoincrementPrimaryKeyNode(table, c)));\n\tconst calls = [new CreateTableCall(table.name, columns, constraints.length > 0 ? constraints : void 0)];\n\tfor (const index of table.indexes) {\n\t\tconst indexName = index.name;\n\t\tcalls.push(new CreateIndexCall(table.name, indexName, index.columns ?? []));\n\t}\n\treturn calls;\n}\nfunction mapTableIssue(issue, types) {\n\tif (issueOutcome(issue) === \"not-found\") return ok(buildCreateTableCalls(blindCast(issue.expected), types));\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst table = blindCast(issue.actual);\n\t\tif (CONTROL_TABLE_NAMES.has(table.name)) return ok([]);\n\t\treturn ok([new DropTableCall(table.name)]);\n\t}\n\treturn notOk(issueConflict(\"unsupportedOperation\", `Unexpected table drift: ${issue.path.join(\"/\")}`));\n}\nfunction mapColumnIssue(issue, ctx) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Column issue has no table in its path: ${issue.path.join(\"/\")}`));\n\tif (issueOutcome(issue) === \"not-found\") {\n\t\tconst column = blindCast(issue.expected);\n\t\tconst table = ctx.expected.tables[tableName];\n\t\treturn ok([new AddColumnCall(tableName, columnSpecFromNode(column, table !== void 0 && isInlineAutoincrementPrimaryKeyNode(table, column), ctx.types))]);\n\t}\n\tif (issueOutcome(issue) === \"not-expected\") return ok([new DropColumnCall(tableName, blindCast(issue.actual).name)]);\n\tconst expected = blindCast(issue.expected);\n\treturn notOk(issueConflict(columnTypeChanged(expected, blindCast(issue.actual)) ? \"typeMismatch\" : \"nullabilityConflict\", issue.path.join(\"/\"), issueLocation(tableName, expected.name)));\n}\nfunction mapIndexIssue(issue) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Index issue has no table in its path: ${issue.path.join(\"/\")}`));\n\tif (issueOutcome(issue) === \"not-found\") {\n\t\tconst index = blindCast(issue.expected);\n\t\tconst indexName = index.name;\n\t\treturn ok([new CreateIndexCall(tableName, indexName, index.columns ?? [])]);\n\t}\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst indexName = blindCast(issue.actual).name;\n\t\treturn ok([new DropIndexCall(tableName, indexName)]);\n\t}\n\treturn notOk(issueConflict(\"indexIncompatible\", issue.path.join(\"/\"), issueLocation(tableName)));\n}\nfunction mapNodeIssueToCall(issue, ctx) {\n\tconst node = issueNode(issue);\n\tif (node === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Issue carries neither an expected nor an actual node: ${issue.path.join(\"/\")}`));\n\tswitch (node.nodeKind) {\n\t\tcase RelationalSchemaNodeKind.table: return mapTableIssue(issue, ctx.types);\n\t\tcase RelationalSchemaNodeKind.column: return mapColumnIssue(issue, ctx);\n\t\tcase RelationalSchemaNodeKind.index: return mapIndexIssue(issue);\n\t\tcase RelationalSchemaNodeKind.columnDefault:\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.foreignKey:\n\t\tcase RelationalSchemaNodeKind.unique: return notOk(issueConflict(absorbedConflictKind(node.nodeKind), issue.path.join(\"/\")));\n\t\tcase RelationalSchemaNodeKind.check: return notOk(issueConflict(\"unsupportedOperation\", `The SQLite target does not support CHECK constraint DDL: ${issue.path.join(\"/\")}`));\n\t\tdefault: return notOk(issueConflict(\"unsupportedOperation\", `Unhandled node kind: ${node.nodeKind}`));\n\t}\n}\nfunction classifyCall(call) {\n\tswitch (call.factoryName) {\n\t\tcase \"createTable\": return \"create-table\";\n\t\tcase \"addColumn\": return \"add-column\";\n\t\tcase \"createIndex\": return \"create-index\";\n\t\tcase \"dropColumn\": return \"drop-column\";\n\t\tcase \"dropIndex\": return \"drop-index\";\n\t\tcase \"dropTable\": return \"drop-table\";\n\t\tcase \"recreateTable\": return null;\n\t\tdefault: return null;\n\t}\n}\nconst DEFAULT_POLICY = { allowedOperationClasses: [\n\t\"additive\",\n\t\"widening\",\n\t\"destructive\",\n\t\"data\"\n] };\nfunction planIssues(options) {\n\tconst policyProvided = options.policy !== void 0;\n\tconst policy = options.policy ?? DEFAULT_POLICY;\n\tconst frameworkComponents = options.frameworkComponents ?? [];\n\tconst context = {\n\t\texpected: options.expected ?? emptySchemaIR(),\n\t\tactual: options.actual ?? emptySchemaIR(),\n\t\tpolicy,\n\t\tframeworkComponents,\n\t\ttypes: sqlTypeLookupsOf(frameworkComponents)\n\t};\n\tconst strategies = options.strategies ?? sqlitePlannerStrategies;\n\tlet remaining = options.issues;\n\tconst recipeCalls = [];\n\tconst bucketableCalls = [];\n\tfor (const strategy of strategies) {\n\t\tconst result = strategy(remaining, context);\n\t\tif (result.kind === \"match\") {\n\t\t\tremaining = result.issues;\n\t\t\tif (result.recipe) recipeCalls.push(...result.calls);\n\t\t\telse bucketableCalls.push(...result.calls);\n\t\t}\n\t}\n\tconst sorted = orderIssuesByDependencies(remaining);\n\tconst defaultCalls = [];\n\tconst conflicts = [];\n\tfor (const issue of sorted) {\n\t\tconst result = mapNodeIssueToCall(issue, context);\n\t\tif (result.ok) defaultCalls.push(...result.value);\n\t\telse conflicts.push(result.failure);\n\t}\n\tconst allowed = policy.allowedOperationClasses;\n\tlet gatedRecipe = recipeCalls;\n\tlet gatedBucketable = bucketableCalls;\n\tlet gatedDefault = defaultCalls;\n\tif (policyProvided) {\n\t\tconst sink = (acc) => (call) => {\n\t\t\tif (allowed.includes(call.operationClass)) {\n\t\t\t\tacc.push(call);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconflicts.push(conflictForDisallowedCall(call, allowed));\n\t\t};\n\t\tconst gatedRecipeBucket = [];\n\t\tconst gatedBucketableBucket = [];\n\t\tconst gatedDefaultBucket = [];\n\t\trecipeCalls.forEach(sink(gatedRecipeBucket));\n\t\tbucketableCalls.forEach(sink(gatedBucketableBucket));\n\t\tdefaultCalls.forEach(sink(gatedDefaultBucket));\n\t\tgatedRecipe = gatedRecipeBucket;\n\t\tgatedBucketable = gatedBucketableBucket;\n\t\tgatedDefault = gatedDefaultBucket;\n\t}\n\tif (conflicts.length > 0) return notOk(conflicts);\n\tconst combined = [...gatedDefault, ...gatedBucketable];\n\tconst byCategory = (cat) => combined.filter((c) => classifyCall(c) === cat);\n\treturn ok({ calls: [\n\t\t...byCategory(\"create-table\"),\n\t\t...byCategory(\"add-column\"),\n\t\t...byCategory(\"create-index\"),\n\t\t...gatedRecipe,\n\t\t...byCategory(\"drop-column\"),\n\t\t...byCategory(\"drop-index\"),\n\t\t...byCategory(\"drop-table\")\n\t] });\n}\nfunction emptySchemaIR() {\n\treturn new SqlSchemaIR({ tables: {} });\n}\nfunction conflictForDisallowedCall(call, allowed) {\n\tconst summary = `Operation \"${call.label}\" requires class \"${call.operationClass}\", but policy allows only: ${allowed.join(\", \")}`;\n\tconst location = locationForCall(call);\n\treturn {\n\t\tkind: conflictKindForCall(call),\n\t\tsummary,\n\t\twhy: \"Use `migration new` to author a custom migration for this change.\",\n\t\trefusedOperationClass: call.operationClass,\n\t\t...location ? { location } : {}\n\t};\n}\nfunction conflictKindForCall(call) {\n\tswitch (call.factoryName) {\n\t\tcase \"createIndex\":\n\t\tcase \"dropIndex\": return \"indexIncompatible\";\n\t\tdefault: return \"missingButNonAdditive\";\n\t}\n}\nfunction locationForCall(call) {\n\tconst location = {};\n\tif (\"tableName\" in call) {\n\t\tlocation.entityKind = \"table\";\n\t\tlocation.entityName = call.tableName;\n\t}\n\tif (\"columnName\" in call) location.column = call.columnName;\n\tif (\"indexName\" in call) location.index = call.indexName;\n\treturn Object.keys(location).length > 0 ? location : void 0;\n}\n//#endregion\n//#region src/core/migrations/index-replacements.ts\nfunction indexFindings(issues, outcome) {\n\treturn issues.flatMap((issue) => {\n\t\tconst node = issueNode(issue);\n\t\tconst tableName = issue.path[1];\n\t\tif (node === void 0 || !SqlIndexIR.is(node) || tableName === void 0) return [];\n\t\treturn issueOutcome(issue) === outcome ? [{\n\t\t\tissue,\n\t\t\tindex: node,\n\t\t\ttableName\n\t\t}] : [];\n\t});\n}\n/**\n* An index on a renamed table whose wire name derives from the table name: the old and the new index share their content hash and differ in name.\n*/\nfunction renamedTableIndex(renamedTables) {\n\treturn (old, replacement) => {\n\t\tconst oldWire = parseWireName(old.index.name);\n\t\tconst replacementWire = parseWireName(replacement.index.name);\n\t\treturn renamedTables.has(old.tableName) && old.tableName === replacement.tableName && oldWire !== void 0 && oldWire.hash === replacementWire?.hash && old.index.name !== replacement.index.name;\n\t};\n}\n/**\n* An index on the renamed column whose wire name derives from the column name: after the rename\n* the old and the new index cover the same columns on the same table and differ in name.\n*/\nfunction renamedColumnIndex(table, column) {\n\treturn (old, replacement) => old.tableName === table && replacement.tableName === table && old.index.name !== replacement.index.name && old.index.expression === void 0 && old.index.where === void 0 && (old.index.columns ?? []).includes(column) && old.index.unique === replacement.index.unique && isArrayEqual(old.index.columns ?? [], replacement.index.columns ?? []);\n}\n/**\n* An index on the same table whose new name SQLite takes for the old one, as after a table renamed by hand. Its content is not compared: the old index must be dropped before the new one can be created whatever either defines, and the new one is created from its own definition.\n*/\nconst indexNameCaseChange = (old, replacement) => old.tableName === replacement.tableName && old.index.name !== replacement.index.name && sqliteIdentifiersCollide(old.index.name, replacement.index.name);\n/**\n* Pairs each index the plan drops with the index that replaces it, and plans every paired drop before every paired create. SQLite cannot rename an index, and it compares index names without regard to the case of ASCII letters, so a replacement whose name differs from the old one only in that case would otherwise collide with it. The paired issues are returned as consumed so the ordinary diff does not plan them again.\n*/\nfunction pairIndexReplacements(issues, matches) {\n\tconst missing = indexFindings(issues, \"not-found\");\n\tconst pairs = indexFindings(issues, \"not-expected\").flatMap((old) => {\n\t\tconst replacement = missing.find((candidate) => matches(old, candidate));\n\t\tif (replacement === void 0) return [];\n\t\tmissing.splice(missing.indexOf(replacement), 1);\n\t\treturn [{\n\t\t\told,\n\t\t\treplacement\n\t\t}];\n\t});\n\tconst replacements = pairs.map(({ old, replacement }) => ({\n\t\tdrop: new DropIndexCall(old.tableName, old.index.name),\n\t\tcreate: new CreateIndexCall(replacement.tableName, replacement.index.name, replacement.index.columns ?? [])\n\t}));\n\treturn {\n\t\treplacements,\n\t\tcalls: indexReplacementCalls(replacements),\n\t\tconsumed: new Set(pairs.flatMap(({ old, replacement }) => [old.issue, replacement.issue]))\n\t};\n}\n//#endregion\n//#region src/core/migrations/schema-tables.ts\n/**\n* The tables of a SQLite schema. SQLite has one namespace, so the namespace id is ignored, and it\n* compares table and column names without regard to the case of ASCII letters.\n*/\nfunction sqliteSchemaTables(schema) {\n\tconst hasTable = (_namespaceId, table) => Object.hasOwn(schema.tables, table);\n\treturn {\n\t\thasTable,\n\t\thasColumn: (_namespaceId, table, column) => Object.hasOwn(schema.tables[table]?.columns ?? {}, column),\n\t\ttablesNamed: (_namespaceId, table) => Object.keys(schema.tables).filter((existing) => sqliteIdentifiersCollide(existing, table)),\n\t\tcolumnsNamed: (_namespaceId, table, column) => Object.keys(schema.tables[table]?.columns ?? {}).filter((existing) => sqliteIdentifiersCollide(existing, column)),\n\t\tnamespacesWithTable: (table) => hasTable(UNBOUND_NAMESPACE_ID, table) ? [UNBOUND_NAMESPACE_ID] : []\n\t};\n}\n//#endregion\n//#region src/core/migrations/working-schema.ts\nfunction rewriteRefs(refs, rewrite) {\n\treturn refs?.map(rewrite);\n}\n/**\n* Rewrites the step of `kind` and `id` in a ref that runs through the given table, and the table\n* step itself when `kind` is the table kind.\n*/\nfunction stepRewrite(tableName, kind, fromId, toId) {\n\treturn (ref) => {\n\t\tconst tableStep = ref[1];\n\t\tif (tableStep?.nodeKind !== RelationalSchemaNodeKind.table || tableStep.id !== tableName) return ref;\n\t\treturn ref.map((step, index) => index >= 1 && step.nodeKind === kind && step.id === fromId ? {\n\t\t\tnodeKind: kind,\n\t\t\tid: toId\n\t\t} : step);\n\t};\n}\nfunction withColumnName(column, name) {\n\treturn new SqlColumnIR({\n\t\tname,\n\t\tnativeType: column.nativeType,\n\t\tnullable: column.nullable,\n\t\t...ifDefined(\"default\", column.default),\n\t\t...ifDefined(\"annotations\", column.annotations),\n\t\t...ifDefined(\"many\", column.many),\n\t\t...ifDefined(\"resolvedNativeType\", column.resolvedNativeType),\n\t\t...ifDefined(\"resolvedDefault\", column.resolvedDefault),\n\t\t...ifDefined(\"authoredDefault\", column.authoredDefault),\n\t\t...ifDefined(\"codecRef\", column.codecRef),\n\t\t...ifDefined(\"codecBaseNativeType\", column.codecBaseNativeType),\n\t\t...ifDefined(\"dataType\", column.dataType),\n\t\t...ifDefined(\"toCanonicalForm\", column.toCanonicalForm)\n\t});\n}\n/**\n* An index whose definition carries SQL text, an expression or a predicate, keeps its columns as\n* they are: a column named inside the text cannot be renamed here, so the diff plans the index.\n*/\nfunction withIndex(index, name, rewrite, columnName) {\n\tconst columnsFollow = index.expression === void 0 && index.where === void 0;\n\tconst base = {\n\t\tnaming: name === index.name ? namingOf(index.name, index.prefix) : namingOfLiveName(name),\n\t\twhere: index.where,\n\t\tunique: index.unique,\n\t\tpartial: index.partial,\n\t\ttype: index.type,\n\t\toptions: index.options,\n\t\tannotations: index.annotations,\n\t\tdependsOn: rewriteRefs(index.dependsOn, rewrite)\n\t};\n\treturn new SqlIndexIR(index.expression !== void 0 ? {\n\t\t...base,\n\t\texpression: index.expression\n\t} : {\n\t\t...base,\n\t\tcolumns: (index.columns ?? []).map(columnsFollow ? columnName : (c) => c)\n\t});\n}\nfunction rebuildTable(table, edit, rewrite) {\n\tconst { primaryKey } = table;\n\tconst { columnName } = edit;\n\treturn new SqlTableIR({\n\t\tname: edit.name,\n\t\tcolumns: Object.fromEntries(Object.values(table.columns).map((column) => {\n\t\t\tconst name = columnName(column.name);\n\t\t\treturn [name, name === column.name ? column : withColumnName(column, name)];\n\t\t})),\n\t\t...ifDefined(\"primaryKey\", primaryKey === void 0 ? void 0 : new PrimaryKey({\n\t\t\tcolumns: primaryKey.columns.map(columnName),\n\t\t\t...ifDefined(\"name\", primaryKey.name),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(primaryKey.dependsOn, rewrite))\n\t\t})),\n\t\tuniques: table.uniques.map((unique) => new SqlUniqueIR({\n\t\t\tcolumns: unique.columns.map(columnName),\n\t\t\t...ifDefined(\"name\", unique.name),\n\t\t\t...ifDefined(\"annotations\", unique.annotations),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(unique.dependsOn, rewrite))\n\t\t})),\n\t\tforeignKeys: table.foreignKeys.map((fk) => new SqlForeignKeyIR({\n\t\t\tcolumns: fk.columns.map(columnName),\n\t\t\treferencedTable: edit.referencedTable(fk),\n\t\t\treferencedColumns: edit.referencedColumns(fk),\n\t\t\t...ifDefined(\"referencedSchema\", fk.referencedSchema),\n\t\t\t...ifDefined(\"name\", fk.name),\n\t\t\t...ifDefined(\"onDelete\", fk.onDelete),\n\t\t\t...ifDefined(\"onUpdate\", fk.onUpdate),\n\t\t\t...ifDefined(\"annotations\", fk.annotations),\n\t\t\t...ifDefined(\"resolvedReferencedNamespace\", fk.resolvedReferencedNamespace),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(fk.dependsOn, rewrite))\n\t\t})),\n\t\tindexes: table.indexes.map((index) => withIndex(index, edit.indexName(index), rewrite, columnName)),\n\t\t...ifDefined(\"checks\", table.checks?.map((check) => new SqlCheckConstraintIR({\n\t\t\tnaming: namingOf(check.name, check.prefix),\n\t\t\texpression: check.expression,\n\t\t\tdependsOn: rewriteRefs(check.dependsOn, rewrite)\n\t\t}))),\n\t\t...ifDefined(\"annotations\", table.annotations)\n\t});\n}\n/** Rebuilds every table: `editFor` returns the edit for a table, or `undefined` to keep it. */\nfunction mapTables(schema, rewrite, editFor) {\n\treturn new SqlSchemaIR({\n\t\ttables: Object.fromEntries(Object.values(schema.tables).map((table) => {\n\t\t\tconst rebuilt = rebuildTable(table, {\n\t\t\t\tname: table.name,\n\t\t\t\tcolumnName: (column) => column,\n\t\t\t\treferencedTable: (fk) => fk.referencedTable,\n\t\t\t\treferencedColumns: (fk) => fk.referencedColumns,\n\t\t\t\tindexName: (index) => index.name,\n\t\t\t\t...editFor(table)\n\t\t\t}, rewrite);\n\t\t\treturn [rebuilt.name, rebuilt];\n\t\t})),\n\t\t...ifDefined(\"annotations\", schema.annotations)\n\t});\n}\n/**\n* The schema with one table under its new name. Foreign keys anywhere that reference the table\n* follow it, and every dependency that names it moves with it. Object names do not change. An\n* unnamed primary key, unique constraint or foreign key stays unnamed: SQLite gives such a\n* constraint no name, so an introspected schema has none either, and the planner never renames\n* one.\n*/\nfunction renameTableInSqliteSchema(schema, rename) {\n\tconst { from, to } = rename;\n\treturn mapTables(schema, stepRewrite(from, RelationalSchemaNodeKind.table, from, to), (table) => ({\n\t\t...table.name === from ? { name: to } : {},\n\t\treferencedTable: (fk) => fk.referencedTable === from ? to : fk.referencedTable\n\t}));\n}\n/**\n* The schema with one column under its new name. The table's primary key, unique constraints,\n* foreign keys and plain column indexes name it under the new name, foreign keys anywhere that\n* reference it follow it, and every dependency that names it moves with it. An index with an\n* expression or a predicate keeps its SQL text, and index names do not change, as in SQLite.\n*/\nfunction renameColumnInSqliteSchema(schema, rename) {\n\tconst { table: tableName, from, to } = rename;\n\tconst rewrite = stepRewrite(tableName, RelationalSchemaNodeKind.column, `column:${from}`, `column:${to}`);\n\tconst renamed = (column) => column === from ? to : column;\n\treturn mapTables(schema, rewrite, (table) => ({\n\t\t...table.name === tableName ? { columnName: renamed } : {},\n\t\treferencedColumns: (fk) => fk.referencedTable === tableName ? fk.referencedColumns.map(renamed) : fk.referencedColumns\n\t}));\n}\nfunction replaceIndex(schema, replacement) {\n\tconst { tableName, indexName: oldIndexName } = replacement.drop;\n\tconst newIndexName = replacement.create.indexName;\n\treturn mapTables(schema, stepRewrite(tableName, RelationalSchemaNodeKind.index, `index:${oldIndexName}`, `index:${newIndexName}`), (table) => table.name === tableName ? { indexName: (index) => index.name === oldIndexName ? newIndexName : index.name } : void 0);\n}\n/** The working schema of a plan or a migration, starting from `initial`. */\nfunction createWorkingSchema(initial) {\n\treturn new WorkingSchemaImpl(initial);\n}\nvar WorkingSchemaImpl = class {\n\t#current;\n\tconstructor(initial) {\n\t\tthis.#current = initial;\n\t}\n\tget current() {\n\t\treturn this.#current;\n\t}\n\tapply(call) {\n\t\tconst renamed = call instanceof RenameColumnCall ? renameColumnInSqliteSchema(this.#current, {\n\t\t\ttable: call.tableName,\n\t\t\tfrom: call.oldColumnName,\n\t\t\tto: call.columnName\n\t\t}) : renameTableInSqliteSchema(this.#current, {\n\t\t\tfrom: call.oldTableName,\n\t\t\tto: call.tableName\n\t\t});\n\t\tthis.#current = call.indexReplacements.reduce(replaceIndex, renamed);\n\t}\n};\n//#endregion\n//#region src/core/migrations/table-rename-calls.ts\n/** The SQL a user runs against the database to rename the table by hand. */\nfunction renameTableByHandStatements(rename) {\n\treturn renameTableSteps(rename.from, rename.to).map((renameStep) => renameStep.sql);\n}\n/** The `renameTable` call a user writes in `migration.ts` for `rename`; SQLite has no namespaces. */\nfunction renderRenameTableCall(rename) {\n\treturn new RenameTableCall(rename.from, rename.to, []).renderTypeScript();\n}\n/**\n* The call that renames a table, carrying as companions a drop and a create under the new name of\n* each index whose wire name derives from the old table name, since SQLite cannot rename an index.\n* `previous` is the schema with the table under its old name; the renamed copy is diffed against\n* `contract`. SQLite names no primary key, unique constraint or foreign key the contract leaves\n* unnamed, so those need nothing.\n*/\nfunction sqliteTableRenameCall(input) {\n\tconst { from, to } = input.rename;\n\tconst { issues } = buildSqlitePlanDiff({\n\t\tcontract: input.contract,\n\t\tactualSchema: renameTableInSqliteSchema(input.previous, {\n\t\t\tfrom,\n\t\t\tto\n\t\t}),\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst { replacements } = pairIndexReplacements(coalesceSubtreeIssues(issues), renamedTableIndex(/* @__PURE__ */ new Set([to])));\n\treturn new RenameTableCall(from, to, replacements);\n}\n/**\n* The call that renames a column, carrying as companions a drop and a create under the new name of\n* each index on the column whose wire name derives from the column name, since SQLite cannot rename\n* an index and keeps the old name when it renames the column. `previous` is the schema with the\n* column under its old name; the renamed copy is diffed against `contract`.\n*/\nfunction sqliteColumnRenameCall(input) {\n\tconst { table, from, to } = input.rename;\n\tconst { issues } = buildSqlitePlanDiff({\n\t\tcontract: input.contract,\n\t\tactualSchema: renameColumnInSqliteSchema(input.previous, {\n\t\t\ttable,\n\t\t\tfrom,\n\t\t\tto\n\t\t}),\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst { replacements } = pairIndexReplacements(coalesceSubtreeIssues(issues), renamedColumnIndex(table, to));\n\treturn new RenameColumnCall(table, from, to, replacements);\n}\n//#endregion\n//#region src/core/migrations/sqlite-migration.ts\n/**\n* Target-owned base class for SQLite migrations. Fixes the `SqlMigration`\n* generic to `SqlitePlanTargetDetails` and the abstract `targetId` to the\n* SQLite literal, so both user-authored migrations and renderer-generated\n* scaffolds can extend `SqliteMigration` directly without redeclaring\n* target-local identity.\n*\n* The constructor materializes a single SQLite `SqlControlAdapter` from\n* `stack.adapter.create(stack)` and stores it; the protected instance methods\n* forward to the corresponding `*Call` with that stored adapter, so user\n* migrations can write `this.createTable({...})` without threading the adapter\n* through every call.\n*\n* Binds the framework base's `Start` / `End` contract generics so a subclass\n* that assigns its snapshot-store `contract.json` imports to\n* `startContractJson` / `endContractJson` gets fully-typed view accessors:\n* `this.endContract` is a `SqliteContractView<End>`\n* (sole namespace unwrapped to the root — `this.endContract.table.<name>`),\n* built lazily from the JSON fields via the shared `MigrationContractViews`\n* helper. Mirrors `MongoMigration`'s view getters; the framework base derives\n* `describe()` from the same JSON.\n*/\nvar SqliteMigration = class extends Migration {\n\ttargetId = \"sqlite\";\n\t/**\n\t* Materialized SQLite control adapter, created once per migration\n\t* instance from the injected stack. `undefined` only when the migration\n\t* was instantiated without a stack (test fixtures); `controlAdapterFor`\n\t* throws a MIGRATION.SQLITE_CONTROL_STACK_MISSING in that case to surface the misuse.\n\t*/\n\tcontrolAdapter;\n\t#endView = new MigrationContractViews(this, \"SqliteMigration\", (json) => SqliteContractView.fromJson(json));\n\t/** The rename calls this read of `operations` has made so far, in order. */\n\t#renames = [];\n\t#startView = new MigrationContractViews(this, \"SqliteMigration\", (json) => SqliteContractView.fromJson(json));\n\tconstructor(stack) {\n\t\tsuper(stack);\n\t\tthis.controlAdapter = stack?.adapter ? blindCast(stack.adapter.create(stack)) : void 0;\n\t}\n\tframeworkComponents() {\n\t\tconst stack = this.stack;\n\t\tif (stack === void 0) return [];\n\t\treturn [\n\t\t\tstack.target,\n\t\t\t...stack.adapter === void 0 ? [] : [stack.adapter],\n\t\t\t...stack.extensions\n\t\t];\n\t}\n\t/**\n\t* Returns the materialized control adapter, or throws a MIGRATION.SQLITE_CONTROL_STACK_MISSING naming\n\t* `operation` when the migration was constructed without a `ControlStack`.\n\t* Single home for the null-check that every DDL/DML method shares.\n\t*/\n\tcontrolAdapterFor(operation) {\n\t\tif (!this.controlAdapter) throw errorSqliteMigrationStackMissing(operation);\n\t\treturn this.controlAdapter;\n\t}\n\t/**\n\t* The typed SQLite view over this migration's end-state contract — sole\n\t* namespace unwrapped to the root, so `this.endContract.table.<name>` etc.\n\t* Throws if no `endContractJson` was provided.\n\t*/\n\tget endContract() {\n\t\treturn this.#endView.endContract;\n\t}\n\t/**\n\t* The typed SQLite view over this migration's start-state contract, or\n\t* `null` for a baseline migration (no `startContractJson`).\n\t*/\n\tget startContract() {\n\t\treturn this.#startView.startContract;\n\t}\n\tcreateTable(options) {\n\t\treturn new CreateTableCall(options.table, options.columns, options.constraints).toOp(this.controlAdapterFor(\"createTable\"));\n\t}\n\tdropTable(options) {\n\t\treturn new DropTableCall(options.table).toOp(this.controlAdapterFor(\"dropTable\"));\n\t}\n\t/**\n\t* Emit the operations that rename a table: the table rename, then a drop and a create under the\n\t* new name of each index whose name was derived from the old table name. The old name is resolved\n\t* against the schema as this migration's earlier `renameTable` calls leave it, and the new name\n\t* against the end contract. Spread the result into `operations`:\n\t* `...this.renameTable({ table: 'userProfile', to: 'UserProfile' })`. Throws\n\t* `MIGRATION.TABLE_RENAME_UNMATCHED` when the table does not exist at that point of the migration\n\t* or the end contract lacks the new name.\n\t*/\n\trenameTable(options) {\n\t\tconst adapter = this.controlAdapterFor(\"renameTable\");\n\t\tconst rename = {\n\t\t\tnamespaceId: void 0,\n\t\t\tfrom: options.table,\n\t\t\tto: options.to\n\t\t};\n\t\tconst startContract = this.startContract;\n\t\tif (startContract === null) throw unmatchedTableRename(rename, \"the migration has no start contract\");\n\t\tconst current = this.schemaAfterRenames(startContract);\n\t\tconst endContract = this.endContract;\n\t\tconst resolved = resolveTableRenameAgainst(sqliteSchemaTables(current), endContract, rename);\n\t\tif (!resolved.ok) throw resolved.failure;\n\t\tconst call = sqliteTableRenameCall({\n\t\t\tprevious: current,\n\t\t\tcontract: endContract,\n\t\t\trename: resolved.value,\n\t\t\tframeworkComponents: this.frameworkComponents()\n\t\t});\n\t\tthis.#renames.push(call);\n\t\treturn call.toOps(adapter);\n\t}\n\t/**\n\t* Emit the operations that rename a column: the column rename, then a drop and a create under\n\t* the new name of each index on the column whose name was derived from the old column name. The\n\t* column is resolved against the schema as this migration's earlier rename calls leave it, so a\n\t* column of a table an earlier `renameTable` renamed is named on the table's new name. Spread the\n\t* result into `operations`: `...this.renameColumn({ table: 'User', column: 'name', to:\n\t* 'fullName' })`. Throws `MIGRATION.COLUMN_RENAME_UNMATCHED` when the table or column does not\n\t* exist at that point of the migration, the table already has the new column, or the end\n\t* contract lacks it.\n\t*/\n\trenameColumn(options) {\n\t\tconst adapter = this.controlAdapterFor(\"renameColumn\");\n\t\tconst rename = {\n\t\t\tnamespaceId: void 0,\n\t\t\ttable: options.table,\n\t\t\tfrom: options.column,\n\t\t\tto: options.to\n\t\t};\n\t\tconst startContract = this.startContract;\n\t\tif (startContract === null) throw unmatchedColumnRename(rename, \"the migration has no start contract\");\n\t\tconst current = this.schemaAfterRenames(startContract);\n\t\tconst resolved = resolveColumnRenameAgainst(sqliteSchemaTables(current), this.endContract, rename);\n\t\tif (!resolved.ok) throw resolved.failure;\n\t\tconst call = sqliteColumnRenameCall({\n\t\t\tprevious: current,\n\t\t\tcontract: this.endContract,\n\t\t\trename: resolved.value,\n\t\t\tframeworkComponents: this.frameworkComponents()\n\t\t});\n\t\tthis.#renames.push(call);\n\t\treturn call.toOps(adapter);\n\t}\n\t/** The start contract's schema with this read's rename calls applied in order. */\n\tschemaAfterRenames(startContract) {\n\t\tconst working = createWorkingSchema(sqliteContractToSchema(startContract, sqlTypeLookupsOf(this.frameworkComponents())));\n\t\tfor (const call of this.#renames) working.apply(call);\n\t\treturn working.current;\n\t}\n\tbeginOperationsRead() {\n\t\tthis.#renames = [];\n\t}\n\taddColumn(options) {\n\t\treturn new AddColumnCall(options.table, columnSpecOf(options.column, \"addColumn\", options.table)).toOp(this.controlAdapterFor(\"addColumn\"));\n\t}\n\tdropColumn(options) {\n\t\treturn new DropColumnCall(options.table, options.column).toOp(this.controlAdapterFor(\"dropColumn\"));\n\t}\n\tcreateIndex(options) {\n\t\treturn new CreateIndexCall(options.table, options.index, options.columns).toOp(this.controlAdapterFor(\"createIndex\"));\n\t}\n\tdropIndex(options) {\n\t\treturn new DropIndexCall(options.table, options.index).toOp(this.controlAdapterFor(\"dropIndex\"));\n\t}\n\trecreateTable(options) {\n\t\treturn new RecreateTableCall({\n\t\t\t...options,\n\t\t\tcontractTable: {\n\t\t\t\t...options.contractTable,\n\t\t\t\tcolumns: options.contractTable.columns.map((column) => columnSpecOf(column, \"recreateTable\", options.tableName))\n\t\t\t}\n\t\t}).toOp(this.controlAdapterFor(\"recreateTable\"));\n\t}\n};\nfunction columnDefaultOf(columnDefault, what) {\n\treturn columnDefault.kind === \"function\" ? {\n\t\tkind: \"function\",\n\t\texpression: sqlTextOf(columnDefault.expression, what)\n\t} : columnDefault;\n}\nfunction columnSpecOf(column, operation, table) {\n\tconst { default: columnDefault, ...rest } = column;\n\tconst what = `${operation} ${JSON.stringify(table)}.${JSON.stringify(column.name)} default`;\n\treturn {\n\t\t...rest,\n\t\t...ifDefined(\"default\", columnDefault === void 0 ? void 0 : columnDefaultOf(columnDefault, what))\n\t};\n}\n//#endregion\nexport { sqliteActualSchema as _, sqliteTableRenameCall as a, indexNameCaseChange as c, conflictForDisallowedCall as d, issueNode as f, diffSqliteSchema as g, buildSqlitePlanDiff as h, sqliteColumnRenameCall as i, pairIndexReplacements as l, sqlitePlannerStrategies as m, renameTableByHandStatements as n, createWorkingSchema as o, planIssues as p, renderRenameTableCall as r, sqliteSchemaTables as s, SqliteMigration as t, coalesceSubtreeIssues as u, sqliteContractToSchema as v, verifySqliteDatabaseSchema as y };\n\n//# sourceMappingURL=sqlite-migration-DocfLYRw.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-migration-D7DWt0JL-D_5jFkOx.mjs","names":["#current","#endView","#startView","#renames"],"sources":["../../../../3-targets/3-targets/sqlite/dist/sqlite-migration-D7DWt0JL.mjs"],"sourcesContent":["import { n as sqliteError, t as errorSqliteMigrationStackMissing } from \"./errors-DnR-sMHS.mjs\";\nimport { n as SQLITE_NOW_EXPRESSION } from \"./datetime-text-Bniwehv-.mjs\";\nimport { n as sqliteResolveDefault } from \"./default-normalizer-Ch3VFnEH.mjs\";\nimport { _ as sqliteDefaultToDdlColumnDefault, a as DropColumnCall, b as buildColumnTypeSql, d as RenameTableCall, f as indexReplacementCalls, g as renameTableSteps, h as buildRecreateSummary, i as DataTransformCall, l as RecreateTableCall, m as buildRecreatePostchecks, n as CreateIndexCall, o as DropIndexCall, r as CreateTableCall, s as DropTableCall, t as AddColumnCall, u as RenameColumnCall, x as renderDefaultLiteral, y as sqliteIdentifiersCollide } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { t as CONTROL_TABLE_NAMES } from \"./control-tables-D_o8dKRB.mjs\";\nimport { t as SqliteContractView } from \"./sqlite-contract-view-BrXalcTm.mjs\";\nimport { DdlColumn, ForeignKeyConstraint, PrimaryKeyConstraint, UniqueConstraint } from \"@internal/sql-relational-core/ast\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { diffSchemas, issueOutcome, orderIssuesByDependencies } from \"@internal/framework-components/control\";\nimport { contractToSchemaIR, resolveColumnRenameAgainst, resolveTableRenameAgainst, sqlTypeLookupsOf, unmatchedColumnRename, unmatchedTableRename } from \"@internal/family-sql/control\";\nimport { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlTableIR, SqlUniqueIR, contractDefaultRefusal, relationalNodeGranularity } from \"@internal/sql-schema-ir/types\";\nimport { UNBOUND_NAMESPACE_ID, entityAt } from \"@internal/framework-components/ir\";\nimport { verifySqlSchemaByDiff } from \"@internal/family-sql/diff\";\nimport { notOk, ok } from \"@internal/utils/result\";\nimport { namingOf, namingOfLiveName, parseWireName } from \"@internal/sql-schema-ir/naming\";\nimport { isArrayEqual } from \"@internal/utils/array-equal\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { sqlTextOf } from \"@internal/sql-relational-core/contract-free\";\nimport { Migration } from \"@internal/family-sql/migration\";\nimport { MigrationContractViews } from \"@internal/migration-tools/migration\";\n//#region src/core/migrations/diff-database-schema.ts\n/** Renders a column default for the SQLite dialect. */\nfunction sqliteRenderDefault(def, column) {\n\tif (def.kind === \"function\") {\n\t\tif (def.expression === \"now()\") return SQLITE_NOW_EXPRESSION;\n\t\treturn def.expression;\n\t}\n\treturn renderDefaultLiteral(def.value, column);\n}\n/**\n* The SQLite expected-side projection: contract → flat relational schema IR.\n*\n* Each column's type is written from the data type its codec represents.\n* Every expected column also carries its `codecRef` unconditionally\n* (Decision 5) — the planner's op-builders resolve DDL rendering from it at\n* plan time, so no separate render stamper is threaded here.\n*/\nfunction sqliteContractToSchema(contract, types) {\n\treturn contractToSchemaIR(contract, {\n\t\tannotationNamespace: \"sqlite\",\n\t\trenderDefault: sqliteRenderDefault,\n\t\tresolveDefault: sqliteResolveDefault,\n\t\tdataTypeLookup: types.dataTypeLookup,\n\t\tcodecLookup: types.codecLookup\n\t});\n}\n/**\n* The SQLite schema verify: the full-tree node-diff verdict wrapped in the\n* issue-based result envelope. Used by the runner's post-apply check; the\n* family `verifySchema` runs the same composition via the descriptor hook.\n*/\nfunction verifySqliteDatabaseSchema(input) {\n\treturn verifySqlSchemaByDiff({\n\t\tcontract: input.contract,\n\t\tschema: input.actualSchema,\n\t\tstrict: input.strict,\n\t\tframeworkComponents: input.frameworkComponents,\n\t\tdiffSchema: diffSqliteSchema,\n\t\tgranularityOf: relationalNodeGranularity\n\t});\n}\n/**\n* Resolves a verdict-diff issue's subject table's declared control policy\n* directly from the contract. SQLite's expected tree is flat, so the issue\n* path carries no namespace segment — `path[1]` is the table name (`path[0]`\n* is the tree root's own id); every contract namespace is searched for that\n* table name (table names are globally unique in the flat tree — duplicates\n* across namespaces are rejected earlier, at `contractToSchemaIR`).\n*/\nfunction resolveControlPolicy(issue, contract) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return void 0;\n\tfor (const namespaceId of Object.keys(contract.storage.namespaces)) {\n\t\tconst table = entityAt(contract.storage, {\n\t\t\tnamespaceId,\n\t\t\tentityKind: \"table\",\n\t\t\tentityName: tableName\n\t\t});\n\t\tif (table !== void 0) return table.control;\n\t}\n}\n/**\n* The SQLite full-tree node diff for the family verify verdict: derive the\n* expected flat tree with resolved leaf values (parameterized types written\n* with their parameters; FK nodes born with the flat empty\n* `resolvedReferencedNamespace`), and run the generic differ over the trees\n* as derived. Flat targets need no ownership scoping. The codec `verifyType`\n* hooks run once per contract namespace with tables, each against the sole\n* flat actual root — exactly the legacy per-namespace pairing.\n*/\nfunction diffSqliteSchema(input) {\n\tconst types = sqlTypeLookupsOf(input.frameworkComponents);\n\tconst expected = sqliteContractToSchema(input.contract, types);\n\tconst actual = input.schema instanceof SqlSchemaIR ? input.schema : blindCast(input.schema);\n\treturn {\n\t\tissues: diffSchemas(expected, actual),\n\t\tresolveControlPolicy: (issue) => resolveControlPolicy(issue, input.contract),\n\t\tnamespacePairs: Object.values(input.contract.storage.namespaces).filter((ns) => Object.keys(ns.entries.table ?? {}).length > 0).map(() => ({ actual }))\n\t};\n}\n/**\n* The SQLite planner's diff input: the same tree-building\n* `diffSqliteSchema` uses (FK nodes born flat). One differ\n* drives both verify and plan over the trees as derived; this is the plan-side\n* derivation — column DDL resolves from each expected column's `codecRef` at\n* plan time (`column-ddl-rendering.ts`), so no separate render stamping happens here.\n*/\nfunction buildSqlitePlanDiff(input) {\n\tconst types = sqlTypeLookupsOf(input.frameworkComponents);\n\tconst expected = sqliteContractToSchema(input.contract, types);\n\tconst actual = sqliteActualSchema(input.actualSchema);\n\treturn {\n\t\texpected,\n\t\tactual,\n\t\tissues: diffSchemas(expected, actual)\n\t};\n}\n/** The schema a plan starts from as a `SqlSchemaIR`, its table and column names taken from their keys. */\nfunction sqliteActualSchema(actualSchema) {\n\treturn new SqlSchemaIR(withRecordKeyNames(actualSchema));\n}\n/**\n* Every schema-tree builder in this codebase derives a table's / column's\n* `name` from the record key it's stored under (`contractToSchemaIR`,\n* the SQLite introspection adapter) rather than trusting a redundant\n* embedded field — the record key IS the identity. Mirrors that discipline\n* for the actual/live tree before construction, so `SqlTableIR.id` /\n* `SqlColumnIR.id` (both derived from `.name`) are always correct without\n* requiring every caller to duplicate the key onto the value. A no-op for a\n* tree that already carries matching names (the real introspection adapter\n* always does).\n*/\nfunction withRecordKeyNames(actualSchema) {\n\tconst raw = blindCast(actualSchema);\n\tconst tables = {};\n\tfor (const [tableName, table] of Object.entries(raw.tables ?? {})) {\n\t\tconst rawTable = blindCast(table);\n\t\tconst columns = {};\n\t\tfor (const [columnName, column] of Object.entries(blindCast(table).columns ?? {})) columns[columnName] = {\n\t\t\t...blindCast(column),\n\t\t\tname: columnName\n\t\t};\n\t\ttables[tableName] = {\n\t\t\t...rawTable,\n\t\t\tname: tableName,\n\t\t\tcolumns,\n\t\t\tforeignKeys: rawTable.foreignKeys ?? [],\n\t\t\tuniques: rawTable.uniques ?? [],\n\t\t\tindexes: rawTable.indexes ?? []\n\t\t};\n\t}\n\treturn { tables };\n}\n//#endregion\n//#region src/core/migrations/column-ddl-rendering.ts\n/**\n* Reconstructs the `StorageColumn`-shaped fields `buildColumnTypeSql`\n* expects, from a column node's own stamped codec\n* identity (`codecRef` / `codecBaseNativeType`, Decision 5) — never the\n* contract. `typeRef` is deliberately left unset here: setting it would send\n* `buildColumnTypeSql` back through a live `storageTypes` lookup the node's\n* fields have already resolved past, which throws for an unrecognized\n* reference.\n*/\nfunction columnLike(column) {\n\tif (column.codecRef === void 0 || column.codecBaseNativeType === void 0) throw new InternalError(`columnLike: expected column \"${column.name}\" carries no codec identity — the expected tree must be derived via contractToSchemaIR for planning`);\n\treturn {\n\t\tcodecId: column.codecRef.codecId,\n\t\tnullable: column.nullable,\n\t\tmany: column.many ?? column.codecRef.many ? { elementNullable: false } : false,\n\t\t...column.codecRef.typeParams !== void 0 ? { typeParams: blindCast(column.codecRef.typeParams) } : {},\n\t\t...ifDefined(\"default\", plannableDefault(column))\n\t};\n}\n/**\n* The default DDL writes. A contract default the canonical form of the column's values refuses,\n* which a contract emitted by an earlier version can hold, is refused rather than written.\n*/\nfunction plannableDefault(column) {\n\tconst columnDefault = column.authoredDefault ?? column.resolvedDefault;\n\tconst refusal = contractDefaultRefusal(columnDefault, column.toCanonicalForm, (column.many ?? column.codecRef?.many) === true);\n\tif (refusal !== void 0) throw sqliteError(\"CONTRACT.DEFAULT_INVALID\", `Column \"${column.name}\": ${refusal}`, { meta: {\n\t\treason: \"default-not-canonical\",\n\t\tcolumn: column.name\n\t} });\n\treturn columnDefault;\n}\n/**\n* True when the column is rendered inline as `INTEGER PRIMARY KEY\n* AUTOINCREMENT` — the sole member of the table's primary key with an\n* `autoincrement()` default. Node-based sibling of the retired\n* `isInlineAutoincrementPrimaryKey` (which read the raw `StorageTable`);\n* reads the table/column nodes instead.\n*/\nfunction isInlineAutoincrementPrimaryKeyNode(table, column) {\n\tif (table.primaryKey?.columns.length !== 1) return false;\n\tif (table.primaryKey.columns[0] !== column.name) return false;\n\treturn column.resolvedDefault?.kind === \"function\" && column.resolvedDefault.expression === \"autoincrement()\";\n}\n/**\n* Builds the flat `SqliteColumnSpec` `AddColumnCall` / `RecreateTableCall`\n* need, resolved from the column node's codec identity — the same builders\n* the pre-`plan(start, end)` op-path called, so the output is\n* byte-identical.\n*/\nfunction columnSpecFromNode(column, inline, types) {\n\tconst like = columnLike(column);\n\tconst typeSql = buildColumnTypeSql(like, types);\n\treturn {\n\t\tname: column.name,\n\t\ttypeSql,\n\t\t...inline ? {} : {\n\t\t\t...ifDefined(\"default\", like.default),\n\t\t\t...ifDefined(\"codecRef\", column.codecRef)\n\t\t},\n\t\tnullable: column.nullable,\n\t\t...inline ? { inlineAutoincrementPrimaryKey: true } : {}\n\t};\n}\n/**\n* Builds the `DdlColumn` the `CreateTableCall` path needs, resolved from the\n* column node's codec identity.\n*/\nfunction ddlColumnFromNode(column, inline, types) {\n\tconst like = columnLike(column);\n\tconst typeSql = buildColumnTypeSql(like, types);\n\tif (inline) return new DdlColumn({\n\t\tname: column.name,\n\t\ttype: `${typeSql} PRIMARY KEY AUTOINCREMENT`\n\t});\n\tconst colDefault = sqliteDefaultToDdlColumnDefault(like.default);\n\treturn new DdlColumn({\n\t\tname: column.name,\n\t\ttype: typeSql,\n\t\t...!column.nullable ? { notNull: true } : {},\n\t\t...colDefault !== void 0 ? { default: colDefault } : {},\n\t\t...column.codecRef !== void 0 ? { codecRef: column.codecRef } : {}\n\t});\n}\n/**\n* Builds the table-level constraints (PK / unique / FK) for a `CreateTable`\n* path from the table node — the node-sourced sibling of the retired\n* contract-based `tableToDdlParts`'s constraint half.\n*\n* A check constraint on the table node throws rather than being dropped.\n* `@@check` is refused earlier, by the `sql.checkConstraint` capability gate in\n* PSL interpretation. The TS `check()` builder is not gated there — capabilities\n* are adapter-reported and reach the contract only after it is built — so a\n* `check()` declared against SQLite arrives here, and this is where it is\n* refused. It is the primary enforcement point for that surface, and the safety\n* net for a contract that reached storage some other way.\n*/\nfunction tableConstraintsFromNode(table, hasInlinePk) {\n\tconst constraints = [];\n\tif (table.primaryKey && !hasInlinePk) constraints.push(new PrimaryKeyConstraint({ columns: table.primaryKey.columns }));\n\tfor (const check of table.checks ?? []) throw sqliteError(\"CONTRACT.CONSTRAINT_INVALID\", `The SQLite target does not support CHECK constraints (constraint \"${check.name}\" on table \"${table.name}\"). The \"checkConstraint\" capability is Postgres-only — remove the \"@@check\" / \"check()\" declaration, or target Postgres.`, { meta: {\n\t\tconstraintName: check.name,\n\t\ttableName: table.name\n\t} });\n\tfor (const u of table.uniques) constraints.push(new UniqueConstraint({\n\t\tcolumns: u.columns,\n\t\t...u.name !== void 0 ? { name: u.name } : {}\n\t}));\n\tfor (const fk of table.foreignKeys) constraints.push(new ForeignKeyConstraint({\n\t\tcolumns: fk.columns,\n\t\trefTable: fk.referencedTable,\n\t\trefColumns: fk.referencedColumns,\n\t\t...fk.name !== void 0 ? { name: fk.name } : {},\n\t\t...fk.onDelete !== void 0 ? { onDelete: fk.onDelete } : {},\n\t\t...fk.onUpdate !== void 0 ? { onUpdate: fk.onUpdate } : {}\n\t}));\n\treturn constraints;\n}\n//#endregion\n//#region src/core/migrations/planner-strategies.ts\n/**\n* Classifies a node issue into the operation class a recreate absorbing it\n* would need, or `null` when the strategy doesn't handle this node/reason at\n* all (table/column not-found-or-not-expected, and index issues — those are\n* standalone ops, never folded into a recreate).\n*\n* Column drift is a single `not-equal` issue (type and nullability compared\n* together by `SqlColumnIR.isEqualTo`): a type change is destructive, because\n* the copy can change values; a nullability change alone is widening, because\n* a tightening copy fails on a NULL rather than losing it.\n*/\n/** The column of a column issue, which `classifyNodeIssue` classes destructive only for a type change. */\nfunction columnNameOf(issue) {\n\treturn blindCast(issue.expected).name;\n}\nfunction classifyNodeIssue(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return null;\n\tswitch (blindCast(node).nodeKind) {\n\t\tcase RelationalSchemaNodeKind.column:\n\t\t\tif (issueOutcome(issue) !== \"not-equal\") return null;\n\t\t\treturn columnTypeChanged(blindCast(issue.expected), blindCast(issue.actual)) ? \"destructive\" : \"widening\";\n\t\tcase RelationalSchemaNodeKind.columnDefault:\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.foreignKey:\n\t\tcase RelationalSchemaNodeKind.unique: return \"widening\";\n\t\tdefault: return null;\n\t}\n}\n/**\n* Groups recreate-eligible issues by table, decides per-table operation class\n* (destructive wins over widening, and a recreate that leaves a live column\n* out of the new table loses its values, so it is destructive), and emits one `RecreateTableCall` per\n* table. Returns unchanged-or-smaller issue list — issues the strategy\n* consumed are removed so `mapNodeIssueToCall` doesn't double-handle them.\n*\n* The full desired/live table shapes come from `ctx.expected`/`ctx.actual`\n* directly (keyed by table name — SQLite is a flat, single-namespace target)\n* rather than from any individual issue, since a single drifted attribute's\n* issue only carries that attribute's own node, never the whole table.\n*/\nconst recreateTableStrategy = (issues, ctx) => {\n\tconst byTable = /* @__PURE__ */ new Map();\n\tconst consumed = /* @__PURE__ */ new Set();\n\tfor (const issue of issues) {\n\t\tconst cls = classifyNodeIssue(issue);\n\t\tif (!cls) continue;\n\t\tconst tableName = issue.path[1];\n\t\tif (tableName === void 0) continue;\n\t\tconst entry = byTable.get(tableName) ?? {\n\t\t\tissues: [],\n\t\t\thasDestructive: false,\n\t\t\tlossyColumns: []\n\t\t};\n\t\tentry.issues.push(issue);\n\t\tif (cls === \"destructive\") {\n\t\t\tentry.hasDestructive = true;\n\t\t\tentry.lossyColumns.push(columnNameOf(issue));\n\t\t}\n\t\tbyTable.set(tableName, entry);\n\t\tconsumed.add(issue);\n\t}\n\tif (byTable.size === 0) return { kind: \"no_match\" };\n\tconst calls = [];\n\tfor (const [tableName, entry] of byTable) {\n\t\tconst expectedTable = ctx.expected.tables[tableName];\n\t\tconst actualTable = ctx.actual.tables[tableName];\n\t\tif (!expectedTable || !actualTable) continue;\n\t\tconst leavesColumnsOut = Object.keys(actualTable.columns).some((column) => !Object.hasOwn(expectedTable.columns, column));\n\t\tconst operationClass = entry.hasDestructive || leavesColumnsOut ? \"destructive\" : \"widening\";\n\t\tconst tableSpec = tableSpecFromNode(expectedTable, ctx.types);\n\t\tconst indexes = expectedTable.indexes.map((idx) => ({\n\t\t\tname: idx.name,\n\t\t\tcolumns: idx.columns ?? []\n\t\t}));\n\t\tcalls.push(new RecreateTableCall({\n\t\t\ttableName,\n\t\t\tcontractTable: tableSpec,\n\t\t\tschemaColumnNames: Object.keys(actualTable.columns),\n\t\t\tindexes,\n\t\t\tsummary: buildRecreateSummary(tableName, entry.issues),\n\t\t\tpostchecks: buildRecreatePostchecks(tableName, entry.issues, tableSpec),\n\t\t\toperationClass\n\t\t}, entry.lossyColumns));\n\t}\n\treturn {\n\t\tkind: \"match\",\n\t\tissues: issues.filter((i) => !consumed.has(i)),\n\t\tcalls,\n\t\trecipe: true\n\t};\n};\n/**\n* When the policy allows `'data'` and the expected tree tightens one or more\n* columns from nullable to NOT NULL, emit a `DataTransformCall` stub per\n* tightened column. The user fills the backfill `UPDATE` in the rendered\n* `migration.ts` before the subsequent `RecreateTableCall` copies data into\n* the tightened schema (whose `INSERT INTO temp SELECT … FROM old` would\n* otherwise fail at runtime if any `NULL`s remain).\n*\n* Does NOT consume the tightening issue — `recreateTableStrategy` still\n* needs it to produce the actual recreate that enforces the NOT NULL at\n* the schema level. The backfill op and the recreate op end up in the\n* recipe slot in strategy order (backfill first, recreate second), which\n* matches the required execution order.\n*\n* Mirrors Postgres's `nullableTighteningCallStrategy`. When `'data'` is not\n* in the policy (the default `db update` / `db init` path), the strategy\n* short-circuits and the recreate alone runs, failing at runtime if NULLs\n* are present.\n*/\nconst nullabilityTighteningBackfillStrategy = (issues, ctx) => {\n\tif (!ctx.policy.allowedOperationClasses.includes(\"data\")) return { kind: \"no_match\" };\n\tconst calls = [];\n\tfor (const issue of issues) {\n\t\tif (issueOutcome(issue) !== \"not-equal\" || issue.expected === void 0 || issue.actual === void 0) continue;\n\t\tif (blindCast(issue.expected).nodeKind !== RelationalSchemaNodeKind.column) continue;\n\t\tconst expectedColumn = blindCast(issue.expected);\n\t\tconst actualColumn = blindCast(issue.actual);\n\t\tif (expectedColumn.nullable === actualColumn.nullable) continue;\n\t\tif (expectedColumn.nullable) continue;\n\t\tconst tableName = issue.path[1];\n\t\tif (tableName === void 0) continue;\n\t\tcalls.push(new DataTransformCall(`data_migration.backfill-${tableName}-${expectedColumn.name}`, `Backfill NULLs in \"${tableName}\".\"${expectedColumn.name}\" before NOT NULL tightening`, tableName, expectedColumn.name));\n\t}\n\tif (calls.length === 0) return { kind: \"no_match\" };\n\treturn {\n\t\tkind: \"match\",\n\t\tissues,\n\t\tcalls,\n\t\trecipe: true\n\t};\n};\nconst sqlitePlannerStrategies = [nullabilityTighteningBackfillStrategy, recreateTableStrategy];\n//#endregion\n//#region src/core/migrations/issue-planner.ts\n/**\n* The generic differ is total: a missing/extra table (or column) emits an\n* issue for itself AND for every node in its subtree (columns, defaults,\n* constraints, indexes). `CreateTableCall`/`DropTableCall` and\n* `AddColumnCall`/`DropColumnCall` already account for the whole subtree\n* (reading it directly off the table/column node), so the nested issues are\n* redundant — coalescing them is \"the planner's responsibility\" the differ's\n* own contract assigns (`schema-diff.ts`). Drops any issue whose path is a\n* strict descendant of a `not-found`/`not-expected` issue's path.\n*/\nfunction coalesceSubtreeIssues(issues) {\n\tconst collapsingPaths = issues.filter((issue) => issueOutcome(issue) === \"not-found\" || issueOutcome(issue) === \"not-expected\").map((issue) => issue.path);\n\tif (collapsingPaths.length === 0) return issues;\n\treturn issues.filter((issue) => !collapsingPaths.some((ancestor) => isStrictDescendantPath(issue.path, ancestor)));\n}\nfunction isStrictDescendantPath(path, ancestor) {\n\tif (path.length <= ancestor.length) return false;\n\tfor (let i = 0; i < ancestor.length; i += 1) if (path[i] !== ancestor[i]) return false;\n\treturn true;\n}\nfunction issueNode(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node);\n}\n/** Whether the expected/actual native type (resolved, or raw+many fallback) differs — mirrors `SqlColumnIR.isEqualTo`'s type comparison. */\nfunction columnTypeChanged(expected, actual) {\n\tif (expected.resolvedNativeType !== void 0 && actual.resolvedNativeType !== void 0) return expected.resolvedNativeType !== actual.resolvedNativeType;\n\treturn expected.nativeType !== actual.nativeType || Boolean(expected.many) !== Boolean(actual.many);\n}\n/**\n* Builds the flat `SqliteTableSpec` `RecreateTableCall` needs from the\n* expected table node — the node-sourced equivalent of the retired\n* `toTableSpec` (which read a raw contract `StorageTable`). Every column's\n* spec is resolved from its `codecRef` via `columnSpecFromNode`.\n*/\nfunction tableSpecFromNode(table, types) {\n\tconst columns = Object.values(table.columns).map((c) => columnSpecFromNode(c, isInlineAutoincrementPrimaryKeyNode(table, c), types));\n\tconst uniques = table.uniques.map((u) => ({\n\t\tcolumns: u.columns,\n\t\t...u.name !== void 0 ? { name: u.name } : {}\n\t}));\n\tconst foreignKeys = table.foreignKeys.map((fk) => ({\n\t\tcolumns: fk.columns,\n\t\treferences: {\n\t\t\ttable: fk.referencedTable,\n\t\t\tcolumns: fk.referencedColumns\n\t\t},\n\t\t...fk.name !== void 0 ? { name: fk.name } : {},\n\t\t...fk.onDelete !== void 0 ? { onDelete: fk.onDelete } : {},\n\t\t...fk.onUpdate !== void 0 ? { onUpdate: fk.onUpdate } : {}\n\t}));\n\treturn {\n\t\tcolumns,\n\t\t...table.primaryKey ? { primaryKey: { columns: table.primaryKey.columns } } : {},\n\t\tuniques,\n\t\tforeignKeys\n\t};\n}\nfunction issueConflict(kind, summary, location) {\n\treturn {\n\t\tkind,\n\t\tsummary,\n\t\twhy: \"Use `migration new` to author a custom migration for this change.\",\n\t\t...location ? { location } : {}\n\t};\n}\nfunction issueLocation(tableName, columnName) {\n\treturn columnName !== void 0 ? {\n\t\tentityKind: \"table\",\n\t\tentityName: tableName,\n\t\tcolumn: columnName\n\t} : {\n\t\tentityKind: \"table\",\n\t\tentityName: tableName\n\t};\n}\n/**\n* Conflict kind for a node kind that `recreateTableStrategy` absorbs for\n* every reachable production issue. Reaching `mapNodeIssueToCall` for one of\n* these means the recreate strategy didn't run — mirrors the legacy\n* `conflictKindForIssue` per-kind categorization.\n*/\nfunction absorbedConflictKind(nodeKind) {\n\tswitch (nodeKind) {\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.unique: return \"indexIncompatible\";\n\t\tcase RelationalSchemaNodeKind.foreignKey: return \"foreignKeyConflict\";\n\t\tdefault: return \"missingButNonAdditive\";\n\t}\n}\n/**\n* Builds the `CreateTableCall` + per-index `CreateIndexCall`s for a\n* newly-expected table. Reads only the table node's own children — indexes\n* (declared + FK-backing, deduped) are already merged and ordered at\n* derivation (`contractToSchemaIR`'s `convertTable`).\n*/\nfunction buildCreateTableCalls(table, types) {\n\tconst columns = Object.values(table.columns).map((c) => ddlColumnFromNode(c, isInlineAutoincrementPrimaryKeyNode(table, c), types));\n\tconst constraints = tableConstraintsFromNode(table, Object.values(table.columns).some((c) => isInlineAutoincrementPrimaryKeyNode(table, c)));\n\tconst calls = [new CreateTableCall(table.name, columns, constraints.length > 0 ? constraints : void 0)];\n\tfor (const index of table.indexes) {\n\t\tconst indexName = index.name;\n\t\tcalls.push(new CreateIndexCall(table.name, indexName, index.columns ?? []));\n\t}\n\treturn calls;\n}\nfunction mapTableIssue(issue, types) {\n\tif (issueOutcome(issue) === \"not-found\") return ok(buildCreateTableCalls(blindCast(issue.expected), types));\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst table = blindCast(issue.actual);\n\t\tif (CONTROL_TABLE_NAMES.has(table.name)) return ok([]);\n\t\treturn ok([new DropTableCall(table.name)]);\n\t}\n\treturn notOk(issueConflict(\"unsupportedOperation\", `Unexpected table drift: ${issue.path.join(\"/\")}`));\n}\nfunction mapColumnIssue(issue, ctx) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Column issue has no table in its path: ${issue.path.join(\"/\")}`));\n\tif (issueOutcome(issue) === \"not-found\") {\n\t\tconst column = blindCast(issue.expected);\n\t\tconst table = ctx.expected.tables[tableName];\n\t\treturn ok([new AddColumnCall(tableName, columnSpecFromNode(column, table !== void 0 && isInlineAutoincrementPrimaryKeyNode(table, column), ctx.types))]);\n\t}\n\tif (issueOutcome(issue) === \"not-expected\") return ok([new DropColumnCall(tableName, blindCast(issue.actual).name)]);\n\tconst expected = blindCast(issue.expected);\n\treturn notOk(issueConflict(columnTypeChanged(expected, blindCast(issue.actual)) ? \"typeMismatch\" : \"nullabilityConflict\", issue.path.join(\"/\"), issueLocation(tableName, expected.name)));\n}\nfunction mapIndexIssue(issue) {\n\tconst tableName = issue.path[1];\n\tif (tableName === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Index issue has no table in its path: ${issue.path.join(\"/\")}`));\n\tif (issueOutcome(issue) === \"not-found\") {\n\t\tconst index = blindCast(issue.expected);\n\t\tconst indexName = index.name;\n\t\treturn ok([new CreateIndexCall(tableName, indexName, index.columns ?? [])]);\n\t}\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst indexName = blindCast(issue.actual).name;\n\t\treturn ok([new DropIndexCall(tableName, indexName)]);\n\t}\n\treturn notOk(issueConflict(\"indexIncompatible\", issue.path.join(\"/\"), issueLocation(tableName)));\n}\nfunction mapNodeIssueToCall(issue, ctx) {\n\tconst node = issueNode(issue);\n\tif (node === void 0) return notOk(issueConflict(\"unsupportedOperation\", `Issue carries neither an expected nor an actual node: ${issue.path.join(\"/\")}`));\n\tswitch (node.nodeKind) {\n\t\tcase RelationalSchemaNodeKind.table: return mapTableIssue(issue, ctx.types);\n\t\tcase RelationalSchemaNodeKind.column: return mapColumnIssue(issue, ctx);\n\t\tcase RelationalSchemaNodeKind.index: return mapIndexIssue(issue);\n\t\tcase RelationalSchemaNodeKind.columnDefault:\n\t\tcase RelationalSchemaNodeKind.primaryKey:\n\t\tcase RelationalSchemaNodeKind.foreignKey:\n\t\tcase RelationalSchemaNodeKind.unique: return notOk(issueConflict(absorbedConflictKind(node.nodeKind), issue.path.join(\"/\")));\n\t\tcase RelationalSchemaNodeKind.check: return notOk(issueConflict(\"unsupportedOperation\", `The SQLite target does not support CHECK constraint DDL: ${issue.path.join(\"/\")}`));\n\t\tdefault: return notOk(issueConflict(\"unsupportedOperation\", `Unhandled node kind: ${node.nodeKind}`));\n\t}\n}\nfunction classifyCall(call) {\n\tswitch (call.factoryName) {\n\t\tcase \"createTable\": return \"create-table\";\n\t\tcase \"addColumn\": return \"add-column\";\n\t\tcase \"createIndex\": return \"create-index\";\n\t\tcase \"dropColumn\": return \"drop-column\";\n\t\tcase \"dropIndex\": return \"drop-index\";\n\t\tcase \"dropTable\": return \"drop-table\";\n\t\tcase \"recreateTable\": return null;\n\t\tdefault: return null;\n\t}\n}\nconst DEFAULT_POLICY = { allowedOperationClasses: [\n\t\"additive\",\n\t\"widening\",\n\t\"destructive\",\n\t\"data\"\n] };\nfunction planIssues(options) {\n\tconst policyProvided = options.policy !== void 0;\n\tconst policy = options.policy ?? DEFAULT_POLICY;\n\tconst frameworkComponents = options.frameworkComponents ?? [];\n\tconst context = {\n\t\texpected: options.expected ?? emptySchemaIR(),\n\t\tactual: options.actual ?? emptySchemaIR(),\n\t\tpolicy,\n\t\tframeworkComponents,\n\t\ttypes: sqlTypeLookupsOf(frameworkComponents)\n\t};\n\tconst strategies = options.strategies ?? sqlitePlannerStrategies;\n\tlet remaining = options.issues;\n\tconst recipeCalls = [];\n\tconst bucketableCalls = [];\n\tfor (const strategy of strategies) {\n\t\tconst result = strategy(remaining, context);\n\t\tif (result.kind === \"match\") {\n\t\t\tremaining = result.issues;\n\t\t\tif (result.recipe) recipeCalls.push(...result.calls);\n\t\t\telse bucketableCalls.push(...result.calls);\n\t\t}\n\t}\n\tconst sorted = orderIssuesByDependencies(remaining);\n\tconst defaultCalls = [];\n\tconst conflicts = [];\n\tfor (const issue of sorted) {\n\t\tconst result = mapNodeIssueToCall(issue, context);\n\t\tif (result.ok) defaultCalls.push(...result.value);\n\t\telse conflicts.push(result.failure);\n\t}\n\tconst allowed = policy.allowedOperationClasses;\n\tlet gatedRecipe = recipeCalls;\n\tlet gatedBucketable = bucketableCalls;\n\tlet gatedDefault = defaultCalls;\n\tif (policyProvided) {\n\t\tconst sink = (acc) => (call) => {\n\t\t\tif (allowed.includes(call.operationClass)) {\n\t\t\t\tacc.push(call);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconflicts.push(conflictForDisallowedCall(call, allowed));\n\t\t};\n\t\tconst gatedRecipeBucket = [];\n\t\tconst gatedBucketableBucket = [];\n\t\tconst gatedDefaultBucket = [];\n\t\trecipeCalls.forEach(sink(gatedRecipeBucket));\n\t\tbucketableCalls.forEach(sink(gatedBucketableBucket));\n\t\tdefaultCalls.forEach(sink(gatedDefaultBucket));\n\t\tgatedRecipe = gatedRecipeBucket;\n\t\tgatedBucketable = gatedBucketableBucket;\n\t\tgatedDefault = gatedDefaultBucket;\n\t}\n\tif (conflicts.length > 0) return notOk(conflicts);\n\tconst combined = [...gatedDefault, ...gatedBucketable];\n\tconst byCategory = (cat) => combined.filter((c) => classifyCall(c) === cat);\n\treturn ok({ calls: [\n\t\t...byCategory(\"create-table\"),\n\t\t...byCategory(\"add-column\"),\n\t\t...byCategory(\"create-index\"),\n\t\t...gatedRecipe,\n\t\t...byCategory(\"drop-column\"),\n\t\t...byCategory(\"drop-index\"),\n\t\t...byCategory(\"drop-table\")\n\t] });\n}\nfunction emptySchemaIR() {\n\treturn new SqlSchemaIR({ tables: {} });\n}\nfunction conflictForDisallowedCall(call, allowed) {\n\tconst summary = `Operation \"${call.label}\" requires class \"${call.operationClass}\", but policy allows only: ${allowed.join(\", \")}`;\n\tconst location = locationForCall(call);\n\treturn {\n\t\tkind: conflictKindForCall(call),\n\t\tsummary,\n\t\twhy: \"Use `migration new` to author a custom migration for this change.\",\n\t\trefusedOperationClass: call.operationClass,\n\t\t...location ? { location } : {}\n\t};\n}\nfunction conflictKindForCall(call) {\n\tswitch (call.factoryName) {\n\t\tcase \"createIndex\":\n\t\tcase \"dropIndex\": return \"indexIncompatible\";\n\t\tdefault: return \"missingButNonAdditive\";\n\t}\n}\nfunction locationForCall(call) {\n\tconst location = {};\n\tif (\"tableName\" in call) {\n\t\tlocation.entityKind = \"table\";\n\t\tlocation.entityName = call.tableName;\n\t}\n\tif (\"columnName\" in call) location.column = call.columnName;\n\tif (\"indexName\" in call) location.index = call.indexName;\n\treturn Object.keys(location).length > 0 ? location : void 0;\n}\n//#endregion\n//#region src/core/migrations/index-replacements.ts\nfunction indexFindings(issues, outcome) {\n\treturn issues.flatMap((issue) => {\n\t\tconst node = issueNode(issue);\n\t\tconst tableName = issue.path[1];\n\t\tif (node === void 0 || !SqlIndexIR.is(node) || tableName === void 0) return [];\n\t\treturn issueOutcome(issue) === outcome ? [{\n\t\t\tissue,\n\t\t\tindex: node,\n\t\t\ttableName\n\t\t}] : [];\n\t});\n}\n/**\n* An index on a renamed table whose wire name derives from the table name: the old and the new index share their content hash and differ in name.\n*/\nfunction renamedTableIndex(renamedTables) {\n\treturn (old, replacement) => {\n\t\tconst oldWire = parseWireName(old.index.name);\n\t\tconst replacementWire = parseWireName(replacement.index.name);\n\t\treturn renamedTables.has(old.tableName) && old.tableName === replacement.tableName && oldWire !== void 0 && oldWire.hash === replacementWire?.hash && old.index.name !== replacement.index.name;\n\t};\n}\n/**\n* An index on the renamed column whose wire name derives from the column name: after the rename\n* the old and the new index cover the same columns on the same table and differ in name.\n*/\nfunction renamedColumnIndex(table, column) {\n\treturn (old, replacement) => old.tableName === table && replacement.tableName === table && old.index.name !== replacement.index.name && old.index.expression === void 0 && old.index.where === void 0 && (old.index.columns ?? []).includes(column) && old.index.unique === replacement.index.unique && isArrayEqual(old.index.columns ?? [], replacement.index.columns ?? []);\n}\n/**\n* An index on the same table whose new name SQLite takes for the old one, as after a table renamed by hand. Its content is not compared: the old index must be dropped before the new one can be created whatever either defines, and the new one is created from its own definition.\n*/\nconst indexNameCaseChange = (old, replacement) => old.tableName === replacement.tableName && old.index.name !== replacement.index.name && sqliteIdentifiersCollide(old.index.name, replacement.index.name);\n/**\n* Pairs each index the plan drops with the index that replaces it, and plans every paired drop before every paired create. SQLite cannot rename an index, and it compares index names without regard to the case of ASCII letters, so a replacement whose name differs from the old one only in that case would otherwise collide with it. The paired issues are returned as consumed so the ordinary diff does not plan them again.\n*/\nfunction pairIndexReplacements(issues, matches) {\n\tconst missing = indexFindings(issues, \"not-found\");\n\tconst pairs = indexFindings(issues, \"not-expected\").flatMap((old) => {\n\t\tconst replacement = missing.find((candidate) => matches(old, candidate));\n\t\tif (replacement === void 0) return [];\n\t\tmissing.splice(missing.indexOf(replacement), 1);\n\t\treturn [{\n\t\t\told,\n\t\t\treplacement\n\t\t}];\n\t});\n\tconst replacements = pairs.map(({ old, replacement }) => ({\n\t\tdrop: new DropIndexCall(old.tableName, old.index.name),\n\t\tcreate: new CreateIndexCall(replacement.tableName, replacement.index.name, replacement.index.columns ?? [])\n\t}));\n\treturn {\n\t\treplacements,\n\t\tcalls: indexReplacementCalls(replacements),\n\t\tconsumed: new Set(pairs.flatMap(({ old, replacement }) => [old.issue, replacement.issue]))\n\t};\n}\n//#endregion\n//#region src/core/migrations/schema-tables.ts\n/**\n* The tables of a SQLite schema. SQLite has one namespace, so the namespace id is ignored, and it\n* compares table and column names without regard to the case of ASCII letters.\n*/\nfunction sqliteSchemaTables(schema) {\n\tconst hasTable = (_namespaceId, table) => Object.hasOwn(schema.tables, table);\n\treturn {\n\t\thasTable,\n\t\thasColumn: (_namespaceId, table, column) => Object.hasOwn(schema.tables[table]?.columns ?? {}, column),\n\t\ttablesNamed: (_namespaceId, table) => Object.keys(schema.tables).filter((existing) => sqliteIdentifiersCollide(existing, table)),\n\t\tcolumnsNamed: (_namespaceId, table, column) => Object.keys(schema.tables[table]?.columns ?? {}).filter((existing) => sqliteIdentifiersCollide(existing, column)),\n\t\tnamespacesWithTable: (table) => hasTable(UNBOUND_NAMESPACE_ID, table) ? [UNBOUND_NAMESPACE_ID] : []\n\t};\n}\n//#endregion\n//#region src/core/migrations/working-schema.ts\nfunction rewriteRefs(refs, rewrite) {\n\treturn refs?.map(rewrite);\n}\n/**\n* Rewrites the step of `kind` and `id` in a ref that runs through the given table, and the table\n* step itself when `kind` is the table kind.\n*/\nfunction stepRewrite(tableName, kind, fromId, toId) {\n\treturn (ref) => {\n\t\tconst tableStep = ref[1];\n\t\tif (tableStep?.nodeKind !== RelationalSchemaNodeKind.table || tableStep.id !== tableName) return ref;\n\t\treturn ref.map((step, index) => index >= 1 && step.nodeKind === kind && step.id === fromId ? {\n\t\t\tnodeKind: kind,\n\t\t\tid: toId\n\t\t} : step);\n\t};\n}\nfunction withColumnName(column, name) {\n\treturn new SqlColumnIR({\n\t\tname,\n\t\tnativeType: column.nativeType,\n\t\tnullable: column.nullable,\n\t\t...ifDefined(\"default\", column.default),\n\t\t...ifDefined(\"annotations\", column.annotations),\n\t\t...ifDefined(\"many\", column.many),\n\t\t...ifDefined(\"resolvedNativeType\", column.resolvedNativeType),\n\t\t...ifDefined(\"resolvedDefault\", column.resolvedDefault),\n\t\t...ifDefined(\"authoredDefault\", column.authoredDefault),\n\t\t...ifDefined(\"codecRef\", column.codecRef),\n\t\t...ifDefined(\"codecBaseNativeType\", column.codecBaseNativeType),\n\t\t...ifDefined(\"dataType\", column.dataType),\n\t\t...ifDefined(\"toCanonicalForm\", column.toCanonicalForm)\n\t});\n}\n/**\n* An index whose definition carries SQL text, an expression or a predicate, keeps its columns as\n* they are: a column named inside the text cannot be renamed here, so the diff plans the index.\n*/\nfunction withIndex(index, name, rewrite, columnName) {\n\tconst columnsFollow = index.expression === void 0 && index.where === void 0;\n\tconst base = {\n\t\tnaming: name === index.name ? namingOf(index.name, index.prefix) : namingOfLiveName(name),\n\t\twhere: index.where,\n\t\tunique: index.unique,\n\t\tpartial: index.partial,\n\t\ttype: index.type,\n\t\toptions: index.options,\n\t\tannotations: index.annotations,\n\t\tdependsOn: rewriteRefs(index.dependsOn, rewrite)\n\t};\n\treturn new SqlIndexIR(index.expression !== void 0 ? {\n\t\t...base,\n\t\texpression: index.expression\n\t} : {\n\t\t...base,\n\t\tcolumns: (index.columns ?? []).map(columnsFollow ? columnName : (c) => c)\n\t});\n}\nfunction rebuildTable(table, edit, rewrite) {\n\tconst { primaryKey } = table;\n\tconst { columnName } = edit;\n\treturn new SqlTableIR({\n\t\tname: edit.name,\n\t\tcolumns: Object.fromEntries(Object.values(table.columns).map((column) => {\n\t\t\tconst name = columnName(column.name);\n\t\t\treturn [name, name === column.name ? column : withColumnName(column, name)];\n\t\t})),\n\t\t...ifDefined(\"primaryKey\", primaryKey === void 0 ? void 0 : new PrimaryKey({\n\t\t\tcolumns: primaryKey.columns.map(columnName),\n\t\t\t...ifDefined(\"name\", primaryKey.name),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(primaryKey.dependsOn, rewrite))\n\t\t})),\n\t\tuniques: table.uniques.map((unique) => new SqlUniqueIR({\n\t\t\tcolumns: unique.columns.map(columnName),\n\t\t\t...ifDefined(\"name\", unique.name),\n\t\t\t...ifDefined(\"annotations\", unique.annotations),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(unique.dependsOn, rewrite))\n\t\t})),\n\t\tforeignKeys: table.foreignKeys.map((fk) => new SqlForeignKeyIR({\n\t\t\tcolumns: fk.columns.map(columnName),\n\t\t\treferencedTable: edit.referencedTable(fk),\n\t\t\treferencedColumns: edit.referencedColumns(fk),\n\t\t\t...ifDefined(\"referencedSchema\", fk.referencedSchema),\n\t\t\t...ifDefined(\"name\", fk.name),\n\t\t\t...ifDefined(\"onDelete\", fk.onDelete),\n\t\t\t...ifDefined(\"onUpdate\", fk.onUpdate),\n\t\t\t...ifDefined(\"annotations\", fk.annotations),\n\t\t\t...ifDefined(\"resolvedReferencedNamespace\", fk.resolvedReferencedNamespace),\n\t\t\t...ifDefined(\"dependsOn\", rewriteRefs(fk.dependsOn, rewrite))\n\t\t})),\n\t\tindexes: table.indexes.map((index) => withIndex(index, edit.indexName(index), rewrite, columnName)),\n\t\t...ifDefined(\"checks\", table.checks?.map((check) => new SqlCheckConstraintIR({\n\t\t\tnaming: namingOf(check.name, check.prefix),\n\t\t\texpression: check.expression,\n\t\t\tdependsOn: rewriteRefs(check.dependsOn, rewrite)\n\t\t}))),\n\t\t...ifDefined(\"annotations\", table.annotations)\n\t});\n}\n/** Rebuilds every table: `editFor` returns the edit for a table, or `undefined` to keep it. */\nfunction mapTables(schema, rewrite, editFor) {\n\treturn new SqlSchemaIR({\n\t\ttables: Object.fromEntries(Object.values(schema.tables).map((table) => {\n\t\t\tconst rebuilt = rebuildTable(table, {\n\t\t\t\tname: table.name,\n\t\t\t\tcolumnName: (column) => column,\n\t\t\t\treferencedTable: (fk) => fk.referencedTable,\n\t\t\t\treferencedColumns: (fk) => fk.referencedColumns,\n\t\t\t\tindexName: (index) => index.name,\n\t\t\t\t...editFor(table)\n\t\t\t}, rewrite);\n\t\t\treturn [rebuilt.name, rebuilt];\n\t\t})),\n\t\t...ifDefined(\"annotations\", schema.annotations)\n\t});\n}\n/**\n* The schema with one table under its new name. Foreign keys anywhere that reference the table\n* follow it, and every dependency that names it moves with it. Object names do not change. An\n* unnamed primary key, unique constraint or foreign key stays unnamed: SQLite gives such a\n* constraint no name, so an introspected schema has none either, and the planner never renames\n* one.\n*/\nfunction renameTableInSqliteSchema(schema, rename) {\n\tconst { from, to } = rename;\n\treturn mapTables(schema, stepRewrite(from, RelationalSchemaNodeKind.table, from, to), (table) => ({\n\t\t...table.name === from ? { name: to } : {},\n\t\treferencedTable: (fk) => fk.referencedTable === from ? to : fk.referencedTable\n\t}));\n}\n/**\n* The schema with one column under its new name. The table's primary key, unique constraints,\n* foreign keys and plain column indexes name it under the new name, foreign keys anywhere that\n* reference it follow it, and every dependency that names it moves with it. An index with an\n* expression or a predicate keeps its SQL text, and index names do not change, as in SQLite.\n*/\nfunction renameColumnInSqliteSchema(schema, rename) {\n\tconst { table: tableName, from, to } = rename;\n\tconst rewrite = stepRewrite(tableName, RelationalSchemaNodeKind.column, `column:${from}`, `column:${to}`);\n\tconst renamed = (column) => column === from ? to : column;\n\treturn mapTables(schema, rewrite, (table) => ({\n\t\t...table.name === tableName ? { columnName: renamed } : {},\n\t\treferencedColumns: (fk) => fk.referencedTable === tableName ? fk.referencedColumns.map(renamed) : fk.referencedColumns\n\t}));\n}\nfunction replaceIndex(schema, replacement) {\n\tconst { tableName, indexName: oldIndexName } = replacement.drop;\n\tconst newIndexName = replacement.create.indexName;\n\treturn mapTables(schema, stepRewrite(tableName, RelationalSchemaNodeKind.index, `index:${oldIndexName}`, `index:${newIndexName}`), (table) => table.name === tableName ? { indexName: (index) => index.name === oldIndexName ? newIndexName : index.name } : void 0);\n}\n/** The working schema of a plan or a migration, starting from `initial`. */\nfunction createWorkingSchema(initial) {\n\treturn new WorkingSchemaImpl(initial);\n}\nvar WorkingSchemaImpl = class {\n\t#current;\n\tconstructor(initial) {\n\t\tthis.#current = initial;\n\t}\n\tget current() {\n\t\treturn this.#current;\n\t}\n\tapply(call) {\n\t\tconst renamed = call instanceof RenameColumnCall ? renameColumnInSqliteSchema(this.#current, {\n\t\t\ttable: call.tableName,\n\t\t\tfrom: call.oldColumnName,\n\t\t\tto: call.columnName\n\t\t}) : renameTableInSqliteSchema(this.#current, {\n\t\t\tfrom: call.oldTableName,\n\t\t\tto: call.tableName\n\t\t});\n\t\tthis.#current = call.indexReplacements.reduce(replaceIndex, renamed);\n\t}\n};\n//#endregion\n//#region src/core/migrations/table-rename-calls.ts\n/** The SQL a user runs against the database to rename the table by hand. */\nfunction renameTableByHandStatements(rename) {\n\treturn renameTableSteps(rename.from, rename.to).map((renameStep) => renameStep.sql);\n}\n/** The `renameTable` call a user writes in `migration.ts` for `rename`; SQLite has no namespaces. */\nfunction renderRenameTableCall(rename) {\n\treturn new RenameTableCall(rename.from, rename.to, []).renderTypeScript();\n}\n/** How a user renames a table by hand on SQLite. */\nconst sqliteTableRenameByHand = {\n\trenderTableRename: renderRenameTableCall,\n\ttableRenameByHand: renameTableByHandStatements\n};\n/**\n* The call that renames a table, carrying as companions a drop and a create under the new name of\n* each index whose wire name derives from the old table name, since SQLite cannot rename an index.\n* `previous` is the schema with the table under its old name; the renamed copy is diffed against\n* `contract`. SQLite names no primary key, unique constraint or foreign key the contract leaves\n* unnamed, so those need nothing.\n*/\nfunction sqliteTableRenameCall(input) {\n\tconst { from, to } = input.rename;\n\tconst { issues } = buildSqlitePlanDiff({\n\t\tcontract: input.contract,\n\t\tactualSchema: renameTableInSqliteSchema(input.previous, {\n\t\t\tfrom,\n\t\t\tto\n\t\t}),\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst { replacements } = pairIndexReplacements(coalesceSubtreeIssues(issues), renamedTableIndex(/* @__PURE__ */ new Set([to])));\n\treturn new RenameTableCall(from, to, replacements);\n}\n/**\n* The call that renames a column, carrying as companions a drop and a create under the new name of\n* each index on the column whose wire name derives from the column name, since SQLite cannot rename\n* an index and keeps the old name when it renames the column. `previous` is the schema with the\n* column under its old name; the renamed copy is diffed against `contract`.\n*/\nfunction sqliteColumnRenameCall(input) {\n\tconst { table, from, to } = input.rename;\n\tconst { issues } = buildSqlitePlanDiff({\n\t\tcontract: input.contract,\n\t\tactualSchema: renameColumnInSqliteSchema(input.previous, {\n\t\t\ttable,\n\t\t\tfrom,\n\t\t\tto\n\t\t}),\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst { replacements } = pairIndexReplacements(coalesceSubtreeIssues(issues), renamedColumnIndex(table, to));\n\treturn new RenameColumnCall(table, from, to, replacements);\n}\n//#endregion\n//#region src/core/migrations/sqlite-migration.ts\n/**\n* Target-owned base class for SQLite migrations. Fixes the `SqlMigration`\n* generic to `SqlitePlanTargetDetails` and the abstract `targetId` to the\n* SQLite literal, so both user-authored migrations and renderer-generated\n* scaffolds can extend `SqliteMigration` directly without redeclaring\n* target-local identity.\n*\n* The constructor materializes a single SQLite `SqlControlAdapter` from\n* `stack.adapter.create(stack)` and stores it; the protected instance methods\n* forward to the corresponding `*Call` with that stored adapter, so user\n* migrations can write `this.createTable({...})` without threading the adapter\n* through every call.\n*\n* Binds the framework base's `Start` / `End` contract generics so a subclass\n* that assigns its snapshot-store `contract.json` imports to\n* `startContractJson` / `endContractJson` gets fully-typed view accessors:\n* `this.endContract` is a `SqliteContractView<End>`\n* (sole namespace unwrapped to the root — `this.endContract.table.<name>`),\n* built lazily from the JSON fields via the shared `MigrationContractViews`\n* helper. Mirrors `MongoMigration`'s view getters; the framework base derives\n* `describe()` from the same JSON.\n*/\nvar SqliteMigration = class extends Migration {\n\ttargetId = \"sqlite\";\n\t/**\n\t* Materialized SQLite control adapter, created once per migration\n\t* instance from the injected stack. `undefined` only when the migration\n\t* was instantiated without a stack (test fixtures); `controlAdapterFor`\n\t* throws a MIGRATION.SQLITE_CONTROL_STACK_MISSING in that case to surface the misuse.\n\t*/\n\tcontrolAdapter;\n\t#endView = new MigrationContractViews(this, \"SqliteMigration\", (json) => SqliteContractView.fromJson(json));\n\t/** The rename calls this read of `operations` has made so far, in order. */\n\t#renames = [];\n\t#startView = new MigrationContractViews(this, \"SqliteMigration\", (json) => SqliteContractView.fromJson(json));\n\tconstructor(stack) {\n\t\tsuper(stack);\n\t\tthis.controlAdapter = stack?.adapter ? blindCast(stack.adapter.create(stack)) : void 0;\n\t}\n\tframeworkComponents() {\n\t\tconst stack = this.stack;\n\t\tif (stack === void 0) return [];\n\t\treturn [\n\t\t\tstack.target,\n\t\t\t...stack.adapter === void 0 ? [] : [stack.adapter],\n\t\t\t...stack.extensions\n\t\t];\n\t}\n\t/**\n\t* Returns the materialized control adapter, or throws a MIGRATION.SQLITE_CONTROL_STACK_MISSING naming\n\t* `operation` when the migration was constructed without a `ControlStack`.\n\t* Single home for the null-check that every DDL/DML method shares.\n\t*/\n\tcontrolAdapterFor(operation) {\n\t\tif (!this.controlAdapter) throw errorSqliteMigrationStackMissing(operation);\n\t\treturn this.controlAdapter;\n\t}\n\t/**\n\t* The typed SQLite view over this migration's end-state contract — sole\n\t* namespace unwrapped to the root, so `this.endContract.table.<name>` etc.\n\t* Throws if no `endContractJson` was provided.\n\t*/\n\tget endContract() {\n\t\treturn this.#endView.endContract;\n\t}\n\t/**\n\t* The typed SQLite view over this migration's start-state contract, or\n\t* `null` for a baseline migration (no `startContractJson`).\n\t*/\n\tget startContract() {\n\t\treturn this.#startView.startContract;\n\t}\n\tcreateTable(options) {\n\t\treturn new CreateTableCall(options.table, options.columns, options.constraints).toOp(this.controlAdapterFor(\"createTable\"));\n\t}\n\tdropTable(options) {\n\t\treturn new DropTableCall(options.table).toOp(this.controlAdapterFor(\"dropTable\"));\n\t}\n\t/**\n\t* Emit the operations that rename a table: the table rename, then a drop and a create under the\n\t* new name of each index whose name was derived from the old table name. The old name is resolved\n\t* against the schema as this migration's earlier `renameTable` calls leave it, and the new name\n\t* against the end contract. Spread the result into `operations`:\n\t* `...this.renameTable({ table: 'userProfile', to: 'UserProfile' })`. Throws\n\t* `MIGRATION.TABLE_RENAME_UNMATCHED` when the table does not exist at that point of the migration\n\t* or the end contract lacks the new name.\n\t*/\n\trenameTable(options) {\n\t\tconst adapter = this.controlAdapterFor(\"renameTable\");\n\t\tconst rename = {\n\t\t\tnamespaceId: void 0,\n\t\t\tfrom: options.table,\n\t\t\tto: options.to\n\t\t};\n\t\tconst startContract = this.startContract;\n\t\tif (startContract === null) throw unmatchedTableRename(rename, \"the migration has no start contract\");\n\t\tconst current = this.schemaAfterRenames(startContract);\n\t\tconst endContract = this.endContract;\n\t\tconst resolved = resolveTableRenameAgainst(sqliteSchemaTables(current), endContract, rename);\n\t\tif (!resolved.ok) throw resolved.failure;\n\t\tconst call = sqliteTableRenameCall({\n\t\t\tprevious: current,\n\t\t\tcontract: endContract,\n\t\t\trename: resolved.value,\n\t\t\tframeworkComponents: this.frameworkComponents()\n\t\t});\n\t\tthis.#renames.push(call);\n\t\treturn call.toOps(adapter);\n\t}\n\t/**\n\t* Emit the operations that rename a column: the column rename, then a drop and a create under\n\t* the new name of each index on the column whose name was derived from the old column name. The\n\t* column is resolved against the schema as this migration's earlier rename calls leave it, so a\n\t* column of a table an earlier `renameTable` renamed is named on the table's new name. Spread the\n\t* result into `operations`: `...this.renameColumn({ table: 'User', column: 'name', to:\n\t* 'fullName' })`. Throws `MIGRATION.COLUMN_RENAME_UNMATCHED` when the table or column does not\n\t* exist at that point of the migration, the table already has the new column, or the end\n\t* contract lacks it.\n\t*/\n\trenameColumn(options) {\n\t\tconst adapter = this.controlAdapterFor(\"renameColumn\");\n\t\tconst rename = {\n\t\t\tnamespaceId: void 0,\n\t\t\ttable: options.table,\n\t\t\tfrom: options.column,\n\t\t\tto: options.to\n\t\t};\n\t\tconst startContract = this.startContract;\n\t\tif (startContract === null) throw unmatchedColumnRename(rename, \"the migration has no start contract\");\n\t\tconst current = this.schemaAfterRenames(startContract);\n\t\tconst resolved = resolveColumnRenameAgainst(sqliteSchemaTables(current), this.endContract, rename);\n\t\tif (!resolved.ok) throw resolved.failure;\n\t\tconst call = sqliteColumnRenameCall({\n\t\t\tprevious: current,\n\t\t\tcontract: this.endContract,\n\t\t\trename: resolved.value,\n\t\t\tframeworkComponents: this.frameworkComponents()\n\t\t});\n\t\tthis.#renames.push(call);\n\t\treturn call.toOps(adapter);\n\t}\n\t/** The start contract's schema with this read's rename calls applied in order. */\n\tschemaAfterRenames(startContract) {\n\t\tconst working = createWorkingSchema(sqliteContractToSchema(startContract, sqlTypeLookupsOf(this.frameworkComponents())));\n\t\tfor (const call of this.#renames) working.apply(call);\n\t\treturn working.current;\n\t}\n\tbeginOperationsRead() {\n\t\tthis.#renames = [];\n\t}\n\taddColumn(options) {\n\t\treturn new AddColumnCall(options.table, columnSpecOf(options.column, \"addColumn\", options.table)).toOp(this.controlAdapterFor(\"addColumn\"));\n\t}\n\tdropColumn(options) {\n\t\treturn new DropColumnCall(options.table, options.column).toOp(this.controlAdapterFor(\"dropColumn\"));\n\t}\n\tcreateIndex(options) {\n\t\treturn new CreateIndexCall(options.table, options.index, options.columns).toOp(this.controlAdapterFor(\"createIndex\"));\n\t}\n\tdropIndex(options) {\n\t\treturn new DropIndexCall(options.table, options.index).toOp(this.controlAdapterFor(\"dropIndex\"));\n\t}\n\trecreateTable(options) {\n\t\treturn new RecreateTableCall({\n\t\t\t...options,\n\t\t\tcontractTable: {\n\t\t\t\t...options.contractTable,\n\t\t\t\tcolumns: options.contractTable.columns.map((column) => columnSpecOf(column, \"recreateTable\", options.tableName))\n\t\t\t}\n\t\t}).toOp(this.controlAdapterFor(\"recreateTable\"));\n\t}\n};\nfunction columnDefaultOf(columnDefault, what) {\n\treturn columnDefault.kind === \"function\" ? {\n\t\tkind: \"function\",\n\t\texpression: sqlTextOf(columnDefault.expression, what)\n\t} : columnDefault;\n}\nfunction columnSpecOf(column, operation, table) {\n\tconst { default: columnDefault, ...rest } = column;\n\tconst what = `${operation} ${JSON.stringify(table)}.${JSON.stringify(column.name)} default`;\n\treturn {\n\t\t...rest,\n\t\t...ifDefined(\"default\", columnDefault === void 0 ? void 0 : columnDefaultOf(columnDefault, what))\n\t};\n}\n//#endregion\nexport { diffSqliteSchema as _, sqliteTableRenameByHand as a, verifySqliteDatabaseSchema as b, sqliteSchemaTables as c, coalesceSubtreeIssues as d, conflictForDisallowedCall as f, buildSqlitePlanDiff as g, sqlitePlannerStrategies as h, sqliteColumnRenameCall as i, indexNameCaseChange as l, planIssues as m, renameTableByHandStatements as n, sqliteTableRenameCall as o, issueNode as p, renderRenameTableCall as r, createWorkingSchema as s, SqliteMigration as t, pairIndexReplacements as u, sqliteActualSchema as v, sqliteContractToSchema as y };\n\n//# sourceMappingURL=sqlite-migration-D7DWt0JL.mjs.map"],"mappings":"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"}
package/dist/target.mjs CHANGED
@@ -15,11 +15,11 @@ import { t as buildTargetDetails } from "./planner-target-details-CIQ789Gc-C5U4y
15
15
  import { a as DropColumnCall, c as RawSqlCall, d as RenameTableCall, i as DataTransformCall, l as RecreateTableCall, n as CreateIndexCall, o as DropIndexCall, r as CreateTableCall, s as DropTableCall, t as AddColumnCall, u as RenameColumnCall } from "./op-factory-call-gwVgzGbc-caCULmpj.mjs";
16
16
  import { n as LEDGER_TABLE_NAME, r as MARKER_TABLE_NAME, t as CONTROL_TABLE_NAMES } from "./control-tables-D_o8dKRB-BXi43noL.mjs";
17
17
  import { i as sqliteCreateNamespace, n as SqliteContractView, r as SqliteUnboundDatabase, t as SqliteContractSerializer } from "./sqlite-contract-view-BrXalcTm-DYDH4LQC.mjs";
18
- import { t as SqliteMigration } from "./sqlite-migration-DocfLYRw-Bry1VeFm.mjs";
18
+ import { t as SqliteMigration } from "./sqlite-migration-D7DWt0JL-D_5jFkOx.mjs";
19
19
  import { t as renderOps } from "./render-ops-CBkWzmKj-6vfxyU3K.mjs";
20
- import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-lz_ul9te-DoBx4YeG.mjs";
21
- import { n as createSqliteMigrationPlanner, t as SqliteMigrationPlanner } from "./planner-BMV6uAgt-5I9GVELd.mjs";
22
- import { n as sqlitePslTypeConstructors } from "./control-DFTHNTG7.mjs";
20
+ import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-Cj_QCROn-0eatEGzt.mjs";
21
+ import { n as createSqliteMigrationPlanner, t as SqliteMigrationPlanner } from "./planner-Ddpm7j-w-BzyQ-raY.mjs";
22
+ import { n as sqlitePslTypeConstructors } from "./control-DJq7MF_s.mjs";
23
23
  import { a as foreignKey, c as primaryKey, d as unique, i as fn, l as rawSql, n as col, o as lit, r as dataTransform, s as placeholder, t as MigrationCLI, u as sql } from "./migration-CIKnw9my.mjs";
24
24
  import { t as normalizeSqliteNativeType } from "./native-type-normalizer-GpQMEyN5.mjs";
25
25
  export { AddColumnCall, CONTROL_TABLE_NAMES, CreateIndexCall, CreateTableCall, DataTransformCall, DropColumnCall, DropIndexCall, DropTableCall, LEDGER_TABLE_NAME, MARKER_TABLE_NAME, SqliteMigration as Migration, MigrationCLI, RawSqlCall, RecreateTableCall, RenameColumnCall, RenameTableCall, SQLITE_BIGINT_CODEC_ID, SQLITE_BIGINT_NUMBER_CODEC_ID, SQLITE_BLOB_CODEC_ID, SQLITE_DATETIME_CODEC_ID, SQLITE_INTEGER_CODEC_ID, SQLITE_JSON_CODEC_ID, SQLITE_NOW_EXPRESSION, SQLITE_REAL_CODEC_ID, SQLITE_TEXT_CODEC_ID, SQL_CHAR_CODEC_ID, SQL_FLOAT_CODEC_ID, SQL_INT_CODEC_ID, SQL_VARCHAR_CODEC_ID, SqliteCodecDescriptor, SqliteContractSerializer, SqliteContractView, SqliteCreateTable, SqliteDdlNode, SqliteMigrationPlanner, SqliteUnboundDatabase, TypeScriptRenderableSqliteMigration, assembleSqliteCodecRegistry, buildControlTableBootstrapQueries, buildSignMarkerBootstrapQueries, buildSqliteCodecDescriptorRegistry, buildTargetDetails, col, columnExistsAst, createSqliteBuiltinCodecLookup, createSqliteCodecRegistryWithBuiltins, createSqliteMigrationPlanner, createTable, dataTransform, datetime, defineSqliteCodecs, escapeLiteral, fn, foreignKey, indexExistsAst, integer, isSqliteCodecDescriptor, jsonDocumentRetag, jsonText, lit, normalizeSqliteNativeType, parseSqliteDefault, placeholder, primaryKey, quoteIdentifier, rawSql, renderOps, sql, sqliteAggregateDescriptors, sqliteBigintColumn, sqliteBigintNumberColumn, sqliteBlob, sqliteBlobColumn, sqliteCharacter, sqliteCharacterLengthParams, sqliteCharacterVarying, sqliteCodec, sqliteCodecDescriptorRegistry, sqliteCodecRegistry, sqliteCreateNamespace, sqliteDataTypeEntries, sqliteDataTypes, sqliteDatetimeColumn, sqliteInteger, sqliteIntegerColumn, sqliteJsonColumn, sqlitePslTypeConstructors, sqliteReal, sqliteRealColumn, sqliteTable, sqliteText, sqliteTextColumn, tableExistsAst, text, unique };
@@ -1,3 +1,3 @@
1
1
  import { i as sqliteCreateNamespace, r as SqliteUnboundDatabase } from "./sqlite-contract-view-BrXalcTm-DYDH4LQC.mjs";
2
- import { n as sqlitePslTypeConstructors, t as sqliteControlTargetDescriptor } from "./control-DFTHNTG7.mjs";
2
+ import { n as sqlitePslTypeConstructors, t as sqliteControlTargetDescriptor } from "./control-DJq7MF_s.mjs";
3
3
  export { SqliteUnboundDatabase, sqliteControlTargetDescriptor as default, sqliteCreateNamespace, sqlitePslTypeConstructors };
@@ -1,3 +1,3 @@
1
- import { t as SqliteMigration } from "./sqlite-migration-DocfLYRw-Bry1VeFm.mjs";
1
+ import { t as SqliteMigration } from "./sqlite-migration-D7DWt0JL-D_5jFkOx.mjs";
2
2
  import { a as foreignKey, c as primaryKey, d as unique, i as fn, l as rawSql, n as col, o as lit, r as dataTransform, s as placeholder, t as MigrationCLI, u as sql } from "./migration-CIKnw9my.mjs";
3
3
  export { SqliteMigration as Migration, MigrationCLI, col, dataTransform, fn, foreignKey, lit, placeholder, primaryKey, rawSql, sql, unique };
@@ -1,2 +1,2 @@
1
- import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-lz_ul9te-DoBx4YeG.mjs";
1
+ import { t as TypeScriptRenderableSqliteMigration } from "./planner-produced-sqlite-migration-Cj_QCROn-0eatEGzt.mjs";
2
2
  export { TypeScriptRenderableSqliteMigration };
@@ -1,2 +1,2 @@
1
- import { n as createSqliteMigrationPlanner, t as SqliteMigrationPlanner } from "./planner-BMV6uAgt-5I9GVELd.mjs";
1
+ import { n as createSqliteMigrationPlanner, t as SqliteMigrationPlanner } from "./planner-Ddpm7j-w-BzyQ-raY.mjs";
2
2
  export { SqliteMigrationPlanner, createSqliteMigrationPlanner };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/orm-target-sqlite",
3
- "version": "8.0.0-rc.17-dev.28",
3
+ "version": "8.0.0-rc.17-dev.29",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -9,19 +9,19 @@
9
9
  "dist"
10
10
  ],
11
11
  "dependencies": {
12
- "@prisma/orm-family-sql": "8.0.0-rc.17-dev.28",
13
- "@prisma/orm-framework": "8.0.0-rc.17-dev.28",
14
- "@prisma/orm-toolchain": "8.0.0-rc.17-dev.28",
12
+ "@prisma/orm-family-sql": "8.0.0-rc.17-dev.29",
13
+ "@prisma/orm-framework": "8.0.0-rc.17-dev.29",
14
+ "@prisma/orm-toolchain": "8.0.0-rc.17-dev.29",
15
15
  "@standard-schema/spec": "1.1.0",
16
16
  "arktype": "^2.2.2",
17
17
  "pathe": "^2.0.3"
18
18
  },
19
19
  "devDependencies": {
20
- "@internal/adapter-sqlite": "8.0.0-rc.17-dev.28",
21
- "@internal/driver-sqlite": "8.0.0-rc.17-dev.28",
22
- "@internal/target-sqlite": "8.0.0-rc.17-dev.28",
23
- "@repo/tsconfig": "8.0.0-rc.17-dev.28",
24
- "@repo/tsdown": "8.0.0-rc.17-dev.28",
20
+ "@internal/adapter-sqlite": "8.0.0-rc.17-dev.29",
21
+ "@internal/driver-sqlite": "8.0.0-rc.17-dev.29",
22
+ "@internal/target-sqlite": "8.0.0-rc.17-dev.29",
23
+ "@repo/tsconfig": "8.0.0-rc.17-dev.29",
24
+ "@repo/tsdown": "8.0.0-rc.17-dev.29",
25
25
  "tsdown": "0.22.14",
26
26
  "typescript": "5.9.3"
27
27
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner-BMV6uAgt-5I9GVELd.mjs","names":["#lowerer"],"sources":["../../../../3-targets/3-targets/sqlite/dist/planner-BMV6uAgt.mjs"],"sourcesContent":["import { a as DropColumnCall, c as RawSqlCall, l as RecreateTableCall, s as DropTableCall } from \"./op-factory-call-gwVgzGbc.mjs\";\nimport { _ as sqliteActualSchema, a as sqliteTableRenameCall, c as indexNameCaseChange, d as conflictForDisallowedCall, f as issueNode, h as buildSqlitePlanDiff, i as sqliteColumnRenameCall, l as pairIndexReplacements, m as sqlitePlannerStrategies, n as renameTableByHandStatements, o as createWorkingSchema, p as planIssues, r as renderRenameTableCall, s as sqliteSchemaTables, u as coalesceSubtreeIssues } from \"./sqlite-migration-DocfLYRw.mjs\";\nimport { t as TypeScriptRenderableSqliteMigration } from \"./planner-produced-sqlite-migration-lz_ul9te.mjs\";\nimport { issueOutcome } from \"@internal/framework-components/control\";\nimport { detectTableNameCaseChanges, extractCodecControlHooks, fieldEventStorage, planFieldEventCalls, planStatements, plannerFailure, storageNameOfOperation, subjectsOfCalls, unknownCallNames } from \"@internal/family-sql/control\";\nimport { RelationalSchemaNodeKind, SqlTableIR } from \"@internal/sql-schema-ir/types\";\nimport { UNBOUND_NAMESPACE_ID } from \"@internal/framework-components/ir\";\nimport { ok } from \"@internal/utils/result\";\n//#region src/core/migrations/operation-subjects.ts\nfunction tableTarget(table) {\n\treturn {\n\t\tstorageName: table,\n\t\ttable: {\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\ttable,\n\t\t\tcolumn: void 0\n\t\t}\n\t};\n}\nfunction columnTarget(table, column) {\n\treturn {\n\t\tstorageName: `${table}.${column}`,\n\t\ttable: {\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\ttable,\n\t\t\tcolumn\n\t\t}\n\t};\n}\nfunction operationCountOf(call) {\n\treturn \"companions\" in call && Array.isArray(call.companions) ? 1 + call.companions.length : 1;\n}\n/**\n* The columns a recreate loses: those the new table leaves out, whose values the copy drops, and,\n* when the recreate is destructive, those whose type it changes.\n*/\nfunction recreateLosses(call) {\n\tconst kept = new Set(call.contractTable.columns.map((column) => column.name));\n\treturn [...call.schemaColumnNames.filter((column) => !kept.has(column)), ...call.operationClass === \"destructive\" ? call.lossyColumns : []];\n}\n/**\n* What each call of a SQLite plan loses. A recreate that leaves a column out loses its values\n* itself, so a later drop of that column is not listed again.\n*/\nfunction sqliteCallSubjects(calls, fieldEvents) {\n\tconst lost = /* @__PURE__ */ new Set();\n\tconst unknownNames = unknownCallNames(calls.filter((call) => call.operationClass === \"destructive\" && !(call instanceof RecreateTableCall) && !(call instanceof DropColumnCall) && !(call instanceof DropTableCall) && !(call instanceof RawSqlCall) && !fieldEvents.has(call)));\n\treturn calls.map((call) => {\n\t\tconst operationCount = operationCountOf(call);\n\t\tif (call instanceof RecreateTableCall) {\n\t\t\tconst columns = recreateLosses(call);\n\t\t\tfor (const column of columns) lost.add(`${call.tableName}.${column}`);\n\t\t\treturn {\n\t\t\t\toperationCount,\n\t\t\t\tdataLoss: columns.length === 0 && call.operationClass === \"destructive\" ? [tableTarget(call.tableName)] : columns.map((column) => columnTarget(call.tableName, column)),\n\t\t\t\taccessWidening: []\n\t\t\t};\n\t\t}\n\t\tif (call instanceof DropColumnCall) return {\n\t\t\toperationCount,\n\t\t\tdataLoss: lost.has(`${call.tableName}.${call.columnName}`) ? [] : [columnTarget(call.tableName, call.columnName)],\n\t\t\taccessWidening: []\n\t\t};\n\t\tif (call instanceof DropTableCall) return {\n\t\t\toperationCount,\n\t\t\tdataLoss: [tableTarget(call.tableName)],\n\t\t\taccessWidening: []\n\t\t};\n\t\tif (call.operationClass !== \"destructive\") return {\n\t\t\toperationCount,\n\t\t\tdataLoss: [],\n\t\t\taccessWidening: []\n\t\t};\n\t\tconst fieldEvent = fieldEvents.get(call);\n\t\treturn {\n\t\t\toperationCount,\n\t\t\tdataLoss: [call instanceof RawSqlCall ? {\n\t\t\t\tstorageName: storageNameOfOperation(call.op),\n\t\t\t\ttable: void 0\n\t\t\t} : fieldEvent !== void 0 ? fieldEventStorage(fieldEvent) : {\n\t\t\t\tstorageName: unknownNames.get(call) ?? call.factoryName,\n\t\t\t\ttable: void 0\n\t\t\t}],\n\t\t\taccessWidening: []\n\t\t};\n\t});\n}\n//#endregion\n//#region src/core/migrations/planner.ts\nfunction createSqliteMigrationPlanner(lowerer) {\n\treturn new SqliteMigrationPlanner(lowerer);\n}\n/**\n* SQLite migration planner — a thin wrapper over `planIssues`.\n*\n* `plan()` diffs the live schema against the target contract via the one\n* differ (`buildSqlitePlanDiff`, producing node-typed `SchemaDiffIssue[]`)\n* and delegates to `planIssues` with the registered strategies. Strategies\n* absorb groups of related issues into composite recipes (e.g. recreating a\n* table to apply type/nullability/default/constraint changes at once);\n* anything not absorbed by a strategy flows through `mapNodeIssueToCall` in\n* the issue planner as a one-off call.\n*\n* FK-backing indexes are already merged into the expected table node's\n* `indexes` at derivation (`contractToSchemaIR`'s `convertTable`), so\n* `mapNodeIssueToCall` handles them uniformly alongside user-declared\n* indexes — no separate expansion step in the planner.\n*/\nvar SqliteMigrationPlanner = class {\n\t#lowerer;\n\tconstructor(lowerer) {\n\t\tthis.#lowerer = lowerer;\n\t}\n\tplan(options) {\n\t\treturn this.planSql(options);\n\t}\n\temptyMigration(context, spaceId) {\n\t\treturn new TypeScriptRenderableSqliteMigration([], {\n\t\t\tfrom: context.fromHash,\n\t\t\tto: context.toHash\n\t\t}, spaceId, context.snapshotsImportPath, void 0, this.#lowerer);\n\t}\n\tplanSql(options) {\n\t\tconst policyResult = this.ensureAdditivePolicy(options.policy);\n\t\tif (policyResult) return policyResult;\n\t\tconst statements = this.planStatements(options);\n\t\tif (!statements.ok) return plannerFailure([statements.failure]);\n\t\tconst { expected, actual, issues: diffIssues } = this.collectSchemaIssues(options, statements.value.schema);\n\t\tconst replacedIndexes = pairIndexReplacements(diffIssues, indexNameCaseChange);\n\t\tconst disallowedIndexCalls = replacedIndexes.calls.filter((call) => !options.policy.allowedOperationClasses.includes(call.operationClass));\n\t\tif (disallowedIndexCalls.length > 0) return plannerFailure(disallowedIndexCalls.map((call) => conflictForDisallowedCall(call, options.policy.allowedOperationClasses)));\n\t\tconst issues = diffIssues.filter((issue) => !replacedIndexes.consumed.has(issue));\n\t\tconst caseChangeConflicts = detectTableNameCaseChanges({\n\t\t\tissues,\n\t\t\ttableOf: (issue) => {\n\t\t\t\tconst node = issueNode(issue);\n\t\t\t\treturn node instanceof SqlTableIR ? node : void 0;\n\t\t\t},\n\t\t\tnamespaceIdOf: () => UNBOUND_NAMESPACE_ID,\n\t\t\trenameByHandStatements: renameTableByHandStatements,\n\t\t\trenameTableCall: renderRenameTableCall,\n\t\t\tcontract: options.contract,\n\t\t\tdefaultNamespaceId: UNBOUND_NAMESPACE_ID\n\t\t});\n\t\tif (caseChangeConflicts.length > 0) return plannerFailure(caseChangeConflicts);\n\t\tconst codecHooks = extractCodecControlHooks(options.frameworkComponents);\n\t\tconst result = planIssues({\n\t\t\tissues,\n\t\t\texpected,\n\t\t\tactual,\n\t\t\tpolicy: options.policy,\n\t\t\tframeworkComponents: options.frameworkComponents,\n\t\t\tstrategies: sqlitePlannerStrategies\n\t\t});\n\t\tif (!result.ok) return plannerFailure(result.failure);\n\t\tconst fieldEventCalls = planFieldEventCalls({\n\t\t\tpriorContract: options.origin === null ? null : options.fromContract,\n\t\t\tnewContract: options.contract,\n\t\t\tcodecHooks,\n\t\t\ttableRenames: statements.value.tableRenames,\n\t\t\tcolumnRenames: statements.value.columnRenames\n\t\t});\n\t\tconst fieldEventOps = fieldEventCalls.map(({ call }) => call);\n\t\tconst calls = [\n\t\t\t...statements.value.calls,\n\t\t\t...replacedIndexes.calls,\n\t\t\t...result.value.calls,\n\t\t\t...fieldEventOps\n\t\t];\n\t\tconst destination = {\n\t\t\tstorageHash: options.contract.storage.storageHash,\n\t\t\t...options.contract.profileHash !== void 0 ? { profileHash: options.contract.profileHash } : {}\n\t\t};\n\t\treturn {\n\t\t\tkind: \"success\",\n\t\t\tplan: new TypeScriptRenderableSqliteMigration(calls, {\n\t\t\t\tfrom: options.origin?.storageHash ?? null,\n\t\t\t\tto: options.contract.storage.storageHash\n\t\t\t}, options.spaceId, options.snapshotsImportPath, destination, this.#lowerer),\n\t\t\tappliedStatements: statements.value.appliedStatements,\n\t\t\t...subjectsOfCalls(sqliteCallSubjects(calls, new Map(fieldEventCalls.map((fieldEvent) => [fieldEvent.call, fieldEvent]))), {\n\t\t\t\tfromContract: options.fromContract,\n\t\t\t\tcontract: options.contract,\n\t\t\t\tstatements: options.statements\n\t\t\t})\n\t\t};\n\t}\n\t/**\n\t* Plans the statements against a working copy of the schema the plan starts from, in order, so\n\t* each rename's index replacements are computed against the schema the earlier statements left.\n\t* The diff then runs on that schema.\n\t*/\n\tplanStatements(options) {\n\t\tconst working = createWorkingSchema(sqliteActualSchema(options.schema));\n\t\tconst planned = planStatements({\n\t\t\tstatements: options.statements,\n\t\t\tfromContract: options.fromContract,\n\t\t\tcontract: options.contract,\n\t\t\tpolicy: options.policy,\n\t\t\ttarget: {\n\t\t\t\ttables: () => sqliteSchemaTables(working.current),\n\t\t\t\trenameTableCall: (rename) => sqliteTableRenameCall({\n\t\t\t\t\tprevious: working.current,\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t\trename,\n\t\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t\t}),\n\t\t\t\trenameColumnCall: (rename) => sqliteColumnRenameCall({\n\t\t\t\t\tprevious: working.current,\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t\trename,\n\t\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t\t}),\n\t\t\t\tapply: (call) => working.apply(call),\n\t\t\t\trenderTableRename: renderRenameTableCall,\n\t\t\t\ttableRenameByHand: renameTableByHandStatements\n\t\t\t}\n\t\t});\n\t\tif (!planned.ok) return planned;\n\t\treturn ok({\n\t\t\t...planned.value,\n\t\t\tschema: working.current\n\t\t});\n\t}\n\tensureAdditivePolicy(policy) {\n\t\tif (!policy.allowedOperationClasses.includes(\"additive\")) return plannerFailure([{\n\t\t\tkind: \"unsupportedOperation\",\n\t\t\tsummary: \"Migration planner requires additive operations be allowed\",\n\t\t\twhy: \"The planner requires the \\\"additive\\\" operation class to be allowed in the policy.\"\n\t\t}]);\n\t\treturn null;\n\t}\n\t/**\n\t* Diffs the target contract against the live schema via the one differ\n\t* (the same tree-building `diffSqliteSchema` uses, plus the\n\t* op-render stamper) and prepares the issue list `planIssues` consumes.\n\t*\n\t* Three passes, in order:\n\t* 1. Subtree coalescing — the differ is total (a missing/extra table also\n\t* emits an issue for every column/constraint under it); those nested\n\t* issues are redundant once the table-level `CreateTable`/`DropTable`\n\t* call already accounts for the whole subtree. Runs FIRST, over the\n\t* complete diff: a sibling-owned extra table's column issues must\n\t* collapse into its one table-level issue before the ownership pass,\n\t* because a bare column node carries no table reference — if coalescing\n\t* ran after ownership dropped the table-level issue, the orphaned column\n\t* issues would survive and the planner would emit drops against a\n\t* sibling space's table.\n\t* 2. Ownership — a live extra is only this plan's to drop when no contract\n\t* space owns it. The differ ran against THIS space's contract, so a\n\t* table a sibling owns surfaces here as `not-expected`; the planner asks\n\t* the ownership oracle (the passive aggregate) whether any space declares\n\t* it and, if so, leaves it alone. A table no space owns stays a genuine\n\t* extra. Ownership lives in the aggregate; the planner only asks. No\n\t* oracle (single-space) keeps every extra.\n\t* 3. Strict-mode extras gating — `not-expected` (extra table/column/\n\t* constraint) issues are dropped entirely outside strict mode, mirroring\n\t* the retired coordinate walk's `if (strict) { ...extra_* } }` guards:\n\t* an additive-only plan must never even consider dropping an unclaimed\n\t* object, not just refuse to emit the drop.\n\t*/\n\tcollectSchemaIssues(options, schema) {\n\t\tconst allowed = options.policy.allowedOperationClasses;\n\t\tconst strict = allowed.includes(\"widening\") || allowed.includes(\"destructive\");\n\t\tconst { expected, actual, issues: rawIssues } = buildSqlitePlanDiff({\n\t\t\tcontract: options.contract,\n\t\t\tactualSchema: schema,\n\t\t\tframeworkComponents: options.frameworkComponents\n\t\t});\n\t\tconst owned = retainUnownedExtras(coalesceSubtreeIssues(rawIssues), options.ownership);\n\t\treturn {\n\t\t\texpected,\n\t\t\tactual,\n\t\t\tissues: strict ? owned : owned.filter((issue) => issueOutcome(issue) !== \"not-expected\")\n\t\t};\n\t}\n};\n/**\n* Drops a `not-expected` issue when it is a whole extra TABLE that some\n* contract space owns, asking the ownership oracle per node.\n*\n* The consultation applies ONLY to table-level extras — a live table this\n* space's contract lacks — identified by asking the issue's own node\n* (`nodeKind === table`), never by counting path segments. SQLite is a\n* single-namespace target, so every coordinate is qualified with the shared\n* `UNBOUND_NAMESPACE_ID` sentinel (the same one the aggregate's declared\n* entities carry for this target). `entityKind` is the literal `'table'`:\n* this function only ever asks about a node already confirmed to be\n* `RelationalSchemaNodeKind.table` (checked just above), and that's a\n* diff-tree `nodeKind` spelling (`'sql-table'`) distinct from the storage\n* `entries` vocabulary `elementCoordinates` walks (`'table'`) — the literal\n* is that storage-entries spelling. `declaresEntity` answers over the whole\n* composition (self included), so a positive answer on such a table means\n* another space owns it (a table this space owned would be in its expected\n* tree, never an extra): leave it. A negative answer means no space owns\n* it — a genuine orphan to drop.\n*\n* A DEEPER extra (an extra column/constraint on a table this space DOES own —\n* only the child drifted, so the table is in the expected tree) is this\n* space's own drift and is always kept for dropping; asking the oracle there\n* would wrongly suppress it, because the owned table answers `true`. No oracle\n* ⇒ every extra is kept (single-space plan).\n*/\nfunction retainUnownedExtras(issues, ownership) {\n\tif (ownership === void 0) return issues;\n\treturn issues.filter((issue) => {\n\t\tif (issueOutcome(issue) !== \"not-expected\") return true;\n\t\tconst node = issueNode(issue);\n\t\tif (node === void 0 || node.nodeKind !== RelationalSchemaNodeKind.table) return true;\n\t\tconst tableName = issue.path[1];\n\t\treturn tableName === void 0 || !ownership.declaresEntity({\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\tentityKind: \"table\",\n\t\t\tentityName: tableName\n\t\t});\n\t});\n}\n//#endregion\nexport { createSqliteMigrationPlanner as n, SqliteMigrationPlanner as t };\n\n//# sourceMappingURL=planner-BMV6uAgt.mjs.map"],"mappings":"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"}