@jbrowse/core 1.4.1 → 1.5.2

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 (159) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +4 -4
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +27 -8
  3. package/BaseFeatureWidget/SequenceFeatureDetails.js +10 -10
  4. package/BaseFeatureWidget/index.js +1 -1
  5. package/BaseFeatureWidget/types.d.ts +1 -1
  6. package/BaseFeatureWidget/util.js +3 -3
  7. package/CorePlugin.d.ts +0 -1
  8. package/CorePlugin.js +13 -1
  9. package/PluginLoader.d.ts +26 -4
  10. package/PluginLoader.js +337 -51
  11. package/PluginManager.d.ts +18 -11
  12. package/PluginManager.js +53 -31
  13. package/ReExports/list.js +1 -1
  14. package/ReExports/material-ui-colors.js +38 -38
  15. package/ReExports/modules.d.ts +19 -20
  16. package/ReExports/modules.js +10 -3
  17. package/TextSearch/BaseResults.d.ts +5 -14
  18. package/TextSearch/BaseResults.js +16 -58
  19. package/TextSearch/BaseResults.test.js +1 -11
  20. package/TextSearch/TextSearchManager.d.ts +3 -3
  21. package/TextSearch/TextSearchManager.js +1 -1
  22. package/assemblyManager/assembly.d.ts +21 -8
  23. package/assemblyManager/assembly.js +163 -120
  24. package/assemblyManager/assemblyConfigSchema.d.ts +3 -0
  25. package/assemblyManager/{assemblyConfigSchemas.js → assemblyConfigSchema.js} +35 -27
  26. package/assemblyManager/assemblyManager.d.ts +169 -60
  27. package/assemblyManager/index.d.ts +1 -1
  28. package/assemblyManager/index.js +5 -5
  29. package/configuration/configurationSchema.d.ts +3 -2
  30. package/configuration/configurationSchema.js +7 -10
  31. package/configuration/configurationSchema.test.js +4 -2
  32. package/configuration/configurationSlot.js +5 -4
  33. package/configuration/index.js +4 -4
  34. package/configuration/util.js +5 -5
  35. package/data_adapters/BaseAdapter.d.ts +5 -3
  36. package/data_adapters/BaseAdapter.js +7 -4
  37. package/data_adapters/BaseAdapter.test.js +4 -2
  38. package/data_adapters/CytobandAdapter.d.ts +8 -0
  39. package/data_adapters/CytobandAdapter.js +128 -0
  40. package/data_adapters/dataAdapterCache.js +3 -3
  41. package/package.json +7 -6
  42. package/pluggableElementTypes/AdapterType.d.ts +9 -1
  43. package/pluggableElementTypes/AdapterType.js +20 -0
  44. package/pluggableElementTypes/InternetAccountType.d.ts +12 -0
  45. package/pluggableElementTypes/InternetAccountType.js +64 -0
  46. package/pluggableElementTypes/PluggableElementBase.d.ts +1 -2
  47. package/pluggableElementTypes/PluggableElementBase.js +2 -3
  48. package/pluggableElementTypes/RpcMethodType.d.ts +3 -0
  49. package/pluggableElementTypes/RpcMethodType.js +269 -26
  50. package/pluggableElementTypes/RpcMethodType.test.d.ts +4 -0
  51. package/pluggableElementTypes/RpcMethodType.test.js +118 -0
  52. package/pluggableElementTypes/ViewType.d.ts +1 -1
  53. package/pluggableElementTypes/WidgetType.d.ts +1 -0
  54. package/pluggableElementTypes/index.d.ts +7 -3
  55. package/pluggableElementTypes/index.js +127 -1
  56. package/pluggableElementTypes/models/BaseDisplayModel.d.ts +6 -6
  57. package/pluggableElementTypes/models/BaseDisplayModel.js +1 -3
  58. package/pluggableElementTypes/models/BaseViewModel.js +13 -15
  59. package/pluggableElementTypes/models/InternetAccountModel.d.ts +24 -0
  60. package/pluggableElementTypes/models/InternetAccountModel.js +85 -0
  61. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +4 -0
  62. package/pluggableElementTypes/models/baseInternetAccountConfig.js +25 -0
  63. package/pluggableElementTypes/models/index.d.ts +3 -0
  64. package/pluggableElementTypes/models/index.js +24 -8
  65. package/pluggableElementTypes/renderers/BoxRendererType.js +1 -1
  66. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +1 -1
  67. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +15 -6
  68. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +3 -3
  69. package/pluggableElementTypes/renderers/FeatureRendererType.js +17 -8
  70. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -0
  71. package/pluggableElementTypes/renderers/RendererType.js +4 -1
  72. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +1 -1
  73. package/pluggableElementTypes/renderers/index.d.ts +9 -0
  74. package/pluggableElementTypes/renderers/index.js +63 -0
  75. package/rpc/BaseRpcDriver.js +5 -9
  76. package/rpc/BaseRpcDriver.test.js +6 -6
  77. package/rpc/RpcManager.d.ts +1 -1
  78. package/rpc/RpcManager.js +44 -16
  79. package/rpc/WebWorkerRpcDriver.js +3 -3
  80. package/rpc/coreRpcMethods.d.ts +2 -1
  81. package/rpc/coreRpcMethods.js +109 -75
  82. package/rpc/remoteAbortSignals.js +2 -2
  83. package/ui/App.d.ts +17 -4
  84. package/ui/App.js +55 -41
  85. package/ui/Drawer.d.ts +6 -14
  86. package/ui/Drawer.js +11 -12
  87. package/ui/DrawerWidget.d.ts +5 -3
  88. package/ui/DrawerWidget.js +100 -61
  89. package/ui/ErrorMessage.d.ts +5 -0
  90. package/ui/ErrorMessage.js +54 -0
  91. package/ui/FileSelector/FileSelector.d.ts +11 -0
  92. package/ui/FileSelector/FileSelector.js +198 -0
  93. package/ui/FileSelector/LocalFileChooser.d.ts +7 -0
  94. package/ui/FileSelector/LocalFileChooser.js +79 -0
  95. package/ui/FileSelector/UrlChooser.d.ts +9 -0
  96. package/ui/FileSelector/UrlChooser.js +41 -0
  97. package/ui/FileSelector/index.d.ts +2 -0
  98. package/ui/FileSelector/index.js +13 -0
  99. package/ui/Icons.d.ts +4 -0
  100. package/ui/Icons.js +34 -0
  101. package/ui/Logo.js +1 -1
  102. package/ui/PrerenderedCanvas.d.ts +1 -0
  103. package/ui/PrerenderedCanvas.js +4 -1
  104. package/ui/ResizeHandle.d.ts +2 -3
  105. package/ui/ResizeHandle.js +6 -7
  106. package/ui/SanitizedHTML.js +1 -1
  107. package/ui/Snackbar.js +4 -6
  108. package/ui/SnackbarModel.d.ts +16 -0
  109. package/ui/SnackbarModel.js +56 -0
  110. package/ui/Tooltip.d.ts +1 -1
  111. package/ui/index.js +24 -24
  112. package/ui/theme.js +5 -5
  113. package/util/QuickLRU.d.ts +1 -1
  114. package/util/QuickLRU.js +3 -3
  115. package/util/aborting.d.ts +1 -1
  116. package/util/aborting.js +10 -11
  117. package/util/analytics.d.ts +2 -2
  118. package/util/analytics.js +20 -7
  119. package/util/blockTypes.d.ts +11 -6
  120. package/util/blockTypes.js +7 -1
  121. package/util/color/cssColorsLevel4.js +1 -1
  122. package/util/color/index.js +5 -5
  123. package/util/compositeMap.js +3 -3
  124. package/util/index.d.ts +6 -16
  125. package/util/index.js +76 -100
  126. package/util/io/RemoteFileWithRangeCache.d.ts +17 -0
  127. package/util/io/RemoteFileWithRangeCache.js +266 -0
  128. package/util/io/index.d.ts +4 -2
  129. package/util/io/index.js +134 -25
  130. package/util/jexl.js +4 -1
  131. package/util/layouts/BaseLayout.d.ts +3 -0
  132. package/util/layouts/GranularRectLayout.d.ts +19 -10
  133. package/util/layouts/GranularRectLayout.js +459 -100
  134. package/util/layouts/GranularRectLayout.test.js +57 -10
  135. package/util/layouts/PrecomputedLayout.js +2 -1
  136. package/util/layouts/index.d.ts +7 -0
  137. package/util/layouts/index.js +68 -0
  138. package/util/mst-reflection.js +3 -3
  139. package/util/offscreenCanvasPonyfill.js +1 -1
  140. package/util/range.js +1 -1
  141. package/util/simpleFeature.js +1 -1
  142. package/util/stats.js +2 -2
  143. package/util/tracks.d.ts +31 -362
  144. package/util/tracks.js +74 -190
  145. package/util/types/index.d.ts +54 -10
  146. package/util/types/index.js +110 -8
  147. package/util/types/mst.d.ts +46 -2
  148. package/util/types/mst.js +56 -8
  149. package/util/types/util.d.ts +1 -1
  150. package/util/when.js +1 -1
  151. package/assemblyManager/assemblyConfigSchemas.d.ts +0 -7
  152. package/ui/FileSelector.d.ts +0 -9
  153. package/ui/FileSelector.js +0 -150
  154. package/util/io/LocalFile.d.ts +0 -18
  155. package/util/io/LocalFile.js +0 -220
  156. package/util/io/rangeFetcher.d.ts +0 -3
  157. package/util/io/rangeFetcher.js +0 -236
  158. package/value.d.ts +0 -1
  159. 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.toUrlSafeB64 = toUrlSafeB64;
