• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / catalyst-storage / 24252371776
96%
main: 96%

Build:
Build:
LAST BUILD BRANCH: refs/tags/4.5.0
DEFAULT BRANCH: main
Ran 10 Apr 2026 04:11PM UTC
Jobs 1
Files 9
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Apr 2026 04:08PM UTC coverage: 96.145% (+0.9%) from 95.255%
24252371776

push

github

web-flow
feat: add support for range requests (#94)

* feat: support range requests

* chore: make eslint happy

* chore: polish

* fix: add range validation, clamping, and tests for range requests

Validate that range.start >= 0 and start <= end (throws RangeError),
clamp range.end to file size across all storage implementations, and
add comprehensive tests for range retrieval.

* fix: support range requests on gzip-only files in folder-based storage

When only the gzip version exists, decompress via streaming and extract
the requested byte range without buffering the entire file in memory.

* feat: add LRU decompression cache for folder-based range requests

When a gzip-only file receives a range request, decompress it to disk
and serve subsequent ranges directly via fs seek. Cache is evicted by
configurable TTL (default 1h) and max size (default 1GB) using LRU.

* feat: implement IBaseComponent lifecycle for eviction timer

IContentStorageComponent now extends IBaseComponent from wkc interfaces.
The folder-based storage starts the eviction interval on start() and
clears it on stop(), with a final eviction pass on shutdown.

* fix: add concurrency guard for gzip decompression and improve test coverage

Prevent concurrent range requests on the same gzip-only file from
racing on decompression. Add tests for non-existent file ranges,
single-byte ranges, stop() eviction, and concurrent requests.
Refactor eviction tests to use jest fake timers instead of real delays.

* fix: range validation, concurrency guard, allFileIds dedup, and cache cleanup

- Throw RangeError when range.start exceeds file size (all implementations)
- Fix concurrency guard so only the owner cleans up the inflight map
- Fix S3 clamping for empty files (ContentLength of 0)
- Deduplicate allFileIds when cached uncompressed files coexist with .gzip
- Clear decompressCache in storeStreamAndCompress to prevent size drift

* fix: clean up partial files on write failure and evict all cache on stop
... (continued)

95 of 105 branches covered (90.48%)

Branch coverage included in aggregate %.

127 of 129 new or added lines in 4 files covered. (98.45%)

329 of 336 relevant lines covered (97.92%)

30.59 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
98.17
-0.73% src/folder-based-storage-component.ts
Jobs
ID Job ID Ran Files Coverage
1 24252371776.1 10 Apr 2026 04:11PM UTC 9
96.15
GitHub Action Run
Source Files on build 24252371776
  • Tree
  • List 9
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • a9774c4d on github
  • Prev Build on main (#20432392968)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc