import * as Effect from "effect/Effect"; import * as Scope from "effect/Scope"; /** * Allocate a per-execution memo cell for `build`. The returned accessor runs * `build` at most once per execution scope (Worker fetch/queue/scheduled * event, DO call, Workflow run, Lambda invoke) and builds it WITH that scope * (`Layer.build` / `Scope`-requiring acquires see the execution scope), so * release finalizers fire when the event settles — never held across events. * This is the only legal pooling shape on workerd (sockets are * IoContext-pinned) and the correct one on Lambda (the instance scope must * not own disposables). * * The `Effect.sync` wrapper allocates the memo's symbol key once per *call * site* (i.e. once per layer construction), so distinct clients built from * distinct `makeExecutionMemo` calls never share a memo cell even inside the * same execution. * * The memo key and the finalizer target are always the same scope object * (`yield* Effect.scope`), so they cannot disagree: wrapping queries in a * nested `Effect.scoped` narrows both the memo and the resource's lifetime * to that block. * * The accessor's `Scope` requirement is erased from its type — every runtime * bridge provides a fresh execution `Scope`, exactly like * `Drizzle.Postgres` before this primitive was extracted. Evaluating the * accessor outside an execution scope is a defect. */ export declare const makeExecutionMemo: (build: Effect.Effect) => Effect.Effect>>; //# sourceMappingURL=ExecutionMemo.d.ts.map