@gmod/http-range-fetcher

Cache/manager for HTTP byte-range requests that merges requests together and
caches results. Designed for applications that request lots of small byte ranges
over HTTP that are often adjacent to each other.
Works both in node or webpack/browserify. Respects HTTP caching semantics, with
the exception of setting a default minimum TTL of 1 second on requests that are
not really supposed to be cached (e.g. Cache-Control: no-cache). You can turn
that behavior off by setting minimumTTL to 0 though.
Install
$ npm install --save http-range-fetcher
Usage
const { HttpRangeFetcher } = require('http-range-fetcher')
const cache = new HttpRangeFetcher({})
cache.getRange('http://foo.bar/baz.bam', 20, 10).then(response => {
assert(response.buffer.length === 10)
assert(response.headers['content-range'] === '20-29/23422')
assert(response.headers['x-resource-length'] === '23422')
})
Promise.all([
cache.getRange('http://foo.bar/baz.bam', 20, 10),
cache.getRange('http://foo.bar/baz.bam', 30, 10),
cache.getRange('http://foo.bar/baz.bam', 40, 10),
cache.getRange('http://foo.bar/baz.bam', 50, 10),
cache.getRange('http://foo.bar/baz.bam', 60, 10),
cache.getRange('http://foo.bar/baz.bam', 70, 10),
]).then(fetchResults => {
fetchResults.forEach(res => assert(res.buffer.length === 10))
})
API
Table of Contents
Academic Use
This package was written with funding from the NHGRI as
part of the JBrowse project. If you use it in an academic
project that you publish, please cite the most recent JBrowse paper, which will
be linked from jbrowse.org.
License
MIT © Robert Buels
Note
Renamed http-range-fetcher -> @gmod/http-range-fetcher in 2024