axios-cache-interceptor/request-response-flow-overview.mermaid
copilot-swe-agent[bot] 8f5d432215 Add comprehensive mermaid diagrams for request/response flow and debug messages
Co-authored-by: arthurfiorette <47537704+arthurfiorette@users.noreply.github.com>
2025-12-08 15:39:27 +00:00

66 lines
2.7 KiB
Plaintext

flowchart TB
Start([Client makes HTTP request]) --> Setup{setupCache called?}
Setup -->|No| DirectAxios[Direct Axios Request]
Setup -->|Yes| ReqInterceptor[Request Interceptor]
ReqInterceptor --> CheckCache{Check Cache State}
CheckCache -->|cached & fresh| CachedAdapter[Custom Cached Adapter]
CheckCache -->|empty/stale/must-revalidate| MarkLoading[Mark as 'loading' in storage]
CheckCache -->|loading by another request| WaitForOther[Wait for other request]
WaitForOther --> OtherResolved{Other request resolved?}
OtherResolved -->|Success| CachedAdapter
OtherResolved -->|Failed| MarkLoading
MarkLoading --> RealAdapter[Real Axios Adapter<br/>HTTP request to server]
CachedAdapter --> ResInterceptor[Response Interceptor<br/>onFulfilled]
RealAdapter --> ServerResponse{Server Response}
ServerResponse -->|Success| ResInterceptor
ServerResponse -->|Error| ResErrorInterceptor[Response Interceptor<br/>onRejected]
ResInterceptor --> IsCached{Response from cache?}
IsCached -->|Yes| ReturnCached[Return cached response]
IsCached -->|No| ProcessResponse[Process server response]
ProcessResponse --> TestPredicate{Cache predicate<br/>passes?}
TestPredicate -->|No| RejectCache[Reject cache entry]
TestPredicate -->|Yes| InterpretHeaders{interpretHeader<br/>enabled?}
InterpretHeaders -->|Yes| ParseHeaders[Parse Cache-Control,<br/>Expires headers]
InterpretHeaders -->|No| UseConfigTTL[Use config.ttl]
ParseHeaders --> CheckCacheability{Should cache?}
CheckCacheability -->|dont cache| RejectCache
CheckCacheability -->|Yes| CalculateTTL[Calculate TTL & staleTtl]
UseConfigTTL --> CalculateTTL
CalculateTTL --> SaveCache[Save to storage as 'cached']
SaveCache --> ResolveWaiting[Resolve waiting requests]
ResolveWaiting --> ReturnResponse[Return server response]
RejectCache --> RejectWaiting[Reject waiting requests]
RejectWaiting --> ReturnResponse
ResErrorInterceptor --> CheckStaleIfError{staleIfError enabled<br/>& stale data exists?}
CheckStaleIfError -->|Yes| ReturnStale[Return stale data]
CheckStaleIfError -->|No| RejectError[Reject & throw error]
ReturnStale --> EndSuccess
ReturnCached --> EndSuccess
ReturnResponse --> EndSuccess([Response returned to client])
RejectError --> EndError([Error thrown to client])
DirectAxios --> EndSuccess
style Start fill:#e1f5e1
style EndSuccess fill:#e1f5e1
style EndError fill:#ffe1e1
style CachedAdapter fill:#fff4e1
style ReqInterceptor fill:#e1f0ff
style ResInterceptor fill:#e1f0ff
style ResErrorInterceptor fill:#ffe1f0