@jbrowse/plugin-alignments 3.6.5 → 3.7.0

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 (241) hide show
  1. package/dist/AlignmentsFeatureDetail/stateModelFactory.d.ts +4 -4
  2. package/dist/CramAdapter/CramAdapter.js +1 -1
  3. package/dist/CramAdapter/CramSlightlyLazyFeature.js +8 -7
  4. package/dist/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
  5. package/dist/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
  6. package/dist/CramAdapter/readFeaturesToMismatches.js +106 -0
  7. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
  8. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
  9. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
  10. package/dist/LinearPileupDisplay/components/GroupByDialog.js +4 -4
  11. package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
  12. package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.js +39 -0
  13. package/dist/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
  14. package/dist/LinearPileupDisplay/doAfterAttach.js +3 -2
  15. package/dist/LinearPileupDisplay/model.d.ts +20 -2
  16. package/dist/LinearPileupDisplay/model.js +39 -4
  17. package/dist/LinearReadArcsDisplay/index.js +1 -1
  18. package/dist/LinearReadArcsDisplay/model.d.ts +23 -30
  19. package/dist/LinearReadArcsDisplay/model.js +5 -86
  20. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +84 -2
  21. package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
  22. package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +26 -0
  23. package/dist/LinearReadCloudDisplay/configSchema.d.ts +7 -0
  24. package/dist/LinearReadCloudDisplay/configSchema.js +5 -0
  25. package/dist/LinearReadCloudDisplay/drawFeatsAbstract.js +13 -0
  26. package/dist/LinearReadCloudDisplay/drawFeatsCloud.js +24 -0
  27. package/dist/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
  28. package/dist/LinearReadCloudDisplay/drawFeatsCommon.js +198 -0
  29. package/dist/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
  30. package/dist/LinearReadCloudDisplay/drawFeatsStack.js +36 -0
  31. package/dist/LinearReadCloudDisplay/index.js +1 -1
  32. package/dist/LinearReadCloudDisplay/model.d.ts +51 -31
  33. package/dist/LinearReadCloudDisplay/model.js +93 -78
  34. package/dist/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
  35. package/dist/LinearSNPCoverageDisplay/components/TooltipContents.js +148 -19
  36. package/dist/LinearSNPCoverageDisplay/model.js +14 -3
  37. package/dist/MismatchParser/cigarToMismatches.js +1 -0
  38. package/dist/ModificationParser/detectSimplexModifications.d.ts +4 -0
  39. package/dist/ModificationParser/detectSimplexModifications.js +20 -0
  40. package/dist/ModificationParser/getModPositions.d.ts +1 -1
  41. package/dist/ModificationParser/getModPositions.js +13 -16
  42. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
  43. package/dist/PileupRPC/methods/GetVisibleModifications.js +16 -3
  44. package/dist/PileupRenderer/PileupRenderer.d.ts +6 -1
  45. package/dist/PileupRenderer/PileupRenderer.js +11 -14
  46. package/dist/PileupRenderer/components/PileupRendering.d.ts +8 -15
  47. package/dist/PileupRenderer/components/PileupRendering.js +18 -2
  48. package/dist/PileupRenderer/makeImageData.d.ts +5 -2
  49. package/dist/PileupRenderer/makeImageData.js +37 -6
  50. package/dist/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
  51. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
  52. package/dist/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
  53. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
  54. package/dist/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
  55. package/dist/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
  56. package/dist/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
  57. package/dist/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
  58. package/dist/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
  59. package/dist/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
  60. package/dist/PileupRenderer/renderers/renderModifications.js +84 -0
  61. package/dist/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
  62. package/dist/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
  63. package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
  64. package/dist/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
  65. package/dist/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
  66. package/dist/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
  67. package/dist/PileupRenderer/types.d.ts +6 -0
  68. package/dist/SNPCoverageAdapter/generateCoverageBins.js +5 -4
  69. package/dist/SNPCoverageAdapter/processModifications.js +14 -4
  70. package/dist/SNPCoverageRenderer/makeImage.js +44 -33
  71. package/dist/SNPCoverageRenderer/types.d.ts +1 -0
  72. package/dist/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
  73. package/dist/shared/LinearReadDisplayBaseMixin.js +50 -0
  74. package/dist/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
  75. package/dist/shared/LinearReadDisplayWithLayoutMixin.js +24 -0
  76. package/dist/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
  77. package/dist/shared/LinearReadDisplayWithPairFiltersMixin.js +27 -0
  78. package/dist/shared/afterAttach.js +3 -2
  79. package/dist/shared/chainToSimpleFeature.d.ts +3 -0
  80. package/dist/shared/chainToSimpleFeature.js +43 -0
  81. package/dist/shared/chevron.d.ts +1 -0
  82. package/dist/shared/chevron.js +27 -0
  83. package/dist/shared/color.d.ts +43 -6
  84. package/dist/shared/color.js +101 -22
  85. package/dist/shared/components/BaseDisplayComponent.d.ts +12 -3
  86. package/dist/shared/components/BaseDisplayComponent.js +2 -2
  87. package/dist/shared/components/SetFeatureHeightDialog.d.ts +10 -0
  88. package/dist/shared/components/SetFeatureHeightDialog.js +26 -0
  89. package/dist/shared/components/SetMaxHeightDialog.d.ts +8 -0
  90. package/dist/shared/components/SetMaxHeightDialog.js +28 -0
  91. package/dist/shared/drawLongReadChains.d.ts +24 -0
  92. package/dist/shared/drawLongReadChains.js +104 -0
  93. package/dist/shared/drawPairChains.d.ts +24 -0
  94. package/dist/shared/drawPairChains.js +94 -0
  95. package/dist/shared/flatbushType.d.ts +12 -0
  96. package/dist/shared/flatbushType.js +2 -0
  97. package/dist/shared/getUniqueModifications.d.ts +4 -1
  98. package/dist/shared/menuItems.d.ts +23 -0
  99. package/dist/shared/menuItems.js +89 -0
  100. package/dist/shared/modificationData.d.ts +6 -0
  101. package/dist/shared/modificationData.js +22 -0
  102. package/dist/shared/primaryStrand.d.ts +3 -0
  103. package/dist/shared/primaryStrand.js +24 -0
  104. package/dist/shared/types.d.ts +2 -0
  105. package/dist/shared/util.d.ts +2 -0
  106. package/dist/shared/util.js +6 -1
  107. package/dist/util.d.ts +1 -6
  108. package/dist/util.js +4 -15
  109. package/esm/AlignmentsFeatureDetail/stateModelFactory.d.ts +4 -4
  110. package/esm/CramAdapter/CramAdapter.js +1 -1
  111. package/esm/CramAdapter/CramSlightlyLazyFeature.js +2 -1
  112. package/esm/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
  113. package/esm/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
  114. package/esm/CramAdapter/readFeaturesToMismatches.js +103 -0
  115. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
  116. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
  117. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
  118. package/esm/LinearPileupDisplay/components/GroupByDialog.js +4 -4
  119. package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
  120. package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.js +37 -0
  121. package/esm/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
  122. package/esm/LinearPileupDisplay/doAfterAttach.js +3 -2
  123. package/esm/LinearPileupDisplay/model.d.ts +20 -2
  124. package/esm/LinearPileupDisplay/model.js +39 -4
  125. package/esm/LinearReadArcsDisplay/index.js +1 -1
  126. package/esm/LinearReadArcsDisplay/model.d.ts +23 -30
  127. package/esm/LinearReadArcsDisplay/model.js +5 -83
  128. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +86 -4
  129. package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
  130. package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +24 -0
  131. package/esm/LinearReadCloudDisplay/configSchema.d.ts +7 -0
  132. package/esm/LinearReadCloudDisplay/configSchema.js +5 -0
  133. package/esm/LinearReadCloudDisplay/drawFeatsAbstract.d.ts +2 -0
  134. package/esm/LinearReadCloudDisplay/drawFeatsAbstract.js +10 -0
  135. package/esm/LinearReadCloudDisplay/drawFeatsCloud.d.ts +2 -0
  136. package/esm/LinearReadCloudDisplay/drawFeatsCloud.js +21 -0
  137. package/esm/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
  138. package/esm/LinearReadCloudDisplay/drawFeatsCommon.js +187 -0
  139. package/esm/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
  140. package/esm/LinearReadCloudDisplay/drawFeatsStack.js +30 -0
  141. package/esm/LinearReadCloudDisplay/index.js +1 -1
  142. package/esm/LinearReadCloudDisplay/model.d.ts +51 -31
  143. package/esm/LinearReadCloudDisplay/model.js +94 -76
  144. package/esm/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
  145. package/esm/LinearSNPCoverageDisplay/components/TooltipContents.js +149 -20
  146. package/esm/LinearSNPCoverageDisplay/model.js +14 -3
  147. package/esm/MismatchParser/cigarToMismatches.js +1 -0
  148. package/esm/ModificationParser/detectSimplexModifications.d.ts +4 -0
  149. package/esm/ModificationParser/detectSimplexModifications.js +17 -0
  150. package/esm/ModificationParser/getModPositions.d.ts +1 -1
  151. package/esm/ModificationParser/getModPositions.js +13 -16
  152. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
  153. package/esm/PileupRPC/methods/GetVisibleModifications.js +16 -3
  154. package/esm/PileupRenderer/PileupRenderer.d.ts +6 -1
  155. package/esm/PileupRenderer/PileupRenderer.js +11 -14
  156. package/esm/PileupRenderer/components/PileupRendering.d.ts +8 -15
  157. package/esm/PileupRenderer/components/PileupRendering.js +16 -3
  158. package/esm/PileupRenderer/makeImageData.d.ts +5 -2
  159. package/esm/PileupRenderer/makeImageData.js +34 -6
  160. package/esm/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
  161. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
  162. package/esm/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
  163. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
  164. package/esm/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
  165. package/esm/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
  166. package/esm/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
  167. package/esm/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
  168. package/esm/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
  169. package/esm/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
  170. package/esm/PileupRenderer/renderers/renderModifications.js +81 -0
  171. package/esm/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
  172. package/esm/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
  173. package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
  174. package/esm/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
  175. package/esm/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
  176. package/esm/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
  177. package/esm/PileupRenderer/types.d.ts +6 -0
  178. package/esm/SNPCoverageAdapter/generateCoverageBins.js +5 -4
  179. package/esm/SNPCoverageAdapter/processModifications.js +14 -4
  180. package/esm/SNPCoverageRenderer/makeImage.js +44 -33
  181. package/esm/SNPCoverageRenderer/types.d.ts +1 -0
  182. package/esm/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
  183. package/esm/shared/LinearReadDisplayBaseMixin.js +47 -0
  184. package/esm/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
  185. package/esm/shared/LinearReadDisplayWithLayoutMixin.js +21 -0
  186. package/esm/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
  187. package/esm/shared/LinearReadDisplayWithPairFiltersMixin.js +24 -0
  188. package/esm/shared/afterAttach.js +3 -2
  189. package/esm/shared/chainToSimpleFeature.d.ts +3 -0
  190. package/esm/shared/chainToSimpleFeature.js +40 -0
  191. package/esm/shared/chevron.d.ts +1 -0
  192. package/esm/shared/chevron.js +24 -0
  193. package/esm/shared/color.d.ts +43 -6
  194. package/esm/shared/color.js +96 -20
  195. package/esm/shared/components/BaseDisplayComponent.d.ts +12 -3
  196. package/esm/shared/components/BaseDisplayComponent.js +2 -2
  197. package/esm/shared/components/SetFeatureHeightDialog.d.ts +10 -0
  198. package/esm/shared/components/SetFeatureHeightDialog.js +24 -0
  199. package/esm/shared/components/SetMaxHeightDialog.d.ts +8 -0
  200. package/esm/shared/components/SetMaxHeightDialog.js +26 -0
  201. package/esm/shared/drawLongReadChains.d.ts +24 -0
  202. package/esm/shared/drawLongReadChains.js +101 -0
  203. package/esm/shared/drawPairChains.d.ts +24 -0
  204. package/esm/shared/drawPairChains.js +91 -0
  205. package/esm/shared/flatbushType.d.ts +12 -0
  206. package/esm/shared/flatbushType.js +1 -0
  207. package/esm/shared/getUniqueModifications.d.ts +4 -1
  208. package/esm/shared/menuItems.d.ts +23 -0
  209. package/esm/shared/menuItems.js +49 -0
  210. package/esm/shared/modificationData.d.ts +6 -0
  211. package/esm/shared/modificationData.js +18 -0
  212. package/esm/shared/primaryStrand.d.ts +3 -0
  213. package/esm/shared/primaryStrand.js +20 -0
  214. package/esm/shared/types.d.ts +2 -0
  215. package/esm/shared/util.d.ts +2 -0
  216. package/esm/shared/util.js +4 -0
  217. package/esm/util.d.ts +1 -6
  218. package/esm/util.js +2 -14
  219. package/package.json +6 -6
  220. package/dist/LinearReadCloudDisplay/drawFeats.js +0 -27
  221. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
  222. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +0 -64
  223. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
  224. package/dist/LinearReadCloudDisplay/drawPairChains.js +0 -94
  225. package/dist/PileupRenderer/renderModifications.js +0 -44
  226. package/esm/LinearReadCloudDisplay/drawFeats.js +0 -24
  227. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
  228. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +0 -61
  229. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
  230. package/esm/LinearReadCloudDisplay/drawPairChains.js +0 -90
  231. package/esm/PileupRenderer/renderModifications.js +0 -41
  232. /package/dist/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
  233. /package/dist/LinearReadCloudDisplay/{drawFeats.d.ts → drawFeatsAbstract.d.ts} +0 -0
  234. /package/{esm/LinearReadCloudDisplay/drawFeats.d.ts → dist/LinearReadCloudDisplay/drawFeatsCloud.d.ts} +0 -0
  235. /package/dist/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
  236. /package/dist/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
  237. /package/dist/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
  238. /package/esm/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
  239. /package/esm/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
  240. /package/esm/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
  241. /package/esm/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.drawLongReadChains = drawLongReadChains;
