Read UCSC Trix indexes in pure JavaScript
npm install @gmod/triximport Trix from '@gmod/trix'
import { RemoteFile } from 'generic-filehandle2'
// generic-filehandle2 also has LocalFile for files on disk
const trix = new Trix(
new RemoteFile('https://jbrowse.org/genomes/GRCh38/trix/hg38.ixx'),
new RemoteFile('https://jbrowse.org/genomes/GRCh38/trix/hg38.ix'),
)
const results = await trix.search('oca')
// => [[term, record], ...]ixxFile- filehandle for the.ixxfileixFile- filehandle for the.ixfilemaxResults- most results a search returns, default 20. Also settable afterwards astrix.maxResults
Any object with read(length, position, opts?) resolving to a Uint8Array and
readFile({ encoding: 'utf8' }) resolving to a string works, which includes
every generic-filehandle2 handle. The exported Filehandle type describes it.
Prefix-searches the index and resolves to [term, record][], where term is
the indexed word that matched and record is the key it points to. Records are
deduplicated, so two terms hitting the same record yield one result.
searchString- the query; only its first whitespace-separated word is usedopts.signal- anAbortSignalto cancel the underlying reads
A search fetches the .ixx once, then reads the .ix in 64 KiB pieces from the
matching checkpoint. A typeahead's consecutive keystrokes read nearby offsets, so
typing spd_00 into the 1.7 MB test index makes six reads at three distinct
offsets. With
@gmod/range-cache-filehandle
under both filehandles, three 256 KiB chunks serve all six, and backspacing
needs no new fetch:
import { RemoteFileWithRangeCache } from '@gmod/range-cache-filehandle'
const trix = new Trix(
new RemoteFileWithRangeCache(`${url}.ixx`),
new RemoteFileWithRangeCache(`${url}.ix`),
)See the UCSC trix documentation
for the concepts, and ixixx-js for a
JavaScript implementation of the ixIxx command that builds these indexes.
See CONTRIBUTING.md for development and release steps.