disposable
This module provides Disposable type with usingResource(),
usingResourceSync(), usingAllResources(), and usingAllResourcesSync()
functions to ensure a disposable resource is disposed. It is like C#’s
IDisposable with using or Python’s context with with.
Note that TypeScript 5.2 add supports for Explicit Resource Management which will take over the functionality provided by this library.
Usage
Implement Disposable on a resource. Write code to release that resource in
dispose() method. Then use it with usingResource like:
import {
Disposable,
usingResource,
} from "https://deno.land/x/disposable/mod.ts";
class Connection implements Disposable {
dispose() {
// Synchronously release the resource
}
}
await usingResource(new Connection(), (conn) => {
// The connection is alive in this block
// Do whatever you want synchronously
});
// The connection is disposed after above blockYou can use async function for dispose() or fn like
import {
Disposable,
usingResource,
} from "https://deno.land/x/disposable/mod.ts";
class Connection implements Disposable {
async dispose() {
// Asynchronously release the resource
}
}
await usingResource(new Connection(), async (conn) => {
// The connection is alive in this block
// Do whatever you want asynchronously
});
// The connection is disposed after above blockIf you are only using synchronous disposable and prefer synchronous code, use
usingResourceSync like:
import {
Disposable,
usingResourceSync,
} from "https://deno.land/x/disposable/mod.ts";
class Connection implements Disposable {
dispose() {
// Synchronously release the resource
}
}
usingResourceSync(new Connection(), (conn) => {
// The connection is alive in this block
// Do whatever you want
});
// The connection is disposed after above blockIf you would like to dispose multiple disposables, use usingAllResources like:
import {
Disposable,
usingAllResources,
} from "https://deno.land/x/disposable/mod.ts";
class Connection1 implements Disposable {
async dispose() {
// Asynchronously release the resource
}
}
class Connection2 implements Disposable {
dispose() {
// Synchronously release the resource
}
}
await usingAllResources(
[new Connection1(), new Connection2()],
async (conn1, conn2) => {
// The connections are alive in this block
// Do whatever you want asynchronously
},
);
// The connections are disposed after above blockOr use usingAllResourcesSync for synchronous disposables.
License
The code follows MIT license written in LICENSE. Contributors need to agree that any modifications sent in this repository follow the license.