npm.io
2.2.0 • Published 4 months ago

@bemedev/decompose

Licence
MIT
Version
2.2.0
Deps
1
Size
110 kB
Vulns
1
Weekly
0

@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/decompose

Usage

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 | undefined

getByKey.defined strips undefined from the return type (non-nullable):

const val = getByKey.defined(obj, 'data.name.firstName');
// type: string
assignByKey

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 (bri_lvi@icloud.com)

My github


Liens

Keywords