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 🙏

© 2025 – Pkg Stats / Ryan Hefner

object-reflector

v0.1.2

Published

Simple & powerful object reflections

Readme

Table of Contents

Features

  • lightweight: weighing only 4kb
  • minimal: there are only 4 methods
  • powerful: create powerful references with minimal effort

This library lets you create powerful references between objects without affecting your code style. You can reuse and update data references between huge amounts of objects with only a few lines of code. The data between reflected objects is shared, not copied. This can save a lot memory and speed up your app performance!

Examples

The library's flow is all about parents and childrens. You define an object as a parent and then add childrens to it which inherit and share the properties you want.

Parent reflections

let a = {};
let b = {};

let reflector = new ObjectReflector({
  object: a, // our parent object
  properties: ["data"] // we want "data" to be reflected
});
reflector.createReflection(b); // b.data is now a reflection to a.data

a.data = { color: "red" }; // this updates all reflected objects
b.data; // -> { color: "red" }
a.data === b.data; // true

Child reflections

This example shows how to change a parent's data from within a child. The previous example showed us how a parent can change it's children, now we do the opposit!

let a = {};
let b = {};

let reflector = new ObjectReflector({
  object: a, // our parent object
  properties: ["data"], // we want "data" to be reflected
  enableChildReflection: true // this enables child reflections
});
reflector.createReflection(b); // b.data is now a reflection to a.data

a.data = { color: "red" }; // this updates all reflected objects
b.data; // -> { color: "red" }
b.data = { meow: 42 };  // this also updates the parent's data!
a.data; // -> { meow: 42 }
a.data === b.data; // true

Installation

Node:

npm install object-reflector

Browser:

<script type="text/javascript" src="https://raw.githubusercontent.com/maierfelix/object-reflector/master/dist/object-reflector.min.js"></script>

API

reflector = new ObjectReflector(opts)

Initializes a new ObjectReflector instance.

  • opts.object The parent object to reflect from
  • opts.properties Array of properties you want to reflect from the object
  • opts.enableChildReflection Enables child reflections, so childs can update their parent too!

reflector.createReflection(object)

Creates a reflection to the passed in object.

reflector.unreflectChild(object)

Removes a reflection from the passed in object.

reflector.clear()

Clears all reflected childs.

FAQ

How is the performance?

Parent reflections are very fast, I use them in a 3D engine to share large amounts of meshes and textures between objects.

Child reflections are slower because they use getters/setters in the background. They are clearly fast enough for most cases, but too slow when it comes to realtime stuff or very very large sets of data.