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

on-dispose

v0.1.0

Published

This package provides helpers for conveniently triggering dispose/asyncDispose actions using the `using` syntax in JavaScript/TypeScript.

Downloads

5

Readme

on-dispose

This package provides helpers for conveniently triggering dispose/asyncDispose actions using the using syntax in JavaScript/TypeScript.

Install

# If you're using npm
npm install on-dispose

# If you're using yarn
yarn add on-dispose

# If you're using pnpm
pnpm add on-dispose

Usage

A using statement in JavaScript / TypeScript will trigger the method [Symbol.dispose]() when the object goes out of scope.

An await using statement in JavaScript / TypeScript will trigger the method [Symbol.asyncDispose]() when the object goes out of scope.

Both types of using statements are similar in behaviour to a try { ... } finally { ... } statement.

on-dispose provides two helper functions onDispose and onAsyncDispose that accept an action you would like to trigger on dispose / async dispose respectively without having to define a class or object for it.

import { onDispose, onAsyncDispose } from "on-dispose";

// You can use onDispose with a synchronous action in a regular function.

const fn1 = () => {
    using _ = onDispose(() => {
        console.log("Synchronous dispose action in a synchronous function with using");
    })
}

// onDispose also works with a synchronous action in an async function.

const fn2 = async () => {
    using _ = onDispose(() => {
        console.log("Synchronous dispose action in an async function with using")
    })
}

// You can use onAsyncDispose with an asynchronous action in an async function.

const fn3 = async () => {
    await using _ = onAsyncDispose(async () => {
        console.log("Asynchronous dispose action in an async function with await using")
    })
}

// onAsyncDispose also works with a synchronous action.

const fn4 = async () => {
    await using _ = onAsyncDispose(() => {
        console.log("Synchronous dispose action in an async function with await using")
    })
}

const main = async () => {
    fn1();
    await fn2()
    await fn3()
    await fn4()
}

void main();

// Will print:
//
// Synchronous dispose action in a synchronous function with using
// Synchronous dispose action in an async function with using
// Asynchronous dispose action in an async function with await using
// Synchronous dispose action in an async function with await using

Naturally, you cannot run async dispose actions in regular / non-async functions.

onDispose returns a Disposable object and onAsyncDispose returns an AsyncDisposable object, so you can also use both with DisposableStack and AsyncDisposableStack.

License

MIT