Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/g-makarov/dot-path-value
Safely get and set deep nested properties using dot notation.
https://github.com/g-makarov/dot-path-value
access array change deep dot get notation object path property set type typescript update value
Last synced: 3 months ago
JSON representation
Safely get and set deep nested properties using dot notation.
- Host: GitHub
- URL: https://github.com/g-makarov/dot-path-value
- Owner: g-makarov
- License: mit
- Created: 2023-01-20T17:02:43.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-19T17:53:46.000Z (9 months ago)
- Last Synced: 2024-07-19T04:02:27.145Z (4 months ago)
- Topics: access, array, change, deep, dot, get, notation, object, path, property, set, type, typescript, update, value
- Language: TypeScript
- Homepage:
- Size: 104 KB
- Stars: 338
- Watchers: 5
- Forks: 6
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
- awesome-template-literal-types - GitHub
README
# dot-path-value
Safely get and set deep nested properties using dot notation.
## Features
- TypeScript first 🤙
- Support arrays
- Tiny
- No dependencies
- Utility types `Path` and `PathValue`If you find this library useful, why not
## 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` | converts nested structure `T` into a string representation of the paths to its properties |
| `PathValue` | 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; // 'a.d' | 'a' | 'a.b' | `a.d.${number}` | `a.d.${number}.e`
type Bar = PathValue; // 'string'
```