🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis →
Socket
Book a DemoInstallSign in
Socket

kacorm

Package Overview
Dependencies
Maintainers
0
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

kacorm

> Simple, not ready to use ORM for bun

latest
npmnpm
Version
0.0.3
Version published
Maintainers
0
Created
Source

kacorm

Simple, not ready to use ORM for bun

Prisma is too complicated and does not work out of the box with Zod. This is a simple ORM which relies on Zod to validate the data.

ZodFeatures

ZodFeatures is a utility that helps define special column behaviors using Zod's describe() method. Here are the available features:

Primary Key

z.number().describe(ZodFeatures.primary);

Marks a field as the primary key. Each table must have exactly one primary key.

Unique Constraint

z.string().describe(ZodFeatures.unique);

Makes a field unique across the table. No two rows can have the same value in this field.

Named Uniqueness Groups

z.string().describe(ZodFeatures.namedUniqueness("group_name"));

Creates a compound unique constraint with other fields sharing the same group name. For example, in the User schema above, first_name and last_name together must be unique since they share the "names" group.

Example

import { z } from "zod";
import Container, { Service } from "typedi";
import { Database } from "bun:sqlite";
import { BaseRepository, ZodFeatures } from "kacorm";

const UserCreate = z.object({
  email: z.string().email().describe(ZodFeatures.unique),
  hashed_password: z.string(),
  first_name: z.string().describe(ZodFeatures.namedUniqueness("names")),
  last_name: z.string().describe(ZodFeatures.namedUniqueness("names")),
});
const User = UserCreate.extend({
  id: z.number().describe(ZodFeatures.primary),
  created_at: z
    .string()
    .default("CURRENT_TIMESTAMP")
    .transform((v) => new Date(v)),
  updated_at: z
    .string()
    .default("CURRENT_TIMESTAMP")
    .transform((v) => new Date(v)),
});
type User = z.infer<typeof User>;
type UserCreate = z.infer<typeof UserCreate>;

@Service()
export class UserRepository extends BaseRepository<
  typeof User,
  typeof UserCreate
> {
  constructor() {
    super(Database, "users", User, UserCreate);
  }
}

Usage

const repo = Container.get(UserRepository);

const created = repo.create({
  email: "test@test.com",
  hashed_password: "lol",
  first_name: "Kacper",
  last_name: "Test",
});
const created2 = repo.create({
  email: "test@test.csom",
  hashed_password: "lol",
  first_name: "Someone Else",
  last_name: "Yes yes",
});

console.log(repo.getAllWhere({ first_name: "Kacper" }));

FAQs

Package last updated on 06 Dec 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts