Hyperlinkv0.8.0-beta.28

Effect

Effect.acquireDisposableconsteffect/Effect.ts:6596
<A extends AsyncDisposable | Disposable, E, R>(
  acquire: Effect<A, E, R>
): Effect<A, E, R | Scope>

Acquires a scoped resource that implements JavaScript disposal protocols.

When to use

Use when you work with JavaScript Disposable or AsyncDisposable resources that should be closed with the surrounding scope.

Details

The resource is automatically disposed when the surrounding Scope is closed, using Symbol.dispose for synchronous disposables or Symbol.asyncDispose for asynchronous disposables.

This is similar to acquireRelease, but uses the standard JavaScript disposal protocol instead of requiring an explicit release function. It works with JavaScript Disposable and AsyncDisposable resources.

Example (Acquiring a disposable resource)

import sqlite from "node:sqlite";
import { Effect } from "effect"

const program = Effect.scoped(
  Effect.gen(function* () {
    // acquire database connection
    // database will be closed when the scope is closed
    const db = yield* Effect.acquireDisposable(
      Effect.sync(() => new sqlite.DatabaseSync(":memory:"))
    )

    const row = db.prepare("SELECT 1 AS value").get()
    yield* Effect.log(row) // { value: 1 }
  })
)
resource managementScopeSymbol.disposeSymbol.asyncDisposeacquireRelease
Source effect/Effect.ts:65963 lines
export const acquireDisposable: <A extends AsyncDisposable | Disposable, E, R>(
  acquire: Effect<A, E, R>
) => Effect<A, E, R | Scope> = internal.acquireDisposable