# universal-deepify

> Will get/set properties and it can also execute functions nested deep in a object

Latest version **1.0.0** (published 2018-06-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install universal-deepify
pnpm add universal-deepify
yarn add universal-deepify
bun add universal-deepify
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2018-06-26 |
| First published | 2018-06-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 4.6 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ricardo Ibarra |
| Maintainers | coder10 |
| Keywords | deep, object, getter, setter, universal, browser, node |

## Links

- npm: https://www.npmjs.com/package/universal-deepify
- npm.io page: https://npm.io/package/universal-deepify

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2018-06-26

## README

# Universal Deep Object Getter Setter #
## deepify.js ##
[![Build Status](https://travis-ci.org/lxibarra/universal-deepify.svg?branch=master)](https://travis-ci.org/lxibarra/universal-deepify)
[![Coverage Status](https://coveralls.io/repos/github/lxibarra/universal-deepify/badge.svg?branch=master)](https://coveralls.io/github/lxibarra/universal-deepify?branch=master)

This npm package tries to solve the problem of deep object get and set by using a dot convention. The idea came because i wanted to explore different ways of handling these scenarios.

I hated when i had deep object structures and had to do something like the following:

```javascript
  if (someobj.prop1 && someobj.prop1.arr instanceof Array && someobj.prop1.arr .length > 0) {

      // some logic
  }
```
I also tried using patterns as follows:
```javascript
  const = someVar = ((someobj || {}).prop1 || [])[0];
```
but with really complicated and deep nested objects the code became really dirty.

## Getter examples

```javascript
  // consider this Object
  testObject = {
    person:{
      name: 'Ricardo',
      lastName: 'Ibarra',
      assets:[
        {
          type: 'Car'
        },
        {
          type: 'Boat',
          metadata:[
            {
              brand: 'xyz',
              year: '2012'
            },
            {
              serial: 'xxx-xxx-xxx',
              price: 1000
            }
          ]
        }
      ]
    }
  };
```
we can try to get the persons assets without worrying if its going to throw. If a property is no present it will simply be undefined.

#### Get a value in a deep nested array. ####
```javascript
  const price = deepifyGet(testObject, 'person.assets[1].metadata[1].price');

  price === 1000 // true
  // or
  const asset = deepifyGet(testObject, 'person.assets[0].type');
  asset === 'Car'; // true
```

#### trying to get a non existent prop will simply return undefined ####

```javascript
    const idontExist = deepifyGet(testObject, 'person.assets.someRandom.prop[0].that.does.not.exist');
    // does not throw
    idontExist === undefined; // true
```
## Setter examples

The setter by default does not mutate the original object but internally it uses JSON.parse and JSON.stringify and it can be slow.

```javascript
  deepifySet([object], ['property.path'], ['value'], [mutate:boolean] = false);
```

```javascript
  const original_obj = {};
  const obj = deepifySet(original_obj, 'person.last', 'ibarra');
  obj.person.last === 'ibarra' // true
  obj !== original_obj // true because the object is cloned. (No mutation)
```

 if you want to mutate the original object just pass true in the last parameter

 ```javascript
   const original_obj = {};
   const obj = deepifySet(original_obj, 'person.last', 'ibarra', true);
   obj.person.last === 'ibarra' // true
    obj === original_obj; // true deepifySet returns the same reference (object is mutated)
 ```

 For more examples look at the tests directory in the git repo.

---
_Source: https://npm.io/package/universal-deepify · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
