@jbrowse/plugin-alignments 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  3. package/dist/BamAdapter/BamAdapter.d.ts +1 -1
  4. package/dist/BamAdapter/BamAdapter.js +1 -0
  5. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  6. package/dist/BamAdapter/BamSlightlyLazyFeature.js +1 -0
  7. package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  8. package/dist/BamAdapter/MismatchParser.d.ts +2 -2
  9. package/dist/BamAdapter/MismatchParser.js +4 -7
  10. package/dist/BamAdapter/MismatchParser.js.map +1 -1
  11. package/dist/BamAdapter/configSchema.js +1 -1
  12. package/dist/BamAdapter/configSchema.js.map +1 -1
  13. package/dist/BamAdapter/index.js +7 -5
  14. package/dist/BamAdapter/index.js.map +1 -1
  15. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +1 -10
  16. package/dist/CramAdapter/CramSlightlyLazyFeature.js +5 -218
  17. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  18. package/dist/CramAdapter/CramTestAdapters.d.ts +1 -1
  19. package/dist/CramAdapter/CramTestAdapters.js +1 -1
  20. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  21. package/dist/CramAdapter/configSchema.js +2 -2
  22. package/dist/CramAdapter/configSchema.js.map +1 -1
  23. package/dist/CramAdapter/index.js +7 -5
  24. package/dist/CramAdapter/index.js.map +1 -1
  25. package/dist/CramAdapter/util.d.ts +18 -0
  26. package/dist/CramAdapter/util.js +241 -0
  27. package/dist/CramAdapter/util.js.map +1 -0
  28. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
  29. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  30. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +1 -1
  31. package/dist/LinearAlignmentsDisplay/models/model.d.ts +5 -5
  32. package/dist/LinearAlignmentsDisplay/models/model.js +7 -7
  33. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  34. package/dist/LinearPileupDisplay/configSchema.d.ts +4 -4
  35. package/dist/LinearPileupDisplay/configSchema.js +2 -2
  36. package/dist/LinearPileupDisplay/configSchema.js.map +1 -1
  37. package/dist/LinearPileupDisplay/index.d.ts +3 -0
  38. package/dist/LinearPileupDisplay/index.js +3 -0
  39. package/dist/LinearPileupDisplay/index.js.map +1 -1
  40. package/dist/LinearPileupDisplay/model.d.ts +19 -9
  41. package/dist/LinearPileupDisplay/model.js +25 -30
  42. package/dist/LinearPileupDisplay/model.js.map +1 -1
  43. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  44. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  45. package/dist/PileupRPC/rpcMethods.d.ts +1 -1
  46. package/dist/PileupRPC/rpcMethods.js +12 -7
  47. package/dist/PileupRPC/rpcMethods.js.map +1 -1
  48. package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  49. package/dist/PileupRenderer/PileupRenderer.js +32 -28
  50. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  51. package/dist/PileupRenderer/index.js +8 -6
  52. package/dist/PileupRenderer/index.js.map +1 -1
  53. package/dist/SNPCoverageAdapter/configSchema.d.ts +2 -3
  54. package/dist/SNPCoverageAdapter/configSchema.js +6 -3
  55. package/dist/SNPCoverageAdapter/configSchema.js.map +1 -1
  56. package/dist/SNPCoverageAdapter/index.d.ts +1 -2
  57. package/dist/SNPCoverageAdapter/index.js +17 -14
  58. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  59. package/dist/index.d.ts +3 -2
  60. package/dist/index.js +4 -2
  61. package/dist/index.js.map +1 -1
  62. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
  63. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
  64. package/esm/BamAdapter/BamAdapter.d.ts +1 -1
  65. package/esm/BamAdapter/BamAdapter.js +1 -0
  66. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  67. package/esm/BamAdapter/BamSlightlyLazyFeature.js +1 -0
  68. package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
  69. package/esm/BamAdapter/MismatchParser.d.ts +2 -2
  70. package/esm/BamAdapter/MismatchParser.js +4 -7
  71. package/esm/BamAdapter/MismatchParser.js.map +1 -1
  72. package/esm/BamAdapter/configSchema.js +1 -1
  73. package/esm/BamAdapter/configSchema.js.map +1 -1
  74. package/esm/BamAdapter/index.js +7 -5
  75. package/esm/BamAdapter/index.js.map +1 -1
  76. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +1 -10
  77. package/esm/CramAdapter/CramSlightlyLazyFeature.js +5 -218
  78. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  79. package/esm/CramAdapter/CramTestAdapters.d.ts +1 -1
  80. package/esm/CramAdapter/CramTestAdapters.js +1 -1
  81. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  82. package/esm/CramAdapter/configSchema.js +2 -2
  83. package/esm/CramAdapter/configSchema.js.map +1 -1
  84. package/esm/CramAdapter/index.js +7 -5
  85. package/esm/CramAdapter/index.js.map +1 -1
  86. package/esm/CramAdapter/util.d.ts +18 -0
  87. package/esm/CramAdapter/util.js +236 -0
  88. package/esm/CramAdapter/util.js.map +1 -0
  89. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
  90. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
  91. package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +1 -1
  92. package/esm/LinearAlignmentsDisplay/models/model.d.ts +5 -5
  93. package/esm/LinearAlignmentsDisplay/models/model.js +7 -7
  94. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  95. package/esm/LinearPileupDisplay/configSchema.d.ts +4 -4
  96. package/esm/LinearPileupDisplay/configSchema.js +2 -2
  97. package/esm/LinearPileupDisplay/configSchema.js.map +1 -1
  98. package/esm/LinearPileupDisplay/index.d.ts +3 -0
  99. package/esm/LinearPileupDisplay/index.js +1 -0
  100. package/esm/LinearPileupDisplay/index.js.map +1 -1
  101. package/esm/LinearPileupDisplay/model.d.ts +19 -9
  102. package/esm/LinearPileupDisplay/model.js +25 -30
  103. package/esm/LinearPileupDisplay/model.js.map +1 -1
  104. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
  105. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +1 -1
  106. package/esm/PileupRPC/rpcMethods.d.ts +1 -1
  107. package/esm/PileupRPC/rpcMethods.js +12 -7
  108. package/esm/PileupRPC/rpcMethods.js.map +1 -1
  109. package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
  110. package/esm/PileupRenderer/PileupRenderer.js +32 -28
  111. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  112. package/esm/PileupRenderer/index.js +8 -6
  113. package/esm/PileupRenderer/index.js.map +1 -1
  114. package/esm/SNPCoverageAdapter/configSchema.d.ts +2 -3
  115. package/esm/SNPCoverageAdapter/configSchema.js +6 -3
  116. package/esm/SNPCoverageAdapter/configSchema.js.map +1 -1
  117. package/esm/SNPCoverageAdapter/index.d.ts +1 -2
  118. package/esm/SNPCoverageAdapter/index.js +17 -15
  119. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  120. package/esm/index.d.ts +3 -2
  121. package/esm/index.js +2 -2
  122. package/esm/index.js.map +1 -1
  123. package/package.json +3 -2
  124. package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +17 -16
  125. package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +1 -473
  126. package/src/AlignmentsFeatureDetail/index.test.js +6 -4
  127. package/src/BamAdapter/BamAdapter.ts +3 -2
  128. package/src/BamAdapter/BamSlightlyLazyFeature.ts +2 -1
  129. package/src/BamAdapter/MismatchParser.test.ts +21 -12
  130. package/src/BamAdapter/MismatchParser.ts +7 -10
  131. package/src/BamAdapter/__snapshots__/BamAdapter.test.ts.snap +135 -135
  132. package/src/BamAdapter/configSchema.ts +1 -1
  133. package/src/BamAdapter/index.ts +7 -8
  134. package/src/CombinationTest.test.ts +107 -0
  135. package/src/CramAdapter/CramSlightlyLazyFeature.ts +10 -219
  136. package/src/CramAdapter/CramTestAdapters.ts +1 -1
  137. package/src/CramAdapter/__snapshots__/CramAdapter.test.ts.snap +31 -31
  138. package/src/CramAdapter/__snapshots__/util.test.ts.snap +14 -0
  139. package/src/CramAdapter/configSchema.ts +2 -3
  140. package/src/CramAdapter/index.ts +7 -8
  141. package/src/CramAdapter/util.test.ts +26 -0
  142. package/src/CramAdapter/util.ts +251 -0
  143. package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -1
  144. package/src/LinearAlignmentsDisplay/models/model.tsx +8 -7
  145. package/src/LinearPileupDisplay/configSchema.ts +3 -5
  146. package/src/LinearPileupDisplay/index.ts +5 -0
  147. package/src/LinearPileupDisplay/model.ts +31 -30
  148. package/src/PileupRPC/rpcMethods.ts +15 -20
  149. package/src/PileupRenderer/{PileupRenderer.tsx → PileupRenderer.ts} +48 -54
  150. package/src/PileupRenderer/index.ts +8 -9
  151. package/src/SNPCoverageAdapter/configSchema.ts +14 -13
  152. package/src/SNPCoverageAdapter/index.ts +17 -18
  153. package/src/__snapshots__/index.test.ts.snap +1 -1
  154. package/src/index.ts +11 -4
