@jbrowse/plugin-alignments 2.1.7 → 2.2.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.
Files changed (226) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  3. package/dist/AlignmentsTrack/index.d.ts +1 -1
  4. package/dist/AlignmentsTrack/index.js +16 -6
  5. package/dist/AlignmentsTrack/index.js.map +1 -1
  6. package/dist/BamAdapter/BamAdapter.d.ts +7 -3
  7. package/dist/BamAdapter/BamAdapter.js +36 -31
  8. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.js +1 -0
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  11. package/dist/BamAdapter/MismatchParser.d.ts +2 -2
  12. package/dist/BamAdapter/MismatchParser.js +4 -7
  13. package/dist/BamAdapter/MismatchParser.js.map +1 -1
  14. package/dist/BamAdapter/configSchema.d.ts +2 -2
  15. package/dist/BamAdapter/configSchema.js +27 -2
  16. package/dist/BamAdapter/configSchema.js.map +1 -1
  17. package/dist/BamAdapter/index.js +7 -5
  18. package/dist/BamAdapter/index.js.map +1 -1
  19. package/dist/CramAdapter/CramAdapter.d.ts +13 -7
  20. package/dist/CramAdapter/CramAdapter.js +56 -61
  21. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  22. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +15 -23
  23. package/dist/CramAdapter/CramSlightlyLazyFeature.js +10 -217
  24. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  25. package/dist/CramAdapter/CramTestAdapters.d.ts +1 -1
  26. package/dist/CramAdapter/CramTestAdapters.js +1 -1
  27. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  28. package/dist/CramAdapter/configSchema.d.ts +2 -3
  29. package/dist/CramAdapter/configSchema.js +44 -22
  30. package/dist/CramAdapter/configSchema.js.map +1 -1
  31. package/dist/CramAdapter/index.js +7 -5
  32. package/dist/CramAdapter/index.js.map +1 -1
  33. package/dist/CramAdapter/util.d.ts +18 -0
  34. package/dist/CramAdapter/util.js +241 -0
  35. package/dist/CramAdapter/util.js.map +1 -0
  36. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +5 -2
  37. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +15 -20
  38. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -1
  39. package/dist/HtsgetBamAdapter/configSchema.d.ts +2 -2
  40. package/dist/HtsgetBamAdapter/configSchema.js +20 -3
  41. package/dist/HtsgetBamAdapter/configSchema.js.map +1 -1
  42. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
  43. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  44. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +2 -2
  45. package/dist/LinearAlignmentsDisplay/models/configSchema.js +23 -6
  46. package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
  47. package/dist/LinearAlignmentsDisplay/models/model.d.ts +77 -10
  48. package/dist/LinearAlignmentsDisplay/models/model.js +102 -9
  49. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  50. package/dist/LinearPileupDisplay/configSchema.d.ts +4 -4
  51. package/dist/LinearPileupDisplay/configSchema.js +22 -5
  52. package/dist/LinearPileupDisplay/configSchema.js.map +1 -1
  53. package/dist/LinearPileupDisplay/index.d.ts +3 -0
  54. package/dist/LinearPileupDisplay/index.js +3 -0
  55. package/dist/LinearPileupDisplay/index.js.map +1 -1
  56. package/dist/LinearPileupDisplay/model.d.ts +100 -6
  57. package/dist/LinearPileupDisplay/model.js +611 -503
  58. package/dist/LinearPileupDisplay/model.js.map +1 -1
  59. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  60. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +33 -4
  61. package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -1
  62. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +87 -4
  63. package/dist/LinearSNPCoverageDisplay/models/model.js +240 -159
  64. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  65. package/dist/PileupRPC/rpcMethods.d.ts +1 -1
  66. package/dist/PileupRPC/rpcMethods.js +12 -7
  67. package/dist/PileupRPC/rpcMethods.js.map +1 -1
  68. package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  69. package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
  70. package/dist/PileupRenderer/PileupRenderer.js +37 -34
  71. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  72. package/dist/PileupRenderer/configSchema.d.ts +2 -2
  73. package/dist/PileupRenderer/configSchema.js +37 -2
  74. package/dist/PileupRenderer/configSchema.js.map +1 -1
  75. package/dist/PileupRenderer/index.js +8 -6
  76. package/dist/PileupRenderer/index.js.map +1 -1
  77. package/dist/SNPCoverageAdapter/configSchema.d.ts +2 -3
  78. package/dist/SNPCoverageAdapter/configSchema.js +15 -4
  79. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -1
  80. package/dist/SNPCoverageAdapter/index.d.ts +1 -2
  81. package/dist/SNPCoverageAdapter/index.js +17 -14
  82. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  83. package/dist/SNPCoverageRenderer/configSchema.d.ts +2 -2
  84. package/dist/SNPCoverageRenderer/configSchema.js +21 -1
  85. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  86. package/dist/SNPCoverageRenderer/index.d.ts +0 -1
  87. package/dist/SNPCoverageRenderer/index.js +1 -4
  88. package/dist/SNPCoverageRenderer/index.js.map +1 -1
  89. package/dist/index.d.ts +3 -2
  90. package/dist/index.js +4 -2
  91. package/dist/index.js.map +1 -1
  92. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
  93. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  94. package/esm/AlignmentsTrack/index.d.ts +1 -1
  95. package/esm/AlignmentsTrack/index.js +16 -6
  96. package/esm/AlignmentsTrack/index.js.map +1 -1
  97. package/esm/BamAdapter/BamAdapter.d.ts +7 -3
  98. package/esm/BamAdapter/BamAdapter.js +36 -31
  99. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  100. package/esm/BamAdapter/BamSlightlyLazyFeature.js +1 -0
  101. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  102. package/esm/BamAdapter/MismatchParser.d.ts +2 -2
  103. package/esm/BamAdapter/MismatchParser.js +4 -7
  104. package/esm/BamAdapter/MismatchParser.js.map +1 -1
  105. package/esm/BamAdapter/configSchema.d.ts +2 -2
  106. package/esm/BamAdapter/configSchema.js +27 -2
  107. package/esm/BamAdapter/configSchema.js.map +1 -1
  108. package/esm/BamAdapter/index.js +7 -5
  109. package/esm/BamAdapter/index.js.map +1 -1
  110. package/esm/CramAdapter/CramAdapter.d.ts +13 -7
  111. package/esm/CramAdapter/CramAdapter.js +56 -61
  112. package/esm/CramAdapter/CramAdapter.js.map +1 -1
  113. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +15 -23
  114. package/esm/CramAdapter/CramSlightlyLazyFeature.js +10 -217
  115. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  116. package/esm/CramAdapter/CramTestAdapters.d.ts +1 -1
  117. package/esm/CramAdapter/CramTestAdapters.js +1 -1
  118. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  119. package/esm/CramAdapter/configSchema.d.ts +2 -3
  120. package/esm/CramAdapter/configSchema.js +44 -22
  121. package/esm/CramAdapter/configSchema.js.map +1 -1
  122. package/esm/CramAdapter/index.js +8 -6
  123. package/esm/CramAdapter/index.js.map +1 -1
  124. package/esm/CramAdapter/util.d.ts +18 -0
  125. package/esm/CramAdapter/util.js +236 -0
  126. package/esm/CramAdapter/util.js.map +1 -0
  127. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +5 -2
  128. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +15 -20
  129. package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -1
  130. package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -2
  131. package/esm/HtsgetBamAdapter/configSchema.js +20 -3
  132. package/esm/HtsgetBamAdapter/configSchema.js.map +1 -1
  133. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
  134. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  135. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +2 -2
  136. package/esm/LinearAlignmentsDisplay/models/configSchema.js +23 -6
  137. package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
  138. package/esm/LinearAlignmentsDisplay/models/model.d.ts +77 -10
  139. package/esm/LinearAlignmentsDisplay/models/model.js +102 -9
  140. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  141. package/esm/LinearPileupDisplay/configSchema.d.ts +4 -4
  142. package/esm/LinearPileupDisplay/configSchema.js +22 -5
  143. package/esm/LinearPileupDisplay/configSchema.js.map +1 -1
  144. package/esm/LinearPileupDisplay/index.d.ts +3 -0
  145. package/esm/LinearPileupDisplay/index.js +1 -0
  146. package/esm/LinearPileupDisplay/index.js.map +1 -1
  147. package/esm/LinearPileupDisplay/model.d.ts +100 -6
  148. package/esm/LinearPileupDisplay/model.js +611 -503
  149. package/esm/LinearPileupDisplay/model.js.map +1 -1
  150. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  151. package/esm/LinearSNPCoverageDisplay/models/configSchema.js +33 -4
  152. package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -1
  153. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +87 -4
  154. package/esm/LinearSNPCoverageDisplay/models/model.js +240 -159
  155. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  156. package/esm/PileupRPC/rpcMethods.d.ts +1 -1
  157. package/esm/PileupRPC/rpcMethods.js +12 -7
  158. package/esm/PileupRPC/rpcMethods.js.map +1 -1
  159. package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  160. package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
  161. package/esm/PileupRenderer/PileupRenderer.js +37 -34
  162. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  163. package/esm/PileupRenderer/configSchema.d.ts +2 -2
  164. package/esm/PileupRenderer/configSchema.js +37 -2
  165. package/esm/PileupRenderer/configSchema.js.map +1 -1
  166. package/esm/PileupRenderer/index.js +8 -6
  167. package/esm/PileupRenderer/index.js.map +1 -1
  168. package/esm/SNPCoverageAdapter/configSchema.d.ts +2 -3
  169. package/esm/SNPCoverageAdapter/configSchema.js +15 -4
  170. package/esm/SNPCoverageAdapter/configSchema.js.map +1 -1
  171. package/esm/SNPCoverageAdapter/index.d.ts +1 -2
  172. package/esm/SNPCoverageAdapter/index.js +17 -15
  173. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  174. package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -2
  175. package/esm/SNPCoverageRenderer/configSchema.js +21 -1
  176. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
  177. package/esm/SNPCoverageRenderer/index.d.ts +0 -1
  178. package/esm/SNPCoverageRenderer/index.js +1 -3
  179. package/esm/SNPCoverageRenderer/index.js.map +1 -1
  180. package/esm/index.d.ts +3 -2
  181. package/esm/index.js +2 -2
  182. package/esm/index.js.map +1 -1
  183. package/package.json +4 -3
  184. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +17 -16
  185. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +41 -513
  186. package/src/AlignmentsFeatureDetail/index.test.js +6 -4
  187. package/src/AlignmentsTrack/index.ts +18 -12
  188. package/src/BamAdapter/BamAdapter.ts +42 -41
  189. package/src/BamAdapter/BamSlightlyLazyFeature.ts +2 -1
  190. package/src/BamAdapter/MismatchParser.test.ts +21 -12
  191. package/src/BamAdapter/MismatchParser.ts +7 -10
  192. package/src/BamAdapter/__snapshots__/BamAdapter.test.ts.snap +135 -135
  193. package/src/BamAdapter/configSchema.ts +57 -29
  194. package/src/BamAdapter/index.ts +7 -8
  195. package/src/CombinationTest.test.ts +107 -0
  196. package/src/CramAdapter/CramAdapter.test.ts +1 -2
  197. package/src/CramAdapter/CramAdapter.ts +83 -84
  198. package/src/CramAdapter/CramSlightlyLazyFeature.ts +18 -218
  199. package/src/CramAdapter/CramTestAdapters.ts +1 -1
  200. package/src/CramAdapter/__snapshots__/CramAdapter.test.ts.snap +31 -31
  201. package/src/CramAdapter/__snapshots__/util.test.ts.snap +14 -0
  202. package/src/CramAdapter/configSchema.ts +54 -30
  203. package/src/CramAdapter/index.ts +8 -9
  204. package/src/CramAdapter/util.test.ts +26 -0
  205. package/src/CramAdapter/util.ts +251 -0
  206. package/src/HtsgetBamAdapter/HtsgetBamAdapter.ts +14 -21
  207. package/src/HtsgetBamAdapter/configSchema.ts +36 -19
  208. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -1
  209. package/src/LinearAlignmentsDisplay/models/configSchema.ts +23 -10
  210. package/src/LinearAlignmentsDisplay/models/model.tsx +107 -11
  211. package/src/LinearPileupDisplay/configSchema.ts +25 -9
  212. package/src/LinearPileupDisplay/index.ts +5 -0
  213. package/src/LinearPileupDisplay/model.ts +151 -34
  214. package/src/LinearSNPCoverageDisplay/models/configSchema.ts +36 -9
  215. package/src/LinearSNPCoverageDisplay/models/model.ts +83 -4
  216. package/src/PileupRPC/rpcMethods.ts +15 -20
  217. package/src/PileupRenderer/{PileupRenderer.tsx → PileupRenderer.ts} +53 -63
  218. package/src/PileupRenderer/configSchema.ts +39 -2
  219. package/src/PileupRenderer/index.ts +8 -9
  220. package/src/SNPCoverageAdapter/configSchema.ts +21 -12
  221. package/src/SNPCoverageAdapter/index.ts +17 -18
  222. package/src/SNPCoverageRenderer/configSchema.ts +23 -1
  223. package/src/SNPCoverageRenderer/index.ts +1 -8
  224. package/src/__snapshots__/index.test.ts.snap +1 -1
  225. package/src/index.ts +11 -4
  226. package/src/declare.d.ts +0 -1
