lib/zod
Extended Zod schema library with FiveM handle type support.
This module re-exports the standard Zod library with additional schema factories for FiveM's typed handle system. Handles in FiveM are opaque number types that represent game entities, cameras, blips, etc.
Why This Module Exists
FiveM uses branded number types (e.g., HEntity, HPed, HVehicle) to
provide compile-time type safety for entity handles. This module provides
Zod schemas that properly parse and transform numbers into these typed handles
for use in event payloads and data validation.
Usage
import { z } from "@core/zod";
// Standard Zod types work as expected
const playerDataSchema = z.object({
name: z.string(),
health: z.number(),
});
// Use FiveM handle schemas for typed handles
const entityEventSchema = z.object({
entity: z.hentity(), // HEntity handle
ped: z.hped(), // HPed handle
vehicle: z.hvehicle(), // HVehicle handle
});
// Parse validates and transforms to the correct handle type
const parsed = entityEventSchema.parse({ entity: 12345, ped: 67890, vehicle: 11111 });
// parsed.entity is typed as HEntity
// parsed.ped is typed as HPed
// parsed.vehicle is typed as HVehicleAvailable Handle Schemas
z.handle()- Generic Handlez.hentity()- HEntity (any entity)z.hobj()- HObj (world objects)z.hped()- HPed (peds/NPCs)z.hvehicle()- HVehicle (vehicles)z.hcam()- HCam (cameras)z.hpickup()- HPickup (pickups)z.hplayer()- HPlayer (players)z.hscript()- HScript (script handles)z.hblip()- HBlip (map blips)z.hinterior()- HInterior (interiors)z.hfireId()- HFireId (fire instances)
Variables
z
const z: {
handle: () => ZodPipe<ZodNumber, ZodTransform<Handle, number>>;
hblip: () => ZodPipe<ZodNumber, ZodTransform<HBlip, number>>;
hcam: () => ZodPipe<ZodNumber, ZodTransform<HCam, number>>;
hentity: () => ZodPipe<ZodNumber, ZodTransform<HEntity, number>>;
hfireId: () => ZodPipe<ZodNumber, ZodTransform<HFireId, number>>;
hinterior: () => ZodPipe<ZodNumber, ZodTransform<HInterior, number>>;
hobj: () => ZodPipe<ZodNumber, ZodTransform<HObj, number>>;
hped: () => ZodPipe<ZodNumber, ZodTransform<HPed, number>>;
hpickup: () => ZodPipe<ZodNumber, ZodTransform<HPickup, number>>;
hplayer: () => ZodPipe<ZodNumber, ZodTransform<HPlayer, number>>;
hscript: () => ZodPipe<ZodNumber, ZodTransform<HScript, number>>;
hvehicle: () => ZodPipe<ZodNumber, ZodTransform<HVehicle, number>>;
};Defined in: src/lib/zod.ts:127
Type Declaration
| Name | Type | Description | Defined in |
|---|---|---|---|
handle() | () => ZodPipe<ZodNumber, ZodTransform<Handle, number>> | A Zod schema for a handle. | src/lib/zod.ts:129 |
hblip() | () => ZodPipe<ZodNumber, ZodTransform<HBlip, number>> | A Zod schema for a blip handle. | src/lib/zod.ts:138 |
hcam() | () => ZodPipe<ZodNumber, ZodTransform<HCam, number>> | A Zod schema for a camera handle. | src/lib/zod.ts:134 |
hentity() | () => ZodPipe<ZodNumber, ZodTransform<HEntity, number>> | A Zod schema for an entity handle. | src/lib/zod.ts:130 |
hfireId() | () => ZodPipe<ZodNumber, ZodTransform<HFireId, number>> | A Zod schema for a fire id handle. | src/lib/zod.ts:140 |
hinterior() | () => ZodPipe<ZodNumber, ZodTransform<HInterior, number>> | A Zod schema for an interior handle. | src/lib/zod.ts:139 |
hobj() | () => ZodPipe<ZodNumber, ZodTransform<HObj, number>> | A Zod schema for an object handle. | src/lib/zod.ts:131 |
hped() | () => ZodPipe<ZodNumber, ZodTransform<HPed, number>> | A Zod schema for a ped handle. | src/lib/zod.ts:132 |
hpickup() | () => ZodPipe<ZodNumber, ZodTransform<HPickup, number>> | A Zod schema for a pickup handle. | src/lib/zod.ts:135 |
hplayer() | () => ZodPipe<ZodNumber, ZodTransform<HPlayer, number>> | A Zod schema for a player handle. | src/lib/zod.ts:136 |
hscript() | () => ZodPipe<ZodNumber, ZodTransform<HScript, number>> | A Zod schema for a script handle. | src/lib/zod.ts:137 |
hvehicle() | () => ZodPipe<ZodNumber, ZodTransform<HVehicle, number>> | A Zod schema for a vehicle handle. | src/lib/zod.ts:133 |