| 40 | |
| 41 | /** @internal */ |
| 42 | export const fromAcquire = <A, E, R>( |
| 43 | acquire: Effect.Effect<A, E, R> |
| 44 | ): Effect.Effect<ScopedRef.ScopedRef<A>, E, R | Scope.Scope> => |
| 45 | core.uninterruptible( |
| 46 | fiberRuntime.scopeMake().pipe(core.flatMap((newScope) => |
| 47 | acquire.pipe( |
| 48 | core.mapInputContext<R, Scope.Scope | R>(Context.add(fiberRuntime.scopeTag, newScope)), |
| 49 | core.onError((cause) => newScope.close(core.exitFail(cause))), |
| 50 | core.flatMap((value) => |
| 51 | circular.makeSynchronized([newScope, value] as const).pipe( |
| 52 | core.flatMap((ref) => { |
| 53 | const scopedRef = Object.create(proto) |
| 54 | scopedRef.ref = ref |
| 55 | return pipe( |
| 56 | fiberRuntime.addFinalizer(() => close(scopedRef)), |
| 57 | core.as(scopedRef) |
| 58 | ) |
| 59 | }) |
| 60 | ) |
| 61 | ) |
| 62 | ) |
| 63 | )) |
| 64 | ) |
| 65 | |
| 66 | /** @internal */ |
| 67 | export const get = <A>(self: ScopedRef.ScopedRef<A>): Effect.Effect<A> => |