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

object-versionize

v1.0.1

Published

Making a object versionized for easily checking if a object has been changed.

Downloads

2

Readme

object-versionize

Making a object versionized for easily checking if a object has been changed.

installation

npm install object-versionize -S

yarn add object-versionize

usage

versionize a object

import versionize from 'object-versionize'

const a = {
  prop1: {
    b: 4
  }
}

const versionizedA = versionize(a)

const version1 = versionizedA.__version__

// set value in a, and the version of a will change
versionizedA.prop1.b = 5

// false
console.log(versionizedA.__version__ === version1);

extends the version of a object if the two objects are deeply equal, otherwise, create a new versionized object

import versionize from 'object-versionize'

const a = {
  prop1: {
    b: 4
  }
}

const b = {
  prop1: {
    b: 4
  }
}

const versionizedA = versionize(a)
const versionizedB = versionize(b, versionizedA)

const version1 = versionizedA.__version__
const version2 = versionizedB.__version__

// true
console.log(version1 === version2);

use in React Hooks

Sometimes we would do some thing when a object has changed, like below:

...
useEffect(() => {
  // do something
}, [someObject])
...

React won't compare deeply with the objects, sometimes, the reference of the objects aren't equal, but they are deeply equal. the effect should be skipped.

Some people use JSON.stringify, but it dosen't work when the order of the property key changed. And it cost too much time to serialize.

Now we can use object-versionize to solve the problem.

import versionize from 'object-versionize'

// get some object from some place
const originObject = {...}
const versionizedObject = versionize(originObject)

// then set it to state
const [data, setData] = useState(versionizedObject);

// when changing the state
const newObject = {
  ...versionizedObject,
}
// passing the previous versionized object is important, if the deep value of the two objects are the same, the new version of the new object will stay the same.
const newVersionizedObject = versionize(originObject, data)
setData(newVersionizedObject)

// effect when the object changed

useEffect(() => {
  // do something
}, [data.__version__])