MCPcopy
hub / github.com/Effect-TS/effect / refresh

Method refresh

packages/effect/src/internal/cache.ts:450–500  ·  view source on GitHub ↗
(key: Key)

Source from the content-addressed store, hash-verified

448 }
449
450 refresh(key: Key): Effect.Effect<void, Error> {
451 return effect.clockWith((clock) =>
452 core.suspend(() => {
453 const k = key
454 const deferred: Deferred.Deferred<Value, Error> = Deferred.unsafeMake(this.fiberId)
455 let value = Option.getOrUndefined(MutableHashMap.get(this.cacheState.map, k))
456 if (value === undefined) {
457 if (MutableHashMap.has(this.cacheState.map, k)) {
458 value = Option.getOrUndefined(MutableHashMap.get(this.cacheState.map, k))
459 } else {
460 MutableHashMap.set(this.cacheState.map, k, pending(makeMapKey(k), deferred))
461 }
462 }
463 if (value === undefined) {
464 return core.asVoid(this.lookupValueOf(key, deferred))
465 } else {
466 switch (value._tag) {
467 case "Complete": {
468 if (this.hasExpired(clock, value.timeToLiveMillis)) {
469 const found = Option.getOrUndefined(MutableHashMap.get(this.cacheState.map, k))
470 if (Equal.equals(found, value)) {
471 MutableHashMap.remove(this.cacheState.map, k)
472 }
473 return core.asVoid(this.get(key))
474 }
475 // Only trigger the lookup if we're still the current value, `completedResult`
476 return pipe(
477 this.lookupValueOf(key, deferred),
478 effect.when(() => {
479 const current = Option.getOrUndefined(MutableHashMap.get(this.cacheState.map, k))
480 if (Equal.equals(current, value)) {
481 const mapValue = refreshing(deferred, value as Complete<Key, Value, Error>)
482 MutableHashMap.set(this.cacheState.map, k, mapValue)
483 return true
484 }
485 return false
486 }),
487 core.asVoid
488 )
489 }
490 case "Pending": {
491 return Deferred.await(value.deferred)
492 }
493 case "Refreshing": {
494 return Deferred.await(value.deferred)
495 }
496 }
497 }
498 })
499 )
500 }
501
502 set(key: Key, value: Value): Effect.Effect<void> {
503 return effect.clockWith((clock) =>

Callers

nothing calls this directly

Calls 11

lookupValueOfMethod · 0.95
hasExpiredMethod · 0.95
getMethod · 0.95
makeMapKeyFunction · 0.85
pendingFunction · 0.70
pipeFunction · 0.70
refreshingFunction · 0.70
getMethod · 0.65
setMethod · 0.65
removeMethod · 0.65
awaitMethod · 0.45

Tested by

no test coverage detected