4
+ const canvasUtils_1 = require("./canvasUtils");
5
+ const chevron_1 = require("./chevron");
6
+ const color_1 = require("./color");
7
+ const primaryStrand_1 = require("./primaryStrand");
8
+ const util_1 = require("./util");
9
+ function drawLongReadChains({ ctx, chainData, view, asm, chainYOffsets, renderChevrons, featureHeight, featuresForFlatbush, computedChains, flipStrandLongReadChains, }) {
10
+ var _a, _b;
11
+ const getStrandColorKey = (strand) => strand === -1 ? 'color_rev_strand' : 'color_fwd_strand';
12
+ for (const computedChain of computedChains) {
13
+ const { id, chain, minX, maxX } = computedChain;
14
+ let isPairedEnd = false;
15
+ for (const element of chain) {
16
+ if (element.flags & 1) {
17
+ isPairedEnd = true;
18
+ break;
19
+ }
20
+ }
21
+ if (isPairedEnd) {
22
+ continue;
23
+ }
24
+ const chainY = chainYOffsets.get(id);
25
+ if (chainY === undefined) {
26
+ continue;
27
+ }
28
+ const nonSupplementary = [];
29
+ for (const element of chain) {
30
+ if (!(element.flags & 2048)) {
31
+ nonSupplementary.push(element);
32
+ }
33
+ }
34
+ const isSingleton = chain.length === 1;
35
+ const c1 = nonSupplementary[0] || chain[0];
36
+ const primaryStrand = (0, primaryStrand_1.getPrimaryStrandFromFlags)(c1);
37
+ if (!isSingleton) {
38
+ const firstFeat = chain[0];
39
+ const lastFeat = chain[chain.length - 1];
40
+ const firstPx = (_a = view.bpToPx({
41
+ refName: asm.getCanonicalRefName2(firstFeat.refName),
42
+ coord: firstFeat.start,
43
+ })) === null || _a === void 0 ? void 0 : _a.offsetPx;
44
+ const lastPx = (_b = view.bpToPx({
45
+ refName: asm.getCanonicalRefName2(lastFeat.refName),
46
+ coord: lastFeat.end,
47
+ })) === null || _b === void 0 ? void 0 : _b.offsetPx;
48
+ if (firstPx !== undefined && lastPx !== undefined) {
49
+ const lineY = chainY + featureHeight / 2 - 0.5;
50
+ ctx.beginPath();
51
+ ctx.strokeStyle = '#666';
52
+ ctx.moveTo(firstPx - view.offsetPx, lineY);
53
+ ctx.lineTo(lastPx - view.offsetPx, lineY);
54
+ ctx.stroke();
55
+ }
56
+ }
57
+ const viewOffsetPx = view.offsetPx;
58
+ const chainMinXPx = minX - viewOffsetPx;
59
+ const chainMaxXPx = maxX - viewOffsetPx;
60
+ for (let i = 0, l = chain.length; i < l; i++) {
61
+ const feat = chain[i];
62
+ const s = view.bpToPx({
63
+ refName: asm.getCanonicalRefName2(feat.refName),
64
+ coord: feat.start,
65
+ });
66
+ const e = view.bpToPx({
67
+ refName: asm.getCanonicalRefName2(feat.refName),
68
+ coord: feat.end,
69
+ });
70
+ if (!s || !e) {
71
+ continue;
72
+ }
73
+ const effectiveStrand = isSingleton || !flipStrandLongReadChains
74
+ ? feat.strand
75
+ : feat.strand * primaryStrand;
76
+ const [featureFill, featureStroke] = isSingleton
77
+ ? (0, color_1.getSingletonColor)(feat, chainData.stats)
78
+ : [
79
+ color_1.fillColor[getStrandColorKey(effectiveStrand)],
80
+ color_1.strokeColor[getStrandColorKey(effectiveStrand)],
81
+ ];
82
+ const xPos = s.offsetPx - viewOffsetPx;
83
+ const width = Math.max(e.offsetPx - s.offsetPx, 3);
84
+ if (renderChevrons) {
85
+ (0, chevron_1.drawChevron)(ctx, xPos, chainY, width, featureHeight, effectiveStrand, featureFill, util_1.CHEVRON_WIDTH, featureStroke);
86
+ }
87
+ else {
88
+ (0, canvasUtils_1.fillRectCtx)(xPos, chainY, width, featureHeight, ctx, featureFill);
89
+ (0, canvasUtils_1.strokeRectCtx)(xPos, chainY, width, featureHeight, ctx, featureStroke);
90
+ }
91
+ featuresForFlatbush.push({
92
+ x1: xPos,
93
+ y1: chainY,
94
+ x2: xPos + width,
95
+ y2: chainY + featureHeight,
96
+ data: feat,
97
+ chainId: id,
98
+ chainMinX: chainMinXPx,
99
+ chainMaxX: chainMaxXPx,
100
+ chain,
101
+ });
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,24 @@
1
+ import type { ChainData, ReducedFeature } from './fetchChains';
2
+ import type { FlatbushEntry } from './flatbushType';
3
+ import type { Assembly } from '@jbrowse/core/assemblyManager/assembly';
4
+ import type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
5
+ type LGV = LinearGenomeViewModel;
6
+ export declare function drawPairChains({ ctx, type, chainData, view, asm, chainYOffsets, renderChevrons, featureHeight, featuresForFlatbush, computedChains, }: {
7
+ ctx: CanvasRenderingContext2D;
8
+ type: string;
9
+ chainData: ChainData;
10
+ view: LGV;
11
+ asm: Assembly;
12
+ chainYOffsets: Map<string, number>;
13
+ renderChevrons: boolean;
14
+ featureHeight: number;
15
+ featuresForFlatbush: FlatbushEntry[];
16
+ computedChains: {
17
+ distance: number;
18
+ minX: number;
19
+ maxX: number;
20
+ chain: ReducedFeature[];
21
+ id: string;
22
+ }[];
23
+ }): void;
24
+ export {};
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.drawPairChains = drawPairChains;
4
+ const canvasUtils_1 = require("./canvasUtils");
5
+ const chevron_1 = require("./chevron");
6
+ const color_1 = require("./color");
7
+ const util_1 = require("./util");
8
+ function drawPairChains({ ctx, type, chainData, view, asm, chainYOffsets, renderChevrons, featureHeight, featuresForFlatbush, computedChains, }) {
9
+ var _a, _b;
10
+ for (const computedChain of computedChains) {
11
+ const { id, chain, minX, maxX } = computedChain;
12
+ let isPairedEnd = false;
13
+ for (const element of chain) {
14
+ if (element.flags & 1) {
15
+ isPairedEnd = true;
16
+ break;
17
+ }
18
+ }
19
+ if (!isPairedEnd) {
20
+ continue;
21
+ }
22
+ const chainY = chainYOffsets.get(id);
23
+ if (chainY === undefined) {
24
+ continue;
25
+ }
26
+ const nonSupplementary = [];
27
+ for (const element of chain) {
28
+ if (!(element.flags & 2048)) {
29
+ nonSupplementary.push(element);
30
+ }
31
+ }
32
+ const hasBothMates = nonSupplementary.length === 2;
33
+ const [pairedFill, pairedStroke] = hasBothMates
34
+ ? (0, color_1.getPairedColor)({
35
+ type,
36
+ v0: nonSupplementary[0],
37
+ v1: nonSupplementary[1],
38
+ stats: chainData.stats,
39
+ }) || ['#888', '#888']
40
+ : (0, color_1.getSingletonColor)(nonSupplementary[0] || chain[0], chainData.stats);
41
+ if (hasBothMates) {
42
+ const v0 = nonSupplementary[0];
43
+ const v1 = nonSupplementary[1];
44
+ const r1s = (_a = view.bpToPx({
45
+ refName: asm.getCanonicalRefName2(v0.refName),
46
+ coord: v0.start,
47
+ })) === null || _a === void 0 ? void 0 : _a.offsetPx;
48
+ const r2s = (_b = view.bpToPx({
49
+ refName: asm.getCanonicalRefName2(v1.refName),
50
+ coord: v1.start,
51
+ })) === null || _b === void 0 ? void 0 : _b.offsetPx;
52
+ if (r1s !== undefined && r2s !== undefined) {
53
+ (0, canvasUtils_1.fillRectCtx)(r1s - view.offsetPx, chainY + featureHeight / 2 - 0.5, r2s - r1s, 1, ctx, '#666');
54
+ }
55
+ }
56
+ const viewOffsetPx = view.offsetPx;
57
+ const chainMinXPx = minX - viewOffsetPx;
58
+ const chainMaxXPx = maxX - viewOffsetPx;
59
+ for (let i = 0, l = chain.length; i < l; i++) {
60
+ const feat = chain[i];
61
+ const s = view.bpToPx({
62
+ refName: asm.getCanonicalRefName2(feat.refName),
63
+ coord: feat.start,
64
+ });
65
+ const e = view.bpToPx({
66
+ refName: asm.getCanonicalRefName2(feat.refName),
67
+ coord: feat.end,
68
+ });
69
+ if (!s || !e) {
70
+ continue;
71
+ }
72
+ const xPos = s.offsetPx - viewOffsetPx;
73
+ const width = Math.max(e.offsetPx - s.offsetPx, 3);
74
+ if (renderChevrons) {
75
+ (0, chevron_1.drawChevron)(ctx, xPos, chainY, width, featureHeight, feat.strand, pairedFill, util_1.CHEVRON_WIDTH, pairedStroke);
76
+ }
77
+ else {
78
+ (0, canvasUtils_1.fillRectCtx)(xPos, chainY, width, featureHeight, ctx, pairedFill);
79
+ (0, canvasUtils_1.strokeRectCtx)(xPos, chainY, width, featureHeight, ctx, pairedStroke);
80
+ }
81
+ featuresForFlatbush.push({
82
+ x1: xPos,
83
+ y1: chainY,
84
+ x2: xPos + width,
85
+ y2: chainY + featureHeight,
86
+ data: feat,
87
+ chainId: id,
88
+ chainMinX: chainMinXPx,
89
+ chainMaxX: chainMaxXPx,
90
+ chain,
91
+ });
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,12 @@
1
+ import type { ReducedFeature } from './fetchChains';
2
+ export interface FlatbushEntry {
3
+ x1: number;
4
+ y1: number;
5
+ x2: number;
6
+ y2: number;
7
+ data: ReducedFeature;
8
+ chainId: string;
9
+ chainMinX: number;
10
+ chainMaxX: number;
11
+ chain: ReducedFeature[];
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -12,4 +12,7 @@ export declare function getUniqueModifications({ model, adapterConfig, blocks, o
12
12
  adapterConfig: AnyConfigurationModel;
13
13
  blocks: BlockSet;
14
14
  opts?: ModificationOpts;
15
- }): Promise<ModificationType[]>;
15
+ }): Promise<{
16
+ modifications: ModificationType[];
17
+ simplexModifications: string[];
18
+ }>;
@@ -0,0 +1,23 @@
1
+ interface LinearReadDisplayModel {
2
+ setColorScheme: (colorBy: {
3
+ type: string;
4
+ }) => void;
5
+ }
6
+ export declare function getColorSchemeMenuItem(model: LinearReadDisplayModel): {
7
+ label: string;
8
+ icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
9
+ muiName: string;
10
+ };
11
+ subMenu: {
12
+ label: string;
13
+ onClick: () => void;
14
+ }[];
15
+ };
16
+ export declare function getFilterByMenuItem(model: unknown): {
17
+ label: string;
18
+ icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {
19
+ muiName: string;
20
+ };
21
+ onClick: () => void;
22
+ };
23
+ export {};
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getColorSchemeMenuItem = getColorSchemeMenuItem;
40
+ exports.getFilterByMenuItem = getFilterByMenuItem;
41
+ const react_1 = require("react");
42
+ const util_1 = require("@jbrowse/core/util");
43
+ const ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
44
+ const Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
45
+ const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/FilterByTagDialog'))));
46
+ function getColorSchemeMenuItem(model) {
47
+ return {
48
+ label: 'Color scheme',
49
+ icon: Palette_1.default,
50
+ subMenu: [
51
+ {
52
+ label: 'Insert size ± 3σ and orientation',
53
+ onClick: () => {
54
+ model.setColorScheme({ type: 'insertSizeAndOrientation' });
55
+ },
56
+ },
57
+ {
58
+ label: 'Insert size ± 3σ',
59
+ onClick: () => {
60
+ model.setColorScheme({ type: 'insertSize' });
61
+ },
62
+ },
63
+ {
64
+ label: 'Orientation',
65
+ onClick: () => {
66
+ model.setColorScheme({ type: 'orientation' });
67
+ },
68
+ },
69
+ {
70
+ label: 'Insert size gradient',
71
+ onClick: () => {
72
+ model.setColorScheme({ type: 'gradient' });
73
+ },
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ function getFilterByMenuItem(model) {
79
+ return {
80
+ label: 'Filter by',
81
+ icon: ClearAll_1.default,
82
+ onClick: () => {
83
+ (0, util_1.getSession)(model).queueDialog((handleClose) => [
84
+ FilterByTagDialog,
85
+ { model, handleClose },
86
+ ]);
87
+ },
88
+ };
89
+ }
@@ -0,0 +1,6 @@
1
+ export interface ModificationData {
2
+ color: string;
3
+ name: string;
4
+ }
5
+ export declare const modificationData: Record<string, ModificationData>;
6
+ export declare function getModificationName(type: string): string;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modificationData = void 0;
4
+ exports.getModificationName = getModificationName;
5
+ exports.modificationData = {
6
+ m: { color: 'rgb(255,0,0)', name: '5mC' },
7
+ h: { color: 'rgb(255,0,255)', name: '5hmC' },
8
+ o: { color: 'rgb(111, 78, 129)', name: '8oxoG' },
9
+ f: { color: 'rgb(246, 200, 95)', name: '5fC' },
10
+ c: { color: 'rgb(157, 216, 102)', name: '5cac' },
11
+ g: { color: 'rgb(255, 160, 86)', name: '5hmu' },
12
+ e: { color: 'rgb(141, 221, 208)', name: '5fU' },
13
+ b: { color: 'rgb(0,100,47)', name: '5caU' },
14
+ a: { color: 'rgb(51,0,111)', name: '6mA' },
15
+ 17082: { color: 'rgb(51,153,255)', name: 'pseU' },
16
+ 17596: { color: 'rgb(102,153,0)', name: 'inosine' },
17
+ 21839: { color: 'rgb(153,0,153)', name: '4mC' },
18
+ };
19
+ function getModificationName(type) {
20
+ var _a;
21
+ return ((_a = exports.modificationData[type]) === null || _a === void 0 ? void 0 : _a.name) || type;
22
+ }
@@ -0,0 +1,3 @@
1
+ import type { ReducedFeature } from './fetchChains';
2
+ export declare function getPrimaryStrand(feat: ReducedFeature): number;
3
+ export declare function getPrimaryStrandFromFlags(feat: ReducedFeature): 1 | -1;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPrimaryStrand = getPrimaryStrand;
4
+ exports.getPrimaryStrandFromFlags = getPrimaryStrandFromFlags;
5
+ function getPrimaryStrand(feat) {
6
+ var _a, _b;
7
+ if (!(feat.flags & 2048)) {
8
+ return feat.strand;
9
+ }
10
+ else {
11
+ const res = (_b = (_a = feat.SA) === null || _a === void 0 ? void 0 : _a.split(';')[0]) === null || _b === void 0 ? void 0 : _b.split(',')[2];
12
+ return res === '-' ? -1 : 1;
13
+ }
14
+ }
15
+ function getPrimaryStrandFromFlags(feat) {
16
+ var _a, _b;
17
+ if (!(feat.flags & 2048)) {
18
+ return feat.flags & 16 ? -1 : 1;
19
+ }
20
+ else {
21
+ const res = (_b = (_a = feat.SA) === null || _a === void 0 ? void 0 : _a.split(';')[0]) === null || _b === void 0 ? void 0 : _b.split(',')[2];
22
+ return res === '-' ? -1 : 1;
23
+ }
24
+ }
@@ -63,6 +63,7 @@ export interface ColorBy {
63
63
  modifications?: {
64
64
  twoColor?: boolean;
65
65
  isolatedModification?: string;
66
+ threshold?: number;
66
67
  };
67
68
  }
68
69
  export interface FilterBy {
@@ -85,6 +86,7 @@ export interface Mismatch {
85
86
  qual?: number;
86
87
  start: number;
87
88
  length: number;
89
+ insertedBases?: string;
88
90
  type: string;
89
91
  base: string;
90
92
  altbase?: string;
@@ -18,3 +18,5 @@ export declare function cacheGetter<T>(ctor: {
18
18
  }, prop: keyof T): void;
19
19
  export declare function filterReadFlag(flags: number, flagInclude: number, flagExclude: number): boolean;
20
20
  export declare function filterTagValue(readVal: unknown, filterVal?: string): boolean;
21
+ export declare function shouldRenderChevrons(bpPerPx: number, featureHeight: number): boolean;
22
+ export declare const CHEVRON_WIDTH = 5;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.posFlags = exports.negFlags = exports.defaultFilterFlags = void 0;
3
+ exports.CHEVRON_WIDTH = exports.posFlags = exports.negFlags = exports.defaultFilterFlags = void 0;
4
4
  exports.hasPairedReads = hasPairedReads;
5
5
  exports.alphaColor = alphaColor;
6
6
  exports.cacheGetter = cacheGetter;
7
7
  exports.filterReadFlag = filterReadFlag;
8
8
  exports.filterTagValue = filterTagValue;
9
+ exports.shouldRenderChevrons = shouldRenderChevrons;
9
10
  const colord_1 = require("@jbrowse/core/util/colord");
10
11
  function hasPairedReads(features) {
11
12
  for (const f of features.chains.values()) {
@@ -61,3 +62,7 @@ function filterTagValue(readVal, filterVal) {
61
62
  ? readVal === undefined
62
63
  : `${readVal}` !== `${filterVal}`;
63
64
  }
65
+ function shouldRenderChevrons(bpPerPx, featureHeight) {
66
+ return bpPerPx < 50 && featureHeight >= 3;
67
+ }
68
+ exports.CHEVRON_WIDTH = 5;
package/dist/util.d.ts CHANGED
@@ -16,15 +16,10 @@ export declare const pairMap: {
16
16
  };
17
17
  export declare function getColorWGBS(strand: number, base: string): "#f00" | "#00f" | "#888";
18
18
  export declare function fetchSequence(region: AugmentedRegion, adapter: BaseFeatureDataAdapter): Promise<any>;
19
- interface ModificationData {
20
- color: string;
21
- name: string;
22
- }
23
- export declare const modificationData: Record<string, ModificationData>;
24
19
  type DisplayModel = IAnyStateTreeNode & {
25
20
  setError: (arg: unknown) => void;
26
21
  };
27
22
  export declare function createAutorun(self: DisplayModel, cb: () => Promise<void>, opts?: IAutorunOptions): void;
28
23
  export declare function randomColor(str: string): string;
29
24
  export declare function getColorForModification(str: string): string;
30
- export {};
25
+ export { modificationData } from './shared/modificationData';
package/dist/util.js CHANGED
@@ -11,6 +11,7 @@ const mobx_1 = require("mobx");
11
11
  const mobx_state_tree_1 = require("mobx-state-tree");
12
12
  const rxjs_1 = require("rxjs");
13
13
  const operators_1 = require("rxjs/operators");
14
+ const modificationData_1 = require("./shared/modificationData");
14
15
  function getTagAlt(feature, tag, alt) {
15
16
  var _a;
16
17
  const tags = feature.get('tags');
@@ -86,20 +87,6 @@ async function fetchSequence(region, adapter) {
86
87
  .pipe((0, operators_1.toArray)()));
87
88
  return (_a = feats[0]) === null || _a === void 0 ? void 0 : _a.get('seq');
88
89
  }
89
- exports.modificationData = {
90
- m: { color: 'rgb(255,0,0)', name: '5mC' },
91
- h: { color: 'rgb(255,0,255)', name: '5hmC' },
92
- o: { color: 'rgb(111, 78, 129)', name: '8oxoG' },
93
- f: { color: 'rgb(246, 200, 95)', name: '5fC' },
94
- c: { color: 'rgb(157, 216, 102)', name: '5cac' },
95
- g: { color: 'rgb(255, 160, 86)', name: '5hmu' },
96
- e: { color: 'rgb(141, 221, 208)', name: '5fU' },
97
- b: { color: 'rgb(0,100,47)', name: '5caU' },
98
- a: { color: 'rgb(51,0,111)', name: '6mA' },
99
- 17082: { color: 'rgb(51,153,255)', name: 'pseU' },
100
- 17596: { color: 'rgb(102,153,0)', name: 'inosine' },
101
- 21839: { color: 'rgb(153,0,153)', name: '4mC' },
102
- };
103
90
  function createAutorun(self, cb, opts) {
104
91
  (0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(async () => {
105
92
  try {
@@ -121,5 +108,7 @@ function randomColor(str) {
121
108
  }
122
109
  function getColorForModification(str) {
123
110
  var _a;
124
- return ((_a = exports.modificationData[str]) === null || _a === void 0 ? void 0 : _a.color) || randomColor(str);
111
+ return ((_a = modificationData_1.modificationData[str]) === null || _a === void 0 ? void 0 : _a.color) || randomColor(str);
125
112
  }
113
+ var modificationData_2 = require("./shared/modificationData");
114
+ Object.defineProperty(exports, "modificationData", { enumerable: true, get: function () { return modificationData_2.modificationData; } });
@@ -18,14 +18,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
18
18
  upperCaseCDS: boolean;
19
19
  charactersPerRow: number;
20
20
  feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
21
- mode: string;
21
+ mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
22
22
  } & {
23
23
  setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
24
24
  setUpDownBp(f: number): void;
25
25
  setIntronBp(f: number): void;
26
26
  setUpperCaseCDS(f: boolean): void;
27
27
  setShowCoordinates(f: "none" | "relative" | "genomic"): void;
28
- setMode(mode: string): void;
28
+ setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
29
29
  } & {
30
30
  readonly showCoordinates: boolean;
31
31
  readonly showGenomicCoordsOption: boolean;
@@ -68,14 +68,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
68
68
  upperCaseCDS: boolean;
69
69
  charactersPerRow: number;
70
70
  feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
71
- mode: string;
71
+ mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
72
72
  } & {
73
73
  setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
74
74
  setUpDownBp(f: number): void;
75
75
  setIntronBp(f: number): void;
76
76
  setUpperCaseCDS(f: boolean): void;
77
77
  setShowCoordinates(f: "none" | "relative" | "genomic"): void;
78
- setMode(mode: string): void;
78
+ setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
79
79
  } & {
80
80
  readonly showCoordinates: boolean;
81
81
  readonly showGenomicCoordsOption: boolean;
@@ -215,7 +215,7 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
215
215
  const chrId = this.refNameToId(refName);
216
216
  return chrId !== undefined
217
217
  ? cram.index.getEntriesForRange(chrId, start, end)
218
- : [{ sliceBytes: 0 }];
218
+ : Promise.resolve([{ sliceBytes: 0 }]);
219
219
  }));
220
220
  return blockResults.flat().reduce((a, b) => a + b.sliceBytes, 0);
221
221
  }
@@ -1,4 +1,5 @@
1
- import { readFeaturesToCIGAR, readFeaturesToMismatches } from './util';
1
+ import { readFeaturesToCIGAR } from './readFeaturesToCIGAR';
2
+ import { readFeaturesToMismatches } from './readFeaturesToMismatches';
2
3
  import { cacheGetter } from '../shared/util';
3
4
  export default class CramSlightlyLazyFeature {
4
5
  constructor(record, _store) {
@@ -1,14 +1,12 @@
1
- export function readFeaturesToMismatches(readFeatures, start, qual) {
2
- if (!readFeatures) {
3
- return [];
4
- }
1
+ export function readFeaturesToMismatches(readFeatures = [], start, qual) {
5
2
  const mismatches = new Array(readFeatures.length);
6
3
  let j = 0;
7
4
  let insLen = 0;
8
5
  let refPos = 0;
9
6
  let sublen = 0;
10
7
  let lastPos = start;
11
- for (const { refPos: p, code, pos, data, sub, ref } of readFeatures) {
8
+ for (const ret of readFeatures) {
9
+ const { refPos: p, code, pos, data, sub, ref } = ret;
12
10
  sublen = refPos - lastPos;
13
11
  lastPos = refPos;
14
12
  if (sublen && insLen > 0) {
@@ -16,6 +14,7 @@ export function readFeaturesToMismatches(readFeatures, start, qual) {
16
14
  start: refPos,
17
15
  type: 'insertion',
18
16
  base: `${insLen}`,
17
+ insertedBases: data,
19
18
  length: 0,
20
19
  };
21
20
  insLen = 0;
@@ -0,0 +1,5 @@
1
+ import type { Mismatch } from '../shared/types';
2
+ import type { CramRecord } from '@gmod/cram';
3
+ type ReadFeatures = CramRecord['readFeatures'];
4
+ export declare function readFeaturesToMismatches(readFeatures: ReadFeatures, start: number, qual?: number[] | null): Mismatch[];
5
+ export {};