UNPKG

kanel-kysely

Version:
98 lines (64 loc) 2.74 kB
# Kysely extension for Kanel Generate [Kysely](https://kysely.dev/) types directly from your Postgres database. This packages extends [Kanel](https://github.com/kristiandupont/kanel) with some Kysely specific features. Check ./example/.kanelrc.js for how to customize your schema generation. ```typescript // @generated // This file is automatically generated by Kanel. Do not modify manually. import type { ColumnType, Selectable, Insertable, Updateable } from "kysely"; /** Identifier type for actor */ export type ActorId = number & { __flavor?: "ActorId" }; /** Represents the table public.actor */ export default interface ActorTable { /** Database type: pg_catalog.int4 */ actor_id: ColumnType<ActorId, ActorId | null, ActorId | null>; /** Database type: pg_catalog.varchar */ first_name: ColumnType<string, string, string | null>; /** Database type: pg_catalog.varchar */ last_name: ColumnType<string, string, string | null>; /** Database type: pg_catalog.timestamp */ last_update: ColumnType<Date, Date | null, Date | null>; } export type Actor = Selectable<ActorTable>; export type NewActor = Insertable<ActorTable>; export type ActorUpdate = Updateable<ActorTable>; ``` Assuming you already have Kanel installed, add this with ```bash $ npm i -D kanel-kysely ``` To use it, add it to your `.kanelrc.js` file: ```javascript const { makeKyselyHook } = require("kanel-kysely"); module.exports = { // ... your config here. preRenderHooks: [makeKyselyHook()], }; ``` ## Note About Branded IDs Kanel generates some types with extra guards. ```typescript /** Identifier type for actor */ export type ActorId = number & { __flavor?: "ActorId" }; ``` `{ __flavor?: 'ActorId' }` exists at build time and _not at runtime_. It will prevent you from accidentally passing an incorrect value for the Id. To pass a string value as primary key or foreign key reference, just add a type assertion for the `<table>Id` generated type. In cases such as subqueries, the type assertion will happen automatically. ## Usage with `CamelCasePlugin` If you use Kysely with `CamelCasePlugin` then append `kyselyCamelCaseHook` to `preRenderHooks`: ```ts const { makeKyselyHook, kyselyCamelCaseHook } = require("kanel-kysely"); module.exports = { // ... your config here. preRenderHooks: [makeKyselyHook(), kyselyCamelCaseHook], }; ``` ## Type Filter If you're using Kysely for migrations, you might want to filter the types of the migration tables, such as `kysely_migration` and `kysely_migration_lock`. The `kyselyTypeFilter` will do this for you. ```ts const { kyselyTypeFilter } = require("kanel-kysely"); module.exports = { /// ... your config here. typeFilter: kyselyTypeFilter, }; ```