drizzle-toolbelt
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

Drizzle Toolbelt

Set of tools for drizzle-orm.

Installation

npm i drizzle-toolbelt

Usage

takeFirst

Takes first element from array if it exists.

import { db } from "./db";
import { users } from "./schema";
import { takeFirst } from "drizzle-toolbelt";


const firstUserOrUndefined = await db.select().from(users)
 .then(takeFirst);

takeFirstOrThrow

Takes first element from array or throws if length is zero.

With default error

import { db } from "./db";
import { users } from "./schema";
import { takeFirstOrThrow } from "drizzle-toolbelt";

const firstUserOrThrowDefault = await db
  .select()
  .from(users)
  // throw inline
  .then(takeFirstOrThrow());

// or

// prepare errors
const takeFirstOrError = takeFirstOrThrow();
const takeFirstOrUnauthorized = takeFirstOrThrow(new UnauthorizedError("You cannot view this page."));

// and pass it
const firstUserOrThrow = await db
  .select()
  .from(users)
  .then(takeFirstOrError);

const firstUserOrUnauthorized = await db
  .select()
  .from(users)
  .then(takeFirstOrUnauthorized);

aggregate

Aggregates rows from a query.

Example:

import { db } from "./db";
import { users } from "./schema";
import { aggregate } from "drizzle-toolbelt";

const usersWithPosts = await db.select({
  id: users.id,
  post: posts
}).from(users)
.leftJoin(posts.id, eq(posts.author_id, users.id))
.then(aggregate({ pkey: 'id', fields: { posts: 'post.id' } }));

This will:

  • group all users by their id (pkey)
  • remove the post property from the rows
  • aggregate all posts in the property posts (set in fields) by their id (posts.id)

The final type will be:

type Aggregated = {
  id: number;
  // `post` was removed
  // `posts` was added as an array of `post`
  posts: { id: number, …otherPostProperties }[]; 
}

Data-first

You may choose to pass rows in the arguments to call aggregate in a stand-alone way.

import { db } from "./db";
import { users } from "./schema";
import { aggregate } from "drizzle-toolbelt";

const usersRows = await db.select({
  id: users.id,
  post: posts
}).from(users)
.leftJoin(posts.id, eq(posts.author_id, users.id))

const usersWithPosts = aggregateRows({rows, pkey: 'id', fields: { posts: 'post.id' }});

## Contributing

This project is open to contributions. Feel free to open an issue or a pull request.

License

MIT

Package Sidebar

Install

npm i drizzle-toolbelt

Weekly Downloads

51

Version

1.1.1

License

MIT

Unpacked Size

150 kB

Total Files

8

Last publish

Collaborators

  • fredericoo