@@ -178,9 +178,9 @@ export default class PileupRenderer extends BoxRendererType {
178
178
 
179
179
  // Expand the start and end of feature when softclipping enabled
180
180
  if (showSoftClip) {
181
- const mismatches = feature.get('mismatches') as Mismatch[]
181
+ const mismatches = feature.get('mismatches') as Mismatch[] | undefined
182
182
  const seq = feature.get('seq') as string
183
- if (seq) {
183
+ if (seq && mismatches) {
184
184
  for (let i = 0; i < mismatches.length; i += 1) {
185
185
  const { type, start, cliplen = 0 } = mismatches[i]
186
186
  if (type === 'softclip') {
@@ -849,7 +849,7 @@ export default class PileupRenderer extends BoxRendererType {
849
849
 
850
850
  const pxPerBp = Math.min(1 / bpPerPx, 2)
851
851
  const w = Math.max(minSubfeatureWidth, pxPerBp)
852
- const mismatches: Mismatch[] = feature.get('mismatches')
852
+ const mismatches = feature.get('mismatches') as Mismatch[] | undefined
853
853
  const heightLim = charHeight - 2
854
854
 
855
855
  // extraHorizontallyFlippedOffset is used to draw interbase items, which
@@ -858,6 +858,10 @@ export default class PileupRenderer extends BoxRendererType {
858
858
  ? 1 / bpPerPx + 1
859
859
  : -1
860
860
 
861
+ if (!mismatches) {
862
+ return
863
+ }
864
+
861
865
  // two pass rendering: first pass, draw all the mismatches except wide
862
866
  // insertion markers
863
867
  for (let i = 0; i < mismatches.length; i += 1) {
@@ -1052,7 +1056,7 @@ export default class PileupRenderer extends BoxRendererType {
1052
1056
  const { regions, bpPerPx } = renderArgs
1053
1057
  const [region] = regions
1054
1058
  const minFeatWidth = readConfObject(config, 'minSubfeatureWidth')
1055
- const mismatches: Mismatch[] = feature.get('mismatches')
1059
+ const mismatches = feature.get('mismatches') as Mismatch[] | undefined
1056
1060
  const seq = feature.get('seq')
1057
1061
  const { charWidth, charHeight } = this.getCharWidthHeight()
1058
1062
  const { bases } = theme.palette
@@ -1065,59 +1069,49 @@ export default class PileupRenderer extends BoxRendererType {
1065
1069
  }
1066
1070
 
1067
1071
  // Display all bases softclipped off in lightened colors
1068
- if (seq) {
1069
- mismatches
1070
- .filter(mismatch => mismatch.type === 'softclip')
1071
- .forEach(mismatch => {
1072
- const softClipLength = mismatch.cliplen || 0
1073
- const s = feature.get('start')
1074
- const softClipStart =
1075
- mismatch.start === 0 ? s - softClipLength : s + mismatch.start
1076
-
1077
- for (let k = 0; k < softClipLength; k += 1) {
1078
- const base = seq.charAt(k + mismatch.start)
1079
-
1080
- // If softclip length+start is longer than sequence, no need to
1081
- // continue showing base
1082
- if (!base) {
1083
- return
1084
- }
1085
-
1086
- const [softClipLeftPx, softClipRightPx] = bpSpanPx(
1087
- softClipStart + k,
1088
- softClipStart + k + 1,
1089
- region,
1090
- bpPerPx,
1091
- )
1092
- const softClipWidthPx = Math.max(
1093
- minFeatWidth,
1094
- Math.abs(softClipLeftPx - softClipRightPx),
1095
- )
1072
+ if (!(seq && mismatches)) {
1073
+ return
1074
+ }
1075
+ mismatches
1076
+ .filter(mismatch => mismatch.type === 'softclip')
1077
+ .forEach(mismatch => {
1078
+ const len = mismatch.cliplen || 0
1079
+ const s = feature.get('start')
1080
+ const start = mismatch.start === 0 ? s - len : s + mismatch.start
1081
+
1082
+ for (let k = 0; k < len; k += 1) {
1083
+ const base = seq.charAt(k + mismatch.start)
1084
+
1085
+ // If softclip length+start is longer than sequence, no need to
1086
+ // continue showing base
1087
+ if (!base) {
1088
+ return
1089
+ }
1096
1090
 
1097
- // Black accounts for IUPAC ambiguity code bases such as N that
1098
- // show in soft clipping
1099
- const baseColor = colorForBase[base] || '#000000'
1100
- ctx.fillStyle = baseColor
1101
- fillRect(
1102
- ctx,
1103
- softClipLeftPx,
1104
- topPx,
1105
- softClipWidthPx,
1106
- heightPx,
1107
- canvasWidth,
1108
- )
1091
+ const [leftPx, rightPx] = bpSpanPx(
1092
+ start + k,
1093
+ start + k + 1,
1094
+ region,
1095
+ bpPerPx,
1096
+ )
1097
+ const widthPx = Math.max(minFeatWidth, rightPx - leftPx)
1109
1098
 
1110
- if (softClipWidthPx >= charWidth && heightPx >= charHeight - 5) {
1111
- ctx.fillStyle = theme.palette.getContrastText(baseColor)
1112
- ctx.fillText(
1113
- base,
1114
- softClipLeftPx + (softClipWidthPx - charWidth) / 2 + 1,
1115
- topPx + heightPx,
1116
- )
1117
- }
1099
+ // Black accounts for IUPAC ambiguity code bases such as N that
1100
+ // show in soft clipping
1101
+ const baseColor = colorForBase[base] || '#000000'
1102
+ ctx.fillStyle = baseColor
1103
+ fillRect(ctx, leftPx, topPx, widthPx, heightPx, canvasWidth)
1104
+
1105
+ if (widthPx >= charWidth && heightPx >= charHeight - 5) {
1106
+ ctx.fillStyle = theme.palette.getContrastText(baseColor)
1107
+ ctx.fillText(
1108
+ base,
1109
+ leftPx + (widthPx - charWidth) / 2 + 1,
1110
+ topPx + heightPx,
1111
+ )
1118
1112
  }
1119
- })
1120
- }
1113
+ }
1114
+ })
1121
1115
  }
1122
1116
 
1123
1117
  makeImageData({
@@ -4,13 +4,12 @@ import ReactComponent from './components/PileupRendering'
4
4
  import configSchema from './configSchema'
5
5
 
6
6
  export default function register(pluginManager: PluginManager) {
7
- pluginManager.addRendererType(
8
- () =>
9
- new PileupRenderer({
10
- name: 'PileupRenderer',
11
- ReactComponent,
12
- configSchema,
13
- pluginManager,
14
- }),
15
- )
7
+ pluginManager.addRendererType(() => {
8
+ return new PileupRenderer({
9
+ name: 'PileupRenderer',
10
+ ReactComponent,
11
+ configSchema,
12
+ pluginManager,
13
+ })
14
+ })
16
15
  }
@@ -1,22 +1,23 @@
1
1
  import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
- import PluginManager from '@jbrowse/core/PluginManager'
3
2
 
4
3
  /**
5
4
  * #config SNPCoverageAdapter
6
5
  */
7
6
  function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
8
7
 
9
- const SNPCoverageAdapter = (pluginManager: PluginManager) =>
10
- ConfigurationSchema(
11
- 'SNPCoverageAdapter',
12
- {
13
- /**
14
- * #slot
15
- * normally refers to a BAM or CRAM adapter
16
- */
17
- subadapter: pluginManager.pluggableConfigSchemaType('adapter'),
8
+ const configSchema = ConfigurationSchema(
9
+ 'SNPCoverageAdapter',
10
+ {
11
+ /**
12
+ * #slot
13
+ * normally refers to a BAM or CRAM adapter
14
+ */
15
+ subadapter: {
16
+ type: 'frozen',
17
+ defaultValue: null,
18
18
  },
19
- { explicitlyTyped: true },
20
- )
19
+ },
20
+ { explicitlyTyped: true },
21
+ )
21
22
 
22
- export default SNPCoverageAdapter
23
+ export default configSchema
@@ -1,23 +1,22 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager'
2
2
  import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
3
- import configSchemaFactory from './configSchema'
3
+ import configSchema from './configSchema'
4
4
  import { capabilities } from './SNPCoverageAdapter'
5
5
 
6
- export default (pluginManager: PluginManager) => {
7
- pluginManager.addAdapterType(
8
- () =>
9
- new AdapterType({
10
- name: 'SNPCoverageAdapter',
11
- adapterMetadata: {
12
- category: null,
13
- displayName: null,
14
- hiddenFromGUI: true,
15
- description: null,
16
- },
17
- getAdapterClass: () =>
18
- import('./SNPCoverageAdapter').then(r => r.default),
19
- configSchema: configSchemaFactory(pluginManager),
20
- adapterCapabilities: capabilities,
21
- }),
22
- )
6
+ export default function (pluginManager: PluginManager) {
7
+ pluginManager.addAdapterType(() => {
8
+ return new AdapterType({
9
+ name: 'SNPCoverageAdapter',
10
+ adapterMetadata: {
11
+ category: null,
12
+ displayName: null,
13
+ hiddenFromGUI: true,
14
+ description: null,
15
+ },
16
+ getAdapterClass: () =>
17
+ import('./SNPCoverageAdapter').then(r => r.default),
18
+ configSchema,
19
+ adapterCapabilities: capabilities,
20
+ })
21
+ })
23
22
  }
@@ -1,3 +1,3 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`plugin in a stock JBrowse 1`] = `Object {}`;
3
+ exports[`plugin in a stock JBrowse 1`] = `{}`;
package/src/index.ts CHANGED
@@ -12,7 +12,10 @@ import SNPCoverageRendererF from './SNPCoverageRenderer'
12
12
  import PileupRendererF from './PileupRenderer'
13
13
  import LinearAlignmentsDisplayF from './LinearAlignmentsDisplay'
14
14
  import LinearSNPCoverageDisplayF from './LinearSNPCoverageDisplay'
15
- import LinearPileupDisplayF from './LinearPileupDisplay'
15
+ import LinearPileupDisplayF, {
16
+ linearPileupDisplayStateModelFactory,
17
+ linearPileupDisplayConfigSchemaFactory,
18
+ } from './LinearPileupDisplay'
16
19
  import AlignmentsTrackF from './AlignmentsTrack'
17
20
  import AlignmentsFeatureWidgetF from './AlignmentsFeatureDetail'
18
21
 
@@ -28,9 +31,6 @@ import {
28
31
  TrackTypeGuesser,
29
32
  } from '@jbrowse/core/util/tracks'
30
33
 
31
- export { MismatchParser }
32
- export type { LinearPileupDisplayModel }
33
-
34
34
  export default class AlignmentsPlugin extends Plugin {
35
35
  name = 'AlignmentsPlugin'
36
36
 
@@ -125,3 +125,10 @@ export default class AlignmentsPlugin extends Plugin {
125
125
  )
126
126
  }
127
127
  }
128
+
129
+ export {
130
+ linearPileupDisplayConfigSchemaFactory,
131
+ linearPileupDisplayStateModelFactory,
132
+ MismatchParser,
133
+ }
134
+ export type { LinearPileupDisplayModel }