npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

kysely-supabase

v0.2.0

Published

Kysely type translators for Supabase

Downloads

1,725

Readme

kysely-supabase

Supabase is a combination of open-source tools. They're building the features of Firebase using enterprise-grade, open-source products. If the tools and communities exist, with an MIT, Apache 2, or equivalent open license, they will use and support that tool. If the tool doesn't exist, they build and open-source it themselves. Supabase is not a 1-to-1 mapping of Firebase. Their aim is to give developers a Firebase-like developer experience using open-source tools.

As of Apr 6, 2024, @supabase/supabase-js (the client library) has 292,860 weekly downloads on npm, while supabase (the CLI) has 80,273 weekly downloads on npm. It is a popular all-in-one development platform for Node.js and TypeScript.

Their CLI supports TypeScript type generation from your Supabase-managed PostgreSQL database, and their client library provides a nice, albeit restrictive, auto-completion friendly, and type-safe developer experience. For anything beyond what the client library's API offers, you're left with writing raw SQL and using PostgreSQL drivers like pg or postgres, or some abstraction where you codegen or define schema/types again.

Kysely (pronounced “Key-Seh-Lee”) is a type-safe and autocompletion-friendly TypeScript SQL query builder. Inspired by Knex. Mainly developed for Node.js but also runs on Deno and in the browser.

kysely-supabase is a toolkit (type translators for now) that allows using your existing Supabase setup with Kysely.

Installation

npm i kysely @supabase/supabase-js
npm i -D kysely-supabase supabase

For PostgreSQL:

npm i pg

or

npm i kysely-postgres-js postgres

Usage

Types

Translate your Supabase-generated Database type to Kysely's Database interface via the KyselifyDatabase helper type.

src/types/database.ts:

import type {Database as SupabaseDatabase} from 'path/to/supabase/generated/types/file'
import type {KyselifyDatabase} from 'kysely-supabase'

export type Database = KyselifyDatabase<SupabaseDatabase>

Kysely Instance

Create a Kysely instance. Pass to it your Database type.

src/kysely.ts:

import {Kysely, PostgresDialect} from 'kysely'
import {Pool} from 'pg'
import type {Database} from './types/database'

export const kysely = new Kysely<Database>({
  dialect: new PostgresDialect({
    pool: new Pool({
      connectionString: process.env.DATABASE_URL,
    }),
  }),
})

or when using postgres instead of pg as the underlying driver:

import {Kysely} from 'kysely'
import {PostgresJSDialect} from 'kysely-postgres-js'
import postgres from 'postgres'
import type {Database} from './types/database'

export const kysely = new Kysely<Database>({
  dialect: new PostgresJSDialect({
    postgres: postgres(process.env.DATABASE_URL),
  }),
})

Acknowledgements

KyselifyDatabase helper type was inspired by Gilbert's issue.