
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
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 is a utility that helps define special column behaviors using Zod's describe() method. Here are the available features:
z.number().describe(ZodFeatures.primary);
Marks a field as the primary key. Each table must have exactly one primary key.
z.string().describe(ZodFeatures.unique);
Makes a field unique across the table. No two rows can have the same value in this field.
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.
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);
}
}
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
> Simple, not ready to use ORM for bun
We found that kacorm demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

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.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rust’s crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.