UNPKG

dot-path-value

Version:

Safely get deep nested properties using dot notation

106 lines (81 loc) 3.02 kB
# dot-path-value Safely get and set deep nested properties using dot notation. <a href="https://www.npmjs.com/package/dot-path-value"> <img alt="npm version" src="https://img.shields.io/npm/v/dot-path-value.svg?style=flat-square" /> </a> <a href="https://www.npmjs.com/package/dot-path-value"> <img alt="npm downloads" src="https://img.shields.io/npm/dm/dot-path-value.svg?style=flat-square" /> </a> <a href="https://bundlephobia.com/package/dot-path-value"> <img alt="npm minified bundle size" src="https://img.shields.io/bundlephobia/min/dot-path-value?style=flat-square"> </a> <a href="https://bundlephobia.com/package/dot-path-value"> <img alt="npm gzip minified bundle size" src="https://img.shields.io/bundlephobia/minzip/dot-path-value?style=flat-square"> </a> <a href="https://github.com/g-makarov/dot-path-value"> <img alt="npm gzip minified bundle size" src="https://img.shields.io/github/stars/g-makarov/dot-path-value?style=flat-square"> </a> ## Features - TypeScript first 🤙 - Support arrays - Tiny - No dependencies - Utility types `Path` and `PathValue` If you find this library useful, why not <a href="https://www.buymeacoffee.com/gmakarov" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="160" height="40"></a> ## Installation ```bash # using npm npm install dot-path-value # using pnpm pnpm install dot-path-value # using yarn yarn add dot-path-value ``` ## Usage ```ts import { getByPath, setByPath } from 'dot-path-value'; const obj = { a: { b: 'hello', d: [ { e: 'world', } ], }, }; // access through object getByPath(obj, 'a.b'); // outputs 'hello' with type `string` // access through array getByPath(obj, 'a.d.0.e'); // outputs 'world' with type `string` getByPath(obj, 'a.d.0'); // outputs '{ e: 'world' }' with type `{ e: string }` // also you can pass array as first argument getByPath([{ a: 1 }], '0.a'); // outputs '1' with type `number` // typescript errors getByPath(obj, 'a.b.c'); // `c` property does not exist // set a property through an object setByPath(obj, 'a.b', 'hello there'); ``` ## Types `dot-path-value` exports a few types to ensure the type safety: | Type | Description | | --------------------- | ----------------------------------------------------------------------------------------- | | `Path<T>` | converts nested structure `T` into a string representation of the paths to its properties | | `PathValue<T, TPath>` | returns the type of the value at the specified path | ### Types usage ```ts import { Path, PathValue } from 'dot-path-value'; const obj = { a: { b: 'hello', d: [ { e: 'world', } ], }, }; type Foo = Path<typeof obj>; // 'a.d' | 'a' | 'a.b' | `a.d.${number}` | `a.d.${number}.e` type Bar = PathValue<typeof obj, 'a.b'>; // 'string' ```