Giter VIP home page Giter VIP logo

path-prop's Introduction

Path Prop

Fast library for manipulating plain objects using paths.

This library is similar to dot-prop, but it achieves up to 3x better performance, it offers a couple of additional methods for dealing with flat objects and it has a few more restrictions.

Features

  • Performant: it is up to 3x faster than dot-prop.
  • Lightweight: it has just a few tiny dependencies and it's comprised of about 200 lines of code.
  • Flat objects: a few additional methods are provided for flattening and unflattening objects.

Restrictions

In order to achieve maximum performance a few limitations/restrictions have been introduced:

  • If a property is set to undefined it will be considered as not set.
  • There's no way to escape dots in paths.
  • It's only supposed to manipulate objects, not functions etc.
  • It doesn't check if a property is owned or enumerable.

Install

npm install --save path-prop

Usage

import pp from 'path-prop';

/* GET */

let object = { foo: { bar: 123 } };

pp.get ( object, 'foo' ); // => { bar: 123 }
pp.get ( object, 'foo.bar' ); // => 123
pp.get ( object, 'foo.bar.baz' ); // => undefined
pp.get ( object, 'foo.bar.baz', 1 ); // => 1

/* HAS */

object = { foo: { bar: 123 } };

pp.has ( object, 'foo' ); // => true
pp.has ( object, 'foo.bar' ); // => true
pp.has ( object, 'foo.bar.baz' ); // => false

/* SET */

pp.set ( { foo: { bar: 123 } }, 'bar', 1 ); // => { foo: { bar: 123 }, bar: 1 }
pp.set ( { foo: { bar: 123 } }, 'foo.bar', 1 ); // => { foo: { bar: 1 } }
pp.set ( { foo: { bar: 123 } }, 'foo.bar.baz', 1 ); // => { foo: { bar: { baz: 1 } } }

/* DELETE */

object = { foo: { bar: 123 } };

pp.delete ( object, 'foo.bar' ); // => undefined
console.log ( object ); // => { foo: {} }

/* FLAT */

object = { foo: { bar: 123, baz: 'test' }, bar: 1 };

pp.flat ( object ); // => { 'foo.bar': 123, 'foo.baz': 'test', bar: 1 }

/* UNFLAT */

object = { 'foo.bar': 123, 'foo.baz': 'test', bar: 1 };

pp.unflat ( object ); // => { foo: { bar: 123, baz: 'test' }, bar: 1 }

API

get ( object, path, fallback? )

Gets the value at path, returning fallback if it's not set.

has ( object, path )

Checks if a value is set at path.

set ( object, path, value )

Sets value at path.

delete ( object, path )

Deletes the value at path.

flat ( object )

Transforms a potentially deep object into a flat object.

unflat ( object )

Transforms a flat object into a potentially deep object.

License

MIT © Fabio Spampinato

path-prop's People

Contributors

fabiospampinato avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

path-prop's Issues

Prototype Pollution

This module has prototype pollution vulnerablity
so it can make logic vulnerability in application use this

const pp = require('path-prop');

let obj = {};
pp.set(obj, '__proto__.polluted', true);

console.log(polluted); // true

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.