npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

deep-getter

v1.1.4-alpha.0

Published

get all the way through your variable without breaking your app

Downloads

151

Readme

deepGetter

Simple interface to access deep properties in an Object in a failsafe way, returning the value or a Nothing if it doesn't exists

You will probably want it when messing with third party APIs, or putting a third party product on your clients, because you cant rely on api responses, or properties you need to have on pages, other than that, it's just a cleaner way to do some variable accessing

Getting Started

These instructions will get you through installing and using deep-getter on your project.

Installing

Simply install using npm or yarn

npm install --save deep-getter

Using

This section will guide you through using deep-getter on your repository, showing how to use and what code you should replace for it

const { deepGet } = require('deep-getter')

// Doing this:
const grayHex = deepGet(product, 'details.specs.color.gray')

// Is the same as doing this:
const grayHex = product.details && product.details.specs && product.details.specs.color && product.details.specs.color.gray

But your Object is not perfect, and you have to check if it returned what you wanted, in this cases you have the isNothing for you

const { deepGet, isNothing } = require('deep-getter')

// Doing this:
const grayHex = deepGet(product, 'details.specs.color.gray')

grayHex = isNothing(grayHex) ? /* fallback */ : grayHex

// Is the same as doing this:
const grayHex = product.details && product.details.specs && product.details.specs.color && product.details.specs.color.gray

grayHex ? grayHex : /* fallback */

The deepGet function also gains you a little bit of power when it comes to accessing Array indexes, or Object keys that somehow manage to be numeric, you just put the number where you'd access the index, and it will do the job for you, like this:


const { deepGet } = require('deep-getter')

// Assuming that color is an Array, this way you get the first color:
const grayHex = deepGet(product, 'color.0')

// It will be the same as:
const grayHex = Array.isArray(product.color) && product.color[0]

// Also, some sinners make Object keys as Numbers, but it's ok to do:
const clusterName = deepGet(cluster, 'up.149.label')

// This case is worse, because it's ugly in my opinion:
const clusterName = cluster.up && cluster.up['149'] && cluster.up['149'].label

We have another function to use with it, the deepGetOrElse comes with a isNothing check, so that if you are sure you'll need a fallback value you can put it already on the function and have no need to check it later

const { deepGetOrElse } = require('deep-getter')

// Let's revisit this piece of code
const grayHex = product.details && product.details.specs && product.details.specs.color && product.details.specs.color.gray

grayHex ? grayHex : '#444'

// This is where deepGetOrElse really shines:
deepGetOrElse(product, 'details.specs.color.gray', '#444')

And this is it, the fallback: '#444' will return if product.details.specs.color.gray is Nothing

Docs

You can access the docs at: docs

Questions?

If you have any questions about using Arthemis on your project, please open a new issue.

Filing a bug

If you found a bug, please open a new issue.

Contributing

This project is open for contributions. To suggest a new feature, please open a new issue. To fix a filed bug or implementing a feature, please fork this project, create a new branch containing your code and send a pull request. If you need any guidance, you can reach us out by creating a new issue.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE.md file for details