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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@gov.nasa.jpl.honeycomb/model-cache

v0.0.6

Published

Class to cache and clone three.js and javascript objects to save processing time.

Readme

model-cache

An optionally asynchronous class for cache object instances including three.js objects so they can be retrieved without duplicating the objects.

!> Note that geometry and material instances are not cloned by default so they should be changed before modifying.

Use

Caching async model loads

Creates a copy of the model when the asynchronous load resolves.

import { ModelCache } from '@gov.nasa.jpl.honeycomb/model-cache';

const cache = new ModelCache();

async function getModel(url) {
    if (cache.has(url)) {
        return cache.getClone(url);
    } else {
        const modelPromise = new Promise(resolve => loader.load(res => resolve(res.scene)));
        cache.add(url, modelPromise);
        return modelPromise;
    }
}

Caching created models

import { ModelCache, hash } from '@gov.nasa.jpl.honeycomb/model-cache';

const cache = new ModelCache();

function createArc(length, angle) {
    const str = hash(length, angle);
    if (cache.has(str)) {
        return cache.getClone(str);
    } else {
        const arc = new LineArc(length, angle);
        cache.add(str, arc);
        return arc;
    }
}

API

Functions

hash

hash( args : ...any ) : String

Converts the given objects into a hash.

ModelCache

Cache for three.js models and objects

add

add( hash : String, model : Object | Promise<Object> ) : void

Adds the given object to the cache indexed by hash.

has

has( hash : String ) : Boolean

Returns whether or not the given hash exists in the cache.

isPending

isPending( hash : String ) : Boolean

Returns whether the object indexed by the given hash is pending a promise that hasn't resolved yet.

delete

delete( hash : String ) : Object | Promise<Object>

Removes the object at the given hash and returns the deleted object.

get

get( hash : String ) : Object | Promise<Object>

Returns the original object added into the cache.

getClone

getClone( hash : String ) : Object | Promise<Object>

Returns a clone of the object indexed by the given hash or a promise that will resolve with a copy.

markUnused

markUnused(  ) : void

Increments the amount of times a model has been left unused by one. If a model has never been marked unused then it is set to 1. Every time a model is retrieved using getClone the unused counter is reset.

cullUnused

cullUnused( unusedCount : Number = 1 ) : void

Removes any cached item that has been marked as unused >= count number of times. The number of models removed is returned.

clear

clear(  ) : void

Clears the cache entirely. The number of models removed is returned.