Create a store that reads a zipped Zarr archive (.zarr.zip) in place, over
HTTP range requests — one ranged GET per chunk, no unpacking.
ZipFileStore comes from @zarrita/storage rather than zarrita, which
re-exports only FetchStore. Note it is flagged @experimental upstream;
we lean on that lightly, because only get() is ever called here — its
getRange() is the method that reaches into unzipit internals, and nothing
in the viewer calls getRange on a store. Browser builds may warn that
unzipit imports Node's worker_threads; that import is guarded by its Node
branch, and workers remain disabled in the browser path used here.
NOT wrapped in boundedConcurrencyStore: the ranged GETs are gated one
level down, inside fetchWithRetry, which also gives them the retry budget.
Gating at both levels would let a gated get await a gated read and
deadlock the pool.
KNOWN COST: reading an archive pays a fixed preamble before the first chunk —
unzipit reads a 65,557-byte tail to find the end-of-central-directory
record and then the central directory itself, so a store whose directory sits
just before that tail transfers part of it twice (~141 kB measured at 1081
members). LuxarZipStore at least defers that to the first read rather
than paying it at construction.
Create a store that reads a zipped Zarr archive (
.zarr.zip) in place, over HTTP range requests — one ranged GET per chunk, no unpacking.ZipFileStorecomes from@zarrita/storagerather thanzarrita, which re-exports onlyFetchStore. Note it is flagged@experimentalupstream; we lean on that lightly, because onlyget()is ever called here — itsgetRange()is the method that reaches intounzipitinternals, and nothing in the viewer callsgetRangeon a store. Browser builds may warn thatunzipitimports Node'sworker_threads; that import is guarded by its Node branch, and workers remain disabled in the browser path used here.NOT wrapped in boundedConcurrencyStore: the ranged GETs are gated one level down, inside
fetchWithRetry, which also gives them the retry budget. Gating at both levels would let a gatedgetawait a gatedreadand deadlock the pool.KNOWN COST: reading an archive pays a fixed preamble before the first chunk —
unzipitreads a 65,557-byte tail to find the end-of-central-directory record and then the central directory itself, so a store whose directory sits just before that tail transfers part of it twice (~141 kB measured at 1081 members). LuxarZipStore at least defers that to the first read rather than paying it at construction.