loom-browser 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/igv.d.ts +667 -0
- package/dist/igv.esm.js +76708 -0
- package/dist/igv.esm.min.js +26 -0
- package/dist/igv.esm.min.js.map +1 -0
- package/dist/igv.js +76716 -0
- package/dist/igv.min.js +26 -0
- package/dist/igv.min.js.map +1 -0
- package/dist/loom.d.ts +667 -0
- package/dist/loom.esm.js +14927 -0
- package/dist/loom.esm.min.js +2 -0
- package/dist/loom.esm.min.js.map +1 -0
- package/dist/loom.js +15114 -0
- package/dist/loom.min.js +2 -0
- package/dist/loom.min.js.map +1 -0
- package/dist/types/agent/index.d.ts +4 -0
- package/dist/types/agent/stateProjection.d.ts +115 -0
- package/dist/types/agent/trackSelector.d.ts +31 -0
- package/dist/types/baseTrackCanvas.d.ts +62 -0
- package/dist/types/bigwig/binaryParser.d.ts +25 -0
- package/dist/types/bigwig/bpTree.d.ts +40 -0
- package/dist/types/bigwig/bwReader.d.ts +69 -0
- package/dist/types/bigwig/chromTree.d.ts +28 -0
- package/dist/types/bigwig/index.d.ts +66 -0
- package/dist/types/bigwig/inflate.d.ts +9 -0
- package/dist/types/bigwig/rangeReader.d.ts +48 -0
- package/dist/types/bigwig/rpTree.d.ts +27 -0
- package/dist/types/canvasProvider.d.ts +36 -0
- package/dist/types/commandDispatcher.d.ts +199 -0
- package/dist/types/contextMenu.d.ts +64 -0
- package/dist/types/contextMenuProvider.d.ts +25 -0
- package/dist/types/data/cachedSequence.d.ts +19 -0
- package/dist/types/data/ucscApi.d.ts +21 -0
- package/dist/types/data/ucscSequence.d.ts +19 -0
- package/dist/types/dataLifecycle.d.ts +16 -0
- package/dist/types/dataSources/bigWigDataSource.d.ts +24 -0
- package/dist/types/dataSources/dataSourceCacheKey.d.ts +9 -0
- package/dist/types/dataSources/dynseqDataSource.d.ts +20 -0
- package/dist/types/dataSources/featureSourceFactory.d.ts +46 -0
- package/dist/types/dataSources/geneDataSource.d.ts +16 -0
- package/dist/types/dataSources/gtxDataSource.d.ts +42 -0
- package/dist/types/dataSources/sequenceDataSource.d.ts +15 -0
- package/dist/types/dataSources/textFeatureSource.d.ts +63 -0
- package/dist/types/decode/bed.d.ts +64 -0
- package/dist/types/decode/bedpe.d.ts +36 -0
- package/dist/types/decode/exonUtils.d.ts +29 -0
- package/dist/types/decode/gff.d.ts +58 -0
- package/dist/types/decode/interact.d.ts +19 -0
- package/dist/types/decode/ucsc.d.ts +56 -0
- package/dist/types/dynseqRenderer.d.ts +37 -0
- package/dist/types/events.d.ts +23 -0
- package/dist/types/export/canvas2svg.d.ts +166 -0
- package/dist/types/export/index.d.ts +2 -0
- package/dist/types/featureCache.d.ts +69 -0
- package/dist/types/formats/featureParser.d.ts +72 -0
- package/dist/types/formats/formatDetection.d.ts +46 -0
- package/dist/types/geneRenderer.d.ts +17 -0
- package/dist/types/geneThemes.d.ts +11 -0
- package/dist/types/geneTrackCanvas.d.ts +46 -0
- package/dist/types/genome/chromAlias.d.ts +46 -0
- package/dist/types/genome/chromSizes.d.ts +53 -0
- package/dist/types/genome/genome.d.ts +51 -0
- package/dist/types/genomeBrowser.d.ts +189 -0
- package/dist/types/gtx/fetchCoordinator.d.ts +34 -0
- package/dist/types/gtx/gtxReader.d.ts +144 -0
- package/dist/types/gtx/index.d.ts +40 -0
- package/dist/types/gtx/zstdWasm.d.ts +22 -0
- package/dist/types/headlessGenomeBrowser.d.ts +450 -0
- package/dist/types/index.d.ts +123 -0
- package/dist/types/intervalTree.d.ts +56 -0
- package/dist/types/io/binaryParser.d.ts +25 -0
- package/dist/types/io/index.d.ts +7 -0
- package/dist/types/io/rangeReader.d.ts +48 -0
- package/dist/types/locusUtils.d.ts +37 -0
- package/dist/types/pack.d.ts +41 -0
- package/dist/types/popupProvider.d.ts +22 -0
- package/dist/types/remoteProtocol.d.ts +79 -0
- package/dist/types/renderTheme.d.ts +72 -0
- package/dist/types/renderThemePresets.d.ts +16 -0
- package/dist/types/roi/index.d.ts +3 -0
- package/dist/types/roi/roiRenderer.d.ts +24 -0
- package/dist/types/roi/roiSet.d.ts +41 -0
- package/dist/types/rulerRenderer.d.ts +14 -0
- package/dist/types/rulerTrackCanvas.d.ts +32 -0
- package/dist/types/sequence/sequenceUtils.d.ts +44 -0
- package/dist/types/session.d.ts +55 -0
- package/dist/types/src/bigwig/index.d.ts +66 -0
- package/dist/types/src/canvasProvider.d.ts +36 -0
- package/dist/types/src/commandDispatcher.d.ts +220 -0
- package/dist/types/src/contextMenu.d.ts +64 -0
- package/dist/types/src/contextMenuProvider.d.ts +25 -0
- package/dist/types/src/data/cachedSequence.d.ts +19 -0
- package/dist/types/src/data/ucscApi.d.ts +21 -0
- package/dist/types/src/data/ucscSequence.d.ts +19 -0
- package/dist/types/src/dataLifecycle.d.ts +16 -0
- package/dist/types/src/dataSources/bigWigDataSource.d.ts +24 -0
- package/dist/types/src/dataSources/dataSourceCacheKey.d.ts +9 -0
- package/dist/types/src/dataSources/featureSourceFactory.d.ts +46 -0
- package/dist/types/src/dataSources/geneDataSource.d.ts +16 -0
- package/dist/types/src/dataSources/gtxDataSource.d.ts +42 -0
- package/dist/types/src/dataSources/sequenceDataSource.d.ts +15 -0
- package/dist/types/src/dataSources/textFeatureSource.d.ts +63 -0
- package/dist/types/src/decode/bed.d.ts +64 -0
- package/dist/types/src/decode/bedpe.d.ts +36 -0
- package/dist/types/src/decode/exonUtils.d.ts +29 -0
- package/dist/types/src/decode/gff.d.ts +58 -0
- package/dist/types/src/decode/interact.d.ts +19 -0
- package/dist/types/src/decode/ucsc.d.ts +56 -0
- package/dist/types/src/events.d.ts +23 -0
- package/dist/types/src/export/canvas2svg.d.ts +166 -0
- package/dist/types/src/export/index.d.ts +2 -0
- package/dist/types/src/featureCache.d.ts +69 -0
- package/dist/types/src/formats/featureParser.d.ts +72 -0
- package/dist/types/src/formats/formatDetection.d.ts +46 -0
- package/dist/types/src/genome/chromAlias.d.ts +46 -0
- package/dist/types/src/genome/chromSizes.d.ts +53 -0
- package/dist/types/src/genome/genome.d.ts +51 -0
- package/dist/types/src/genomeBrowser.d.ts +189 -0
- package/dist/types/src/gtx/fetchCoordinator.d.ts +34 -0
- package/dist/types/src/gtx/gtxReader.d.ts +144 -0
- package/dist/types/src/gtx/index.d.ts +40 -0
- package/dist/types/src/gtx/zstdWasm.d.ts +22 -0
- package/dist/types/src/headlessGenomeBrowser.d.ts +450 -0
- package/dist/types/src/index.d.ts +123 -0
- package/dist/types/src/intervalTree.d.ts +56 -0
- package/dist/types/src/io/binaryParser.d.ts +25 -0
- package/dist/types/src/io/index.d.ts +7 -0
- package/dist/types/src/io/rangeReader.d.ts +48 -0
- package/dist/types/src/locusUtils.d.ts +37 -0
- package/dist/types/src/pack.d.ts +41 -0
- package/dist/types/src/popupProvider.d.ts +22 -0
- package/dist/types/src/remoteProtocol.d.ts +81 -0
- package/dist/types/src/roi/index.d.ts +3 -0
- package/dist/types/src/roi/roiRenderer.d.ts +24 -0
- package/dist/types/src/roi/roiSet.d.ts +41 -0
- package/dist/types/src/sequence/sequenceUtils.d.ts +44 -0
- package/dist/types/src/session.d.ts +55 -0
- package/dist/types/src/stateProjection.d.ts +115 -0
- package/dist/types/src/tabix/index.d.ts +48 -0
- package/dist/types/src/themes/index.d.ts +3 -0
- package/dist/types/src/themes/renderTheme.d.ts +86 -0
- package/dist/types/src/themes/renderThemePresets.d.ts +16 -0
- package/dist/types/src/trackRegistry.d.ts +81 -0
- package/dist/types/src/trackSelector.d.ts +31 -0
- package/dist/types/src/tracks/annotation/annotationRenderer.d.ts +17 -0
- package/dist/types/src/tracks/annotation/annotationThemes.d.ts +11 -0
- package/dist/types/src/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
- package/dist/types/src/tracks/annotation/index.d.ts +4 -0
- package/dist/types/src/tracks/axis/axisRenderer.d.ts +19 -0
- package/dist/types/src/tracks/axis/index.d.ts +1 -0
- package/dist/types/src/tracks/baseTrackCanvas.d.ts +113 -0
- package/dist/types/src/tracks/dynseq/dynseqRenderer.d.ts +38 -0
- package/dist/types/src/tracks/dynseq/index.d.ts +1 -0
- package/dist/types/src/tracks/index.d.ts +7 -0
- package/dist/types/src/tracks/interaction/index.d.ts +4 -0
- package/dist/types/src/tracks/interaction/interactionRenderer.d.ts +52 -0
- package/dist/types/src/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
- package/dist/types/src/tracks/ruler/index.d.ts +3 -0
- package/dist/types/src/tracks/ruler/rulerRenderer.d.ts +25 -0
- package/dist/types/src/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
- package/dist/types/src/tracks/sequence/index.d.ts +5 -0
- package/dist/types/src/tracks/sequence/sequenceRenderer.d.ts +34 -0
- package/dist/types/src/tracks/sequence/sequenceThemes.d.ts +11 -0
- package/dist/types/src/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
- package/dist/types/src/tracks/wig/index.d.ts +5 -0
- package/dist/types/src/tracks/wig/wigRenderer.d.ts +15 -0
- package/dist/types/src/tracks/wig/wigSummary.d.ts +31 -0
- package/dist/types/src/tracks/wig/wigThemes.d.ts +15 -0
- package/dist/types/src/tracks/wig/wigTrackCanvas.d.ts +82 -0
- package/dist/types/src/types.d.ts +885 -0
- package/dist/types/src/ui/components/LoomBrowserShell.d.ts +52 -0
- package/dist/types/src/ui/components/LoomChromosomeSelect.d.ts +18 -0
- package/dist/types/src/ui/components/LoomContextMenu.d.ts +39 -0
- package/dist/types/src/ui/components/LoomExportControls.d.ts +13 -0
- package/dist/types/src/ui/components/LoomInputDialog.d.ts +27 -0
- package/dist/types/src/ui/components/LoomLocusInput.d.ts +18 -0
- package/dist/types/src/ui/components/LoomNavbar.d.ts +15 -0
- package/dist/types/src/ui/components/LoomPopup.d.ts +32 -0
- package/dist/types/src/ui/components/LoomWindowSize.d.ts +14 -0
- package/dist/types/src/ui/components/LoomZoomControls.d.ts +10 -0
- package/dist/types/src/ui/index.d.ts +21 -0
- package/dist/types/src/ui/themes.d.ts +14 -0
- package/dist/types/src/worker/nodeWorkerProvider.d.ts +28 -0
- package/dist/types/src/worker/taskHandler.d.ts +15 -0
- package/dist/types/src/worker/webWorkerProvider.d.ts +51 -0
- package/dist/types/src/worker/workerScript.d.ts +11 -0
- package/dist/types/src/workerProvider.d.ts +76 -0
- package/dist/types/stateProjection.d.ts +115 -0
- package/dist/types/tabix/bgzBlockLoader.d.ts +60 -0
- package/dist/types/tabix/bgzf.d.ts +43 -0
- package/dist/types/tabix/index.d.ts +48 -0
- package/dist/types/tabix/tabixIndex.d.ts +85 -0
- package/dist/types/tabix/tabixReader.d.ts +60 -0
- package/dist/types/tabix/virtualOffset.d.ts +41 -0
- package/dist/types/test/src/mockCanvasProvider.d.ts +67 -0
- package/dist/types/test/src/testBedDecode.d.ts +1 -0
- package/dist/types/test/src/testCanvas2SVG.d.ts +7 -0
- package/dist/types/test/src/testChromAlias.d.ts +1 -0
- package/dist/types/test/src/testCommandDispatcher.d.ts +1 -0
- package/dist/types/test/src/testData.d.ts +7 -0
- package/dist/types/test/src/testDataLifecycle.d.ts +1 -0
- package/dist/types/test/src/testDataSourceCacheKey.d.ts +1 -0
- package/dist/types/test/src/testDataSources.d.ts +5 -0
- package/dist/types/test/src/testDecodeUcsc.d.ts +1 -0
- package/dist/types/test/src/testEvents.d.ts +1 -0
- package/dist/types/test/src/testFeatureCache.d.ts +1 -0
- package/dist/types/test/src/testFeatureParser.d.ts +1 -0
- package/dist/types/test/src/testFormatDetection.d.ts +1 -0
- package/dist/types/test/src/testGffDecode.d.ts +1 -0
- package/dist/types/test/src/testHeadlessBrowser.d.ts +1 -0
- package/dist/types/test/src/testInteractionDecoder.d.ts +1 -0
- package/dist/types/test/src/testIntervalTree.d.ts +1 -0
- package/dist/types/test/src/testLocusUtils.d.ts +1 -0
- package/dist/types/test/src/testPack.d.ts +1 -0
- package/dist/types/test/src/testROI.d.ts +1 -0
- package/dist/types/test/src/testRemoteProtocol.d.ts +1 -0
- package/dist/types/test/src/testRenderTheme.d.ts +1 -0
- package/dist/types/test/src/testSVGExport.d.ts +5 -0
- package/dist/types/test/src/testSequence.d.ts +1 -0
- package/dist/types/test/src/testSession.d.ts +1 -0
- package/dist/types/test/src/testTrackSelector.d.ts +1 -0
- package/dist/types/test/src/testTrackSerialize.d.ts +1 -0
- package/dist/types/test/src/testWigSummary.d.ts +1 -0
- package/dist/types/test/src/testWorkerDispatch.d.ts +9 -0
- package/dist/types/themes/index.d.ts +3 -0
- package/dist/types/themes/renderTheme.d.ts +86 -0
- package/dist/types/themes/renderThemePresets.d.ts +16 -0
- package/dist/types/trackRegistry.d.ts +81 -0
- package/dist/types/trackSelector.d.ts +31 -0
- package/dist/types/tracks/annotation/annotationRenderer.d.ts +17 -0
- package/dist/types/tracks/annotation/annotationThemes.d.ts +11 -0
- package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +58 -0
- package/dist/types/tracks/annotation/index.d.ts +4 -0
- package/dist/types/tracks/axis/axisRenderer.d.ts +19 -0
- package/dist/types/tracks/axis/index.d.ts +1 -0
- package/dist/types/tracks/baseTrackCanvas.d.ts +113 -0
- package/dist/types/tracks/dynseq/dynseqRenderer.d.ts +38 -0
- package/dist/types/tracks/dynseq/index.d.ts +1 -0
- package/dist/types/tracks/gene/geneRenderer.d.ts +17 -0
- package/dist/types/tracks/gene/geneThemes.d.ts +11 -0
- package/dist/types/tracks/gene/geneTrackCanvas.d.ts +58 -0
- package/dist/types/tracks/gene/index.d.ts +4 -0
- package/dist/types/tracks/index.d.ts +7 -0
- package/dist/types/tracks/interaction/index.d.ts +4 -0
- package/dist/types/tracks/interaction/interactionRenderer.d.ts +52 -0
- package/dist/types/tracks/interaction/interactionTrackCanvas.d.ts +54 -0
- package/dist/types/tracks/ruler/index.d.ts +3 -0
- package/dist/types/tracks/ruler/rulerRenderer.d.ts +25 -0
- package/dist/types/tracks/ruler/rulerTrackCanvas.d.ts +43 -0
- package/dist/types/tracks/sequence/index.d.ts +5 -0
- package/dist/types/tracks/sequence/sequenceRenderer.d.ts +34 -0
- package/dist/types/tracks/sequence/sequenceThemes.d.ts +11 -0
- package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +67 -0
- package/dist/types/tracks/wig/index.d.ts +5 -0
- package/dist/types/tracks/wig/wigRenderer.d.ts +15 -0
- package/dist/types/tracks/wig/wigSummary.d.ts +31 -0
- package/dist/types/tracks/wig/wigThemes.d.ts +15 -0
- package/dist/types/tracks/wig/wigTrackCanvas.d.ts +82 -0
- package/dist/types/types.d.ts +885 -0
- package/dist/types/ui/components/IgvBrowserShell.d.ts +52 -0
- package/dist/types/ui/components/IgvChromosomeSelect.d.ts +18 -0
- package/dist/types/ui/components/IgvExportControls.d.ts +13 -0
- package/dist/types/ui/components/IgvLocusInput.d.ts +18 -0
- package/dist/types/ui/components/IgvNavbar.d.ts +15 -0
- package/dist/types/ui/components/IgvWindowSize.d.ts +14 -0
- package/dist/types/ui/components/IgvZoomControls.d.ts +10 -0
- package/dist/types/ui/components/LoomBrowserShell.d.ts +52 -0
- package/dist/types/ui/components/LoomChromosomeSelect.d.ts +18 -0
- package/dist/types/ui/components/LoomContextMenu.d.ts +39 -0
- package/dist/types/ui/components/LoomExportControls.d.ts +13 -0
- package/dist/types/ui/components/LoomInputDialog.d.ts +27 -0
- package/dist/types/ui/components/LoomLocusInput.d.ts +18 -0
- package/dist/types/ui/components/LoomNavbar.d.ts +15 -0
- package/dist/types/ui/components/LoomPopup.d.ts +32 -0
- package/dist/types/ui/components/LoomWindowSize.d.ts +14 -0
- package/dist/types/ui/components/LoomZoomControls.d.ts +10 -0
- package/dist/types/ui/index.d.ts +21 -0
- package/dist/types/ui/themes.d.ts +14 -0
- package/dist/types/wigRenderer.d.ts +15 -0
- package/dist/types/wigSummary.d.ts +31 -0
- package/dist/types/wigThemes.d.ts +15 -0
- package/dist/types/wigTrackCanvas.d.ts +46 -0
- package/dist/types/worker/decodeWig.d.ts +20 -0
- package/dist/types/worker/nodeWorkerProvider.d.ts +28 -0
- package/dist/types/worker/taskHandler.d.ts +15 -0
- package/dist/types/worker/webWorkerProvider.d.ts +51 -0
- package/dist/types/worker/workerScript.d.ts +11 -0
- package/dist/types/workerProvider.d.ts +76 -0
- package/package.json +102 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { StateProjection } from './stateProjection';
|
|
2
|
+
export type { ZoomLevel, TrackSummary, ProjectedState, StateDiff, TrackChangeDiff, GetStateOptions, } from './stateProjection';
|
|
3
|
+
export { matchesSelector, selectTracks } from './trackSelector';
|
|
4
|
+
export type { TrackSelector } from './trackSelector';
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateProjection — agent-friendly state snapshots with record/diff support.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a HeadlessGenomeBrowser to produce concise, LLM-optimized state objects.
|
|
5
|
+
* Supports snapshotting (record) and incremental diffs against prior snapshots.
|
|
6
|
+
*
|
|
7
|
+
* Feature summarization reads from the browser's cache via getCachedFeatures(),
|
|
8
|
+
* filters to the visible viewport, and applies type-specific summarization.
|
|
9
|
+
*
|
|
10
|
+
* Swappable: consumers can extend or replace this class for custom projection logic.
|
|
11
|
+
*/
|
|
12
|
+
import type { Locus, TrackFeatureSummary, ROISetConfig } from '../types';
|
|
13
|
+
import type { HeadlessGenomeBrowser, ManagedTrack } from '../headlessGenomeBrowser';
|
|
14
|
+
/** Zoom level classification based on viewport span. */
|
|
15
|
+
export type ZoomLevel = 'base' | 'element' | 'gene' | 'region' | 'chromosome' | 'genome';
|
|
16
|
+
/** Concise summary of a single track, suitable for LLM consumption. */
|
|
17
|
+
export interface TrackSummary {
|
|
18
|
+
id: string;
|
|
19
|
+
type: string;
|
|
20
|
+
name?: string;
|
|
21
|
+
metadata?: Record<string, string>;
|
|
22
|
+
/** True when a data source exists but no cached data is available yet. */
|
|
23
|
+
loading?: boolean;
|
|
24
|
+
featureSummary?: TrackFeatureSummary;
|
|
25
|
+
}
|
|
26
|
+
/** Full projected state of the browser — concise, JSON-serializable. */
|
|
27
|
+
export interface ProjectedState {
|
|
28
|
+
locus: Locus;
|
|
29
|
+
/** Formatted locus string, e.g. "chr17:7,668,421-7,687,490" */
|
|
30
|
+
locusString: string;
|
|
31
|
+
/** Viewport span in base pairs. */
|
|
32
|
+
span: number;
|
|
33
|
+
zoomLevel: ZoomLevel;
|
|
34
|
+
genome?: string;
|
|
35
|
+
tracks: TrackSummary[];
|
|
36
|
+
rois: ROISetConfig[];
|
|
37
|
+
}
|
|
38
|
+
/** Per-field [before, after] diff for a track whose feature summary changed. */
|
|
39
|
+
export interface TrackChangeDiff {
|
|
40
|
+
id: string;
|
|
41
|
+
type: string;
|
|
42
|
+
featureCount?: [number, number];
|
|
43
|
+
signalRange?: [{
|
|
44
|
+
min: number;
|
|
45
|
+
max: number;
|
|
46
|
+
}, {
|
|
47
|
+
min: number;
|
|
48
|
+
max: number;
|
|
49
|
+
}];
|
|
50
|
+
featureNames?: [string[], string[]];
|
|
51
|
+
packingDepth?: [number, number];
|
|
52
|
+
valueRange?: [{
|
|
53
|
+
min: number;
|
|
54
|
+
max: number;
|
|
55
|
+
}, {
|
|
56
|
+
min: number;
|
|
57
|
+
max: number;
|
|
58
|
+
}];
|
|
59
|
+
}
|
|
60
|
+
/** Diff between two projected states — only includes what changed. */
|
|
61
|
+
export interface StateDiff {
|
|
62
|
+
/** Present if locus changed. */
|
|
63
|
+
locus?: [Locus, Locus];
|
|
64
|
+
/** Present if zoom level changed. */
|
|
65
|
+
zoomLevel?: [ZoomLevel, ZoomLevel];
|
|
66
|
+
/** Tracks added since the snapshot. */
|
|
67
|
+
tracksAdded?: TrackSummary[];
|
|
68
|
+
/** Track IDs removed since the snapshot. */
|
|
69
|
+
tracksRemoved?: string[];
|
|
70
|
+
/** Tracks whose feature summary changed, with per-field [before, after] tuples. */
|
|
71
|
+
tracksChanged?: TrackChangeDiff[];
|
|
72
|
+
/** Present if ROIs changed. */
|
|
73
|
+
roisChanged?: boolean;
|
|
74
|
+
/** True if nothing changed. */
|
|
75
|
+
unchanged: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface GetStateOptions {
|
|
78
|
+
/** If provided, record the state under this key for future diff() calls. */
|
|
79
|
+
record?: string;
|
|
80
|
+
}
|
|
81
|
+
export declare class StateProjection {
|
|
82
|
+
private browser;
|
|
83
|
+
private snapshots;
|
|
84
|
+
constructor(browser: HeadlessGenomeBrowser);
|
|
85
|
+
/** Get the current projected state. Optionally record it under a key. */
|
|
86
|
+
getState(options?: GetStateOptions): ProjectedState;
|
|
87
|
+
/**
|
|
88
|
+
* Diff the current state against a named snapshot.
|
|
89
|
+
* Returns an object describing only what changed.
|
|
90
|
+
* Throws if the key doesn't exist.
|
|
91
|
+
*/
|
|
92
|
+
diff(key: string): StateDiff;
|
|
93
|
+
/** Record the current state under a key without returning it. */
|
|
94
|
+
record(key: string): void;
|
|
95
|
+
/** Delete a snapshot by key. */
|
|
96
|
+
deleteSnapshot(key: string): boolean;
|
|
97
|
+
/** Get a previously recorded snapshot by key. */
|
|
98
|
+
getSnapshot(key: string): ProjectedState | undefined;
|
|
99
|
+
/** List all snapshot keys. */
|
|
100
|
+
snapshotKeys(): string[];
|
|
101
|
+
/** Clear all snapshots. */
|
|
102
|
+
clearSnapshots(): void;
|
|
103
|
+
private project;
|
|
104
|
+
private projectTrack;
|
|
105
|
+
/**
|
|
106
|
+
* Summarize cached features for a track, filtered to the visible viewport.
|
|
107
|
+
* Reads from the browser's cache via getCachedFeatures() and applies
|
|
108
|
+
* type-specific summarization. Override this method in subclasses for
|
|
109
|
+
* custom summary formats.
|
|
110
|
+
*/
|
|
111
|
+
protected summarizeFeatures(mt: ManagedTrack, locus: Locus): TrackFeatureSummary | undefined;
|
|
112
|
+
private summarizeWig;
|
|
113
|
+
private summarizeAnnotation;
|
|
114
|
+
private summarizeInteraction;
|
|
115
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackSelector — SQL-ish WHERE clause for matching tracks by metadata.
|
|
3
|
+
*
|
|
4
|
+
* Selectors support matching on track ID, name (string or RegExp), type,
|
|
5
|
+
* and arbitrary metadata key-value pairs. All provided fields use AND semantics:
|
|
6
|
+
* a track must match every specified criterion.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Remove all ATAC-seq tracks
|
|
10
|
+
* browser.removeTracks({ where: { assay: 'ATAC-seq' } })
|
|
11
|
+
*
|
|
12
|
+
* // Find wig tracks from K562
|
|
13
|
+
* browser.findTracks({ type: 'wig', where: { biosample: 'K562' } })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import type { ManagedTrack } from '../headlessGenomeBrowser';
|
|
17
|
+
/** Selector for matching tracks by ID, name, type, and/or metadata. */
|
|
18
|
+
export interface TrackSelector {
|
|
19
|
+
/** Exact match against track ID. */
|
|
20
|
+
id?: string;
|
|
21
|
+
/** String: case-insensitive substring match. RegExp: test against track name. */
|
|
22
|
+
name?: string | RegExp;
|
|
23
|
+
/** Exact match against track type (e.g. 'wig', 'annotation', 'interact'). */
|
|
24
|
+
type?: string;
|
|
25
|
+
/** Metadata key-value matching. Every entry must match (AND semantics). */
|
|
26
|
+
where?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
/** Test whether a single managed track matches all criteria in a selector. */
|
|
29
|
+
export declare function matchesSelector(mt: ManagedTrack, selector: TrackSelector): boolean;
|
|
30
|
+
/** Select all managed tracks matching a selector. */
|
|
31
|
+
export declare function selectTracks(tracks: readonly ManagedTrack[], selector: TrackSelector): ManagedTrack[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for canvas-based genomic track renderers.
|
|
3
|
+
*
|
|
4
|
+
* Handles all shared canvas lifecycle: DPR scaling, sizing, resize observation,
|
|
5
|
+
* attach/detach, background fill, and RenderContext construction.
|
|
6
|
+
*
|
|
7
|
+
* Subclasses implement:
|
|
8
|
+
* - type (track type identifier)
|
|
9
|
+
* - computeHeight(width) — return CSS pixel height for current state
|
|
10
|
+
* - getBackground() — return background fill color
|
|
11
|
+
* - doRender(ctx, width, height, rc) — the actual drawing logic
|
|
12
|
+
*
|
|
13
|
+
* This eliminates ~80 lines of identical boilerplate per track type.
|
|
14
|
+
*/
|
|
15
|
+
import type { Locus, RenderContext, Track, TrackSessionConfig } from './types';
|
|
16
|
+
import type { RenderTheme } from './renderTheme';
|
|
17
|
+
import type { CanvasProvider } from './canvasProvider';
|
|
18
|
+
export declare abstract class BaseTrackCanvas<TConfig> implements Track {
|
|
19
|
+
protected _canvas: HTMLCanvasElement;
|
|
20
|
+
protected _locus: Locus;
|
|
21
|
+
protected _config: TConfig;
|
|
22
|
+
protected _height: number;
|
|
23
|
+
protected canvasProvider: CanvasProvider;
|
|
24
|
+
private resizeObserver;
|
|
25
|
+
private container;
|
|
26
|
+
abstract readonly type: string;
|
|
27
|
+
get canvas(): HTMLCanvasElement;
|
|
28
|
+
get locus(): Locus;
|
|
29
|
+
get height(): number;
|
|
30
|
+
/** Current track config (read-only). Use setConfig() to update. */
|
|
31
|
+
get config(): TConfig;
|
|
32
|
+
constructor(canvas: HTMLCanvasElement, locus: Locus, config: TConfig, canvasProvider?: CanvasProvider);
|
|
33
|
+
/** Update locus and re-render. */
|
|
34
|
+
setLocus(locus: Locus): void;
|
|
35
|
+
/** Merge partial config and re-render. */
|
|
36
|
+
setConfig(config: Partial<TConfig>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Attach the canvas to a container element.
|
|
39
|
+
* Appends the canvas and sets up a ResizeObserver for automatic re-renders.
|
|
40
|
+
*/
|
|
41
|
+
attachTo(container: HTMLElement): void;
|
|
42
|
+
/** Detach from container and stop observing resizes. */
|
|
43
|
+
detach(): void;
|
|
44
|
+
/** Render the track. Handles DPR, sizing, background, then delegates to doRender(). */
|
|
45
|
+
render(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Compute the track height in CSS pixels for the current state.
|
|
48
|
+
* Called at the start of each render(). The width parameter is provided
|
|
49
|
+
* in case height depends on layout (e.g., gene packing).
|
|
50
|
+
*/
|
|
51
|
+
protected abstract computeHeight(width: number): number;
|
|
52
|
+
/** Return the background fill color for the canvas. */
|
|
53
|
+
protected abstract getBackground(): string;
|
|
54
|
+
/** Perform the actual track-specific rendering onto the prepared canvas. */
|
|
55
|
+
protected abstract doRender(ctx: CanvasRenderingContext2D, width: number, height: number, rc: RenderContext): void;
|
|
56
|
+
/**
|
|
57
|
+
* Serialize this track's config for session save/restore.
|
|
58
|
+
* Each subclass diffs its config against theme defaults and returns
|
|
59
|
+
* a typed TrackSessionConfig with only overridden fields.
|
|
60
|
+
*/
|
|
61
|
+
abstract serializeConfig(theme: RenderTheme): TrackSessionConfig;
|
|
62
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary data parser for reading structured binary data from a DataView.
|
|
3
|
+
* Port of js/binary.ts, simplified for BigWig reading (no VPointer).
|
|
4
|
+
*/
|
|
5
|
+
export declare class BinaryParser {
|
|
6
|
+
littleEndian: boolean;
|
|
7
|
+
position: number;
|
|
8
|
+
readonly view: DataView;
|
|
9
|
+
readonly length: number;
|
|
10
|
+
constructor(dataView: DataView, littleEndian?: boolean);
|
|
11
|
+
setPosition(position: number): void;
|
|
12
|
+
available(): number;
|
|
13
|
+
remLength(): number;
|
|
14
|
+
getByte(): number;
|
|
15
|
+
getShort(): number;
|
|
16
|
+
getUShort(): number;
|
|
17
|
+
getInt(): number;
|
|
18
|
+
getUInt(): number;
|
|
19
|
+
getLong(): number;
|
|
20
|
+
getString(len?: number): string;
|
|
21
|
+
getFixedLengthString(len: number): string;
|
|
22
|
+
getFloat(): number;
|
|
23
|
+
getDouble(): number;
|
|
24
|
+
skip(n: number): number;
|
|
25
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* B+ tree implementation for BigWig/BigBed chromosome name lookup.
|
|
3
|
+
* Port of js/bigwig/bpTree.ts, simplified:
|
|
4
|
+
* - Only supports 'BPChromTree' type (for chromosome ID lookup)
|
|
5
|
+
* - Uses native fetch via rangeReader
|
|
6
|
+
* - Strict types, no `any`
|
|
7
|
+
*/
|
|
8
|
+
export interface ChromLeafValue {
|
|
9
|
+
id: number;
|
|
10
|
+
size: number;
|
|
11
|
+
}
|
|
12
|
+
interface LeafItem {
|
|
13
|
+
key: string;
|
|
14
|
+
value: ChromLeafValue;
|
|
15
|
+
}
|
|
16
|
+
interface NonLeafItem {
|
|
17
|
+
key: string;
|
|
18
|
+
offset: number;
|
|
19
|
+
}
|
|
20
|
+
type BPTreeItem = LeafItem | NonLeafItem;
|
|
21
|
+
interface BPTreeNode {
|
|
22
|
+
type: number;
|
|
23
|
+
count: number;
|
|
24
|
+
items: BPTreeItem[];
|
|
25
|
+
}
|
|
26
|
+
export declare class BPTree {
|
|
27
|
+
private littleEndian;
|
|
28
|
+
private readonly nodeCache;
|
|
29
|
+
private readonly url;
|
|
30
|
+
private header;
|
|
31
|
+
private readonly startOffset;
|
|
32
|
+
constructor(url: string, startOffset: number);
|
|
33
|
+
init(signal?: AbortSignal): Promise<void>;
|
|
34
|
+
getItemCount(): number;
|
|
35
|
+
search(term: string, signal?: AbortSignal): Promise<ChromLeafValue | undefined>;
|
|
36
|
+
private walkTreeNode;
|
|
37
|
+
readTreeNode(offset: number, signal?: AbortSignal): Promise<BPTreeNode>;
|
|
38
|
+
private getParserFor;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigWig file reader.
|
|
3
|
+
* Port of js/bigwig/bwReader.ts, simplified for BigWig only (no BigBed).
|
|
4
|
+
*
|
|
5
|
+
* Reads a BigWig file via HTTP range requests, parses the binary header,
|
|
6
|
+
* zoom level headers, total summary, chromosome tree, and data sections.
|
|
7
|
+
*/
|
|
8
|
+
import type { WigFeature, WindowFunction } from '../types';
|
|
9
|
+
import type { WorkerProvider } from '../workerProvider';
|
|
10
|
+
export interface BigWigHeader {
|
|
11
|
+
bwVersion: number;
|
|
12
|
+
nZoomLevels: number;
|
|
13
|
+
chromTreeOffset: number;
|
|
14
|
+
fullDataOffset: number;
|
|
15
|
+
fullIndexOffset: number;
|
|
16
|
+
fieldCount: number;
|
|
17
|
+
definedFieldCount: number;
|
|
18
|
+
autoSqlOffset: number;
|
|
19
|
+
totalSummaryOffset: number;
|
|
20
|
+
uncompressBuffSize: number;
|
|
21
|
+
extensionOffset: number;
|
|
22
|
+
}
|
|
23
|
+
export interface BigWigTotalSummary {
|
|
24
|
+
basesCovered: number;
|
|
25
|
+
minVal: number;
|
|
26
|
+
maxVal: number;
|
|
27
|
+
sumData: number;
|
|
28
|
+
sumSquares: number;
|
|
29
|
+
mean: number;
|
|
30
|
+
stddev: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class BigWigReader {
|
|
33
|
+
private readonly url;
|
|
34
|
+
private littleEndian;
|
|
35
|
+
private header;
|
|
36
|
+
private chromTree;
|
|
37
|
+
private zoomLevelHeaders;
|
|
38
|
+
private totalSummary;
|
|
39
|
+
private readonly rpTreeCache;
|
|
40
|
+
/** Optional worker provider for offloading CPU-intensive decode work. */
|
|
41
|
+
private readonly workerProvider?;
|
|
42
|
+
constructor(url: string, workerProvider?: WorkerProvider);
|
|
43
|
+
/** Load and parse the BigWig header. Idempotent. */
|
|
44
|
+
loadHeader(signal?: AbortSignal): Promise<BigWigHeader>;
|
|
45
|
+
/** Get the total summary statistics (if available). */
|
|
46
|
+
getTotalSummary(): Promise<BigWigTotalSummary | undefined>;
|
|
47
|
+
/**
|
|
48
|
+
* Read BigWig features for a genomic range.
|
|
49
|
+
*
|
|
50
|
+
* @param chr - Chromosome name (e.g., 'chr17')
|
|
51
|
+
* @param bpStart - Start position (0-based)
|
|
52
|
+
* @param bpEnd - End position
|
|
53
|
+
* @param bpPerPixel - Resolution (used to select zoom level)
|
|
54
|
+
* @param windowFunction - Aggregation function for zoom data ('mean', 'min', 'max')
|
|
55
|
+
*/
|
|
56
|
+
readFeatures(chr: string, bpStart: number, bpEnd: number, bpPerPixel?: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Read features across all main chromosomes for whole genome view.
|
|
59
|
+
* Resolves chromosome IDs, finds min/max range, and does a cross-chromosome R-tree query.
|
|
60
|
+
* Port of js/bigwig/bwReader.ts readWGFeatures().
|
|
61
|
+
*/
|
|
62
|
+
readWGFeatures(chromNames: string[], bpPerPixel: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Internal: read features for a range that may span multiple chromosomes.
|
|
65
|
+
*/
|
|
66
|
+
private readFeaturesRange;
|
|
67
|
+
private zoomLevelForScale;
|
|
68
|
+
private loadRPTree;
|
|
69
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chromosome name ↔ ID mapping backed by a B+ tree.
|
|
3
|
+
* Port of js/bigwig/chromTree.ts.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ChromTree {
|
|
6
|
+
private readonly nameToId;
|
|
7
|
+
private readonly idToName;
|
|
8
|
+
private readonly bpTree;
|
|
9
|
+
private readonly startOffset;
|
|
10
|
+
constructor(url: string, startOffset: number);
|
|
11
|
+
init(signal?: AbortSignal): Promise<void>;
|
|
12
|
+
getItemCount(): number;
|
|
13
|
+
/** Return the chromosome ID for the given name, or undefined if not found. */
|
|
14
|
+
getIdForName(chr: string, signal?: AbortSignal): Promise<number | undefined>;
|
|
15
|
+
/** Return all cached chromosome ID → name mappings. */
|
|
16
|
+
getAllNames(): Map<number, string>;
|
|
17
|
+
/**
|
|
18
|
+
* Pre-resolve a list of chromosome names to IDs, populating the cache.
|
|
19
|
+
* Returns a map of name → ID for successfully resolved chromosomes.
|
|
20
|
+
*/
|
|
21
|
+
resolveAll(names: string[], signal?: AbortSignal): Promise<Map<string, number>>;
|
|
22
|
+
/**
|
|
23
|
+
* Return the chromosome name for the given ID.
|
|
24
|
+
* Potentially expensive — walks the tree until the matching leaf is found.
|
|
25
|
+
*/
|
|
26
|
+
getNameForId(id: number, signal?: AbortSignal): Promise<string | undefined>;
|
|
27
|
+
private reverseSearch;
|
|
28
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigWig reader — public API.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around @gmod/bbi that preserves the existing public API.
|
|
5
|
+
* All binary parsing, decompression, and zoom level selection is handled
|
|
6
|
+
* by @gmod/bbi internally.
|
|
7
|
+
*/
|
|
8
|
+
import type { WigFeature, WindowFunction, Locus } from '../types';
|
|
9
|
+
import type { WorkerProvider } from '../workerProvider';
|
|
10
|
+
export { BinaryParser } from '../io/binaryParser';
|
|
11
|
+
export interface FetchBigWigOptions {
|
|
12
|
+
/** Resolution in base pairs per pixel. Used to select an appropriate zoom level. */
|
|
13
|
+
bpPerPixel?: number;
|
|
14
|
+
/** Aggregation function for zoom-level data. Default: 'mean'. */
|
|
15
|
+
windowFunction?: WindowFunction;
|
|
16
|
+
/** @deprecated Worker dispatch is handled internally by @gmod/bbi. */
|
|
17
|
+
workerProvider?: WorkerProvider;
|
|
18
|
+
/** AbortSignal for cancelling in-flight HTTP requests. */
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
}
|
|
21
|
+
/** Header metadata from a BigWig file. */
|
|
22
|
+
export interface BigWigHeader {
|
|
23
|
+
bwVersion: number;
|
|
24
|
+
nZoomLevels: number;
|
|
25
|
+
chromTreeOffset: number;
|
|
26
|
+
fullDataOffset: number;
|
|
27
|
+
fullIndexOffset: number;
|
|
28
|
+
fieldCount: number;
|
|
29
|
+
definedFieldCount: number;
|
|
30
|
+
autoSqlOffset: number;
|
|
31
|
+
totalSummaryOffset: number;
|
|
32
|
+
uncompressBuffSize: number;
|
|
33
|
+
extensionOffset: number;
|
|
34
|
+
}
|
|
35
|
+
/** Summary statistics for the entire BigWig file. */
|
|
36
|
+
export interface BigWigTotalSummary {
|
|
37
|
+
basesCovered: number;
|
|
38
|
+
minVal: number;
|
|
39
|
+
maxVal: number;
|
|
40
|
+
sumData: number;
|
|
41
|
+
sumSquares: number;
|
|
42
|
+
mean: number;
|
|
43
|
+
stddev: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Thin wrapper around @gmod/bbi BigWig that preserves the legacy API.
|
|
47
|
+
*/
|
|
48
|
+
export declare class BigWigReader {
|
|
49
|
+
private readonly bw;
|
|
50
|
+
constructor(url: string, _workerProvider?: WorkerProvider);
|
|
51
|
+
loadHeader(signal?: AbortSignal): Promise<BigWigHeader>;
|
|
52
|
+
getTotalSummary(signal?: AbortSignal): Promise<BigWigTotalSummary | undefined>;
|
|
53
|
+
readFeatures(chr: string, bpStart: number, bpEnd: number, bpPerPixel?: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
|
|
54
|
+
readWGFeatures(chromNames: string[], bpPerPixel: number, windowFunction?: WindowFunction, signal?: AbortSignal): Promise<WigFeature[]>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fetch BigWig features for a genomic locus.
|
|
58
|
+
*/
|
|
59
|
+
export declare function fetchBigWigFeatures(url: string, locus: Locus, options?: FetchBigWigOptions): Promise<WigFeature[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Fetch BigWig features across all specified chromosomes for whole genome view.
|
|
62
|
+
* Returns features with per-chromosome coordinates (caller transforms to genome-wide).
|
|
63
|
+
*/
|
|
64
|
+
export declare function fetchBigWigWGFeatures(url: string, chromNames: string[], bpPerPixel: number, options?: Pick<FetchBigWigOptions, 'windowFunction' | 'workerProvider' | 'signal'>): Promise<WigFeature[]>;
|
|
65
|
+
/** Clear the BigWig reader cache (useful for testing or memory management). */
|
|
66
|
+
export declare function clearBigWigCache(): void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zlib inflate (decompress) utility.
|
|
3
|
+
*
|
|
4
|
+
* Uses the Web Streams API DecompressionStream when available (all modern
|
|
5
|
+
* browsers), with a manual raw-deflate fallback for environments that only
|
|
6
|
+
* support 'deflate' format (the BigWig format stores raw deflate data without
|
|
7
|
+
* a zlib header, but some implementations add the header).
|
|
8
|
+
*/
|
|
9
|
+
export declare function inflate(compressedData: Uint8Array): Promise<Uint8Array>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP range request reader using native fetch.
|
|
3
|
+
* Replaces igvxhr + BufferedReader for BigWig file reading.
|
|
4
|
+
*
|
|
5
|
+
* Handles cross-origin 307/302 redirects that strip the Range header.
|
|
6
|
+
* When a redirect causes the server to return 200 (full content) instead of
|
|
7
|
+
* 206 (partial), we either retry against the final URL or slice the correct
|
|
8
|
+
* bytes from the full response — matching igvxhr behavior.
|
|
9
|
+
*/
|
|
10
|
+
export interface ByteRange {
|
|
11
|
+
start: number;
|
|
12
|
+
size: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Fetch a byte range from a URL as an ArrayBuffer.
|
|
16
|
+
*
|
|
17
|
+
* Handles two redirect failure modes:
|
|
18
|
+
* 1. Cross-origin redirect strips Range header → server returns 200 (full file).
|
|
19
|
+
* We retry directly against response.url (the final URL post-redirect).
|
|
20
|
+
* 2. If retry still returns 200, we slice the requested bytes from the full
|
|
21
|
+
* response (matching igvxhr's fallback behavior).
|
|
22
|
+
*
|
|
23
|
+
* On HTTP 416 (Range Not Satisfiable), fetches the actual file size via HEAD
|
|
24
|
+
* and retries once with a clamped range.
|
|
25
|
+
*/
|
|
26
|
+
export declare function fetchRange(url: string, range: ByteRange, signal?: AbortSignal): Promise<ArrayBuffer>;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch the Content-Length of a URL via a HEAD request.
|
|
29
|
+
* If redirected and Content-Length is missing, retries against the final URL.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getContentLength(url: string, signal?: AbortSignal): Promise<number>;
|
|
32
|
+
/**
|
|
33
|
+
* Buffered reader that caches fetched data to minimize HTTP requests.
|
|
34
|
+
* When a requested range is within the cached buffer, no fetch is needed.
|
|
35
|
+
*
|
|
36
|
+
* On HTTP 416, recovers by fetching the file's Content-Length and retrying,
|
|
37
|
+
* matching js/bigwig/bufferedReader.ts behavior.
|
|
38
|
+
*/
|
|
39
|
+
export declare class BufferedRangeReader {
|
|
40
|
+
private readonly url;
|
|
41
|
+
private readonly bufferSize;
|
|
42
|
+
private cachedRange;
|
|
43
|
+
private cachedData;
|
|
44
|
+
private contentLength;
|
|
45
|
+
constructor(url: string, bufferSize?: number);
|
|
46
|
+
dataViewForRange(requestedRange: ByteRange, signal?: AbortSignal, retries?: number): Promise<DataView>;
|
|
47
|
+
loadArrayBuffer(range: ByteRange, signal?: AbortSignal): Promise<ArrayBuffer>;
|
|
48
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R-tree implementation for BigWig spatial range queries.
|
|
3
|
+
* Port of js/bigwig/rpTree.ts.
|
|
4
|
+
*/
|
|
5
|
+
export interface RPTreeLeafItem {
|
|
6
|
+
isLeaf: boolean;
|
|
7
|
+
startChrom: number;
|
|
8
|
+
startBase: number;
|
|
9
|
+
endChrom: number;
|
|
10
|
+
endBase: number;
|
|
11
|
+
childOffset: number;
|
|
12
|
+
dataSize: number;
|
|
13
|
+
dataOffset: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class RPTree {
|
|
16
|
+
private littleEndian;
|
|
17
|
+
private readonly nodeCache;
|
|
18
|
+
private readonly url;
|
|
19
|
+
private readonly startOffset;
|
|
20
|
+
private header;
|
|
21
|
+
constructor(url: string, startOffset: number);
|
|
22
|
+
init(signal?: AbortSignal): Promise<void>;
|
|
23
|
+
/** Find all leaf items that overlap the given genomic range. */
|
|
24
|
+
findLeafItemsOverlapping(chrIdx1: number, startBase: number, chrIdx2: number, endBase: number, signal?: AbortSignal): Promise<RPTreeLeafItem[]>;
|
|
25
|
+
private readNode;
|
|
26
|
+
private getParserFor;
|
|
27
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CanvasProvider — environment abstraction for canvas creation and DPR.
|
|
3
|
+
*
|
|
4
|
+
* Decouples track rendering from browser globals (document, window).
|
|
5
|
+
* DOMCanvasProvider is the default for browser environments.
|
|
6
|
+
* Future: NodeCanvasProvider (wrapping node-canvas) for server-side rendering,
|
|
7
|
+
* MockCanvasProvider for tests.
|
|
8
|
+
*
|
|
9
|
+
* Reference: ai_docs/modernization/headless-v2.md (Phase 1)
|
|
10
|
+
*/
|
|
11
|
+
/** A canvas and its 2D rendering context, returned by CanvasProvider.createCanvas(). */
|
|
12
|
+
export interface CanvasAndContext {
|
|
13
|
+
canvas: HTMLCanvasElement;
|
|
14
|
+
ctx: CanvasRenderingContext2D;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Abstraction over canvas creation and device pixel ratio.
|
|
18
|
+
*
|
|
19
|
+
* Implementations:
|
|
20
|
+
* - DOMCanvasProvider — browser (default)
|
|
21
|
+
* - Future: NodeCanvasProvider — server-side (wraps node-canvas)
|
|
22
|
+
* - Future: MockCanvasProvider — tests
|
|
23
|
+
*/
|
|
24
|
+
export interface CanvasProvider {
|
|
25
|
+
/** Create a canvas element with the given logical (CSS) dimensions. */
|
|
26
|
+
createCanvas(width: number, height: number): CanvasAndContext;
|
|
27
|
+
/** Device pixel ratio for sharp rendering on high-DPI displays. */
|
|
28
|
+
readonly devicePixelRatio: number;
|
|
29
|
+
}
|
|
30
|
+
/** Browser-based CanvasProvider using DOM APIs. */
|
|
31
|
+
export declare class DOMCanvasProvider implements CanvasProvider {
|
|
32
|
+
createCanvas(width: number, height: number): CanvasAndContext;
|
|
33
|
+
get devicePixelRatio(): number;
|
|
34
|
+
}
|
|
35
|
+
/** Default CanvasProvider for browser environments. */
|
|
36
|
+
export declare const defaultCanvasProvider: CanvasProvider;
|