@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
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Instance } from 'mobx-state-tree';
3
3
  import { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
4
- import { IFilter } from '../shared';
4
+ import { ColorBy, FilterBy } from '../shared/types';
5
5
  import { ChainData } from '../shared/fetchChains';
6
6
  /**
7
7
  * #stateModel LinearReadCloudDisplay
@@ -23,20 +23,8 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
23
23
  } & {
24
24
  type: import("mobx-state-tree").ISimpleType<"LinearReadCloudDisplay">;
25
25
  configuration: AnyConfigurationSchemaType;
26
- filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IModelType<{
27
- flagInclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
28
- flagExclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
29
- readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
30
- tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
31
- tag: import("mobx-state-tree").ISimpleType<string>;
32
- value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
33
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
34
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
35
- colorBy: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
36
- type: import("mobx-state-tree").ISimpleType<string>;
37
- tag: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
38
- extra: import("mobx-state-tree").IType<any, any, any>;
39
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
26
+ filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<FilterBy, FilterBy, FilterBy>, [undefined]>;
27
+ colorBy: import("mobx-state-tree").IType<ColorBy | undefined, ColorBy | undefined, ColorBy | undefined>;
40
28
  drawSingletons: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
41
29
  }, {
42
30
  rendererTypeName: string;
@@ -55,9 +43,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
55
43
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
56
44
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
57
45
  type: import("mobx-state-tree").ISimpleType<string>;
58
- rpcDriverName: import("mobx-state-tree" /**
59
- * #property
60
- */).IMaybe<import("mobx-state-tree").ISimpleType<string>>;
46
+ rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
61
47
  }, {
62
48
  rendererTypeName: string;
63
49
  error: unknown;
@@ -76,14 +62,20 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
76
62
  error: unknown;
77
63
  message: string | undefined;
78
64
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
79
- id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
65
+ id: import(
66
+ /**
67
+ * #action
68
+ */
69
+ "mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
80
70
  type: import("mobx-state-tree").ISimpleType<string>;
81
71
  rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
82
72
  }, {
83
73
  rendererTypeName: string;
84
74
  error: unknown;
85
75
  message: string | undefined;
86
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
76
+ }, import("mobx-state-tree" /**
77
+ * #action
78
+ */)._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
87
79
  }> | null;
88
80
  readonly adapterConfig: any;
89
81
  readonly parentTrack: any;
@@ -164,7 +156,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
164
156
  * the canvas
165
157
  */
166
158
  setRef(ref: HTMLCanvasElement | null): void;
167
- setColorScheme(s: {
159
+ setColorScheme(colorBy: {
168
160
  type: string;
169
161
  }): void;
170
162
  /**
@@ -174,7 +166,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
174
166
  /**
175
167
  * #action
176
168
  */
177
- setFilterBy(filter: IFilter): void;
169
+ setFilterBy(filter: FilterBy): void;
178
170
  } & {
179
171
  readonly drawn: boolean;
180
172
  } & {
@@ -35,10 +35,9 @@ const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view"
35
35
  // icons
36
36
  const Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
37
37
  const ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
38
- // locals
39
- const shared_1 = require("../shared");
38
+ const util_2 = require("../shared/util");
40
39
  // async
41
- const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/FilterByTagDialog'))));
40
+ const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/FilterByTagDialog'))));
42
41
  /**
43
42
  * #stateModel LinearReadCloudDisplay
44
43
  * it is not a block based track, hence not BaseLinearDisplay
@@ -61,15 +60,11 @@ function stateModelFactory(configSchema) {
61
60
  /**
62
61
  * #property
63
62
  */
64
- filterBy: mobx_state_tree_1.types.optional(shared_1.FilterModel, {}),
63
+ filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), util_2.defaultFilterFlags),
65
64
  /**
66
65
  * #property
67
66
  */
68
- colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
69
- type: mobx_state_tree_1.types.string,
70
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
71
- extra: mobx_state_tree_1.types.frozen(),
72
- })),
67
+ colorBy: mobx_state_tree_1.types.frozen(),
73
68
  /**
74
69
  * #property
75
70
  */
