Skip to Content
Docs@flowblade/source-kysely

@flowblade/source-kysely

A source adapter for Kysely .

npm changelog codecov bundles node browserslist size downloads license

Install

npm i @flowblade/core @flowblade/source-kysely kysely # Install optional drivers # 01. for Ms SqlServer or Azure Sql Edge npm i tedious tarn

Kysely supports

Postgres MySQL MicrosoftSQLServer SQLite

Quick start

// Your db configuration, see Utils section for more details import { db } from '@/config/db.config.ts'; import { KyselyDatasource, isQueryResultError } from '@flowblade/source-kysely'; import { sql } from 'kysely'; import { KyselyDatasource, isQueryResultError } from '@flowblade/source-kysely'; const ds = new KyselyDatasource({ db }); const query = ds.queryBuilder // This gives access to Kysely expression builder .selectFrom('brand as b') .select(['b.id', 'b.name']) .leftJoin('product as p', 'p.brand_id', 'b.id') .select(['p.id as product_id', 'p.name as product_name']) .where('b.created_at', '<', new Date()) .orderBy('b.name', 'desc'); const result = await ds.query(query); // Or with query information (will be sent in the metadata) // const result = await ds.query(query, { // name: 'getBrands' // }); // Option 1: the QResult object contains the data, metadata and error // - data: the result rows (TData or undefined if error) // - error: the error (QError or undefined if success) // - meta: the metadata (always present) const { data, meta, error } = result; // Option 2: You operate over the result, ie: mapping the data const { data: data2 } = result.map((row) => { return { ...data, key: `key-${row.productId}` }})

Utils

createKyselyMssqlDialect

Create a Kysely dialect for Ms SqlServer or Azure Sql Edge.

import * as Tedious from 'tedious'; import { TediousConnUtils, createKyselyMssqlDialect } from '@flowblade/source-kysely'; const jdbcDsn = "sqlserver://localhost:1433;database=db;user=sa;password=pwd;trustServerCertificate=true;encrypt=false"; const tediousConfig = TediousConnUtils.fromJdbcDsn(jdbcDsn); const dialect = createKyselyMssqlDialect({ tediousConfig, // 👉 Optional tarn pool options poolOptions: { min: 0, // 👉 Minimum number of connections, default 0 max: 10, // 👉 Maximum number of connections, default 10 propagateCreateError: true, // 👉 Propagate connection creation errors, default false }, dialectConfig: { /** * When true, connections are validated before being acquired from the pool, * resulting in additional requests to the database. * * In safe scenarios, this can be set to false to improve performance. * * Defaults to `true`. */ validateConnections: true, /** * When true, connections are reset to their initial states when released back to the pool, * resulting in additional requests to the database. * * Defaults to `false`. */ resetConnectionsOnRelease: false, }, }); const db = new Kysely<DB>({ dialect })

Note: For performance you can avoid connection roundtrips by setting validateConnections to false and resetConnectionOnRelease to false.

TediousConnUtils

fromJdbcDsn

Parse and validate a JDBC connection string and return a Tedious connection configuration.

import * as Tedious from 'tedious'; import { TediousConnUtils } from '@flowblade/source-kysely'; // In your .env file // DB_JDBC_DSN="sqlserver://localhost:1433;database=db;user=sa;password=pwd;trustServerCertificate=true;encrypt=false"; const tediousConfig = TediousConnUtils.fromJdbcDsn(process.env.DB_JDBC_DSN); const tediousConnection = new Tedious.Connection(tediousConfig);

Compatibility

LevelCIDescription
NodeCI for 18.x, 20.x & 22.x.
CloudflareEnsured with @cloudflare/vitest-pool-workers (see wrangler.toml 
Browserslist> 95%  on 01/2025. Chrome 96+, Firefox 90+, Edge 19+, ios 15+, Safari 15+ and Opera 77+ 
TypescriptTS 5.0 + / are-the-type-wrong  checks on CI.
ES2022Dist files checked with es-check 
PerformanceMonitored with codspeed.io 
Last updated on