@jbrowse/plugin-alignments 2.16.0 → 2.17.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 (221) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +2 -3
  2. package/dist/AlignmentsFeatureDetail/Flags.js +2 -2
  3. package/dist/AlignmentsFeatureDetail/LinkedPairedAlignments.js +2 -2
  4. package/dist/AlignmentsFeatureDetail/SupplementaryAlignments.js +2 -2
  5. package/dist/AlignmentsFeatureDetail/getSAFeatures.js +2 -2
  6. package/dist/AlignmentsFeatureDetail/stateModelFactory.d.ts +1 -1
  7. package/dist/BamAdapter/BamAdapter.d.ts +3 -2
  8. package/dist/BamAdapter/BamAdapter.js +34 -11
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -17
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js +42 -72
  11. package/dist/CramAdapter/CramAdapter.d.ts +4 -3
  12. package/dist/CramAdapter/CramAdapter.js +24 -7
  13. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +21 -27
  14. package/dist/CramAdapter/CramSlightlyLazyFeature.js +74 -73
  15. package/dist/CramAdapter/util.d.ts +1 -10
  16. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +1 -1
  17. package/dist/LinearAlignmentsDisplay/index.js +2 -2
  18. package/dist/LinearAlignmentsDisplay/{models/model.d.ts → model.d.ts} +6 -3
  19. package/dist/LinearAlignmentsDisplay/{models/model.js → model.js} +11 -7
  20. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +6 -27
  21. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +43 -21
  22. package/dist/LinearPileupDisplay/components/ColorByTagDialog.d.ts +5 -4
  23. package/dist/LinearPileupDisplay/components/ColorByTagDialog.js +3 -1
  24. package/dist/LinearPileupDisplay/components/GroupByDialog.js +8 -6
  25. package/dist/LinearPileupDisplay/components/SortByTagDialog.js +6 -4
  26. package/dist/LinearPileupDisplay/model.d.ts +41 -45
  27. package/dist/LinearPileupDisplay/model.js +118 -41
  28. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +1 -1
  29. package/dist/LinearReadArcsDisplay/model.d.ts +22 -21
  30. package/dist/LinearReadArcsDisplay/model.js +13 -14
  31. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +1 -1
  32. package/dist/LinearReadCloudDisplay/model.d.ts +14 -22
  33. package/dist/LinearReadCloudDisplay/model.js +12 -13
  34. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +49 -19
  35. package/dist/LinearSNPCoverageDisplay/index.js +3 -2
  36. package/dist/LinearSNPCoverageDisplay/{models/model.d.ts → model.d.ts} +3 -13
  37. package/dist/LinearSNPCoverageDisplay/{models/model.js → model.js} +71 -45
  38. package/dist/MismatchParser/cigarToMismatches.d.ts +3 -0
  39. package/dist/MismatchParser/cigarToMismatches.js +94 -0
  40. package/dist/MismatchParser/getNextRefPos.d.ts +4 -0
  41. package/dist/MismatchParser/getNextRefPos.js +40 -0
  42. package/dist/MismatchParser/index.d.ts +4 -29
  43. package/dist/MismatchParser/index.js +10 -321
  44. package/dist/MismatchParser/mdToMismatches.d.ts +3 -0
  45. package/dist/MismatchParser/mdToMismatches.js +80 -0
  46. package/dist/ModificationParser/index.d.ts +19 -0
  47. package/dist/ModificationParser/index.js +144 -0
  48. package/dist/PileupRPC/methods/GetGlobalValueForTag.js +1 -2
  49. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +1 -1
  50. package/dist/PileupRPC/methods/GetReducedFeatures.js +19 -16
  51. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +2 -1
  52. package/dist/PileupRPC/methods/GetVisibleModifications.js +9 -6
  53. package/dist/PileupRenderer/PileupLayoutSession.d.ts +8 -7
  54. package/dist/PileupRenderer/PileupRenderer.d.ts +6 -14
  55. package/dist/PileupRenderer/PileupRenderer.js +7 -5
  56. package/dist/PileupRenderer/renderAlignment.js +17 -4
  57. package/dist/PileupRenderer/renderAlignmentShape.js +102 -21
  58. package/dist/PileupRenderer/renderMethylation.d.ts +2 -1
  59. package/dist/PileupRenderer/renderMethylation.js +17 -9
  60. package/dist/PileupRenderer/renderMismatches.js +19 -19
  61. package/dist/PileupRenderer/renderModifications.d.ts +3 -2
  62. package/dist/PileupRenderer/renderModifications.js +31 -34
  63. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +2 -1
  64. package/dist/PileupRenderer/renderPerBaseLettering.js +1 -3
  65. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +2 -1
  66. package/dist/PileupRenderer/renderPerBaseQuality.js +1 -3
  67. package/dist/PileupRenderer/renderSoftClipping.js +6 -6
  68. package/dist/PileupRenderer/sortUtil.d.ts +2 -7
  69. package/dist/PileupRenderer/sortUtil.js +13 -13
  70. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +10 -5
  71. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +13 -9
  72. package/dist/SNPCoverageAdapter/generateCoverageBins.js +269 -166
  73. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -1
  74. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +171 -54
  75. package/dist/shared/color.d.ts +0 -10
  76. package/dist/shared/color.js +1 -7
  77. package/{esm/shared → dist/shared/components}/BaseDisplayComponent.d.ts +2 -2
  78. package/{esm/shared → dist/shared/components}/FilterByTagDialog.d.ts +3 -3
  79. package/dist/shared/{FilterByTagDialog.js → components/FilterByTagDialog.js} +5 -1
  80. package/dist/shared/fetchChains.js +1 -2
  81. package/dist/shared/getMaximumModificationAtEachPosition.d.ts +8 -0
  82. package/dist/shared/getMaximumModificationAtEachPosition.js +42 -0
  83. package/dist/shared/getUniqueModifications.d.ts +14 -0
  84. package/dist/shared/getUniqueModifications.js +16 -0
  85. package/dist/shared/getUniqueTags.d.ts +15 -0
  86. package/dist/shared/getUniqueTags.js +18 -0
  87. package/dist/shared/types.d.ts +94 -0
  88. package/dist/shared/util.d.ts +8 -0
  89. package/dist/shared/util.js +26 -0
  90. package/dist/util.d.ts +7 -4
  91. package/dist/util.js +30 -30
  92. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +2 -3
  93. package/esm/AlignmentsFeatureDetail/Flags.js +1 -1
  94. package/esm/AlignmentsFeatureDetail/LinkedPairedAlignments.js +1 -1
  95. package/esm/AlignmentsFeatureDetail/SupplementaryAlignments.js +1 -1
  96. package/esm/AlignmentsFeatureDetail/getSAFeatures.js +2 -2
  97. package/esm/AlignmentsFeatureDetail/stateModelFactory.d.ts +1 -1
  98. package/esm/BamAdapter/BamAdapter.d.ts +3 -2
  99. package/esm/BamAdapter/BamAdapter.js +31 -8
  100. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -17
  101. package/esm/BamAdapter/BamSlightlyLazyFeature.js +43 -73
  102. package/esm/CramAdapter/CramAdapter.d.ts +4 -3
  103. package/esm/CramAdapter/CramAdapter.js +22 -5
  104. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +21 -27
  105. package/esm/CramAdapter/CramSlightlyLazyFeature.js +74 -73
  106. package/esm/CramAdapter/util.d.ts +1 -10
  107. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +1 -1
  108. package/esm/LinearAlignmentsDisplay/index.js +2 -2
  109. package/esm/LinearAlignmentsDisplay/{models/model.d.ts → model.d.ts} +6 -3
  110. package/esm/LinearAlignmentsDisplay/{models/model.js → model.js} +11 -7
  111. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +6 -27
  112. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +45 -23
  113. package/esm/LinearPileupDisplay/components/ColorByTagDialog.d.ts +5 -4
  114. package/esm/LinearPileupDisplay/components/ColorByTagDialog.js +3 -1
  115. package/esm/LinearPileupDisplay/components/GroupByDialog.js +8 -6
  116. package/esm/LinearPileupDisplay/components/SortByTagDialog.js +6 -4
  117. package/esm/LinearPileupDisplay/model.d.ts +41 -45
  118. package/esm/LinearPileupDisplay/model.js +119 -42
  119. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +1 -1
  120. package/esm/LinearReadArcsDisplay/model.d.ts +22 -21
  121. package/esm/LinearReadArcsDisplay/model.js +14 -15
  122. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +1 -1
  123. package/esm/LinearReadCloudDisplay/model.d.ts +14 -22
  124. package/esm/LinearReadCloudDisplay/model.js +13 -14
  125. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +49 -19
  126. package/esm/LinearSNPCoverageDisplay/index.js +3 -2
  127. package/esm/LinearSNPCoverageDisplay/{models/model.d.ts → model.d.ts} +3 -13
  128. package/esm/LinearSNPCoverageDisplay/{models/model.js → model.js} +72 -46
  129. package/esm/MismatchParser/cigarToMismatches.d.ts +3 -0
  130. package/esm/MismatchParser/cigarToMismatches.js +91 -0
  131. package/esm/MismatchParser/getNextRefPos.d.ts +4 -0
  132. package/esm/MismatchParser/getNextRefPos.js +37 -0
  133. package/esm/MismatchParser/index.d.ts +4 -29
  134. package/esm/MismatchParser/index.js +5 -311
  135. package/esm/MismatchParser/mdToMismatches.d.ts +3 -0
  136. package/esm/MismatchParser/mdToMismatches.js +77 -0
  137. package/esm/ModificationParser/index.d.ts +19 -0
  138. package/esm/ModificationParser/index.js +138 -0
  139. package/esm/PileupRPC/methods/GetGlobalValueForTag.js +1 -2
  140. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +1 -1
  141. package/esm/PileupRPC/methods/GetReducedFeatures.js +19 -16
  142. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +2 -1
  143. package/esm/PileupRPC/methods/GetVisibleModifications.js +9 -6
  144. package/esm/PileupRenderer/PileupLayoutSession.d.ts +8 -7
  145. package/esm/PileupRenderer/PileupRenderer.d.ts +6 -14
  146. package/esm/PileupRenderer/PileupRenderer.js +8 -6
  147. package/esm/PileupRenderer/renderAlignment.js +17 -4
  148. package/esm/PileupRenderer/renderAlignmentShape.js +102 -21
  149. package/esm/PileupRenderer/renderMethylation.d.ts +2 -1
  150. package/esm/PileupRenderer/renderMethylation.js +17 -9
  151. package/esm/PileupRenderer/renderMismatches.js +19 -19
  152. package/esm/PileupRenderer/renderModifications.d.ts +3 -2
  153. package/esm/PileupRenderer/renderModifications.js +30 -33
  154. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +2 -1
  155. package/esm/PileupRenderer/renderPerBaseLettering.js +1 -3
  156. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +2 -1
  157. package/esm/PileupRenderer/renderPerBaseQuality.js +1 -3
  158. package/esm/PileupRenderer/renderSoftClipping.js +6 -6
  159. package/esm/PileupRenderer/sortUtil.d.ts +2 -7
  160. package/esm/PileupRenderer/sortUtil.js +13 -13
  161. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +10 -5
  162. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +13 -9
  163. package/esm/SNPCoverageAdapter/generateCoverageBins.js +269 -166
  164. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -1
  165. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +171 -54
  166. package/esm/shared/color.d.ts +0 -10
  167. package/esm/shared/color.js +0 -6
  168. package/{dist/shared → esm/shared/components}/BaseDisplayComponent.d.ts +2 -2
  169. package/{dist/shared → esm/shared/components}/FilterByTagDialog.d.ts +3 -3
  170. package/esm/shared/{FilterByTagDialog.js → components/FilterByTagDialog.js} +5 -1
  171. package/esm/shared/fetchChains.js +1 -2
  172. package/esm/shared/getMaximumModificationAtEachPosition.d.ts +8 -0
  173. package/esm/shared/getMaximumModificationAtEachPosition.js +39 -0
  174. package/esm/shared/getUniqueModifications.d.ts +14 -0
  175. package/esm/shared/getUniqueModifications.js +13 -0
  176. package/esm/shared/getUniqueTags.d.ts +15 -0
  177. package/esm/shared/getUniqueTags.js +15 -0
  178. package/esm/shared/types.d.ts +94 -0
  179. package/esm/shared/util.d.ts +8 -0
  180. package/esm/shared/util.js +23 -0
  181. package/esm/util.d.ts +7 -4
  182. package/esm/util.js +28 -27
  183. package/package.json +4 -4
  184. package/dist/LinearPileupDisplay/components/ColorByModificationsDialog.d.ts +0 -15
  185. package/dist/LinearPileupDisplay/components/ColorByModificationsDialog.js +0 -41
  186. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +0 -4
  187. package/dist/LinearPileupDisplay/components/ModificationsTable.js +0 -28
  188. package/dist/SNPCoverageAdapter/util.d.ts +0 -25
  189. package/dist/shared/index.d.ts +0 -49
  190. package/dist/shared/index.js +0 -41
  191. package/esm/LinearPileupDisplay/components/ColorByModificationsDialog.d.ts +0 -15
  192. package/esm/LinearPileupDisplay/components/ColorByModificationsDialog.js +0 -36
  193. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +0 -4
  194. package/esm/LinearPileupDisplay/components/ModificationsTable.js +0 -22
  195. package/esm/SNPCoverageAdapter/util.d.ts +0 -25
  196. package/esm/shared/index.d.ts +0 -49
  197. package/esm/shared/index.js +0 -36
  198. /package/dist/LinearAlignmentsDisplay/{models/alignmentsModel.d.ts → alignmentsModel.d.ts} +0 -0
  199. /package/dist/LinearAlignmentsDisplay/{models/alignmentsModel.js → alignmentsModel.js} +0 -0
  200. /package/dist/LinearAlignmentsDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  201. /package/dist/LinearAlignmentsDisplay/{models/configSchema.js → configSchema.js} +0 -0
  202. /package/dist/LinearAlignmentsDisplay/{models/util.d.ts → util.d.ts} +0 -0
  203. /package/dist/LinearAlignmentsDisplay/{models/util.js → util.js} +0 -0
  204. /package/dist/LinearSNPCoverageDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  205. /package/dist/LinearSNPCoverageDisplay/{models/configSchema.js → configSchema.js} +0 -0
  206. /package/dist/shared/{BaseDisplayComponent.js → components/BaseDisplayComponent.js} +0 -0
  207. /package/dist/shared/{renderSvg.d.ts → renderSvgUtil.d.ts} +0 -0
  208. /package/dist/shared/{renderSvg.js → renderSvgUtil.js} +0 -0
  209. /package/dist/{SNPCoverageAdapter/util.js → shared/types.js} +0 -0
  210. /package/esm/LinearAlignmentsDisplay/{models/alignmentsModel.d.ts → alignmentsModel.d.ts} +0 -0
  211. /package/esm/LinearAlignmentsDisplay/{models/alignmentsModel.js → alignmentsModel.js} +0 -0
  212. /package/esm/LinearAlignmentsDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  213. /package/esm/LinearAlignmentsDisplay/{models/configSchema.js → configSchema.js} +0 -0
  214. /package/esm/LinearAlignmentsDisplay/{models/util.d.ts → util.d.ts} +0 -0
  215. /package/esm/LinearAlignmentsDisplay/{models/util.js → util.js} +0 -0
  216. /package/esm/LinearSNPCoverageDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  217. /package/esm/LinearSNPCoverageDisplay/{models/configSchema.js → configSchema.js} +0 -0
  218. /package/esm/shared/{BaseDisplayComponent.js → components/BaseDisplayComponent.js} +0 -0
  219. /package/esm/shared/{renderSvg.d.ts → renderSvgUtil.d.ts} +0 -0
  220. /package/esm/shared/{renderSvg.js → renderSvgUtil.js} +0 -0
  221. /package/esm/{SNPCoverageAdapter/util.js → shared/types.js} +0 -0