@@ -121,8 +116,10 @@ function stateModelFactory(configSchema) {
121
116
  setRef(ref) {
122
117
  self.ref = ref;
123
118
  },
124
- setColorScheme(s) {
125
- self.colorBy = (0, mobx_state_tree_1.cast)(s);
119
+ setColorScheme(colorBy) {
120
+ self.colorBy = {
121
+ ...colorBy,
122
+ };
126
123
  },
127
124
  /**
128
125
  * #action
@@ -134,7 +131,9 @@ function stateModelFactory(configSchema) {
134
131
  * #action
135
132
  */
136
133
  setFilterBy(filter) {
137
- self.filterBy = (0, mobx_state_tree_1.cast)(filter);
134
+ self.filterBy = {
135
+ ...filter,
136
+ };
138
137
  },
139
138
  }))
140
139
  .views(self => ({
@@ -213,7 +212,7 @@ function stateModelFactory(configSchema) {
213
212
  * #method
214
213
  */
215
214
  async renderSvg(opts) {
216
- const { renderSvg } = await Promise.resolve().then(() => __importStar(require('../shared/renderSvg')));
215
+ const { renderSvg } = await Promise.resolve().then(() => __importStar(require('../shared/renderSvgUtil')));
217
216
  const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeats')));
218
217
  return renderSvg(self, opts, drawFeats);
219
218
  },
@@ -7,13 +7,21 @@ const react_1 = __importDefault(require("react"));
7
7
  const mobx_react_1 = require("mobx-react");
8
8
  const util_1 = require("@jbrowse/core/util");
9
9
  const plugin_wiggle_1 = require("@jbrowse/plugin-wiggle");
10
+ const mui_1 = require("tss-react/mui");
11
+ const useStyles = (0, mui_1.makeStyles)()(() => ({
12
+ td: {
13
+ whiteSpace: 'nowrap',
14
+ },
15
+ }));
10
16
  const toP = (s = 0) => +(+s).toFixed(1);
11
- const pct = (n, total) => `${toP((n / (total || 1)) * 100)}%`;
12
- const TooltipContents = react_1.default.forwardRef(function TooltipContents2({ feature }, reactRef) {
13
- const start = feature.get('start');
17
+ const pct = (n, total = 1) => `${toP((n / (total || 1)) * 100)}%`;
18
+ const TooltipContents = react_1.default.forwardRef(function TooltipContents2(props, reactRef) {
19
+ const { feature, model } = props;
20
+ const { classes } = useStyles();
21
+ const start = feature.get('start') + 1;
14
22
  const end = feature.get('end');
15
23
  const name = feature.get('refName');
16
- const { refbase, all, total, ref, '-1': rn1, '1': r1, '0': r0, ...info } = feature.get('snpinfo');
24
+ const { refbase, readsCounted, depth, ref, ...info } = feature.get('snpinfo');
17
25
  const loc = [
18
26
  name,
19
27
  start === end ? (0, util_1.toLocale)(start) : `${(0, util_1.toLocale)(start)}..${(0, util_1.toLocale)(end)}`,
@@ -25,36 +33,58 @@ const TooltipContents = react_1.default.forwardRef(function TooltipContents2({ f
25
33
  react_1.default.createElement("caption", null, loc),
26
34
  react_1.default.createElement("thead", null,
27
35
  react_1.default.createElement("tr", null,
36
+ react_1.default.createElement("th", null),
28
37
  react_1.default.createElement("th", null, "Base"),
29
38
  react_1.default.createElement("th", null, "Count"),
30
39
  react_1.default.createElement("th", null, "% of Total"),
31
- react_1.default.createElement("th", null, "Strands"),
32
- react_1.default.createElement("th", null, "Source"))),
40
+ react_1.default.createElement("th", null, "Strands"))),
33
41
  react_1.default.createElement("tbody", null,
34
42
  react_1.default.createElement("tr", null,
43
+ react_1.default.createElement("td", null),
35
44
  react_1.default.createElement("td", null, "Total"),
36
- react_1.default.createElement("td", null, all)),
45
+ react_1.default.createElement("td", null, readsCounted),
46
+ react_1.default.createElement("td", null, " "),
47
+ react_1.default.createElement("td", null, " ")),
37
48
  react_1.default.createElement("tr", null,
49
+ react_1.default.createElement("td", null),
38
50
  react_1.default.createElement("td", null,
39
51
  "REF ",
40
52
  refbase ? `(${refbase.toUpperCase()})` : ''),
41
- react_1.default.createElement("td", null, ref),
42
- react_1.default.createElement("td", null, pct(ref, all)),
53
+ react_1.default.createElement("td", null, ref.entryDepth),
54
+ react_1.default.createElement("td", null, pct(ref.entryDepth, readsCounted)),
43
55
  react_1.default.createElement("td", null,
44
- rn1 ? `${rn1}(-)` : '',
45
- r1 ? `${r1}(+)` : ''),
46
- react_1.default.createElement("td", null)),
47
- Object.entries(info).map(([key, entry]) => Object.entries(entry).map(([base, score]) => (react_1.default.createElement("tr", { key: base },
48
- react_1.default.createElement("td", null, base.toUpperCase()),
49
- react_1.default.createElement("td", null, score.total),
50
- react_1.default.createElement("td", null, base === 'total' || base === 'skip'
56
+ ref['-1'] ? `${ref['-1']}(-)` : '',
57
+ ref['1'] ? `${ref['1']}(+)` : '')),
58
+ Object.entries(info).map(([key, entry]) => Object.entries(entry).map(([base, score]) => (react_1.default.createElement("tr", { key: `${key}_${base}` },
59
+ react_1.default.createElement("td", null,
60
+ react_1.default.createElement(ColorSquare, { model: model, base: base })),
61
+ react_1.default.createElement("td", null,
62
+ base.toUpperCase(),
63
+ " "),
64
+ react_1.default.createElement("td", { className: classes.td }, [
65
+ score.entryDepth,
66
+ score.avgProbability !== undefined
67
+ ? `(avg. ${pct(score.avgProbability)} prob.)`
68
+ : '',
69
+ ]
70
+ .filter(f => !!f)
71
+ .join(' ')),
72
+ react_1.default.createElement("td", null, base === 'depth' || base === 'skip'
51
73
  ? '---'
52
- : pct(score.total, all)),
74
+ : pct(score.entryDepth, readsCounted)),
53
75
  react_1.default.createElement("td", null,
54
76
  score['-1'] ? `${score['-1']}(-)` : '',
55
- score['1'] ? `${score['1']}(+)` : ''),
56
- react_1.default.createElement("td", null, key)))))))));
77
+ score['1'] ? `${score['1']}(+)` : '')))))))));
57
78
  });
