@jbrowse/core 1.4.4 → 1.5.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/BaseFeatureWidget/BaseFeatureDetail.d.ts +4 -4
- package/BaseFeatureWidget/BaseFeatureDetail.js +27 -8
- package/BaseFeatureWidget/SequenceFeatureDetails.js +10 -10
- package/BaseFeatureWidget/index.js +1 -1
- package/BaseFeatureWidget/types.d.ts +1 -1
- package/BaseFeatureWidget/util.js +3 -3
- package/CorePlugin.d.ts +0 -1
- package/CorePlugin.js +13 -1
- package/PluginLoader.d.ts +26 -4
- package/PluginLoader.js +337 -51
- package/PluginManager.d.ts +18 -11
- package/PluginManager.js +53 -31
- package/ReExports/list.js +1 -1
- package/ReExports/material-ui-colors.js +38 -38
- package/ReExports/modules.d.ts +19 -20
- package/ReExports/modules.js +10 -3
- package/TextSearch/BaseResults.d.ts +5 -14
- package/TextSearch/BaseResults.js +16 -58
- package/TextSearch/BaseResults.test.js +1 -11
- package/TextSearch/TextSearchManager.d.ts +3 -3
- package/TextSearch/TextSearchManager.js +1 -1
- package/assemblyManager/assembly.d.ts +21 -8
- package/assemblyManager/assembly.js +163 -120
- package/assemblyManager/assemblyConfigSchema.d.ts +3 -0
- package/assemblyManager/{assemblyConfigSchemas.js → assemblyConfigSchema.js} +35 -27
- package/assemblyManager/assemblyManager.d.ts +169 -60
- package/assemblyManager/index.d.ts +1 -1
- package/assemblyManager/index.js +5 -5
- package/configuration/configurationSchema.d.ts +3 -2
- package/configuration/configurationSchema.js +7 -10
- package/configuration/configurationSchema.test.js +4 -2
- package/configuration/configurationSlot.js +5 -4
- package/configuration/index.js +4 -4
- package/configuration/util.js +5 -5
- package/data_adapters/BaseAdapter.d.ts +5 -3
- package/data_adapters/BaseAdapter.js +7 -4
- package/data_adapters/BaseAdapter.test.js +4 -2
- package/data_adapters/CytobandAdapter.d.ts +8 -0
- package/data_adapters/CytobandAdapter.js +128 -0
- package/data_adapters/dataAdapterCache.js +3 -3
- package/package.json +7 -7
- package/pluggableElementTypes/AdapterType.d.ts +9 -1
- package/pluggableElementTypes/AdapterType.js +20 -0
- package/pluggableElementTypes/InternetAccountType.d.ts +12 -0
- package/pluggableElementTypes/InternetAccountType.js +64 -0
- package/pluggableElementTypes/PluggableElementBase.d.ts +1 -2
- package/pluggableElementTypes/PluggableElementBase.js +2 -3
- package/pluggableElementTypes/RpcMethodType.d.ts +3 -0
- package/pluggableElementTypes/RpcMethodType.js +269 -26
- package/pluggableElementTypes/RpcMethodType.test.d.ts +4 -0
- package/pluggableElementTypes/RpcMethodType.test.js +118 -0
- package/pluggableElementTypes/ViewType.d.ts +1 -1
- package/pluggableElementTypes/WidgetType.d.ts +1 -0
- package/pluggableElementTypes/index.d.ts +7 -3
- package/pluggableElementTypes/index.js +127 -1
- package/pluggableElementTypes/models/BaseDisplayModel.d.ts +6 -6
- package/pluggableElementTypes/models/BaseDisplayModel.js +1 -3
- package/pluggableElementTypes/models/BaseViewModel.js +13 -15
- package/pluggableElementTypes/models/InternetAccountModel.d.ts +24 -0
- package/pluggableElementTypes/models/InternetAccountModel.js +85 -0
- package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +4 -0
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +25 -0
- package/pluggableElementTypes/models/index.d.ts +3 -0
- package/pluggableElementTypes/models/index.js +24 -8
- package/pluggableElementTypes/renderers/BoxRendererType.js +1 -1
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +15 -6
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +3 -3
- package/pluggableElementTypes/renderers/FeatureRendererType.js +17 -8
- package/pluggableElementTypes/renderers/RendererType.d.ts +1 -0
- package/pluggableElementTypes/renderers/RendererType.js +4 -1
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +1 -1
- package/pluggableElementTypes/renderers/index.d.ts +9 -0
- package/pluggableElementTypes/renderers/index.js +63 -0
- package/rpc/BaseRpcDriver.js +5 -9
- package/rpc/BaseRpcDriver.test.js +6 -6
- package/rpc/RpcManager.d.ts +1 -1
- package/rpc/RpcManager.js +44 -16
- package/rpc/WebWorkerRpcDriver.js +3 -3
- package/rpc/coreRpcMethods.d.ts +2 -1
- package/rpc/coreRpcMethods.js +109 -75
- package/rpc/remoteAbortSignals.js +2 -2
- package/ui/App.d.ts +17 -4
- package/ui/App.js +55 -41
- package/ui/Drawer.d.ts +6 -14
- package/ui/Drawer.js +11 -12
- package/ui/DrawerWidget.d.ts +5 -3
- package/ui/DrawerWidget.js +100 -61
- package/ui/ErrorMessage.d.ts +5 -0
- package/ui/ErrorMessage.js +54 -0
- package/ui/FileSelector/FileSelector.d.ts +11 -0
- package/ui/FileSelector/FileSelector.js +198 -0
- package/ui/FileSelector/LocalFileChooser.d.ts +7 -0
- package/ui/FileSelector/LocalFileChooser.js +79 -0
- package/ui/FileSelector/UrlChooser.d.ts +9 -0
- package/ui/FileSelector/UrlChooser.js +41 -0
- package/ui/FileSelector/index.d.ts +2 -0
- package/ui/FileSelector/index.js +13 -0
- package/ui/Icons.d.ts +4 -0
- package/ui/Icons.js +34 -0
- package/ui/Logo.js +1 -1
- package/ui/PrerenderedCanvas.d.ts +1 -0
- package/ui/PrerenderedCanvas.js +4 -1
- package/ui/ResizeHandle.d.ts +2 -3
- package/ui/ResizeHandle.js +6 -7
- package/ui/SanitizedHTML.js +1 -1
- package/ui/Snackbar.js +4 -6
- package/ui/SnackbarModel.d.ts +16 -0
- package/ui/SnackbarModel.js +56 -0
- package/ui/Tooltip.d.ts +1 -1
- package/ui/index.js +24 -24
- package/ui/theme.js +5 -5
- package/util/QuickLRU.d.ts +1 -1
- package/util/QuickLRU.js +3 -3
- package/util/aborting.d.ts +1 -1
- package/util/aborting.js +10 -11
- package/util/analytics.d.ts +2 -2
- package/util/analytics.js +20 -7
- package/util/blockTypes.d.ts +11 -6
- package/util/blockTypes.js +7 -1
- package/util/color/cssColorsLevel4.js +1 -1
- package/util/color/index.js +5 -5
- package/util/compositeMap.js +3 -3
- package/util/index.d.ts +6 -16
- package/util/index.js +76 -100
- package/util/io/RemoteFileWithRangeCache.d.ts +17 -0
- package/util/io/RemoteFileWithRangeCache.js +266 -0
- package/util/io/index.d.ts +4 -2
- package/util/io/index.js +134 -25
- package/util/jexl.js +4 -1
- package/util/layouts/BaseLayout.d.ts +3 -0
- package/util/layouts/GranularRectLayout.d.ts +19 -10
- package/util/layouts/GranularRectLayout.js +459 -100
- package/util/layouts/GranularRectLayout.test.js +57 -10
- package/util/layouts/PrecomputedLayout.js +2 -1
- package/util/layouts/index.d.ts +7 -0
- package/util/layouts/index.js +68 -0
- package/util/mst-reflection.js +3 -3
- package/util/offscreenCanvasPonyfill.js +1 -1
- package/util/range.js +1 -1
- package/util/simpleFeature.js +1 -1
- package/util/stats.js +2 -2
- package/util/tracks.d.ts +31 -362
- package/util/tracks.js +74 -190
- package/util/types/index.d.ts +54 -10
- package/util/types/index.js +110 -8
- package/util/types/mst.d.ts +46 -2
- package/util/types/mst.js +56 -8
- package/util/types/util.d.ts +1 -1
- package/util/when.js +1 -1
- package/assemblyManager/assemblyConfigSchemas.d.ts +0 -7
- package/ui/FileSelector.d.ts +0 -9
- package/ui/FileSelector.js +0 -150
- package/util/io/LocalFile.d.ts +0 -18
- package/util/io/LocalFile.js +0 -220
- package/util/io/rangeFetcher.d.ts +0 -3
- package/util/io/rangeFetcher.js +0 -236
- package/value.d.ts +0 -1
- package/value.js +0 -10
package/util/index.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
8
10
|
var _exportNames = {
|
|
9
11
|
inDevelopment: true,
|
|
10
12
|
inProduction: true,
|
|
11
|
-
toUrlSafeB64: true,
|
|
12
|
-
fromUrlSafeB64: true,
|
|
13
13
|
useDebounce: true,
|
|
14
14
|
useDebouncedCallback: true,
|
|
15
15
|
findParentThat: true,
|
|
@@ -53,48 +53,63 @@ var _exportNames = {
|
|
|
53
53
|
generateCodonTable: true,
|
|
54
54
|
updateStatus: true,
|
|
55
55
|
hashCode: true,
|
|
56
|
-
objectHash: true
|
|
56
|
+
objectHash: true,
|
|
57
|
+
SimpleFeature: true,
|
|
58
|
+
isFeature: true
|
|
57
59
|
};
|
|
58
|
-
exports
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
exports.findParentThatIs = findParentThatIs;
|
|
65
|
-
exports.getSession = getSession;
|
|
66
|
-
exports.getContainingView = getContainingView;
|
|
67
|
-
exports.getContainingTrack = getContainingTrack;
|
|
68
|
-
exports.getContainingDisplay = getContainingDisplay;
|
|
60
|
+
Object.defineProperty(exports, "SimpleFeature", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function get() {
|
|
63
|
+
return _simpleFeature.default;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
69
66
|
exports.assembleLocString = assembleLocString;
|
|
70
|
-
exports.
|
|
71
|
-
exports.
|
|
72
|
-
exports.compareLocs = compareLocs;
|
|
73
|
-
exports.compareLocStrings = compareLocStrings;
|
|
74
|
-
exports.clamp = clamp;
|
|
67
|
+
exports.blobToDataURL = blobToDataURL;
|
|
68
|
+
exports.bpSpanPx = bpSpanPx;
|
|
75
69
|
exports.bpToPx = bpToPx;
|
|
76
|
-
exports.radToDeg = radToDeg;
|
|
77
|
-
exports.degToRad = degToRad;
|
|
78
|
-
exports.polarToCartesian = polarToCartesian;
|
|
79
70
|
exports.cartesianToPolar = cartesianToPolar;
|
|
71
|
+
exports.clamp = clamp;
|
|
72
|
+
exports.compareLocStrings = compareLocStrings;
|
|
73
|
+
exports.compareLocs = compareLocs;
|
|
74
|
+
exports.defaultStops = exports.defaultStarts = exports.defaultCodonTable = exports.complement = void 0;
|
|
75
|
+
exports.degToRad = degToRad;
|
|
80
76
|
exports.featureSpanPx = featureSpanPx;
|
|
81
|
-
exports.bpSpanPx = bpSpanPx;
|
|
82
|
-
exports.iterMap = iterMap;
|
|
83
|
-
exports.mergeConfigs = mergeConfigs;
|
|
84
77
|
exports.findLastIndex = findLastIndex;
|
|
78
|
+
exports.findParentThat = findParentThat;
|
|
79
|
+
exports.findParentThatIs = findParentThatIs;
|
|
80
|
+
exports.generateCodonTable = generateCodonTable;
|
|
81
|
+
exports.getContainingDisplay = getContainingDisplay;
|
|
82
|
+
exports.getContainingTrack = getContainingTrack;
|
|
83
|
+
exports.getContainingView = getContainingView;
|
|
84
|
+
exports.getSession = getSession;
|
|
85
|
+
exports.hashCode = hashCode;
|
|
86
|
+
exports.isElectron = exports.inProduction = exports.inDevelopment = void 0;
|
|
87
|
+
Object.defineProperty(exports, "isFeature", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function get() {
|
|
90
|
+
return _simpleFeature.isFeature;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
exports.iterMap = iterMap;
|
|
85
94
|
exports.makeAbortableReaction = makeAbortableReaction;
|
|
95
|
+
exports.measureText = measureText;
|
|
96
|
+
exports.mergeConfigs = mergeConfigs;
|
|
97
|
+
exports.minmax = minmax;
|
|
98
|
+
exports.objectFromEntries = void 0;
|
|
99
|
+
exports.objectHash = objectHash;
|
|
100
|
+
exports.parseLocString = parseLocString;
|
|
101
|
+
exports.parseLocStringOneBased = parseLocStringOneBased;
|
|
102
|
+
exports.polarToCartesian = polarToCartesian;
|
|
103
|
+
exports.rIC = void 0;
|
|
104
|
+
exports.radToDeg = radToDeg;
|
|
86
105
|
exports.renameRegionIfNeeded = renameRegionIfNeeded;
|
|
87
106
|
exports.renameRegionsIfNeeded = renameRegionsIfNeeded;
|
|
88
|
-
exports.minmax = minmax;
|
|
89
|
-
exports.stringify = stringify;
|
|
90
107
|
exports.revcom = revcom;
|
|
91
|
-
exports.
|
|
92
|
-
exports.
|
|
93
|
-
exports.generateCodonTable = generateCodonTable;
|
|
108
|
+
exports.springAnimate = springAnimate;
|
|
109
|
+
exports.stringify = stringify;
|
|
94
110
|
exports.updateStatus = updateStatus;
|
|
95
|
-
exports.
|
|
96
|
-
exports.
|
|
97
|
-
exports.defaultCodonTable = exports.defaultStops = exports.defaultStarts = exports.rIC = exports.complement = exports.isElectron = exports.objectFromEntries = exports.inProduction = exports.inDevelopment = void 0;
|
|
111
|
+
exports.useDebounce = useDebounce;
|
|
112
|
+
exports.useDebouncedCallback = useDebouncedCallback;
|
|
98
113
|
|
|
99
114
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
100
115
|
|
|
@@ -108,20 +123,18 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
108
123
|
|
|
109
124
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
110
125
|
|
|
111
|
-
var _base64Js = require("base64-js");
|
|
112
|
-
|
|
113
126
|
var _mobxStateTree = require("mobx-state-tree");
|
|
114
127
|
|
|
115
128
|
var _mobx = require("mobx");
|
|
116
129
|
|
|
117
|
-
var _pako = require("pako");
|
|
118
|
-
|
|
119
130
|
var _object = _interopRequireDefault(require("object.fromentries"));
|
|
120
131
|
|
|
121
132
|
var _react = require("react");
|
|
122
133
|
|
|
123
134
|
var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
|
124
135
|
|
|
136
|
+
var _simpleFeature = _interopRequireWildcard(require("./simpleFeature"));
|
|
137
|
+
|
|
125
138
|
var _types = require("./types");
|
|
126
139
|
|
|
127
140
|
Object.keys(_types).forEach(function (key) {
|
|
@@ -164,6 +177,20 @@ Object.keys(_when).forEach(function (key) {
|
|
|
164
177
|
});
|
|
165
178
|
});
|
|
166
179
|
|
|
180
|
+
var _range = require("./range");
|
|
181
|
+
|
|
182
|
+
Object.keys(_range).forEach(function (key) {
|
|
183
|
+
if (key === "default" || key === "__esModule") return;
|
|
184
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
185
|
+
if (key in exports && exports[key] === _range[key]) return;
|
|
186
|
+
Object.defineProperty(exports, key, {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function get() {
|
|
189
|
+
return _range[key];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
|
|
167
194
|
var _offscreenCanvasPonyfill = require("./offscreenCanvasPonyfill");
|
|
168
195
|
|
|
169
196
|
Object.keys(_offscreenCanvasPonyfill).forEach(function (key) {
|
|
@@ -192,6 +219,10 @@ Object.keys(_offscreenCanvasUtils).forEach(function (key) {
|
|
|
192
219
|
});
|
|
193
220
|
});
|
|
194
221
|
|
|
222
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
223
|
+
|
|
224
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
225
|
+
|
|
195
226
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
196
227
|
|
|
197
228
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
@@ -210,64 +241,8 @@ if (!Object.fromEntries) {
|
|
|
210
241
|
var inDevelopment = (typeof process === "undefined" ? "undefined" : (0, _typeof2.default)(process)) === 'object' && process.env && process.env.NODE_ENV === 'development';
|
|
211
242
|
exports.inDevelopment = inDevelopment;
|
|
212
243
|
var inProduction = !inDevelopment;
|
|
213
|
-
/**
|
|
214
|
-
* Compress and encode a string as url-safe base64
|
|
215
|
-
* See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
|
|
216
|
-
* @param str- a string to compress and encode
|
|
217
|
-
*/
|
|
218
|
-
|
|
219
244
|
exports.inProduction = inProduction;
|
|
220
245
|
|
|
221
|
-
function toUrlSafeB64(str) {
|
|
222
|
-
var bytes = new TextEncoder().encode(str);
|
|
223
|
-
var deflated = (0, _pako.deflate)(bytes);
|
|
224
|
-
var encoded = (0, _base64Js.fromByteArray)(deflated);
|
|
225
|
-
var pos = encoded.indexOf('=');
|
|
226
|
-
return pos > 0 ? encoded.slice(0, pos).replace(/\+/g, '-').replace(/\//g, '_') : encoded.replace(/\+/g, '-').replace(/\//g, '_');
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Decode and inflate a url-safe base64 to a string
|
|
230
|
-
* See {@link https://en.wikipedia.org/wiki/Base64#URL_applications}
|
|
231
|
-
* @param b64 - a base64 string to decode and inflate
|
|
232
|
-
*/
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
function fromUrlSafeB64(b64) {
|
|
236
|
-
var originalB64 = b64PadSuffix(b64.replace(/-/g, '+').replace(/_/g, '/'));
|
|
237
|
-
var bytes = (0, _base64Js.toByteArray)(originalB64);
|
|
238
|
-
var inflated = (0, _pako.inflate)(bytes);
|
|
239
|
-
return new TextDecoder().decode(inflated);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Pad the end of a base64 string with "=" to make it valid
|
|
243
|
-
* @param b64 - unpadded b64 string
|
|
244
|
-
*/
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
function b64PadSuffix(b64) {
|
|
248
|
-
var num = 0;
|
|
249
|
-
var mo = b64.length % 4;
|
|
250
|
-
|
|
251
|
-
switch (mo) {
|
|
252
|
-
case 3:
|
|
253
|
-
num = 1;
|
|
254
|
-
break;
|
|
255
|
-
|
|
256
|
-
case 2:
|
|
257
|
-
num = 2;
|
|
258
|
-
break;
|
|
259
|
-
|
|
260
|
-
case 0:
|
|
261
|
-
num = 0;
|
|
262
|
-
break;
|
|
263
|
-
|
|
264
|
-
default:
|
|
265
|
-
throw new Error('base64 not a valid length');
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return b64 + '='.repeat(num);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
246
|
function useDebounce(value, delay) {
|
|
272
247
|
var _useState = (0, _react.useState)(value),
|
|
273
248
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -284,7 +259,6 @@ function useDebounce(value, delay) {
|
|
|
284
259
|
}, [value, delay]);
|
|
285
260
|
return debouncedValue;
|
|
286
261
|
} // https://stackoverflow.com/questions/56283920/how-to-debounce-a-callback-in-functional-component-using-hooks
|
|
287
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
288
262
|
|
|
289
263
|
|
|
290
264
|
function useDebouncedCallback(callback) {
|
|
@@ -324,7 +298,11 @@ function useDebouncedCallback(callback) {
|
|
|
324
298
|
|
|
325
299
|
|
|
326
300
|
function findParentThat(node, predicate) {
|
|
327
|
-
|
|
301
|
+
if (!(0, _mobxStateTree.hasParent)(node)) {
|
|
302
|
+
throw new Error('node does not have parent');
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
var currentNode = (0, _mobxStateTree.getParent)(node);
|
|
328
306
|
|
|
329
307
|
while (currentNode && (0, _mobxStateTree.isAlive)(currentNode)) {
|
|
330
308
|
if (predicate(currentNode)) {
|
|
@@ -873,8 +851,8 @@ function makeAbortableReaction(self, dataFunction, asyncReactionFunction, reacti
|
|
|
873
851
|
var reactionDisposer = (0, _mobx.reaction)(function () {
|
|
874
852
|
try {
|
|
875
853
|
return dataFunction(self);
|
|
876
|
-
} catch (
|
|
877
|
-
handleError(
|
|
854
|
+
} catch (e) {
|
|
855
|
+
handleError(e);
|
|
878
856
|
return undefined;
|
|
879
857
|
}
|
|
880
858
|
}, /*#__PURE__*/function () {
|
|
@@ -1230,7 +1208,6 @@ var defaultCodonTable = {
|
|
|
1230
1208
|
* take CodonTable above and generate larger codon table that includes
|
|
1231
1209
|
* all permutations of upper and lower case nucleotides
|
|
1232
1210
|
*/
|
|
1233
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1234
1211
|
|
|
1235
1212
|
exports.defaultCodonTable = defaultCodonTable;
|
|
1236
1213
|
|
|
@@ -1311,8 +1288,7 @@ function hashCode(str) {
|
|
|
1311
1288
|
}
|
|
1312
1289
|
|
|
1313
1290
|
return hash;
|
|
1314
|
-
}
|
|
1315
|
-
|
|
1291
|
+
}
|
|
1316
1292
|
|
|
1317
1293
|
function objectHash(obj) {
|
|
1318
1294
|
return "".concat(hashCode(JSON.stringify(obj)));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { RemoteFile, PolyfilledResponse } from 'generic-filehandle';
|
|
3
|
+
interface BinaryRangeResponse {
|
|
4
|
+
headers: Record<string, string>;
|
|
5
|
+
requestDate: Date;
|
|
6
|
+
responseDate: Date;
|
|
7
|
+
buffer: Buffer;
|
|
8
|
+
}
|
|
9
|
+
export declare function clearCache(): void;
|
|
10
|
+
export declare class RemoteFileWithRangeCache extends RemoteFile {
|
|
11
|
+
fetch(url: RequestInfo, init?: RequestInit): Promise<PolyfilledResponse>;
|
|
12
|
+
fetchBinaryRange(url: string, start: number, end: number, options?: {
|
|
13
|
+
headers?: HeadersInit;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}): Promise<BinaryRangeResponse>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.RemoteFileWithRangeCache = void 0;
|
|
9
|
+
exports.clearCache = clearCache;
|
|
10
|
+
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
|
|
13
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
+
|
|
15
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
16
|
+
|
|
17
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
18
|
+
|
|
19
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
20
|
+
|
|
21
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
22
|
+
|
|
23
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
24
|
+
|
|
25
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
26
|
+
|
|
27
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
28
|
+
|
|
29
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
30
|
+
|
|
31
|
+
var _httpRangeFetcher = require("http-range-fetcher");
|
|
32
|
+
|
|
33
|
+
var _buffer = require("buffer");
|
|
34
|
+
|
|
35
|
+
var _genericFilehandle = require("generic-filehandle");
|
|
36
|
+
|
|
37
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
38
|
+
|
|
39
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
40
|
+
|
|
41
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
42
|
+
|
|
43
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
44
|
+
|
|
45
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
46
|
+
|
|
47
|
+
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); }; }
|
|
48
|
+
|
|
49
|
+
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; } }
|
|
50
|
+
|
|
51
|
+
var fetchers = {};
|
|
52
|
+
|
|
53
|
+
function binaryRangeFetch(url, start, end) {
|
|
54
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
55
|
+
var fetcher = fetchers[url];
|
|
56
|
+
|
|
57
|
+
if (!fetcher) {
|
|
58
|
+
throw new Error("fetch not registered for ".concat(url));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return fetcher(url, start, end, options);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
var globalRangeCache = new _httpRangeFetcher.HttpRangeFetcher({
|
|
65
|
+
fetch: binaryRangeFetch,
|
|
66
|
+
size: 500 * Math.pow(1024, 2),
|
|
67
|
+
// 500MiB
|
|
68
|
+
chunkSize: 128 * 124,
|
|
69
|
+
// 128KiB
|
|
70
|
+
maxFetchSize: 100 * Math.pow(1024, 2),
|
|
71
|
+
// 100MiB
|
|
72
|
+
minimumTTL: 24 * 60 * 60 * 1000 // 1 day
|
|
73
|
+
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
function clearCache() {
|
|
77
|
+
globalRangeCache.reset();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
var RemoteFileWithRangeCache = /*#__PURE__*/function (_RemoteFile) {
|
|
81
|
+
(0, _inherits2.default)(RemoteFileWithRangeCache, _RemoteFile);
|
|
82
|
+
|
|
83
|
+
var _super = _createSuper(RemoteFileWithRangeCache);
|
|
84
|
+
|
|
85
|
+
function RemoteFileWithRangeCache() {
|
|
86
|
+
(0, _classCallCheck2.default)(this, RemoteFileWithRangeCache);
|
|
87
|
+
return _super.apply(this, arguments);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
(0, _createClass2.default)(RemoteFileWithRangeCache, [{
|
|
91
|
+
key: "fetch",
|
|
92
|
+
value: function () {
|
|
93
|
+
var _fetch = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url, init) {
|
|
94
|
+
var requestHeaders, range, _ref, _ref2, rangeParse, _rangeParse, _start, _end, s, e, response, headers;
|
|
95
|
+
|
|
96
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
97
|
+
while (1) {
|
|
98
|
+
switch (_context.prev = _context.next) {
|
|
99
|
+
case 0:
|
|
100
|
+
if (!fetchers[String(url)]) {
|
|
101
|
+
fetchers[String(url)] = this.fetchBinaryRange.bind(this);
|
|
102
|
+
} // if it is a range request, route it through the range cache
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
requestHeaders = init && init.headers;
|
|
106
|
+
|
|
107
|
+
if (requestHeaders) {
|
|
108
|
+
if (requestHeaders instanceof Headers) {
|
|
109
|
+
range = requestHeaders.get('range');
|
|
110
|
+
} else if (Array.isArray(requestHeaders)) {
|
|
111
|
+
;
|
|
112
|
+
_ref = requestHeaders.find(function (_ref3) {
|
|
113
|
+
var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
|
|
114
|
+
key = _ref4[0];
|
|
115
|
+
|
|
116
|
+
return key === 'range';
|
|
117
|
+
}) || [undefined, undefined];
|
|
118
|
+
_ref2 = (0, _slicedToArray2.default)(_ref, 2);
|
|
119
|
+
range = _ref2[1];
|
|
120
|
+
} else {
|
|
121
|
+
range = requestHeaders.range;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!range) {
|
|
126
|
+
_context.next = 14;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
rangeParse = /bytes=(\d+)-(\d+)/.exec(range);
|
|
131
|
+
|
|
132
|
+
if (!rangeParse) {
|
|
133
|
+
_context.next = 14;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
_rangeParse = (0, _slicedToArray2.default)(rangeParse, 3), _start = _rangeParse[1], _end = _rangeParse[2];
|
|
138
|
+
s = parseInt(_start, 10);
|
|
139
|
+
e = parseInt(_end, 10);
|
|
140
|
+
_context.next = 11;
|
|
141
|
+
return globalRangeCache.getRange(url, s, e - s + 1, {
|
|
142
|
+
signal: init && init.signal
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
case 11:
|
|
146
|
+
response = _context.sent;
|
|
147
|
+
headers = response.headers;
|
|
148
|
+
return _context.abrupt("return", new Response(response.buffer, {
|
|
149
|
+
status: 206,
|
|
150
|
+
headers: headers
|
|
151
|
+
}));
|
|
152
|
+
|
|
153
|
+
case 14:
|
|
154
|
+
return _context.abrupt("return", (0, _get2.default)((0, _getPrototypeOf2.default)(RemoteFileWithRangeCache.prototype), "fetch", this).call(this, url, init));
|
|
155
|
+
|
|
156
|
+
case 15:
|
|
157
|
+
case "end":
|
|
158
|
+
return _context.stop();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}, _callee, this);
|
|
162
|
+
}));
|
|
163
|
+
|
|
164
|
+
function fetch(_x, _x2) {
|
|
165
|
+
return _fetch.apply(this, arguments);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return fetch;
|
|
169
|
+
}()
|
|
170
|
+
}, {
|
|
171
|
+
key: "fetchBinaryRange",
|
|
172
|
+
value: function () {
|
|
173
|
+
var _fetchBinaryRange = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(url, start, end) {
|
|
174
|
+
var options,
|
|
175
|
+
requestDate,
|
|
176
|
+
requestHeaders,
|
|
177
|
+
res,
|
|
178
|
+
responseDate,
|
|
179
|
+
errorMessage,
|
|
180
|
+
hint,
|
|
181
|
+
headers,
|
|
182
|
+
_iterator,
|
|
183
|
+
_step,
|
|
184
|
+
_step$value,
|
|
185
|
+
k,
|
|
186
|
+
v,
|
|
187
|
+
arrayBuffer,
|
|
188
|
+
_args2 = arguments;
|
|
189
|
+
|
|
190
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
191
|
+
while (1) {
|
|
192
|
+
switch (_context2.prev = _context2.next) {
|
|
193
|
+
case 0:
|
|
194
|
+
options = _args2.length > 3 && _args2[3] !== undefined ? _args2[3] : {};
|
|
195
|
+
requestDate = new Date();
|
|
196
|
+
requestHeaders = _objectSpread(_objectSpread({}, options.headers), {}, {
|
|
197
|
+
range: "bytes=".concat(start, "-").concat(end)
|
|
198
|
+
});
|
|
199
|
+
_context2.next = 5;
|
|
200
|
+
return (0, _get2.default)((0, _getPrototypeOf2.default)(RemoteFileWithRangeCache.prototype), "fetch", this).call(this, url, _objectSpread(_objectSpread({}, options), {}, {
|
|
201
|
+
headers: requestHeaders
|
|
202
|
+
}));
|
|
203
|
+
|
|
204
|
+
case 5:
|
|
205
|
+
res = _context2.sent;
|
|
206
|
+
responseDate = new Date();
|
|
207
|
+
|
|
208
|
+
if (!(res.status !== 206)) {
|
|
209
|
+
_context2.next = 11;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
errorMessage = "HTTP ".concat(res.status, " (").concat(res.statusText, ") when fetching ").concat(url, " bytes ").concat(start, "-").concat(end);
|
|
214
|
+
hint = ' (should be 206 for range requests)';
|
|
215
|
+
throw new Error("".concat(errorMessage).concat(res.status === 200 ? hint : ''));
|
|
216
|
+
|
|
217
|
+
case 11:
|
|
218
|
+
// translate the Headers object into a regular key -> value object.
|
|
219
|
+
// will miss duplicate headers of course
|
|
220
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
221
|
+
headers = {};
|
|
222
|
+
_iterator = _createForOfIteratorHelper(res.headers.entries());
|
|
223
|
+
|
|
224
|
+
try {
|
|
225
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
226
|
+
_step$value = (0, _slicedToArray2.default)(_step.value, 2), k = _step$value[0], v = _step$value[1];
|
|
227
|
+
headers[k] = v;
|
|
228
|
+
} // return the response headers, and the data buffer
|
|
229
|
+
|
|
230
|
+
} catch (err) {
|
|
231
|
+
_iterator.e(err);
|
|
232
|
+
} finally {
|
|
233
|
+
_iterator.f();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
_context2.next = 16;
|
|
237
|
+
return res.arrayBuffer();
|
|
238
|
+
|
|
239
|
+
case 16:
|
|
240
|
+
arrayBuffer = _context2.sent;
|
|
241
|
+
return _context2.abrupt("return", {
|
|
242
|
+
headers: headers,
|
|
243
|
+
requestDate: requestDate,
|
|
244
|
+
responseDate: responseDate,
|
|
245
|
+
buffer: _buffer.Buffer.from(arrayBuffer)
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
case 18:
|
|
249
|
+
case "end":
|
|
250
|
+
return _context2.stop();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}, _callee2, this);
|
|
254
|
+
}));
|
|
255
|
+
|
|
256
|
+
function fetchBinaryRange(_x3, _x4, _x5) {
|
|
257
|
+
return _fetchBinaryRange.apply(this, arguments);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return fetchBinaryRange;
|
|
261
|
+
}()
|
|
262
|
+
}]);
|
|
263
|
+
return RemoteFileWithRangeCache;
|
|
264
|
+
}(_genericFilehandle.RemoteFile);
|
|
265
|
+
|
|
266
|
+
exports.RemoteFileWithRangeCache = RemoteFileWithRangeCache;
|
package/util/io/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GenericFilehandle } from 'generic-filehandle';
|
|
2
|
+
import { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';
|
|
2
3
|
import { FileLocation } from '../types';
|
|
3
|
-
|
|
4
|
-
export
|
|
4
|
+
import PluginManager from '../../PluginManager';
|
|
5
|
+
export { RemoteFileWithRangeCache };
|
|
6
|
+
export declare function openLocation(location: FileLocation, pluginManager?: PluginManager): GenericFilehandle;
|