Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

snq

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

snq

[![Bundle Size](https://img.shields.io/bundlephobia/minzip/snq.svg)](https://bundlephobia.com/result?p=snq) [![Coveralls Coverage](https://img.shields.io/coveralls/armanozak/snq.svg)](https://coveralls.io/github/armanozak/snq) [![Code Climate Maintainabil

  • 1.0.0
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

snq (Safe Navigation Query)

Bundle Size Coveralls Coverage Code Climate Maintainability Travis Build Status MIT License Follow the Author on Twitter

snq is a utility function to safely navigate arrays and object properties without getting type errors. It is not an original idea at all and is actually adapted and only slightly different from idx. The main differences are as follows:

  • snq returns undefined whenever a TypeError happens, regardless of the reason for the error and throws an error only if it is not a TypeError. idx returns null, if the cause of the error is a null value and throws an error if the error is not caused by an undefined or null value.
  • snq has an optional second parameter which works as default value to return instead of undefined.
  • idx requires the source object as a first parameter. snq does not.
  • idx has a Babel plugin for replacing idx instances with conventional traversing in order to improve performance. Although it is not benchmarked yet, due to lack of reason checks, it is safe to say that snq is faster than idx. Thus, a Babel plugin could prove insignificant for snq.
  • snq is written in TypeScript and, unlike idx, it does not support Flow types.

When optional chaining operator finally lands, libraries like snq and idx may become redundant.

Installation

Run the following code in your terminal:

yarn add snq

or if you are using npm:

npm install --save snq

Setup

import snq from 'snq';

Usage

Consider the following interfaces as products list:

interface Price {
  amount: number;
  currency: string;
  symbol?: string;
}

interface Product {
  id: number;
  name: string;
  inStock: boolean; 
  price?: {
    final: Price;
    original?: Price;
  };
}

This is how it would probably look like when you want to get original price symbol of first product:

products.length &&
products[0].price &&
products[0].price.original &&
products[0].price.original.symbol

Otherwise, you will get a type error. Using snq, it is safe to write the following:

const symbol = snq(() => this.products[0].price.original.symbol);

// symbol is undefined if a type error happens, actual value if not

There is an optional second argument which represents the default value to return when a type error happens.

const symbol = snq(() => this.products[0].price.original.symbol, '$');

// symbol is "$" if a type error happens, actual value if not

The type of the symbol returned will be inferred as string in both cases.

Check the demo application out.

Keywords

FAQs

Package last updated on 21 Apr 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc