(key: Key)
| 46 | ), |
| 47 | ([blocked, resources]): WatchableLookup<Key, Value, Error> => { |
| 48 | function lookup(key: Key): Effect.Effect<Value, Error, Scope.Scope> { |
| 49 | return Effect.flatten(Effect.gen(function*() { |
| 50 | const observableResource = yield* ObservableResource.makeEffect(concreteLookup(key)) |
| 51 | yield* Ref.update(resources, (resourceMap) => { |
| 52 | const newResource = pipe( |
| 53 | HashMap.get(resourceMap, key), |
| 54 | Option.getOrElse(() => Chunk.empty<ObservableResource.ObservableResource<Error, Value>>()), |
| 55 | Chunk.append(observableResource) |
| 56 | ) |
| 57 | return HashMap.set(resourceMap, key, newResource) |
| 58 | }) |
| 59 | const schedule = Schedule.intersect( |
| 60 | Schedule.recurWhile<boolean>(identity), |
| 61 | Schedule.exponential(Duration.millis(10), 2.0) |
| 62 | ) |
| 63 | yield* pipe( |
| 64 | Ref.get(blocked), |
| 65 | Effect.repeat(schedule), |
| 66 | TestServices.provideLive |
| 67 | ) |
| 68 | return observableResource.scoped |
| 69 | })) |
| 70 | } |
| 71 | const lock = () => Ref.set(blocked, true) |
| 72 | const unlock = () => Ref.set(blocked, false) |
| 73 | const createdResources = () => Ref.get(resources) |
no test coverage detected