79
+ function ColorSquare({ base, model, }) {
80
+ var _a;
81
+ const { visibleModifications } = model;
82
+ return base.startsWith('mod_') ? (react_1.default.createElement("div", { style: {
83
+ width: 10,
84
+ height: 10,
85
+ background: (_a = visibleModifications.get(base.replace('mod_', ''))) === null || _a === void 0 ? void 0 : _a.color,
86
+ } })) : null;
87
+ }
58
88
  const SNPCoverageTooltip = (0, mobx_react_1.observer)(function (props) {
59
89
  const { model } = props;
60
90
  const { featureUnderMouse: feat } = model;
@@ -4,10 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.default = register;
7
- const configSchema_1 = __importDefault(require("./models/configSchema"));
8
- const model_1 = __importDefault(require("./models/model"));
9
7
  const plugin_wiggle_1 = require("@jbrowse/plugin-wiggle");
10
8
  const DisplayType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/DisplayType"));
9
+ // locals
10
+ const configSchema_1 = __importDefault(require("./configSchema"));
11
+ const model_1 = __importDefault(require("./model"));
11
12
  function register(pluginManager) {
12
13
  pluginManager.addDisplayType(() => {
13
14
  const configSchema = (0, configSchema_1.default)(pluginManager);
@@ -1,5 +1,6 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
2
  import { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
3
+ import { ColorBy, FilterBy } from '../shared/types';
3
4
  /**
4
5
  * #stateModel LinearSNPCoverageDisplay
5
6
  * extends
@@ -136,22 +137,11 @@ declare function stateModelFactory(pluginManager: PluginManager, configSchema: A
136
137
  /**
137
138
  * #property
138
139
  */
139
- filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IModelType<{
140
- flagInclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
141
- flagExclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
142
- readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
143
- tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
144
- tag: import("mobx-state-tree").ISimpleType<string>;
145
- value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
146
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
147
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
140
+ filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<FilterBy, FilterBy, FilterBy>, [undefined]>;
148
141
  /**
149
142
  * #property
150
143
  */
151
- colorBy: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
152
- type: import("mobx-state-tree").ISimpleType<string>;
153
- tag: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
154
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
144
+ colorBy: import("mobx-state-tree").IType<ColorBy | undefined, ColorBy | undefined, ColorBy | undefined>;
155
145
  /**
156
146
  * #property
157
147
  */
@@ -34,11 +34,10 @@ const plugin_wiggle_1 = require("@jbrowse/plugin-wiggle");
34
34
  const util_1 = require("@jbrowse/core/util");
35
35
  const serializableFilterChain_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain"));
36
36
  // locals
37
- const shared_1 = require("../../shared");
38
- const util_2 = require("../../util");
39
- const util_3 = require("../../util");
37
+ const util_2 = require("../util");
38
+ const getUniqueModifications_1 = require("../shared/getUniqueModifications");
40
39
  // lazies
41
- const Tooltip = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../components/Tooltip'))));
40
+ const Tooltip = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/Tooltip'))));
42
41
  // using a map because it preserves order
43
42
  const rendererTypes = new Map([['snpcoverage', 'SNPCoverageRenderer']]);
44
43
  /**
@@ -68,21 +67,27 @@ function stateModelFactory(pluginManager, configSchema) {
68
67
  /**
69
68
  * #property
70
69
  */
71
- filterBy: mobx_state_tree_1.types.optional(shared_1.FilterModel, {}),
70
+ filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {
71
+ flagInclude: 0,
72
+ flagExclude: 1540,
73
+ }),
72
74
  /**
73
75
  * #property
74
76
  */
75
- colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
76
- type: mobx_state_tree_1.types.string,
77
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
78
- })),
77
+ colorBy: mobx_state_tree_1.types.frozen(),
79
78
  /**
80
79
  * #property
81
80
  */
82
81
  jexlFilters: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.string), []),
83
82
  }))
