Type-safe object property paths in TypeScript — build, compare, and manipulate with lambda expressions. Zero dependencies.
Documentation: https://sergeyshmakov.github.io/data-path/
// Before — string literals, invisible to the compiler
register("users.0.profile.firstName");
table.getColumn("contact.email");
set(state => ({ ...state, settings: { ...state.settings, theme } }));// After — typed, IDE-autocompleted, refactor-safe
register(path((u: FormData) => u.users[0].profile.firstName).$);
table.getColumn(emailPath.$);
set(state => themePath.set(state, theme));A zero-dependency TypeScript library that captures object property paths via proxy-based lambdas. Build a path once — use it as a string, read and write data through it, compose paths together, or match one against another.
- Typed root to leaf — renaming a property breaks the path at compile time
- Safe
get, immutableset, read-modify-writeupdate - Template paths (
each,deep) for bulk operations across collections and trees - Path algebra:
merge,subtract,slice,to - Runtime indices and closure variables work natively inside lambdas
npm install data-pathRequirements: Node >=20, TypeScript >=5.0
import { path } from "data-path";
type User = { profile: { firstName: string; lastName: string }; tags: string[] };
const firstNamePath = path((u: User) => u.profile.firstName);
firstNamePath.$ // "profile.firstName"
firstNamePath.get(user) // "Alice" | undefined
firstNamePath.set(user, "Bob") // returns a new User — original unchanged
firstNamePath.fn // stable (u: User) => string | undefined| Package | How it helps |
|---|---|
| React Hook Form | Type-safe field names for register, watch, setValue |
| TanStack Form | Typed field names with runtime index support |
| TanStack Table | Typed column accessors — no manual id strings |
| Zustand | Immutable nested state updates without Immer |
| Zod | Map ZodError.issues paths to specific form fields |
React useState |
Structural clones for deeply nested state |
- Data access —
get,set,update,fn - Templates —
each,deep, bulk writes across collections - Path algebra —
merge,subtract,slice,to - Relational —
startsWith,covers,match - Runtime variables — dynamic indices and closures
This package is available in Context7 and documented in a Cubic wiki. An Agent Skills-compatible skill is included:
npx ctx7 skills install /sergeyshmakov/data-path data-pathSee CONTRIBUTING.md.