@jbrowse/plugin-sequence 1.6.9 → 1.7.3
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.
- package/dist/BgzipFastaAdapter/BgzipFastaAdapter.d.ts +7 -7
- package/dist/BgzipFastaAdapter/BgzipFastaAdapter.js +70 -0
- package/dist/BgzipFastaAdapter/BgzipFastaAdapter.test.js +64 -0
- package/dist/BgzipFastaAdapter/configSchema.d.ts +2 -2
- package/dist/BgzipFastaAdapter/configSchema.js +36 -0
- package/dist/BgzipFastaAdapter/index.d.ts +1 -1
- package/dist/BgzipFastaAdapter/index.js +15 -0
- package/dist/ChromSizesAdapter/ChromSizesAdapter.d.ts +19 -19
- package/dist/ChromSizesAdapter/ChromSizesAdapter.js +170 -0
- package/dist/ChromSizesAdapter/ChromSizesAdapter.test.js +46 -0
- package/dist/ChromSizesAdapter/configSchema.d.ts +2 -2
- package/dist/ChromSizesAdapter/configSchema.js +22 -0
- package/dist/ChromSizesAdapter/index.d.ts +1 -1
- package/dist/ChromSizesAdapter/index.js +15 -0
- package/dist/DivSequenceRenderer/components/DivSequenceRendering.d.ts +21 -21
- package/dist/DivSequenceRenderer/components/DivSequenceRendering.js +239 -0
- package/dist/DivSequenceRenderer/components/DivSequenceRendering.test.js +245 -0
- package/dist/DivSequenceRenderer/configSchema.d.ts +2 -2
- package/dist/DivSequenceRenderer/configSchema.js +20 -0
- package/dist/DivSequenceRenderer/index.d.ts +2 -2
- package/dist/DivSequenceRenderer/index.js +23 -0
- package/dist/GCContentAdapter/GCContentAdapter.d.ts +23 -23
- package/dist/GCContentAdapter/GCContentAdapter.js +261 -0
- package/dist/GCContentAdapter/configSchema.d.ts +3 -3
- package/dist/GCContentAdapter/configSchema.js +18 -0
- package/dist/GCContentAdapter/index.d.ts +6 -6
- package/dist/GCContentAdapter/index.js +31 -0
- package/dist/IndexedFastaAdapter/IndexedFastaAdapter.d.ts +25 -25
- package/dist/IndexedFastaAdapter/IndexedFastaAdapter.js +228 -0
- package/dist/IndexedFastaAdapter/IndexedFastaAdapter.test.js +71 -0
- package/dist/IndexedFastaAdapter/configSchema.d.ts +2 -2
- package/dist/IndexedFastaAdapter/configSchema.js +29 -0
- package/dist/IndexedFastaAdapter/index.d.ts +1 -1
- package/dist/IndexedFastaAdapter/index.js +15 -0
- package/dist/LinearReferenceSequenceDisplay/configSchema.d.ts +1 -1
- package/dist/LinearReferenceSequenceDisplay/configSchema.js +18 -0
- package/dist/LinearReferenceSequenceDisplay/index.d.ts +2 -2
- package/dist/LinearReferenceSequenceDisplay/index.js +21 -0
- package/dist/LinearReferenceSequenceDisplay/model.d.ts +208 -208
- package/dist/LinearReferenceSequenceDisplay/model.js +102 -0
- package/dist/TwoBitAdapter/TwoBitAdapter.d.ts +26 -26
- package/dist/TwoBitAdapter/TwoBitAdapter.js +289 -0
- package/dist/TwoBitAdapter/TwoBitAdapter.test.js +94 -0
- package/dist/TwoBitAdapter/configSchema.d.ts +2 -2
- package/dist/TwoBitAdapter/configSchema.js +30 -0
- package/dist/TwoBitAdapter/index.d.ts +1 -1
- package/dist/TwoBitAdapter/index.js +15 -0
- package/dist/declare.d.js +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +325 -6
- package/dist/index.test.js +29 -0
- package/dist/referenceSeqTrackConfig.d.ts +2 -2
- package/dist/referenceSeqTrackConfig.js +88 -0
- package/package.json +5 -7
- package/src/index.ts +7 -8
- package/dist/DivSequenceRenderer/components/DivSequenceRendering.test.d.ts +0 -1
- package/dist/index.test.d.ts +0 -1
- package/dist/plugin-sequence.cjs.development.js +0 -2567
- package/dist/plugin-sequence.cjs.development.js.map +0 -1
- package/dist/plugin-sequence.cjs.production.min.js +0 -2
- package/dist/plugin-sequence.cjs.production.min.js.map +0 -1
- package/dist/plugin-sequence.esm.js +0 -2561
- package/dist/plugin-sequence.esm.js.map +0 -1
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireDefault(require("react"));
|
|
17
|
+
|
|
18
|
+
var _color = require("@jbrowse/core/util/color");
|
|
19
|
+
|
|
20
|
+
var _ui = require("@jbrowse/core/ui");
|
|
21
|
+
|
|
22
|
+
var _mobxReact = require("mobx-react");
|
|
23
|
+
|
|
24
|
+
var _util = require("@jbrowse/core/util");
|
|
25
|
+
|
|
26
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
27
|
+
function Translation(props) {
|
|
28
|
+
var codonTable = props.codonTable,
|
|
29
|
+
seq = props.seq,
|
|
30
|
+
frame = props.frame,
|
|
31
|
+
bpPerPx = props.bpPerPx,
|
|
32
|
+
region = props.region,
|
|
33
|
+
height = props.height,
|
|
34
|
+
y = props.y,
|
|
35
|
+
_props$reverse = props.reverse,
|
|
36
|
+
reverse = _props$reverse === void 0 ? false : _props$reverse,
|
|
37
|
+
theme = props.theme;
|
|
38
|
+
var scale = bpPerPx; // the tilt variable normalizes the frame to where we are starting from,
|
|
39
|
+
// which increases consistency across blocks
|
|
40
|
+
|
|
41
|
+
var tilt = 3 - region.start % 3; // the effectiveFrame incorporates tilt and the frame to say what the
|
|
42
|
+
// effective frame that is plotted. The +3 is for when frame is -2 and this
|
|
43
|
+
// can otherwise result in effectiveFrame -1
|
|
44
|
+
|
|
45
|
+
var effectiveFrame = (frame + tilt + 3) % 3;
|
|
46
|
+
var seqSliced = seq.slice(effectiveFrame);
|
|
47
|
+
var translated = [];
|
|
48
|
+
|
|
49
|
+
for (var i = 0; i < seqSliced.length; i += 3) {
|
|
50
|
+
var codon = seqSliced.slice(i, i + 3);
|
|
51
|
+
var normalizedCodon = reverse ? (0, _util.revcom)(codon) : codon;
|
|
52
|
+
var aminoAcid = codonTable[normalizedCodon] || '';
|
|
53
|
+
translated.push({
|
|
54
|
+
letter: aminoAcid,
|
|
55
|
+
codon: normalizedCodon.toUpperCase()
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var w = 1 / scale * 3;
|
|
60
|
+
var drop = region.start === 0 ? 0 : w;
|
|
61
|
+
var render = 1 / bpPerPx >= 12;
|
|
62
|
+
var width = (region.end - region.start) / bpPerPx;
|
|
63
|
+
var map = ['#d8d8d8', '#adadad', '#8f8f8f'].reverse();
|
|
64
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translated.map(function (element, index) {
|
|
65
|
+
var x = region.reversed ? width - (w * (index + 1) + effectiveFrame / scale - drop) : w * index + effectiveFrame / scale - drop;
|
|
66
|
+
var letter = element.letter,
|
|
67
|
+
codon = element.codon;
|
|
68
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
|
|
69
|
+
key: "".concat(index, "-").concat(letter)
|
|
70
|
+
}, /*#__PURE__*/_react["default"].createElement("rect", {
|
|
71
|
+
x: x,
|
|
72
|
+
y: y,
|
|
73
|
+
width: render ? w : w + 0.7
|
|
74
|
+
/* small fudge factor when zoomed out*/
|
|
75
|
+
,
|
|
76
|
+
height: height,
|
|
77
|
+
stroke: render ? '#555' : 'none',
|
|
78
|
+
fill: _util.defaultStarts.includes(codon) ? theme.palette.startCodon : _util.defaultStops.includes(codon) ? theme.palette.stopCodon : map[Math.abs(frame)]
|
|
79
|
+
}), render ? /*#__PURE__*/_react["default"].createElement("text", {
|
|
80
|
+
x: x + w / 2,
|
|
81
|
+
y: y + height / 2,
|
|
82
|
+
dominantBaseline: "middle",
|
|
83
|
+
textAnchor: "middle"
|
|
84
|
+
}, letter) : null);
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function DNA(props) {
|
|
89
|
+
var bpPerPx = props.bpPerPx,
|
|
90
|
+
region = props.region,
|
|
91
|
+
feature = props.feature,
|
|
92
|
+
theme = props.theme,
|
|
93
|
+
height = props.height,
|
|
94
|
+
seq = props.seq,
|
|
95
|
+
y = props.y;
|
|
96
|
+
var render = 1 / bpPerPx >= 12;
|
|
97
|
+
|
|
98
|
+
var _bpSpanPx = (0, _util.bpSpanPx)(feature.get('start'), feature.get('end'), region, bpPerPx),
|
|
99
|
+
_bpSpanPx2 = (0, _slicedToArray2["default"])(_bpSpanPx, 2),
|
|
100
|
+
leftPx = _bpSpanPx2[0],
|
|
101
|
+
rightPx = _bpSpanPx2[1];
|
|
102
|
+
|
|
103
|
+
var reverse = region.reversed;
|
|
104
|
+
var len = feature.get('end') - feature.get('start');
|
|
105
|
+
var w = Math.max((rightPx - leftPx) / len, 0.8);
|
|
106
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, seq.split('').map(function (letter, index) {
|
|
107
|
+
var color = theme.palette.bases[letter.toUpperCase()];
|
|
108
|
+
var x = reverse ? rightPx - (index + 1) * w : leftPx + index * w;
|
|
109
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
|
|
110
|
+
key: index
|
|
111
|
+
}, /*#__PURE__*/_react["default"].createElement("rect", {
|
|
112
|
+
x: x,
|
|
113
|
+
y: y,
|
|
114
|
+
width: w,
|
|
115
|
+
height: height,
|
|
116
|
+
fill: color ? color.main : '#aaa',
|
|
117
|
+
stroke: render ? '#555' : 'none'
|
|
118
|
+
}), render ? /*#__PURE__*/_react["default"].createElement("text", {
|
|
119
|
+
x: x + w / 2,
|
|
120
|
+
y: y + height / 2,
|
|
121
|
+
dominantBaseline: "middle",
|
|
122
|
+
textAnchor: "middle",
|
|
123
|
+
fill: color ? (0, _color.contrastingTextColor)(color.main) : 'black'
|
|
124
|
+
}, letter) : null);
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
var SequenceSVG = function SequenceSVG(_ref) {
|
|
129
|
+
var regions = _ref.regions,
|
|
130
|
+
configTheme = _ref.theme,
|
|
131
|
+
_ref$features = _ref.features,
|
|
132
|
+
features = _ref$features === void 0 ? new Map() : _ref$features,
|
|
133
|
+
showReverse = _ref.showReverse,
|
|
134
|
+
showForward = _ref.showForward,
|
|
135
|
+
showTranslation = _ref.showTranslation,
|
|
136
|
+
bpPerPx = _ref.bpPerPx;
|
|
137
|
+
|
|
138
|
+
var _regions = (0, _slicedToArray2["default"])(regions, 1),
|
|
139
|
+
region = _regions[0];
|
|
140
|
+
|
|
141
|
+
var theme = (0, _ui.createJBrowseTheme)(configTheme);
|
|
142
|
+
var codonTable = (0, _util.generateCodonTable)(_util.defaultCodonTable);
|
|
143
|
+
var height = 20;
|
|
144
|
+
|
|
145
|
+
var _ref2 = (0, _toConsumableArray2["default"])(features.values()),
|
|
146
|
+
feature = _ref2[0];
|
|
147
|
+
|
|
148
|
+
if (!feature) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
var seq = feature.get('seq');
|
|
153
|
+
|
|
154
|
+
if (!seq) {
|
|
155
|
+
return null;
|
|
156
|
+
} // incrementer for the y-position of the current sequence being rendered
|
|
157
|
+
// (applies to both translation rows and dna rows)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
var currY = -20;
|
|
161
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, showTranslation && (region.reversed ? showReverse : showForward) ? [2, 1, 0].map(function (index) {
|
|
162
|
+
return /*#__PURE__*/_react["default"].createElement(Translation, {
|
|
163
|
+
key: "translation-".concat(index),
|
|
164
|
+
seq: seq,
|
|
165
|
+
y: currY += 20,
|
|
166
|
+
codonTable: codonTable,
|
|
167
|
+
frame: index,
|
|
168
|
+
bpPerPx: bpPerPx,
|
|
169
|
+
region: region,
|
|
170
|
+
theme: theme,
|
|
171
|
+
height: height,
|
|
172
|
+
reverse: region.reversed
|
|
173
|
+
});
|
|
174
|
+
}) : null, showForward ? /*#__PURE__*/_react["default"].createElement(DNA, {
|
|
175
|
+
height: height,
|
|
176
|
+
y: currY += 20,
|
|
177
|
+
feature: feature,
|
|
178
|
+
region: region,
|
|
179
|
+
seq: region.reversed ? (0, _util.complement)(seq) : seq,
|
|
180
|
+
bpPerPx: bpPerPx,
|
|
181
|
+
theme: theme
|
|
182
|
+
}) : null, showReverse ? /*#__PURE__*/_react["default"].createElement(DNA, {
|
|
183
|
+
height: height,
|
|
184
|
+
y: currY += 20,
|
|
185
|
+
feature: feature,
|
|
186
|
+
region: region,
|
|
187
|
+
seq: region.reversed ? seq : (0, _util.complement)(seq),
|
|
188
|
+
bpPerPx: bpPerPx,
|
|
189
|
+
theme: theme
|
|
190
|
+
}) : null, showTranslation && (region.reversed ? showForward : showReverse) ? [0, -1, -2].map(function (index) {
|
|
191
|
+
return /*#__PURE__*/_react["default"].createElement(Translation, {
|
|
192
|
+
key: "rev-translation-".concat(index),
|
|
193
|
+
seq: seq,
|
|
194
|
+
y: currY += 20,
|
|
195
|
+
codonTable: codonTable,
|
|
196
|
+
frame: index,
|
|
197
|
+
bpPerPx: bpPerPx,
|
|
198
|
+
region: region,
|
|
199
|
+
theme: theme,
|
|
200
|
+
height: height,
|
|
201
|
+
reverse: !region.reversed
|
|
202
|
+
});
|
|
203
|
+
}) : null);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
var Wrapper = function Wrapper(_ref3) {
|
|
207
|
+
var exportSVG = _ref3.exportSVG,
|
|
208
|
+
width = _ref3.width,
|
|
209
|
+
totalHeight = _ref3.totalHeight,
|
|
210
|
+
children = _ref3.children;
|
|
211
|
+
return exportSVG ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, children) : /*#__PURE__*/_react["default"].createElement("svg", {
|
|
212
|
+
"data-testid": "sequence_track",
|
|
213
|
+
width: width,
|
|
214
|
+
height: totalHeight,
|
|
215
|
+
style: {
|
|
216
|
+
width: width,
|
|
217
|
+
height: totalHeight
|
|
218
|
+
}
|
|
219
|
+
}, children);
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
function Sequence(props) {
|
|
223
|
+
var regions = props.regions,
|
|
224
|
+
bpPerPx = props.bpPerPx;
|
|
225
|
+
|
|
226
|
+
var _regions2 = (0, _slicedToArray2["default"])(regions, 1),
|
|
227
|
+
region = _regions2[0];
|
|
228
|
+
|
|
229
|
+
var width = (region.end - region.start) / bpPerPx;
|
|
230
|
+
var totalHeight = 200;
|
|
231
|
+
return /*#__PURE__*/_react["default"].createElement(Wrapper, (0, _extends2["default"])({}, props, {
|
|
232
|
+
totalHeight: totalHeight,
|
|
233
|
+
width: width
|
|
234
|
+
}), /*#__PURE__*/_react["default"].createElement(SequenceSVG, props));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
var _default = (0, _mobxReact.observer)(Sequence);
|
|
238
|
+
|
|
239
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
+
|
|
7
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
8
|
+
|
|
9
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
10
|
+
|
|
11
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
12
|
+
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
|
|
15
|
+
var _react = _interopRequireDefault(require("react"));
|
|
16
|
+
|
|
17
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
18
|
+
|
|
19
|
+
var _react2 = require("@testing-library/react");
|
|
20
|
+
|
|
21
|
+
var _ui = require("@jbrowse/core/ui");
|
|
22
|
+
|
|
23
|
+
var _PrecomputedLayout = _interopRequireDefault(require("@jbrowse/core/util/layouts/PrecomputedLayout"));
|
|
24
|
+
|
|
25
|
+
var _simpleFeature = _interopRequireDefault(require("@jbrowse/core/util/simpleFeature"));
|
|
26
|
+
|
|
27
|
+
var _core = require("@material-ui/core");
|
|
28
|
+
|
|
29
|
+
var _DivSequenceRendering = _interopRequireDefault(require("./DivSequenceRendering"));
|
|
30
|
+
|
|
31
|
+
var _configSchema = _interopRequireDefault(require("../configSchema"));
|
|
32
|
+
|
|
33
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
34
|
+
|
|
35
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
36
|
+
|
|
37
|
+
function Rendering(props) {
|
|
38
|
+
return /*#__PURE__*/_react["default"].createElement(_core.ThemeProvider, {
|
|
39
|
+
theme: (0, _ui.createJBrowseTheme)()
|
|
40
|
+
}, /*#__PURE__*/_react["default"].createElement(_DivSequenceRendering["default"], props));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var ErrorCatcher = /*#__PURE__*/function (_React$Component) {
|
|
44
|
+
(0, _inherits2["default"])(ErrorCatcher, _React$Component);
|
|
45
|
+
|
|
46
|
+
var _super = _createSuper(ErrorCatcher);
|
|
47
|
+
|
|
48
|
+
function ErrorCatcher(props) {
|
|
49
|
+
var _this;
|
|
50
|
+
|
|
51
|
+
(0, _classCallCheck2["default"])(this, ErrorCatcher);
|
|
52
|
+
_this = _super.call(this, props);
|
|
53
|
+
_this.state = {
|
|
54
|
+
hasError: false,
|
|
55
|
+
errorText: ''
|
|
56
|
+
};
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
(0, _createClass2["default"])(ErrorCatcher, [{
|
|
61
|
+
key: "render",
|
|
62
|
+
value: function render() {
|
|
63
|
+
var _this$state = this.state,
|
|
64
|
+
hasError = _this$state.hasError,
|
|
65
|
+
errorText = _this$state.errorText;
|
|
66
|
+
|
|
67
|
+
if (hasError) {
|
|
68
|
+
// You can render any custom fallback UI
|
|
69
|
+
return /*#__PURE__*/_react["default"].createElement("h1", {
|
|
70
|
+
className: "error"
|
|
71
|
+
}, errorText);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var children = this.props.children;
|
|
75
|
+
return children;
|
|
76
|
+
}
|
|
77
|
+
}], [{
|
|
78
|
+
key: "getDerivedStateFromError",
|
|
79
|
+
value: function getDerivedStateFromError(error) {
|
|
80
|
+
// Update state so the next render will show the fallback UI.
|
|
81
|
+
return {
|
|
82
|
+
hasError: true,
|
|
83
|
+
errorText: String(error)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}]);
|
|
87
|
+
return ErrorCatcher;
|
|
88
|
+
}(_react["default"].Component);
|
|
89
|
+
|
|
90
|
+
ErrorCatcher.propTypes = {
|
|
91
|
+
children: _propTypes["default"].node.isRequired
|
|
92
|
+
};
|
|
93
|
+
describe('<DivSequenceRendering />', function () {
|
|
94
|
+
// This just keeps our testing logs clean by not displaying `console.error`s
|
|
95
|
+
// from errors we intentionally throw in our tests. Hopefully React will
|
|
96
|
+
// someday provide a way for error boundaries to prevent error logging so we
|
|
97
|
+
// won't have to do this: https://github.com/facebook/react/issues/15069
|
|
98
|
+
var originalError = console.error;
|
|
99
|
+
beforeAll(function () {
|
|
100
|
+
console.error = function () {
|
|
101
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
102
|
+
args[_key] = arguments[_key];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (args[0].includes('feature one did not contain a valid `seq` attribute') || args[0].includes('The above error occurred in the <SequenceDivs> component')) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
originalError.call.apply(originalError, [console].concat(args));
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
afterAll(function () {
|
|
113
|
+
console.error = originalError;
|
|
114
|
+
});
|
|
115
|
+
it('renders with no features', function () {
|
|
116
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
117
|
+
width: 500,
|
|
118
|
+
height: 500,
|
|
119
|
+
regions: [{
|
|
120
|
+
refName: 'zonk',
|
|
121
|
+
start: 0,
|
|
122
|
+
end: 300
|
|
123
|
+
}],
|
|
124
|
+
layout: new _PrecomputedLayout["default"]({
|
|
125
|
+
rectangles: {},
|
|
126
|
+
totalHeight: 20
|
|
127
|
+
}),
|
|
128
|
+
config: _configSchema["default"].create(),
|
|
129
|
+
bpPerPx: 3
|
|
130
|
+
})),
|
|
131
|
+
container = _render.container;
|
|
132
|
+
|
|
133
|
+
expect(container).toMatchSnapshot();
|
|
134
|
+
});
|
|
135
|
+
it('renders with one, zoomed way out', function () {
|
|
136
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
137
|
+
width: 500,
|
|
138
|
+
height: 500,
|
|
139
|
+
regions: [{
|
|
140
|
+
refName: 'zonk',
|
|
141
|
+
start: 0,
|
|
142
|
+
end: 1000
|
|
143
|
+
}],
|
|
144
|
+
features: new Map([['one', new _simpleFeature["default"]({
|
|
145
|
+
uniqueId: 'one',
|
|
146
|
+
start: 1,
|
|
147
|
+
end: 3,
|
|
148
|
+
seq: 'AB'
|
|
149
|
+
})]]),
|
|
150
|
+
config: _configSchema["default"].create({}),
|
|
151
|
+
bpPerPx: 3
|
|
152
|
+
})),
|
|
153
|
+
container = _render2.container;
|
|
154
|
+
|
|
155
|
+
expect(container).toMatchSnapshot();
|
|
156
|
+
});
|
|
157
|
+
it('renders with one feature with no seq, zoomed in, should throw', function () {
|
|
158
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(ErrorCatcher, null, /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
159
|
+
width: 500,
|
|
160
|
+
height: 500,
|
|
161
|
+
regions: [{
|
|
162
|
+
refName: 'zonk',
|
|
163
|
+
start: 0,
|
|
164
|
+
end: 1000
|
|
165
|
+
}],
|
|
166
|
+
features: new Map([['one', new _simpleFeature["default"]({
|
|
167
|
+
uniqueId: 'one',
|
|
168
|
+
start: 1,
|
|
169
|
+
end: 3
|
|
170
|
+
})]]),
|
|
171
|
+
config: _configSchema["default"].create({}),
|
|
172
|
+
bpPerPx: 0.05
|
|
173
|
+
}))),
|
|
174
|
+
container = _render3.container;
|
|
175
|
+
|
|
176
|
+
expect(container).toMatchSnapshot();
|
|
177
|
+
});
|
|
178
|
+
it('renders with one feature with an incorrect seq, zoomed in, should throw', function () {
|
|
179
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(ErrorCatcher, null, /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
180
|
+
width: 500,
|
|
181
|
+
height: 500,
|
|
182
|
+
regions: [{
|
|
183
|
+
refName: 'zonk',
|
|
184
|
+
start: 0,
|
|
185
|
+
end: 1000
|
|
186
|
+
}],
|
|
187
|
+
features: new Map([['one', new _simpleFeature["default"]({
|
|
188
|
+
uniqueId: 'one',
|
|
189
|
+
start: 1,
|
|
190
|
+
end: 3,
|
|
191
|
+
seq: 'ABC'
|
|
192
|
+
})]]),
|
|
193
|
+
config: _configSchema["default"].create({}),
|
|
194
|
+
bpPerPx: 0.05
|
|
195
|
+
}))),
|
|
196
|
+
container = _render4.container;
|
|
197
|
+
|
|
198
|
+
expect(container).toMatchSnapshot();
|
|
199
|
+
});
|
|
200
|
+
it('renders with one feature with a correct seq, zoomed in, should render nicely', function () {
|
|
201
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
202
|
+
width: 500,
|
|
203
|
+
height: 500,
|
|
204
|
+
regions: [{
|
|
205
|
+
refName: 'zonk',
|
|
206
|
+
start: 0,
|
|
207
|
+
end: 1000
|
|
208
|
+
}],
|
|
209
|
+
features: new Map([['one', new _simpleFeature["default"]({
|
|
210
|
+
uniqueId: 'one',
|
|
211
|
+
start: 1,
|
|
212
|
+
end: 10,
|
|
213
|
+
seq: 'ABCDEFGHI'
|
|
214
|
+
})]]),
|
|
215
|
+
config: _configSchema["default"].create({}),
|
|
216
|
+
bpPerPx: 0.05
|
|
217
|
+
})),
|
|
218
|
+
container = _render5.container;
|
|
219
|
+
|
|
220
|
+
expect(container).toMatchSnapshot();
|
|
221
|
+
});
|
|
222
|
+
it('renders with one feature reversed with a correct seq, zoomed in, should render nicely', function () {
|
|
223
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(Rendering, {
|
|
224
|
+
width: 500,
|
|
225
|
+
height: 500,
|
|
226
|
+
regions: [{
|
|
227
|
+
refName: 'zonk',
|
|
228
|
+
start: 0,
|
|
229
|
+
end: 1000,
|
|
230
|
+
reversed: true
|
|
231
|
+
}],
|
|
232
|
+
features: new Map([['one', new _simpleFeature["default"]({
|
|
233
|
+
uniqueId: 'one',
|
|
234
|
+
start: 1,
|
|
235
|
+
end: 10,
|
|
236
|
+
seq: 'ABCDEFGHI'
|
|
237
|
+
})]]),
|
|
238
|
+
config: _configSchema["default"].create({}),
|
|
239
|
+
bpPerPx: 0.05
|
|
240
|
+
})),
|
|
241
|
+
container = _render6.container;
|
|
242
|
+
|
|
243
|
+
expect(container).toMatchSnapshot();
|
|
244
|
+
});
|
|
245
|
+
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
|
|
2
|
-
export default _default;
|
|
1
|
+
declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
9
|
+
|
|
10
|
+
var _default = (0, _configuration.ConfigurationSchema)('DivSequenceRenderer', {
|
|
11
|
+
height: {
|
|
12
|
+
type: 'number',
|
|
13
|
+
description: 'height in pixels of each line of sequence',
|
|
14
|
+
defaultValue: 16
|
|
15
|
+
}
|
|
16
|
+
}, {
|
|
17
|
+
explicitlyTyped: true
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
exports["default"] = _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { default as ReactComponent } from './components/DivSequenceRendering';
|
|
2
|
-
export { default as configSchema } from './configSchema';
|
|
1
|
+
export { default as ReactComponent } from './components/DivSequenceRendering';
|
|
2
|
+
export { default as configSchema } from './configSchema';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "ReactComponent", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _DivSequenceRendering["default"];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "configSchema", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _configSchema["default"];
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
var _DivSequenceRendering = _interopRequireDefault(require("./components/DivSequenceRendering"));
|
|
22
|
+
|
|
23
|
+
var _configSchema = _interopRequireDefault(require("./configSchema"));
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { Region } from '@jbrowse/core/util/types';
|
|
3
|
-
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
4
|
-
export default class extends BaseFeatureDataAdapter {
|
|
5
|
-
private windowSize;
|
|
6
|
-
private windowDelta;
|
|
7
|
-
private gcMode;
|
|
8
|
-
static capabilities: string[];
|
|
9
|
-
configure(): Promise<BaseFeatureDataAdapter>;
|
|
10
|
-
getRefNames(): Promise<string[]>;
|
|
11
|
-
/**
|
|
12
|
-
* Fetch features for a certain region
|
|
13
|
-
* @param param -
|
|
14
|
-
* @returns Observable of Feature objects in the region
|
|
15
|
-
*/
|
|
16
|
-
getFeatures(query: Region, opts: BaseOptions): import("rxjs").Observable<Feature>;
|
|
17
|
-
/**
|
|
18
|
-
* called to provide a hint that data tied to a certain region
|
|
19
|
-
* will not be needed for the forseeable future and can be purged
|
|
20
|
-
* from caches, etc
|
|
21
|
-
*/
|
|
22
|
-
freeResources(): void;
|
|
23
|
-
}
|
|
1
|
+
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
+
import { Region } from '@jbrowse/core/util/types';
|
|
3
|
+
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
4
|
+
export default class extends BaseFeatureDataAdapter {
|
|
5
|
+
private windowSize;
|
|
6
|
+
private windowDelta;
|
|
7
|
+
private gcMode;
|
|
8
|
+
static capabilities: string[];
|
|
9
|
+
configure(): Promise<BaseFeatureDataAdapter>;
|
|
10
|
+
getRefNames(): Promise<string[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Fetch features for a certain region
|
|
13
|
+
* @param param -
|
|
14
|
+
* @returns Observable of Feature objects in the region
|
|
15
|
+
*/
|
|
16
|
+
getFeatures(query: Region, opts: BaseOptions): import("rxjs").Observable<Feature>;
|
|
17
|
+
/**
|
|
18
|
+
* called to provide a hint that data tied to a certain region
|
|
19
|
+
* will not be needed for the forseeable future and can be purged
|
|
20
|
+
* from caches, etc
|
|
21
|
+
*/
|
|
22
|
+
freeResources(): void;
|
|
23
|
+
}
|