Kysely v0.30.0-beta.1

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 where kysely wrap 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 expose config: { transaction: false } from the module, right next to the up/down functions.
  • 'none' means no transactions are used, which is similar to the now deprecated disableTransactions: 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
PostgreSQL 🐘 / MSSQL 🥅
MySQL 🐬
SQLite 📘
🐞 Bugfixes
📖 Documentation
📦 CICD & Tooling
⚠️ Breaking Changes
  • disableTransactions is deprecated. Use the new transactionMode: 'none', or transactionMode: 'per-migration' with combination of config: { transaction: false }.
SQLite 📘
  • Trying to pass records with BLOB columns 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
What's Changed

Full Changelog: https://github.com/kysely-org/kysely/compare/4ba0bd495a4cbe11d8d58ef02537586dc4d56532...v0.30.0-beta.1

View original

Upgraded? How did it go?

Discussion