@@ -11,14 +11,16 @@ test('open up a widget', () => {
11
11
  const pluginManager = new PluginManager([])
12
12
 
13
13
  const Session = types.model({
14
- pluginManager: types.optional(types.frozen(), {}),
15
14
  rpcManager: types.optional(types.frozen(), {}),
16
15
  configuration: ConfigurationSchema('test', {}),
17
16
  widget: stateModelFactory(pluginManager),
18
17
  })
19
- const session = Session.create({
20
- widget: { type: 'AlignmentsFeatureWidget' },
21
- })
18
+ const session = Session.create(
19
+ {
20
+ widget: { type: 'AlignmentsFeatureWidget' },
21
+ },
22
+ { pluginManager },
23
+ )
22
24
  session.widget.setFeatureData({
23
25
  seq: 'TTGTTGCGGAGTTGAACAACGGCATTAGGAACACTTCCGTCTCTCACTTTTATACGATTATGATTGGTTCTTTAGCCTTGGTTTAGATTGGTAGTAGTAG',
24
26
  start: 2,
@@ -5,28 +5,34 @@ import {
5
5
  createBaseTrackConfig,
6
6
  createBaseTrackModel,
7
7
  } from '@jbrowse/core/pluggableElementTypes/models'
8
+
9
+ /**
10
+ * #config AlignmentsTrack
11
+ * has very little config; most config and state logic is on the display
12
+ */
13
+ function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
14
+
8
15
  function configSchemaFactory(pluginManager: PluginManager) {
9
16
  return ConfigurationSchema(
10
17
  'AlignmentsTrack',
11
18
  {},
12
- { baseConfiguration: createBaseTrackConfig(pluginManager) },
19
+ {
20
+ /**
21
+ * #baseConfiguration
22
+ */
23
+ baseConfiguration: createBaseTrackConfig(pluginManager),
24
+ },
13
25
  )
14
26
  }
15
- export default function register(pluginManager: PluginManager) {
16
- pluginManager.addTrackType(() => {
17
- const configSchema = configSchemaFactory(pluginManager)
27
+ export default function register(pm: PluginManager) {
28
+ pm.addTrackType(() => {
29
+ const configSchema = configSchemaFactory(pm)
18
30
  const track = new TrackType({
19
31
  name: 'AlignmentsTrack',
20
32
  configSchema,
21
- stateModel: createBaseTrackModel(
22
- pluginManager,
23
- 'AlignmentsTrack',
24
- configSchema,
25
- ),
33
+ stateModel: createBaseTrackModel(pm, 'AlignmentsTrack', configSchema),
26
34
  })
27
- const linearAlignmentsDisplay = pluginManager.getDisplayType(
28
- 'LinearAlignmentsDisplay',
29
- )
35
+ const linearAlignmentsDisplay = pm.getDisplayType('LinearAlignmentsDisplay')
30
36
  // Add LinearAlignmentsDisplay here so that it has priority over the other
31
37
  // linear displays (defaults to order the displays are added, but we have
32
38
  // to add the Pileup and SNPCoverage displays first).
@@ -4,12 +4,12 @@ import {
4
4
  BaseOptions,
5
5
  } from '@jbrowse/core/data_adapters/BaseAdapter'
6
6
  import { Region } from '@jbrowse/core/util/types'
7
- import { bytesForRegions, updateStatus } from '@jbrowse/core/util'
7
+ import { bytesForRegions, updateStatus, Feature } from '@jbrowse/core/util'
8
8
  import { openLocation } from '@jbrowse/core/util/io'
9
9
  import { ObservableCreate } from '@jbrowse/core/util/rxjs'
10
- import { Feature } from '@jbrowse/core/util/simpleFeature'
11
10
  import { toArray } from 'rxjs/operators'
12
- import { readConfObject } from '@jbrowse/core/configuration'
11
+
12
+ // locals
13
13
  import BamSlightlyLazyFeature from './BamSlightlyLazyFeature'
14
14
 
15
15
  interface Header {
@@ -21,51 +21,52 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
21
21
  private samHeader?: Header
22
22
 
23
23
  private setupP?: Promise<Header>
24
-
25
- protected configured?: Promise<{
24
+ private configureP?: Promise<{
26
25
  bam: BamFile
27
26
  sequenceAdapter?: BaseFeatureDataAdapter
28
27
  }>
29
28
 
30
29
  // derived classes may not use the same configuration so a custom
31
30
  // configure method allows derived classes to override this behavior
32
- protected async configure() {
33
- if (!this.configured) {
34
- const bamLocation = readConfObject(this.config, 'bamLocation')
35
- const location = readConfObject(this.config, ['index', 'location'])
36
- const indexType = readConfObject(this.config, ['index', 'indexType'])
37
- const bam = new BamFile({
38
- bamFilehandle: openLocation(bamLocation, this.pluginManager),
39
- csiFilehandle:
40
- indexType === 'CSI'
41
- ? openLocation(location, this.pluginManager)
42
- : undefined,
43
- baiFilehandle:
44
- indexType !== 'CSI'
45
- ? openLocation(location, this.pluginManager)
46
- : undefined,
47
-
48
- // chunkSizeLimit and fetchSizeLimit are more troublesome than
49
- // helpful, and have given overly large values on the ultra long
50
- // nanopore reads even with 500MB limits, so disabled with infinity
51
- chunkSizeLimit: Infinity,
52
- fetchSizeLimit: Infinity,
53
- yieldThreadTime: Infinity,
54
- })
31
+ protected async configurePre() {
32
+ const bamLocation = this.getConf('bamLocation')
33
+ const location = this.getConf(['index', 'location'])
34
+ const indexType = this.getConf(['index', 'indexType'])
35
+ const pm = this.pluginManager
36
+ const csi = indexType === 'CSI'
37
+ const bam = new BamFile({
38
+ bamFilehandle: openLocation(bamLocation, pm),
39
+ csiFilehandle: csi ? openLocation(location, pm) : undefined,
40
+ baiFilehandle: !csi ? openLocation(location, pm) : undefined,
41
+
42
+ // chunkSizeLimit and fetchSizeLimit are more troublesome than
43
+ // helpful, and have given overly large values on the ultra long
44
+ // nanopore reads even with 500MB limits, so disabled with infinity
45
+ chunkSizeLimit: Infinity,
46
+ fetchSizeLimit: Infinity,
47
+ yieldThreadTime: Infinity,
48
+ })
55
49
 
56
- const adapterConfig = readConfObject(this.config, 'sequenceAdapter')
57
- if (adapterConfig && this.getSubAdapter) {
58
- this.configured = this.getSubAdapter(adapterConfig).then(
59
- ({ dataAdapter }) => ({
60
- bam,
61
- sequenceAdapter: dataAdapter as BaseFeatureDataAdapter,
62
- }),
63
- )
64
- } else {
65
- this.configured = Promise.resolve({ bam })
50
+ const adapterConfig = this.getConf('sequenceAdapter')
51
+ if (adapterConfig && this.getSubAdapter) {
52
+ const { dataAdapter } = await this.getSubAdapter(adapterConfig)
53
+ return {
54
+ bam,
55
+ sequenceAdapter: dataAdapter as BaseFeatureDataAdapter,
66
56
  }
57
+ } else {
58
+ return { bam }
59
+ }
60
+ }
61
+
62
+ protected async configure() {
63
+ if (!this.configureP) {
64
+ this.configureP = this.configurePre().catch(e => {
65
+ this.configureP = undefined
66
+ throw e
67
+ })
67
68
  }
68
- return this.configured
69
+ return this.configureP
69
70
  }
70
71
 
71
72
  async getHeader(opts?: BaseOptions) {
@@ -231,7 +232,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
231
232
  // @ts-ignore
232
233
  if (bam.index.filehandle !== '?') {
233
234
  const bytes = await bytesForRegions(regions, bam)
234
- const fetchSizeLimit = readConfObject(this.config, 'fetchSizeLimit')
235
+ const fetchSizeLimit = this.getConf('fetchSizeLimit')
235
236
  return { bytes, fetchSizeLimit }
236
237
  } else {
237
238
  return super.estimateRegionsStats(regions, opts)
@@ -241,7 +242,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
241
242
  freeResources(/* { region } */): void {}
242
243
 
243
244
  // depends on setup being called before the BAM constructor
244
- refIdToName(refId: number): string | undefined {
245
+ refIdToName(refId: number) {
245
246
  return this.samHeader?.idToName[refId]
246
247
  }
247
248
  }
@@ -4,8 +4,9 @@ import {
4
4
  SimpleFeatureSerialized,
5
5
  } from '@jbrowse/core/util/simpleFeature'
6
6
  import { BamRecord } from '@gmod/bam'
7
- import { getMismatches } from './MismatchParser'
8
7
 
8
+ // locals
9
+ import { getMismatches } from './MismatchParser'
9
10
  import BamAdapter from './BamAdapter'
10
11
 
11
12
  export default class BamSlightlyLazyFeature implements Feature {
@@ -139,79 +139,88 @@ test('more skip', () => {
139
139
  (a, b) => a.start - b.start,
140
140
  ),
141
141
  ).toMatchInlineSnapshot(`
142
- Array [
143
- Object {
142
+ [
143
+ {
144
144
  "altbase": "G",
145
145
  "base": "A",
146
146
  "length": 1,
147
+ "qual": undefined,
147
148
  "start": 6,
148
149
  "type": "mismatch",
149
150
  },
150
- Object {
151
+ {
151
152
  "altbase": "C",
152
153
  "base": "A",
153
154
  "length": 1,
155
+ "qual": undefined,
154
156
  "start": 11,
155
157
  "type": "mismatch",
156
158
  },
157
- Object {
159
+ {
158
160
  "base": "1",
159
161
  "length": 0,
160
162
  "start": 31,
161
163
  "type": "insertion",
162
164
  },
163
- Object {
165
+ {
164
166
  "altbase": "G",
165
167
  "base": "C",
166
168
  "length": 1,
169
+ "qual": undefined,
167
170
  "start": 32,
168
171
  "type": "mismatch",
169
172
  },
170
- Object {
173
+ {
171
174
  "altbase": "A",
172
175
  "base": "C",
173
176
  "length": 1,
177
+ "qual": undefined,
174
178
  "start": 34,
175
179
  "type": "mismatch",
176
180
  },
177
- Object {
181
+ {
178
182
  "altbase": "C",
179
183
  "base": "C",
180
184
  "length": 1,
185
+ "qual": undefined,
181
186
  "start": 40,
182
187
  "type": "mismatch",
183
188
  },
184
- Object {
189
+ {
185
190
  "altbase": "A",
186
191
  "base": "C",
187
192
  "length": 1,
193
+ "qual": undefined,
188
194
  "start": 46,
189
195
  "type": "mismatch",
190
196
  },
191
- Object {
197
+ {
192
198
  "base": "*",
193
199
  "length": 1,
194
200
  "start": 48,
195
201
  "type": "deletion",
196
202
  },
197
- Object {
203
+ {
198
204
  "altbase": "A",
199
205
  "base": "G",
200
206
  "length": 1,
207
+ "qual": undefined,
201
208
  "start": 52,
202
209
  "type": "mismatch",
203
210
  },
204
- Object {
211
+ {
205
212
  "altbase": "G",
206
213
  "base": "G",
207
214
  "length": 1,
215
+ "qual": undefined,
208
216
  "start": 68,
209
217
  "type": "mismatch",
210
218
  },
211
- Object {
219
+ {
212
220
  "altbase": "G",
213
221
  "base": "G",
214
222
  "length": 1,
223
+ "qual": undefined,
215
224
  "start": 70,
216
225
  "type": "mismatch",
217
226
  },
@@ -16,7 +16,7 @@ export function parseCigar(cigar = '') {
16
16
  }
17
17
  export function cigarToMismatches(
18
18
  ops: string[],
19
- seq: string,
19
+ seq?: string,
20
20
  ref?: string,
21
21
  qual?: Buffer,
22
22
  ): Mismatch[] {
@@ -70,7 +70,7 @@ export function cigarToMismatches(
70
70
  length: len,
71
71
  })
72
72
  } else if (op === 'X') {
73
- const r = seq.slice(soffset, soffset + len)
73
+ const r = seq?.slice(soffset, soffset + len) || []
74
74
  const q = qual?.slice(soffset, soffset + len) || []
75
75
 
76
76
  for (let j = 0; j < len; j++) {
@@ -195,10 +195,7 @@ export function mdToMismatches(
195
195
  }
196
196
  const s = getTemplateCoordLocal(curr.start)
197
197
  curr.base = seq[s] || 'X'
198
- const qualScore = qual?.[s]
199
- if (qualScore) {
200
- curr.qual = qualScore
201
- }
198
+ curr.qual = qual?.[s]
202
199
  curr.altbase = token
203
200
  nextRecord()
204
201
  }
@@ -209,8 +206,8 @@ export function mdToMismatches(
209
206
 
210
207
  export function getMismatches(
211
208
  cigar: string,
212
- md: string,
213
- seq: string,
209
+ md?: string,
210
+ seq?: string,
214
211
  ref?: string,
215
212
  qual?: Buffer,
216
213
  ): Mismatch[] {
@@ -223,7 +220,7 @@ export function getMismatches(
223
220
  }
224
221
 
225
222
  // now let's look for CRAM or MD mismatches
226
- if (md) {
223
+ if (md && seq) {
227
224
  mismatches = mismatches.concat(
228
225
  mdToMismatches(md, ops, mismatches, seq, qual),
229
226
  )
@@ -332,7 +329,7 @@ export function getModificationTypes(mm: string) {
332
329
 
333
330
  const matches = basemod.match(modificationRegex)
334
331
  if (!matches) {
335
- throw new Error('bad format for MM tag')
332
+ throw new Error(`bad format for MM tag: ${mm}`)
336
333
  }
337
334
  const [, , , typestr] = matches
338
335