@bemedev/decompose
v2.2.0
Published
Decompose object and so more
Downloads
803
Readme
@bemedev/decompose
Utility library for decomposing and recomposing objects in JavaScript/TypeScript.
Installation
npm install @bemedev/decompose
# or
pnpm add @bemedev/decompose
# or
yarn add @bemedev/decomposeUsage
import {
decompose,
decomposeKeys,
decomposeSV,
recompose,
} from '@bemedev/decompose';
const obj = {
data: {
name: {
firstName: 'John',
lastName: 'Doe',
},
},
};
const decomposed = decompose(obj);
// Result: { 'data.name.firstName': 'John', 'data.name.lastName': 'Doe' }
const recomposed = recompose(decomposed);
// Returns original object structure
const keys = decomposeKeys(obj);
// Result: ['data', 'data.name', 'data.name.firstName', 'data.name.lastName']
const sv = {
red: {
walk: 'stop',
},
};
const decomposedSV = decomposeSV(sv);
// Result: ['red', 'red.walk', 'red.walk.stop']Arrays and tuples (v2.0.0+)
const objWithArray = {
users: [{ name: 'Alice' }, { name: 'Bob' }],
};
const decomposed = decompose(objWithArray);
// Result: { 'users.0.name': 'Alice', 'users.1.name': 'Bob' }Nested tuples and optional properties are fully supported in the
Decompose type.
getByKey
Retrieves a value from an object using a dot-notation key.
import { getByKey } from '@bemedev/decompose';
const obj = {
data: {
name: {
firstName: 'John',
lastName: 'Doe',
},
},
};
getByKey(obj, 'data.name.firstName'); // 'John'
getByKey(obj, 'data.name.lastName'); // 'Doe'
// Works with array indices too
const arr = { users: [{ name: 'Alice' }, { name: 'Bob' }] };
getByKey(arr, 'users.[0].name'); // 'Alice'
getByKey(arr, 'users.[1].name'); // 'Bob'Typed variants
getByKey.typed preserves the full TypeScript type including undefined:
const val = getByKey.typed(obj, 'data.name.firstName');
// type: string | undefinedgetByKey.defined strips undefined from the return type (non-nullable):
const val = getByKey.defined(obj, 'data.name.firstName');
// type: stringassignByKey
Assigns a value to a path in an object using a dot-notation key. Creates intermediate objects or arrays as needed.
import { assignByKey } from '@bemedev/decompose';
const obj = { data: { name: { firstName: 'John' } } };
const updated = assignByKey(obj, 'data.name.firstName', 'Jane');
// Result: { data: { name: { firstName: 'Jane' } } }
// Works with array indices too
const arr = { users: [{ name: 'Alice' }] };
const updated2 = assignByKey(arr, 'users.[0].name', 'Bob');
// Result: { users: [{ name: 'Bob' }] }CHANGELOG
License
MIT
Auteur
chlbri ([email protected])