59
- exports.fromUrlSafeB64 = fromUrlSafeB64;
60
- exports.useDebounce = useDebounce;
61
- exports.useDebouncedCallback = useDebouncedCallback;
62
- exports.findParentThat = findParentThat;
63
- exports.springAnimate = springAnimate;
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.parseLocStringOneBased = parseLocStringOneBased;
71
- exports.parseLocString = parseLocString;
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.blobToDataURL = blobToDataURL;
92
- exports.measureText = measureText;
93
- exports.generateCodonTable = generateCodonTable;
108
+ exports.springAnimate = springAnimate;
109
+ exports.stringify = stringify;
94
110
  exports.updateStatus = updateStatus;
95
- exports.hashCode = hashCode;
96
- exports.objectHash = objectHash;
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
- var currentNode = node;
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 (error) {
877
- handleError(error);
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
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
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;
@@ -1,4 +1,6 @@
1
1
  import { GenericFilehandle } from 'generic-filehandle';
2
+ import { RemoteFileWithRangeCache } from './RemoteFileWithRangeCache';
2
3
  import { FileLocation } from '../types';
3
- export declare const openUrl: (arg: string) => GenericFilehandle;
4
- export declare function openLocation(location: FileLocation): GenericFilehandle;
4
+ import PluginManager from '../../PluginManager';
5
+ export { RemoteFileWithRangeCache };
6
+ export declare function openLocation(location: FileLocation, pluginManager?: PluginManager): GenericFilehandle;