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

@ryanke/violet

v0.0.2

Published

> [!IMPORTANT] > This is absolutely not ready for production - a lot of features are missing, incomplete, or untested.

Downloads

3

Readme

violet

[!IMPORTANT] This is absolutely not ready for production - a lot of features are missing, incomplete, or untested.

Bundle your TypeScript app or library with ease.

  • Reduce the size of Docker builds
  • Support macros for compile-time code generation
  • Make sure you forget you're using ESM
  • Handle bundling optional dependencies properly

installation

# only pnpm is supported for now. violet needs to read the lockfile
pnpm add @ryanke/violet

For improved compatibility, you may also update your tsconfig.json to extend the included preset, it may fix some issues that either slow down or break bundling in some circumstances.

{
  "extends": "@ryanke/violet/tsconfig-base.json",
  // or...
  "extends": ["...", "@ryanke/violet/tsconfig-base.json"]
}

Then, to run and build your app, you can add this to your package.json

{
  "scripts": {
    "build": "tsc --noEmit && violet build ./src/index.ts",
    "dev": "violet run --watch ./src/index.ts",
    "start": "node ./dist/index.js"
  }
}

usage

# run an app, similar to `tsx` or `ts-node`
# this builds your app in the background and runs it on success
violet run ./src/index.ts --args-to-pass
violet run --watch ./src/main.ts
# build your app
# automatically bundles app dependencies except those in package.json "dependencies"
# "devDependencies" are always bundled - if you want to bundle everything, move everything to "devDependencies"
violet build ./src/index.ts
# there are a few additional options, run `violet --help` for more info

macros

[!IMPORTANT] Because of unfortunate limitations with esbuild and swc, macros do not work in files that require decorator metadata. This may be fixed in the future.

Macros are functions that run at compile time. Unlike rust, you cannot generate code with macros (yet..!), but they can still be extremely powerful in the right circumstances.

// helpers.ts
import { execSync } from "child_process";

export const getCommitHash = async () => {
  return execSync("git rev-parse HEAD").toString().trim();
};
// index.ts
import { getCommitHash } from "./helpers.js" assert { type: "macro" };

const commitHash = await getCommitHash();

This will compile to:

const commitHash = "7fe6d2c105dec483c85355976d6f4307c78e66bc";