@@ -30,7 +30,7 @@ const react_1 = __importStar(require("react"));
30
30
  const material_1 = require("@mui/material");
31
31
  const mobx_react_1 = require("mobx-react");
32
32
  const clone_1 = __importDefault(require("clone"));
33
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
33
+ const FeatureDetails_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/FeatureDetails"));
34
34
  // locals
35
35
  const util_1 = require("./util");
36
36
  const tagInfo_1 = require("./tagInfo");
@@ -41,7 +41,6 @@ const Formatter_1 = __importDefault(require("./Formatter"));
41
41
  // lazies
42
42
  const SupplementaryAlignments = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SupplementaryAlignments'))));
43
43
  const LinkedPairedAlignments = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./LinkedPairedAlignments'))));
44
- const omit = ['clipPos', 'flags'];
45
44
  const AlignmentsFeatureDetails = (0, mobx_react_1.observer)(function (props) {
46
45
  const { model } = props;
47
46
  const { featureData } = model;
@@ -49,7 +48,7 @@ const AlignmentsFeatureDetails = (0, mobx_react_1.observer)(function (props) {
49
48
  const SA = (0, util_1.getTag)('SA', feat);
50
49
  const { flags } = feat;
51
50
  return (react_1.default.createElement(material_1.Paper, { "data-testid": "alignment-side-drawer" },
52
- react_1.default.createElement(BaseFeatureDetail_1.FeatureDetails, { ...props, omit: omit,
51
+ react_1.default.createElement(FeatureDetails_1.default, { ...props,
53
52
  // @ts-expect-error
54
53
  descriptions: { ...tagInfo_1.tags, tags: tagInfo_1.tags }, feature: feat, formatter: (value, key) => key === 'next_segment_position' ? (react_1.default.createElement(PairLink_1.default, { model: model, locString: value })) : (react_1.default.createElement(Formatter_1.default, { value: value })) }),
55
54
  SA !== undefined ? (react_1.default.createElement(SupplementaryAlignments, { model: model, tag: SA, feature: feat })) : null,
@@ -7,7 +7,7 @@ exports.default = AlignmentFlags;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const material_1 = require("@mui/material");
9
9
  const mui_1 = require("tss-react/mui");
10
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
10
+ const BaseCard_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard"));
11
11
  const SimpleField_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/SimpleField"));
12
12
  const useStyles = (0, mui_1.makeStyles)()({
13
13
  compact: {
@@ -34,7 +34,7 @@ function AlignmentFlags(props) {
34
34
  const { classes } = useStyles();
35
35
  const { feature } = props;
36
36
  const { flags } = feature;
37
- return (react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { ...props, title: "Flags" },
37
+ return (react_1.default.createElement(BaseCard_1.default, { ...props, title: "Flags" },
38
38
  react_1.default.createElement(SimpleField_1.default, { name: "Flag", value: flags }),
39
39
  react_1.default.createElement(material_1.FormGroup, null, flagNames.map((name, idx) => {
40
40
  const val = flags & (1 << idx);
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.default = SuppAlignments;
7
7
  const react_1 = __importDefault(require("react"));
8
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
8
+ const BaseCard_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard"));
9
9
  const util_1 = require("@jbrowse/core/util");
10
10
  const LaunchPairedEndBreakpointSplitViewPanel_1 = __importDefault(require("./LaunchPairedEndBreakpointSplitViewPanel"));
11
11
  function SuppAlignments(props) {
@@ -19,5 +19,5 @@ function SuppAlignments(props) {
19
19
  catch (e) {
20
20
  // ignore
21
21
  }
22
- return (react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { ...props, title: "Supplementary alignments" }, viewType ? (react_1.default.createElement(LaunchPairedEndBreakpointSplitViewPanel_1.default, { viewType: viewType, model: model, feature: feature })) : null));
22
+ return (react_1.default.createElement(BaseCard_1.default, { ...props, title: "Supplementary alignments" }, viewType ? (react_1.default.createElement(LaunchPairedEndBreakpointSplitViewPanel_1.default, { viewType: viewType, model: model, feature: feature })) : null));
23
23
  }
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.default = SupplementaryAlignments;
7
7
  const react_1 = __importDefault(require("react"));
8
- const BaseFeatureDetail_1 = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
9
8
  const util_1 = require("@jbrowse/core/util");
9
+ const BaseCard_1 = __importDefault(require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail/BaseCard"));
10
10
  const SupplementaryAlignmentsLocStrings_1 = __importDefault(require("./SupplementaryAlignmentsLocStrings"));
11
11
  const LaunchSupplementaryAlignmentBreakpointSplitViewPanel_1 = __importDefault(require("./LaunchSupplementaryAlignmentBreakpointSplitViewPanel"));
12
12
  function SupplementaryAlignments(props) {
@@ -20,7 +20,7 @@ function SupplementaryAlignments(props) {
20
20
  catch (e) {
21
21
  // ignore
22
22
  }
23
- return (react_1.default.createElement(BaseFeatureDetail_1.BaseCard, { ...props, title: "Supplementary alignments" },
23
+ return (react_1.default.createElement(BaseCard_1.default, { ...props, title: "Supplementary alignments" },
24
24
  react_1.default.createElement(SupplementaryAlignmentsLocStrings_1.default, { model: model, tag: tag }),
25
25
  viewType ? (react_1.default.createElement(LaunchSupplementaryAlignmentBreakpointSplitViewPanel_1.default, { viewType: viewType, model: model, feature: feature })) : null));
26
26
  }
@@ -4,12 +4,12 @@ exports.getSAFeatures = getSAFeatures;
4
4
  const util_1 = require("@jbrowse/core/util");
5
5
  // locals
6
6
  const MismatchParser_1 = require("../MismatchParser");
7
- const util_2 = require("../util");
8
7
  async function getSAFeatures({ view, feature, }) {
8
+ var _a;
9
9
  const { assemblyManager } = (0, util_1.getSession)(view);
10
10
  const cigar = feature.get('CIGAR');
11
11
  const origStrand = feature.get('strand');
12
- const SA = (0, util_2.getTag)(feature, 'SA') || '';
12
+ const SA = ((_a = feature.get('tags')) === null || _a === void 0 ? void 0 : _a.SA) || '';
13
13
  const readName = feature.get('name');
14
14
  const clipPos = (0, MismatchParser_1.getClip)(cigar, 1);
15
15
  // get the canonical refname for the read because if the read.get('refName')
@@ -92,8 +92,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
92
92
  trackId: string | undefined;
93
93
  trackType: string | undefined;
94
94
  maxDepth: number | undefined;
95
- formattedFields: any;
96
95
  sequenceFeatureDetails: import("mobx-state-tree").ModelSnapshotType<{}>;
96
+ formattedFields: any;
97
97
  finalizedFeatureData: any;
98
98
  } & import("mobx-state-tree")._NotCustomized>;
99
99
  export type AlignmentFeatureWidgetStateModel = ReturnType<typeof stateModelFactory>;
@@ -2,7 +2,7 @@ import { BamFile } from '@gmod/bam';
2
2
  import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
3
3
  import { Region } from '@jbrowse/core/util/types';
4
4
  import { Feature } from '@jbrowse/core/util';
5
- import { IFilter } from '../shared';
5
+ import { FilterBy } from '../shared/types';
6
6
  interface Header {
7
7
  idToName: string[];
8
8
  nameToId: Record<string, number>;
@@ -10,6 +10,7 @@ interface Header {
10
10
  export default class BamAdapter extends BaseFeatureDataAdapter {
11
11
  private samHeader?;
12
12
  private setupP?;
13
+ private ultraLongFeatureCache;
13
14
  private configureP?;
14
15
  protected configurePre(): Promise<{
15
16
  bam: BamFile;
@@ -30,7 +31,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
30
31
  getFeatures(region: Region & {
31
32
  originalRefName?: string;
32
33
  }, opts?: BaseOptions & {
33
- filterBy: IFilter;
34
+ filterBy: FilterBy;
34
35
  }): import("rxjs").Observable<Feature>;
35
36
  getMultiRegionFeatureDensityStats(regions: Region[], opts?: BaseOptions): Promise<import("@jbrowse/core/data_adapters/BaseAdapter").FeatureDensityStats | {
36
37
  bytes: number;
@@ -4,15 +4,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const bam_1 = require("@gmod/bam");
7
+ const operators_1 = require("rxjs/operators");
8
+ const rxjs_1 = require("rxjs");
9
+ // jbrowse
7
10
  const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
8
11
  const util_1 = require("@jbrowse/core/util");
9
12
  const io_1 = require("@jbrowse/core/util/io");
10
- const rxjs_1 = require("@jbrowse/core/util/rxjs");
11
- const operators_1 = require("rxjs/operators");
12
- const rxjs_2 = require("rxjs");
13
+ const rxjs_2 = require("@jbrowse/core/util/rxjs");
14
+ const QuickLRU_1 = __importDefault(require("@jbrowse/core/util/QuickLRU"));
13
15
  // locals
14
16
  const BamSlightlyLazyFeature_1 = __importDefault(require("./BamSlightlyLazyFeature"));
15
17
  class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
18
+ constructor() {
19
+ super(...arguments);
20
+ // used for avoiding re-creation new BamSlightlyLazyFeatures, keeping
21
+ // mismatches in cache. at an average of 100kb-300kb, keeping even just 500
22
+ // of these in memory is memory intensive but can reduce recomputation on
23
+ // these objects
24
+ this.ultraLongFeatureCache = new QuickLRU_1.default({
25
+ maxSize: 500,
26
+ });
27
+ }
16
28
  // derived classes may not use the same configuration so a custom configure
17
29
  // method allows derived classes to override this behavior
18
30
  async configurePre() {
@@ -100,7 +112,7 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
100
112
  end,
101
113
  assemblyName: '',
102
114
  });
103
- const seqChunks = await (0, rxjs_2.firstValueFrom)(features.pipe((0, operators_1.toArray)()));
115
+ const seqChunks = await (0, rxjs_1.firstValueFrom)(features.pipe((0, operators_1.toArray)()));
104
116
  let sequence = '';
105
117
  seqChunks
106
118
  .sort((a, b) => a.get('start') - b.get('start'))
@@ -121,7 +133,7 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
121
133
  getFeatures(region, opts) {
122
134
  const { refName, start, end, originalRefName } = region;
123
135
  const { signal, filterBy, statusCallback = () => { } } = opts || {};
124
- return (0, rxjs_1.ObservableCreate)(async (observer) => {
136
+ return (0, rxjs_2.ObservableCreate)(async (observer) => {
125
137
  const { bam } = await this.configure();
126
138
  await this.setup(opts);
127
139
  const records = await (0, util_1.updateStatus)('Downloading alignments', statusCallback, () => bam.getRecordsForRange(refName, start, end, opts));
@@ -129,26 +141,37 @@ class BamAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
129
141
  const { flagInclude = 0, flagExclude = 0, tagFilter, readName, } = filterBy || {};
130
142
  for (const record of records) {
131
143
  let ref;
132
- if (!record.get('MD')) {
133
- ref = await this.seqFetch(originalRefName || refName, record.get('start'), record.get('end'));
144
+ if (!record.tags.MD) {
145
+ ref = await this.seqFetch(originalRefName || refName, record.start, record.end);
134
146
  }
135
147
  const flags = record.flags;
136
148
  if ((flags & flagInclude) !== flagInclude && !(flags & flagExclude)) {
137
149
  continue;
138
150
  }
139
151
  if (tagFilter) {
140
- const readVal = record.get(tagFilter.tag);
152
+ const readVal = record.tags[tagFilter.tag];
141
153
  const filterVal = tagFilter.value;
142
154
  if (filterVal === '*'
143
- ? readVal !== undefined
155
+ ? readVal === undefined
144
156
  : `${readVal}` !== `${filterVal}`) {
145
157
  continue;
146
158
  }
147
159
  }
148
- if (readName && record.get('name') !== readName) {
160
+ if (readName && record.name !== readName) {
149
161
  continue;
150
162
  }
151
- observer.next(new BamSlightlyLazyFeature_1.default(record, this, ref));
163
+ // retrieve a feature from our feature cache if it is available, the
164
+ // features in the cache have pre-computed mismatches objects that
165
+ // can be re-used across blocks
166
+ const ret = this.ultraLongFeatureCache.get(`${record.id}`);
167
+ if (!ret) {
168
+ const elt = new BamSlightlyLazyFeature_1.default(record, this, ref);
169
+ this.ultraLongFeatureCache.set(`${record.id}`, elt);
170
+ observer.next(elt);
171
+ }
172
+ else {
173
+ observer.next(ret);
174
+ }
152
175
  }
153
176
  observer.complete();
154
177
  });
@@ -6,26 +6,12 @@ export default class BamSlightlyLazyFeature implements Feature {
6
6
  private adapter;
7
7
  private ref?;
8
8
  constructor(record: BamRecord, adapter: BamAdapter, ref?: string | undefined);
9
- _get_name(): any;
10
- _get_type(): string;
11
- _get_score(): number;
12
- _get_flags(): string;
13
- _get_strand(): number;
14
- _get_pair_orientation(): string | undefined;
15
- _get_next_ref(): string | undefined;
16
- _get_next_pos(): number | undefined;
17
- _get_next_segment_position(): string | undefined;
18
- _get_seq(): string;
19
- qualRaw(): Buffer | undefined;
20
- set(): void;
21
- tags(): string[];
22
9
  id(): string;
10
+ get mismatches(): import("../shared/types").Mismatch[];
11
+ get qual(): string | undefined;
23
12
  get(field: string): any;
24
- _get_refName(): string | undefined;
25
13
  parent(): undefined;
26
14
  children(): undefined;
27
- pairedFeature(): boolean;
15
+ get fields(): SimpleFeatureSerialized;
28
16
  toJSON(): SimpleFeatureSerialized;
29
- _get_mismatches(): import("../MismatchParser").Mismatch[];
30
- _get_clipPos(): number;
31
17
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // locals
4
4
  const MismatchParser_1 = require("../MismatchParser");
5
+ const util_1 = require("../shared/util");
5
6
  class BamSlightlyLazyFeature {
6
7
  // uses parameter properties to automatically create fields on the class
7
8
  // https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties
@@ -10,69 +11,22 @@ class BamSlightlyLazyFeature {
10
11
  this.adapter = adapter;
11
12
  this.ref = ref;
12
13
  }
13
- _get_name() {
14
- return this.record.get('name');
15
- }
16
- _get_type() {
17
- return 'match';
18
- }
19
- _get_score() {
20
- return this.record.get('mq');
21
- }
22
- _get_flags() {
23
- return this.record.flags;
24
- }
25
- _get_strand() {
26
- return this.record.isReverseComplemented() ? -1 : 1;
27
- }
28
- _get_pair_orientation() {
29
- return this.record.isPaired() ? this.record.getPairOrientation() : undefined;
30
- }
31
- _get_next_ref() {
32
- return this.record.isPaired()
33
- ? this.adapter.refIdToName(this.record._next_refid())
34
- : undefined;
35
- }
36
- _get_next_pos() {
37
- return this.record.isPaired() ? this.record._next_pos() : undefined;
38
- }
39
- _get_next_segment_position() {
40
- return this.record.isPaired()
41
- ? `${this.adapter.refIdToName(this.record._next_refid())}:${this.record._next_pos() + 1}`
42
- : undefined;
43
- }
44
- _get_seq() {
45
- return this.record.getReadBases();
46
- }
47
- qualRaw() {
48
- return this.record.qualRaw();
14
+ id() {
15
+ return `${this.adapter.id}-${this.record.id}`;
49
16
  }
50
- set() { }
51
- tags() {
52
- const properties = Object.getOwnPropertyNames(BamSlightlyLazyFeature.prototype);
53
- return [
54
- ...new Set(properties
55
- .filter(prop => prop.startsWith('_get_') &&
56
- prop !== '_get_mismatches' &&
57
- prop !== '_get_tags')
58
- .map(methodName => methodName.replace('_get_', ''))
59
- .concat(this.record._tags())),
60
- ];
17
+ get mismatches() {
18
+ return (0, MismatchParser_1.getMismatches)(this.record.CIGAR, this.record.tags.MD, this.record.seq, this.ref, this.record.qual);
61
19
  }
62
- id() {
63
- return `${this.adapter.id}-${this.record.id()}`;
20
+ get qual() {
21
+ var _a;
22
+ return (_a = this.record.qual) === null || _a === void 0 ? void 0 : _a.join(' ');
64
23
  }
65
24
  get(field) {
66
- const methodName = `_get_${field}`;
67
- // @ts-expect-error
68
- if (this[methodName]) {
69
- // @ts-expect-error
70
- return this[methodName]();
71
- }
72
- return this.record.get(field);
73
- }
74
- _get_refName() {
75
- return this.adapter.refIdToName(this.record.seq_id());
25
+ return field === 'mismatches'
26
+ ? this.mismatches
27
+ : field === 'qual'
28
+ ? this.qual
29
+ : this.fields[field];
76
30
  }
77
31
  parent() {
78
32
  return undefined;
@@ -80,23 +34,39 @@ class BamSlightlyLazyFeature {
80
34
  children() {
81
35
  return undefined;
82
36
  }
83
- pairedFeature() {
84
- return false;
85
- }
86
- toJSON() {
37
+ get fields() {
38
+ const r = this.record;
39
+ const a = this.adapter;
40
+ const p = r.isPaired();
87
41
  return {
88
- ...Object.fromEntries(this.tags()
89
- .map(t => [t, this.get(t)])
90
- .filter(elt => elt[1] !== undefined)),
42
+ start: r.start,
43
+ name: r.name,
44
+ end: r.end,
45
+ score: r.score,
46
+ strand: r.strand,
47
+ template_length: r.template_length,
48
+ flags: r.flags,
49
+ tags: r.tags,
50
+ refName: a.refIdToName(r.ref_id),
51
+ CIGAR: r.CIGAR,
52
+ seq: r.seq,
53
+ type: 'match',
54
+ pair_orientation: r.pair_orientation,
55
+ next_ref: p ? a.refIdToName(r.next_refid) : undefined,
56
+ next_pos: p ? r.next_pos : undefined,
57
+ next_segment_position: p
58
+ ? `${a.refIdToName(r.next_refid)}:${r.next_pos + 1}`
59
+ : undefined,
91
60
  uniqueId: this.id(),
92
61
  };
93
62
  }
94
- _get_mismatches() {
95
- return (0, MismatchParser_1.getMismatches)(this.get('CIGAR'), this.get('MD'), this.get('seq'), this.ref, this.qualRaw());
96
- }
97
- _get_clipPos() {
98
- const cigar = this.get('CIGAR') || '';
99
- return (0, MismatchParser_1.getClip)(cigar, this.get('strand'));
63
+ toJSON() {
64
+ return {
65
+ ...this.fields,
66
+ qual: this.qual,
67
+ };
100
68
  }
101
69
  }
102
70
  exports.default = BamSlightlyLazyFeature;
71
+ (0, util_1.cacheGetter)(BamSlightlyLazyFeature, 'fields');
72
+ (0, util_1.cacheGetter)(BamSlightlyLazyFeature, 'mismatches');
@@ -1,8 +1,8 @@
1
1
  import { IndexedCramFile, CramRecord } from '@gmod/cram';
2
2
  import { BaseFeatureDataAdapter, BaseOptions, BaseSequenceAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
- import { Region, Feature } from '@jbrowse/core/util';
3
+ import type { Region, Feature } from '@jbrowse/core/util';
4
4
  import CramSlightlyLazyFeature from './CramSlightlyLazyFeature';
5
- import { IFilter } from '../shared';
5
+ import { FilterBy } from '../shared/types';
6
6
  interface Header {
7
7
  idToName?: string[];
8
8
  nameToId?: Record<string, number>;
@@ -12,6 +12,7 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
12
12
  samHeader: Header;
13
13
  private setupP?;
14
14
  private configureP?;
15
+ private ultraLongFeatureCache;
15
16
  private seqIdToRefName;
16
17
  private seqIdToOriginalRefName;
17
18
  configurePre(): Promise<{
@@ -33,7 +34,7 @@ export default class CramAdapter extends BaseFeatureDataAdapter {
33
34
  getFeatures(region: Region & {
34
35
  originalRefName?: string;
35
36
  }, opts?: BaseOptions & {
36
- filterBy: IFilter;
37
+ filterBy: FilterBy;
37
38
  }): import("rxjs").Observable<Feature>;
38
39
  freeResources(): void;
39
40
  cramRecordToFeature(record: CramRecord): CramSlightlyLazyFeature;
@@ -4,18 +4,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const cram_1 = require("@gmod/cram");
7
+ const operators_1 = require("rxjs/operators");
8
+ const rxjs_1 = require("rxjs");
9
+ // jbrowse
7
10
  const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
8
11
  const util_1 = require("@jbrowse/core/util");
9
12
  const io_1 = require("@jbrowse/core/util/io");
10
- const rxjs_1 = require("@jbrowse/core/util/rxjs");
11
- const operators_1 = require("rxjs/operators");
12
- const rxjs_2 = require("rxjs");
13
+ const rxjs_2 = require("@jbrowse/core/util/rxjs");
14
+ const QuickLRU_1 = __importDefault(require("@jbrowse/core/util/QuickLRU"));
13
15
  // locals
14
16
  const CramSlightlyLazyFeature_1 = __importDefault(require("./CramSlightlyLazyFeature"));
15
17
  class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
18
  constructor() {
17
19
  super(...arguments);
18
20
  this.samHeader = {};
21
+ // used for avoiding re-creation new BamSlightlyLazyFeatures, keeping
22
+ // mismatches in cache. at an average of 100kb-300kb, keeping even just 500
23
+ // of these in memory is fairly intensive but can reduce recomputation on
24
+ // these objects
25
+ this.ultraLongFeatureCache = new QuickLRU_1.default({
26
+ maxSize: 500,
27
+ });
19
28
  // maps a seqId to original refname, passed specially to render args, to a seqid
20
29
  this.seqIdToOriginalRefName = [];
21
30
  }
@@ -62,7 +71,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
62
71
  if (!refName) {
63
72
  throw new Error('unknown');
64
73
  }
65
- const seqChunks = await (0, rxjs_2.firstValueFrom)(sequenceAdapter
74
+ const seqChunks = await (0, rxjs_1.firstValueFrom)(sequenceAdapter
66
75
  .getFeatures({
67
76
  refName,
68
77
  start,
@@ -155,7 +164,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
155
164
  getFeatures(region, opts) {
156
165
  const { signal, filterBy, statusCallback = () => { } } = opts || {};
157
166
  const { refName, start, end, originalRefName } = region;
158
- return (0, rxjs_1.ObservableCreate)(async (observer) => {
167
+ return (0, rxjs_2.ObservableCreate)(async (observer) => {
159
168
  const { cram, samHeader } = await this.setup(opts);
160
169
  const refId = this.refNameToId(refName);
161
170
  if (refId === undefined) {
@@ -182,7 +191,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
182
191
  : record.tags[tagFilter.tag];
183
192
  const filterVal = tagFilter.value;
184
193
  if (filterVal === '*'
185
- ? readVal !== undefined
194
+ ? readVal === undefined
186
195
  : `${readVal}` !== `${filterVal}`) {
187
196
  continue;
188
197
  }
@@ -190,7 +199,15 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
190
199
  if (readName && record.readName !== readName) {
191
200
  continue;
192
201
  }
193
- observer.next(this.cramRecordToFeature(record));
202
+ const ret = this.ultraLongFeatureCache.get(`${record.uniqueId}`);
203
+ if (!ret) {
204
+ const elt = this.cramRecordToFeature(record);
205
+ this.ultraLongFeatureCache.set(`${record.uniqueId}`, elt);
206
+ observer.next(elt);
207
+ }
208
+ else {
209
+ observer.next(ret);
210
+ }
194
211
  }
195
212
  observer.complete();
196
213
  });
@@ -1,39 +1,33 @@
1
- import { Feature, SimpleFeatureSerialized } from '@jbrowse/core/util/simpleFeature';
1
+ import { Feature, SimpleFeatureSerialized } from '@jbrowse/core/util';
2
2
  import { CramRecord } from '@gmod/cram';
3
3
  import CramAdapter from './CramAdapter';
4
4
  export default class CramSlightlyLazyFeature implements Feature {
5
5
  private record;
6
6
  private _store;
7
7
  constructor(record: CramRecord, _store: CramAdapter);
8
- _get_name(): string | undefined;
9
- _get_start(): number;
10
- _get_end(): number;
11
- _get_cram_read_features(): import("@gmod/cram/dist/cramFile/record").ReadFeature[] | undefined;
12
- _get_type(): string;
13
- _get_score(): number | undefined;
14
- _get_flags(): number;
15
- _get_strand(): 1 | -1;
16
- _read_group_id(): string | undefined;
17
- _get_qual(): string;
18
- qualRaw(): number[] | null | undefined;
19
- _get_refName(): string | undefined;
20
- _get_is_paired(): boolean;
21
- _get_pair_orientation(): string | null | undefined;
22
- _get_template_length(): number | undefined;
23
- _get_next_ref(): string | undefined;
24
- _get_next_segment_position(): string | undefined;
25
- _get_next_pos(): number | undefined;
26
- _get_tags(): Record<string, string>;
27
- _get_seq(): string | null | undefined;
28
- _get_CIGAR(): string;
29
- tags(): string[];
8
+ get name(): string | undefined;
9
+ get start(): number;
10
+ get end(): number;
11
+ get score(): number | undefined;
12
+ get flags(): number;
13
+ get strand(): 1 | -1;
14
+ get qual(): string;
15
+ get qualRaw(): number[] | null | undefined;
16
+ get refName(): string;
17
+ get pair_orientation(): string | null | undefined;
18
+ get template_length(): number | undefined;
19
+ get next_ref(): string | undefined;
20
+ get next_segment_position(): string | undefined;
21
+ get is_paired(): boolean;
22
+ get next_pos(): number | undefined;
23
+ get tags(): Record<string, string>;
24
+ get seq(): string | null | undefined;
25
+ get CIGAR(): string;
30
26
  id(): string;
31
27
  get(field: string): any;
32
28
  parent(): undefined;
33
29
  children(): undefined;
34
- set(): void;
35
- pairedFeature(): boolean;
36
- _get_clipPos(): any;
30
+ get mismatches(): import("../shared/types").Mismatch[];
31
+ get fields(): SimpleFeatureSerialized;
37
32
  toJSON(): SimpleFeatureSerialized;
38
- _get_mismatches(): import("./util").Mismatch[];
39
33
  }