@kuru-labs/kuru-types
v0.0.9
Published
Shared Zod schemas and inferred TypeScript types for Kuru
Readme
@kuru-labs/kuru-types
Shared Zod schemas and inferred TypeScript types used across Kuru clients and server.
Install
npm install @kuru-labs/kuru-typeszod is a dependency and will be installed automatically.
Usage
Barrel import
Everything is available from the package root:
import { UserSchema, type User } from "@kuru-labs/kuru-types";
// Validate unknown data at runtime
const user = UserSchema.parse(data);
// Use the inferred type for annotations
function greet(user: User) {
console.log(`Hello, ${user.name}`);
}Deep import (tree-shakable)
Import only the schema file you need — bundlers will drop everything else:
import { UserSchema, type User } from "@kuru-labs/kuru-types/schemas/user";Adding a new schema
Each schema is split into two files:
*.z.ts— pure Zod schema definition (kept clean, no type exports)*.ts— imports the schema from*.z.ts, exports both the schema and inferred types (any modifications/extensions go here)
1. Create the Zod schema file src/schemas/order.z.ts:
import { z } from "zod";
export const OrderSchema = z.object({
id: z.string(),
userId: z.string(),
total: z.number(),
status: z.enum(["pending", "completed", "cancelled"]),
});2. Create the types file src/schemas/order.ts:
import { z } from "zod";
import { OrderSchema } from "./order.z";
export { OrderSchema };
export type Order = z.infer<typeof OrderSchema>;3. Re-export from src/index.ts:
export * from "./schemas/order";4. Build:
npm run buildThat's it. The new schema is now importable via both barrel and deep import paths.
File naming conventions
- All file names must be kebab-case (e.g.
user-profile.ts, notuserProfile.ts) - Zod schema files use the
.z.tssuffix - Type/export files use the plain
.tssuffix
Scripts
| Command | Description |
| --------------- | ---------------------------------------------- |
| npm run build | Build CJS + ESM + type declarations into dist/ |
| npm run dev | Rebuild on file changes (watch mode) |
Publishing
npm version patch # or minor / major
npm publish --access publicprepublishOnly runs the build automatically before publish.
Project structure
src/
├── index.ts # Barrel — re-exports all schemas
└── schemas/
├── user.z.ts # Pure Zod schema definition
├── types/
└── user.ts # Re-exports types