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

method-monitor

v1.0.0

Published

Utilities for lightweight runtime profiling of object methods and standalone functions

Readme

Method-Monitor

Utilities for lightweight runtime profiling of object methods and standalone functions. The package provides MethodMonitor to instrument targets, Audit to inspect results, and AuditError for invalid audit flows.

Overview

  • Purpose: Collect call counts and execution times for functions/methods during runtime.
  • Key features: Patch object methods, wrap standalone functions, take audit snapshots, compute diffs against previous snapshots, and pretty-print results.

Quick example

import { MethodMonitor } from "@web-art/profile";

// Register methods (optional global step)
MethodMonitor.patchObject(MyClass.prototype);

const monitor = new MethodMonitor();
monitor.startAudit();
// run code under test
const audit = monitor.endAudit();
console.log(audit.toString(3));

API Summary

  • MethodMonitor

    • static patchObject(target, params?) — instrument object methods for timing.
      • params may include methodNames, includeSymbols, targetName, and minDebugLevel.
    • static registerMethod(method, minDebugLevel?) — wrap a standalone function and include it in future audits.
    • new MethodMonitor(debugLevel?) — create a scoped monitor with an optional debug level.
    • startAudit() / endAudit() — take a snapshot and compute an Audit for the work done in between.
    • auditSync(fn) / auditAsync(fn) — convenience helpers for auditing synchronous or async functions.
  • Audit

    • getStats(target, methodName) — retrieve the recorded Stats for a specific target or orphaned function.
    • targets() — iterate all audited targets.
    • properties(target) — iterate method names for a given target.
    • forEach(callback) — iterate every recorded method stat.
    • toString(digits?) — pretty-print audit results.
  • AuditError

    • Thrown when an audit flow is invalid, such as calling endAudit() before startAudit().

Usage notes

  • Standalone functions: registerMethod() lets you profile a function without an object target. The function is tracked by its name and appears as an orphaned target.
  • Debug level: minDebugLevel controls whether a registered method appears in audits. A lower value means higher priority.
  • Patching behavior: patchObject() mutates the target methods in place, so use a copy if you need to preserve originals.
  • Snapshot diffs: endAudit() automatically computes a diff against the snapshot taken by startAudit().

Error handling

  • AuditError is thrown for invalid audit flow.
  • IndexError is thrown when requesting stats for a missing target or method.

Files of interest

  • src/methodMonitor.tsMethodMonitor class and public audit API.
  • src/methodWatcher.ts — internal instrumentation and stats tracking.
  • src/audit.tsAudit result formatting and iteration utilities.
  • src/types.ts — shared types for Stats, Target, and TargetMap.

Tests

  • Unit tests live alongside implementation in src/*.test.ts and cover patched objects, standalone function registration, audit lifecycle, and debug-level filtering.
  • Run tests from the workspace root with the root test script.

License

  • See repository LICENSE.