Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]: Kyselify not supporting snake_case casing #4029

Open
1 task done
johanneskares opened this issue Jan 28, 2025 · 0 comments
Open
1 task done

[BUG]: Kyselify not supporting snake_case casing #4029

johanneskares opened this issue Jan 28, 2025 · 0 comments
Labels
bug Something isn't working

Comments

@johanneskares
Copy link

johanneskares commented Jan 28, 2025

Report hasn't been filed before.

  • I have verified that the bug I'm about to report hasn't been filed before.

What version of drizzle-orm are you using?

0.39.0

What version of drizzle-kit are you using?

0.30.3

Other packages

No response

Describe the Bug

When using

import type { Kyselify } from "drizzle-orm/kysely";

the casing option of snake_case is not supported. Here's my workaround that should be included in the Kyselify file.

type CamelToSnake<S extends string> = S extends `${infer T}${infer U}`
    ? `${T extends Lowercase<T> ? T : `_${Lowercase<T>}`}${CamelToSnake<U>}`
    : S;

type ConvertKeysToSnakeCase<T> = {
    [K in keyof T as CamelToSnake<Extract<K, string>>]: T[K];
};

type KyselifyCased<
    T extends Table,
    Casing extends "camelCase" | "snake_case" = "camelCase",
> = Casing extends "camelCase" ? Kyselify<T> : ConvertKeysToSnakeCase<Kyselify<T>>;

Can be used like

interface Database {
    token: KyselifyCased<typeof token, "snake_case">;
    user: KyselifyCased<typeof user, "snake_case">;
}

const result = await kysely.selectFrom("token").select(["id", "created_at"]).execute();
@johanneskares johanneskares added the bug Something isn't working label Jan 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant