v0.30.0-beta.1Pre-release
0.30.0-beta.1
Added 5
- Add transactionMode property to Migrator accepting 'per-run', 'per-migration', or 'none' to control transaction behavior across migrations
- Add defineMigration helper function to simplify migration writing and contract requirements
- Add migrateTo(name, { direction: 'Up' | 'Down' }) method to Migrator to enforce migration direction
- Support mysql2/promise in MysqlDialect in addition to the callback-based mysql2 import
- Deny passing BLOB-like columns to SQLite JSON helpers with compile-time type errors
Changed 1
- Per-migration transaction configuration now allows each migration to specify whether it runs in its own transaction via config: { transaction: false }
Deprecated 1
- Deprecate disableTransactions option in favor of transactionMode property
Hey 👋
0.30 season is upon us. pnpm i kysely@next and get a sneak peak into the future!
We've got a new transactionMode: 'per-run' | 'per-migration' | 'none' property you can pass to Migrator or it's methods.
'per-run'is the classic behavior you're used to wherekyselywrap the entire run in a transaction when your dialect supports transactional DDL.'per-migration'enables each migration to pick whether it runs in its own transaction or not. Just exposeconfig: { transaction: false }from the module, right next to theup/downfunctions.'none'means no transactions are used, which is similar to the now deprecateddisableTransactions: true.
import * as fs from 'node:fs/promises'
import * as path from 'node:path'
import { FileMigrationProvider, Migrator } from 'kysely/migration'
const migrator = new Migrator({
db,
provider: new FileMigrationProvider({
fs,
migrationFolder: path.join(import.meta.dirname, 'migrations'),
}),
transactionMode: 'per-migration', // <-------------------------------
})
await migrator.migrateToLatest()
We've got a new defineMigration helper function that you can use to easily write your migrations and meet the contract requirements:
import { defineMigration } from 'kysely/migration'
export default defineMigration({
up: async (db) => {
// ...
},
config: { transaction: false }, // <--------------------
})
You can now use mysql2/promise, where in the past it would hang forever since we only supported the callback style of mysql2 root import.
🚀 Features
- feat(migrator): add
migrateTo(name, { direction: 'Up' | 'Down' })to enforce direction. by @igalklebanov in https://github.com/kysely-org/kysely/pull/1957
PostgreSQL 🐘 / MSSQL 🥅
- feat: Per-migration transaction configuration by @lourd & @igalklebanov in https://github.com/kysely-org/kysely/pull/1671
MySQL 🐬
- feat(mysql): support both
mysql2andmysql2/promiseinMysqlDialect. by @igalklebanov in https://github.com/kysely-org/kysely/pull/1958
SQLite 📘
- feat: deny passing BLOB-like columns to SQLite JSON helpers by @hwisu & @igalklebanov in https://github.com/kysely-org/kysely/pull/1698
🐞 Bugfixes
📖 Documentation
📦 CICD & Tooling
⚠️ Breaking Changes
disableTransactionsis deprecated. Use the newtransactionMode: 'none', ortransactionMode: 'per-migration'with combination ofconfig: { transaction: false }.
SQLite 📘
- Trying to pass records with
BLOBcolumns in JSON helpers emits compile-time errors - e.g.KyselyTypeError<'SQLite does not support passing `BLOB` values to `json_object`. Cast to `TEXT`.'>
🐤 New Contributors
- @lourd made their first contribution in https://github.com/kysely-org/kysely/pull/1671
What's Changed
Full Changelog: https://github.com/kysely-org/kysely/compare/4ba0bd495a4cbe11d8d58ef02537586dc4d56532...v0.30.0-beta.1