84
83
  .volatile(() => ({
85
- modificationTagMap: mobx_1.observable.map({}),
84
+ /**
85
+ * #volatile
86
+ */
87
+ visibleModifications: mobx_1.observable.map({}),
88
+ /**
89
+ * #volatile
90
+ */
86
91
  modificationsReady: false,
87
92
  }))
88
93
  .actions(self => ({
@@ -96,13 +101,19 @@ function stateModelFactory(pluginManager, configSchema) {
96
101
  * #action
97
102
  */
98
103
  setFilterBy(filter) {
99
- self.filterBy = (0, mobx_state_tree_1.cast)(filter);
104
+ self.filterBy = {
105
+ ...filter,
106
+ };
100
107
  },
101
108
  /**
102
109
  * #action
103
110
  */
104
- setColorBy(colorBy) {
105
- self.colorBy = (0, mobx_state_tree_1.cast)(colorBy);
111
+ setColorScheme(colorBy) {
112
+ self.colorBy = colorBy
113
+ ? {
114
+ ...colorBy,
115
+ }
116
+ : undefined;
106
117
  },
107
118
  /**
108
119
  * #action
@@ -113,28 +124,31 @@ function stateModelFactory(pluginManager, configSchema) {
113
124
  /**
114
125
  * #action
115
126
  */
116
- updateModificationColorMap(uniqueModifications) {
117
- uniqueModifications.forEach(value => {
118
- if (!self.modificationTagMap.has(value)) {
119
- self.modificationTagMap.set(value, util_2.modificationColors[value] || (0, util_3.randomColor)());
127
+ updateVisibleModifications(uniqueModifications) {
128
+ for (const modification of uniqueModifications) {
129
+ if (!self.visibleModifications.has(modification.type)) {
130
+ self.visibleModifications.set(modification.type, {
131
+ ...modification,
132
+ color: (0, util_2.getColorForModification)(modification.type),
133
+ });
120
134
  }
121
- });
135
+ }
122
136
  },
123
137
  }))
124
138
  .views(self => {
125
- const { renderProps: superRenderProps } = self;
139
+ const { adapterProps: superAdapterProps } = self;
126
140
  return {
127
141
  /**
128
142
  * #getter
129
143
  */
130
144
  get rendererConfig() {
131
- var _a, _b, _c;
132
145
  const configBlob = (0, configuration_1.getConf)(self, ['renderers', self.rendererTypeName]) || {};
146
+ const { drawArcs, drawInterbaseCounts, drawIndicators } = self;
133
147
  return self.rendererType.configSchema.create({
134
148
  ...configBlob,
135
- drawInterbaseCounts: (_a = self.drawInterbaseCounts) !== null && _a !== void 0 ? _a : configBlob.drawInterbaseCounts,
136
- drawIndicators: (_b = self.drawIndicators) !== null && _b !== void 0 ? _b : configBlob.drawIndicators,
137
- drawArcs: (_c = self.drawArcs) !== null && _c !== void 0 ? _c : configBlob.drawArcs,
149
+ drawInterbaseCounts: drawInterbaseCounts !== null && drawInterbaseCounts !== void 0 ? drawInterbaseCounts : configBlob.drawInterbaseCounts,
150
+ drawIndicators: drawIndicators !== null && drawIndicators !== void 0 ? drawIndicators : configBlob.drawIndicators,
151
+ drawArcs: drawArcs !== null && drawArcs !== void 0 ? drawArcs : configBlob.drawArcs,
138
152
  }, (0, mobx_state_tree_1.getEnv)(self));
139
153
  },
140
154
  /**
@@ -168,28 +182,16 @@ function stateModelFactory(pluginManager, configSchema) {
168
182
  !self.regionTooLarge &&
169
183
  !self.error);
170
184
  },
171
- get renderReady() {
172
- const superProps = superRenderProps();
173
- return !superProps.notReady && self.modificationsReady;
174
- },
175
- get ready() {
176
- return this.renderReady;
177
- },
178
185
  /**
179
186
  * #method
180
187
  */
181
- renderProps() {
182
- const superProps = superRenderProps();
183
- const { colorBy, filterBy, modificationTagMap } = self;
188
+ adapterProps() {
189
+ const superProps = superAdapterProps();
190
+ const { filters, filterBy } = self;
184
191
  return {
185
192
  ...superProps,
186
- notReady: !this.ready,
187
- filters: self.filters,
188
- modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
189
- // must use getSnapshot because otherwise changes to e.g. just the
190
- // colorBy.type are not read
191
- colorBy: colorBy ? (0, mobx_state_tree_1.getSnapshot)(colorBy) : undefined,
192
- filterBy: (0, mobx_state_tree_1.getSnapshot)(filterBy),
193
+ filters,
194
+ filterBy,
193
195
  };
194
196
  },
195
197
  };
@@ -231,14 +233,13 @@ function stateModelFactory(pluginManager, configSchema) {
231
233
  const { staticBlocks } = view;
232
234
  const { colorBy } = self;
233
235
  if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications') {
234
- const adapter = (0, configuration_1.getConf)(self.parentTrack, 'adapter');
235
- const vals = await (0, shared_1.getUniqueModificationValues)({
236
+ const vals = await (0, getUniqueModifications_1.getUniqueModifications)({
236
237
  self,
237
- adapterConfig: adapter,
238
+ adapterConfig: (0, configuration_1.getConf)(self.parentTrack, 'adapter'),
238
239
  blocks: staticBlocks,
239
240
  });
240
241
  if ((0, mobx_state_tree_1.isAlive)(self)) {
241
- self.updateModificationColorMap(vals);
242
+ self.updateVisibleModifications(vals);
242
243
  self.setModificationsReady(true);
243
244
  }
244
245
  }
@@ -249,8 +250,33 @@ function stateModelFactory(pluginManager, configSchema) {
249
250
  },
250
251
  }))
251
252
  .views(self => {
252
- const { trackMenuItems: superTrackMenuItems } = self;
253
+ const { renderProps: superRenderProps, trackMenuItems: superTrackMenuItems, } = self;
253
254
  return {
255
+ /**
256
+ * #getter
257
+ */
258
+ get renderReady() {
259
+ const superProps = superRenderProps();
260
+ return !superProps.notReady && self.modificationsReady;
261
+ },
262
+ /**
263
+ * #getter
264
+ */
265
+ get ready() {
266
+ return this.renderReady;
267
+ },
268
+ /**
269
+ * #method
270
+ */
271
+ renderProps() {
272
+ const { colorBy, visibleModifications } = self;
273
+ return {
274
+ ...superRenderProps(),
275
+ notReady: !this.ready,
276
+ colorBy,
277
+ visibleModifications: Object.fromEntries(visibleModifications.toJSON()),
278
+ };
279
+ },
254
280
  /**
255
281
  * #getter
256
282
  */
@@ -0,0 +1,3 @@
1
+ import { Mismatch } from '../shared/types';
2
+ import type { Buffer } from 'buffer';
3
+ export declare function cigarToMismatches(ops: string[], seq?: string, ref?: string, qual?: Buffer): Mismatch[];
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cigarToMismatches = cigarToMismatches;
4
+ function cigarToMismatches(ops, seq, ref, qual) {
5
+ let roffset = 0; // reference offset
6
+ let soffset = 0; // seq offset
7
+ const mismatches = [];
8
+ const hasRefAndSeq = ref && seq;
9
+ for (let i = 0; i < ops.length; i += 2) {
10
+ const len = +ops[i];
11
+ const op = ops[i + 1];
12
+ if (op === 'M' || op === '=' || op === 'E') {
13
+ if (hasRefAndSeq) {
14
+ for (let j = 0; j < len; j++) {
15
+ if (
16
+ // @ts-ignore in the full yarn build of the repo, this says that
17
+ // object is possibly undefined for some reason, ignored
18
+ seq[soffset + j].toUpperCase() !== ref[roffset + j].toUpperCase()) {
19
+ mismatches.push({
20
+ start: roffset + j,
21
+ type: 'mismatch',
22
+ base: seq[soffset + j],
23
+ altbase: ref[roffset + j],
24
+ length: 1,
25
+ });
26
+ }
27
+ }
28
+ }
29
+ soffset += len;
30
+ }
31
+ if (op === 'I') {
32
+ mismatches.push({
33
+ start: roffset,
34
+ type: 'insertion',
35
+ base: `${len}`,
36
+ length: 0,
37
+ });
38
+ soffset += len;
39
+ }
40
+ else if (op === 'D') {
41
+ mismatches.push({
42
+ start: roffset,
43
+ type: 'deletion',
44
+ base: '*',
45
+ length: len,
46
+ });
47
+ }
48
+ else if (op === 'N') {
49
+ mismatches.push({
50
+ start: roffset,
51
+ type: 'skip',
52
+ base: 'N',
53
+ length: len,
54
+ });
55
+ }
56
+ else if (op === 'X') {
57
+ const r = (seq === null || seq === void 0 ? void 0 : seq.slice(soffset, soffset + len)) || [];
58
+ const q = (qual === null || qual === void 0 ? void 0 : qual.subarray(soffset, soffset + len)) || [];
59
+ for (let j = 0; j < len; j++) {
60
+ mismatches.push({
61
+ start: roffset + j,
62
+ type: 'mismatch',
63
+ base: r[j],
64
+ qual: q[j],
65
+ length: 1,
66
+ });
67
+ }
68
+ soffset += len;
69
+ }
70
+ else if (op === 'H') {
71
+ mismatches.push({
72
+ start: roffset,
73
+ type: 'hardclip',
74
+ base: `H${len}`,
75
+ cliplen: len,
76
+ length: 1,
77
+ });
78
+ }
79
+ else if (op === 'S') {
80
+ mismatches.push({
81
+ start: roffset,
82
+ type: 'softclip',
83
+ base: `S${len}`,
84
+ cliplen: len,
85
+ length: 1,
86
+ });
87
+ soffset += len;
88
+ }
89
+ if (op !== 'I' && op !== 'S' && op !== 'H') {
90
+ roffset += len;
91
+ }
92
+ }
93
+ return mismatches;
94
+ }
@@ -0,0 +1,4 @@
1
+ export declare function getNextRefPos(cigarOps: string[], positions: number[]): {
2
+ ref: number;
3
+ idx: number;
4
+ }[];
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNextRefPos = getNextRefPos;
4
+ // get relative reference sequence positions for positions given relative to
5
+ // the read sequence
6
+ function getNextRefPos(cigarOps, positions) {
7
+ let readPos = 0;
8
+ let refPos = 0;
9
+ let currPos = 0;
10
+ const ret = [];
11
+ for (let i = 0; i < cigarOps.length && currPos < positions.length; i += 2) {
12
+ const len = +cigarOps[i];
13
+ const op = cigarOps[i + 1];
14
+ if (op === 'S' || op === 'I') {
15
+ for (let i = 0; i < len && currPos < positions.length; i++) {
16
+ if (positions[currPos] === readPos + i) {
17
+ currPos++;
18
+ }
19
+ }
20
+ readPos += len;
21
+ }
22
+ else if (op === 'D' || op === 'N') {
23
+ refPos += len;
24
+ }
25
+ else if (op === 'M' || op === 'X' || op === '=') {
26
+ for (let i = 0; i < len && currPos < positions.length; i++) {
27
+ if (positions[currPos] === readPos + i) {
28
+ ret.push({
29
+ ref: refPos + i,
30
+ idx: currPos,
31
+ });
32
+ currPos++;
33
+ }
34
+ }
35
+ readPos += len;
36
+ refPos += len;
37
+ }
38
+ }
39
+ return ret;
40
+ }