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

@hackbg/ganesha

v5.0.0-rc.7

Published

🐘 A collection of fast, no-nonsense TypeScript loaders for Node 20+

Downloads

84

Readme

Ganesha

Collection of fast TypeScript loaders.

Made with 🧡 at Hack.bg.


Backends

  • [x] @ganesha/oxc: based on Oxc, the Oxidation Compiler. Fast but no source maps yet (see oxc#1045)
  • [x] @ganesha/esbuild-wasm: based on esbuild. Slower (~2.5x), but source maps work out of the box. May dump Go stack trace to console (see esbuild#1662 and go#59099)
  • [x] @ganesha/esbuild: based on esbuild. Depends on native binary, but unaffected by the above esbuild-wasm issue.
  • [ ] @ganesha/ezno: possible future support for ezno is under consideration.
  • [ ] @ganesha/swc: possible future support for swc is under consideration.

Benchmarks

TODO, contributions welcome.

How to use

Install with:

npm i --save @ganesha/oxc # or @ganesha/esbuild

Use from shell:

node --import @ganesha/oxc ./my-program.ts # or @ganesha/esbuild

Use from script:

await import("@ganesha/oxc") // or @ganesha/esbuild
await import("./my-program") // note that it works with no extension

The TypeScript program in question:

// my-program.ts
import { Foo } from './another-ts-module' // no extension required!
import { Bar } from './a-raw-js-module.js' // import from JS with extension

And it works both ways:

// my-program.js
import { Foo } from './another-ts-module.ts' // extension optional but preferred

Switching between backends

TODO.

Caching

For faster loading, Ganesha provides a cache based on cacache. This cache is controlled by the following environment variables:

  • GANESHA_CACHE_PATH: path to cache store
  • GANESHA_CACHE_OFF: set this to a non-empty value to disable caching

The cache store path defaults to a subdirectory of the user's cache root, as returned by @folder/xdg. For example, on desktop Linux, this would be ~/.cache/ganesha-v5

To disable caching globally (for a given store path), you can write a file in place of the caching directory, e.g.:

rm -rf ~/.cache/ganesha-v5
echo "delete this file to reenable caching" > ~/.cache/ganesha-v5

Troubleshooting

To see what Ganesha is doing:

  • GANESHA_DEBUG: set this environment variable to enable logging to stderr.

TODO.

See also

At Hack.bg, we primarily use Ganesha for developing Fadroma, a cross-chain framework for the CosmWasm ecosystem.

When it's time to publish a package, we switch over to Ubik, a complementary tool for publishing well-formed ESM packages from TypeScript while avoiding the nastiness of how tsc chooses to (more like "refuses to") handle extensions of imported modules.


"The very day I was born I made my first mistake, and by that path have I sought wisdom ever since." - William Buck's retelling of the Mahabharata (source)