@jbrowse/core 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +2 -1
  2. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +4 -4
  3. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +10 -9
  4. package/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.js +3 -13
  5. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.d.ts +2 -1
  6. package/BaseFeatureWidget/BaseFeatureDetail/SimpleField.js +2 -2
  7. package/CorePlugin.js +2 -2
  8. package/PluginLoader.js +3 -3
  9. package/PluginManager.d.ts +1 -1
  10. package/PluginManager.js +15 -14
  11. package/ReExports/modules.d.ts +1 -1
  12. package/ReExports/modules.js +1 -22
  13. package/assemblyManager/assemblyManager.js +1 -1
  14. package/configuration/configurationSchema.js +2 -2
  15. package/configuration/util.js +2 -2
  16. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +2 -2
  17. package/data_adapters/BaseAdapter/BaseAdapter.js +1 -0
  18. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.js +9 -2
  19. package/data_adapters/BaseAdapter/BaseOptions.d.ts +0 -1
  20. package/data_adapters/BaseAdapter/types.d.ts +1 -1
  21. package/data_adapters/CytobandAdapter/configSchema.js +17 -2
  22. package/data_adapters/dataAdapterCache.js +4 -4
  23. package/package.json +5 -5
  24. package/pluggableElementTypes/RpcMethodTypeWithFiltersAndRenameRegions.d.ts +3 -1
  25. package/pluggableElementTypes/models/BaseTrackModel.js +3 -1
  26. package/pluggableElementTypes/models/baseTrackConfig.js +2 -2
  27. package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -9
  28. package/pluggableElementTypes/renderers/FeatureRendererType.js +1 -0
  29. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +2 -4
  30. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +2 -30
  31. package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +1 -1
  32. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +2 -30
  33. package/pluggableElementTypes/renderers/ServerSideRendererType.js +6 -7
  34. package/rpc/methods/CoreFreeResources.js +2 -2
  35. package/tsconfig.build.tsbuildinfo +1 -1
  36. package/ui/DataGridFlexContainer.d.ts +3 -0
  37. package/ui/DataGridFlexContainer.js +15 -0
  38. package/ui/theme.js +5 -5
  39. package/util/Base1DUtils.js +1 -1
  40. package/util/analytics.js +2 -2
  41. package/util/cluster.d.ts +17 -0
  42. package/util/cluster.js +96 -0
  43. package/util/idMaker.d.ts +1 -1
  44. package/util/idMaker.js +1 -1
  45. package/util/index.d.ts +4 -1
  46. package/util/index.js +41 -10
  47. package/util/layouts/PrecomputedMultiLayout.js +2 -2
  48. package/util/map-obj.js +2 -2
  49. package/util/offscreenCanvasUtils.d.ts +11 -11
  50. package/util/offscreenCanvasUtils.js +4 -1
  51. package/util/rxjs.d.ts +1 -1
  52. package/util/rxjs.js +3 -1
  53. package/util/stopToken.d.ts +1 -1
@@ -0,0 +1,3 @@
1
+ export default function DataGridFlexContainer({ children, }: {
2
+ children: React.ReactNode;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = DataGridFlexContainer;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const mui_1 = require("tss-react/mui");
6
+ const useStyles = (0, mui_1.makeStyles)()({
7
+ flexContainer: {
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ },
11
+ });
12
+ function DataGridFlexContainer({ children, }) {
13
+ const { classes } = useStyles();
14
+ return (0, jsx_runtime_1.jsx)("div", { className: classes.flexContainer, children: children });
15
+ }
package/ui/theme.js CHANGED
@@ -10,8 +10,8 @@ const colors_1 = require("@mui/material/colors");
10
10
  const styles_1 = require("@mui/material/styles");
11
11
  const deepmerge_1 = __importDefault(require("deepmerge"));
12
12
  const refTheme = (0, styles_1.createTheme)();
13
- const midnight = '#0D233F';
14
- const grape = '#721E63';
13
+ const midnight = refTheme.palette.augmentColor({ color: { main: '#0D233F' } });
14
+ const grape = refTheme.palette.augmentColor({ color: { main: '#721E63' } });
15
15
  const forest = refTheme.palette.augmentColor({ color: { main: '#135560' } });
16
16
  const mandarin = refTheme.palette.augmentColor({ color: { main: '#FFB11D' } });
17
17
  const lightgrey = refTheme.palette.augmentColor({ color: { main: '#aaa' } });
@@ -47,6 +47,9 @@ const hardclip = '#f00';
47
47
  const softclip = '#00f';
48
48
  const skip = '#97b8c9';
49
49
  const defaults = {
50
+ primary: midnight,
51
+ secondary: grape,
52
+ tertiary: forest,
50
53
  quaternary: mandarin,
51
54
  highlight: mandarin,
52
55
  stopCodon,
@@ -65,9 +68,6 @@ function stockTheme() {
65
68
  palette: {
66
69
  ...defaults,
67
70
  mode: undefined,
68
- primary: { main: midnight },
69
- secondary: { main: grape },
70
- tertiary: forest,
71
71
  },
72
72
  components: {
73
73
  MuiLink: {
@@ -44,7 +44,7 @@ function moveTo(self, start, end) {
44
44
  extraBp = ((newBpPerPx - targetBpPerPx) * self.width) / 2;
45
45
  }
46
46
  let bpToStart = -extraBp;
47
- for (let i = 0; i < self.displayedRegions.length; i += 1) {
47
+ for (let i = 0; i < self.displayedRegions.length; i++) {
48
48
  const region = self.displayedRegions[i];
49
49
  if (start.index === i) {
50
50
  bpToStart += start.offset;
package/util/analytics.js CHANGED
@@ -68,9 +68,9 @@ async function writeGAAnalytics(rootModel, initialTimestamp) {
68
68
  analyticsScript += `ga('create', '${jbrowseUser}', 'auto', 'jbrowseTracker');`;
69
69
  const gaData = {};
70
70
  const googleDimensions = 'tracks-count ver electron loadTime pluginNames';
71
- googleDimensions.split(/\s+/).forEach((key, index) => {
71
+ for (const [index, key] of googleDimensions.split(/\s+/).entries()) {
72
72
  gaData[`dimension${index + 1}`] = stats[key];
73
- });
73
+ }
74
74
  gaData.metric1 = Math.round(stats.loadTime);
75
75
  analyticsScript += `ga('jbrowseTracker.send', 'pageview',${JSON.stringify(gaData)});`;
76
76
  const analyticsScriptNode = document.createElement('script');
@@ -0,0 +1,17 @@
1
+ export declare function euclideanDistance(a: number[], b: number[]): number;
2
+ export declare function averageDistance(setA: number[], setB: number[], distances: number[][]): number;
3
+ export declare function clusterData({ data, distance, linkage, onProgress, stopToken, }: {
4
+ data: number[][];
5
+ distance?: (a: number[], b: number[]) => number;
6
+ linkage?: (a: number[], b: number[], distances: number[][]) => number;
7
+ onProgress?: (a: string) => void;
8
+ stopToken?: string;
9
+ }): {
10
+ clusters: {
11
+ height: number;
12
+ indexes: number[];
13
+ } | undefined;
14
+ distances: number[][];
15
+ order: number[];
16
+ clustersGivenK: number[][][];
17
+ };
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.euclideanDistance = euclideanDistance;
4
+ exports.averageDistance = averageDistance;
5
+ exports.clusterData = clusterData;
6
+ const stopToken_1 = require("@jbrowse/core/util/stopToken");
7
+ function toP(n) {
8
+ return Number.parseFloat((n * 100).toFixed(1));
9
+ }
10
+ function euclideanDistance(a, b) {
11
+ const size = Math.min(a.length, b.length);
12
+ let sum = 0;
13
+ for (let index = 0; index < size; index++) {
14
+ sum += (a[index] - b[index]) * (a[index] - b[index]);
15
+ }
16
+ return Math.sqrt(sum);
17
+ }
18
+ function averageDistance(setA, setB, distances) {
19
+ let distance = 0;
20
+ const lenA = setA.length;
21
+ const lenB = setB.length;
22
+ for (let i = 0; i < lenA; i++) {
23
+ for (let j = 0; j < lenB; j++) {
24
+ distance += distances[setA[i]][setB[j]];
25
+ }
26
+ }
27
+ return distance / setA.length / setB.length;
28
+ }
29
+ function clusterData({ data, distance = euclideanDistance, linkage = averageDistance, onProgress, stopToken, }) {
30
+ let start = performance.now();
31
+ const distances = [];
32
+ for (let i = 0; i < data.length; i++) {
33
+ if (performance.now() - start > 400) {
34
+ (0, stopToken_1.checkStopToken)(stopToken);
35
+ start = performance.now();
36
+ }
37
+ if (onProgress) {
38
+ onProgress(`Making distance matrix: ${toP(i / (data.length - 1))}%`);
39
+ }
40
+ const row = [];
41
+ for (let j = 0; j < data.length; j++) {
42
+ row.push(distance(data[i], data[j]));
43
+ }
44
+ distances.push(row);
45
+ }
46
+ const clusters = data.map((_datum, index) => ({
47
+ height: 0,
48
+ indexes: [Number(index)],
49
+ }));
50
+ let clustersGivenK = [];
51
+ start = performance.now();
52
+ for (let iteration = 0; iteration < data.length; iteration++) {
53
+ if (performance.now() - start > 400) {
54
+ (0, stopToken_1.checkStopToken)(stopToken);
55
+ start = performance.now();
56
+ }
57
+ if (onProgress) {
58
+ onProgress(`Clustering: ${toP((iteration + 1) / data.length)}%`);
59
+ }
60
+ clustersGivenK.push(clusters.map(cluster => cluster.indexes));
61
+ if (iteration >= data.length - 1) {
62
+ break;
63
+ }
64
+ let nearestDistance = Infinity;
65
+ let nearestRow = 0;
66
+ let nearestCol = 0;
67
+ for (let row = 0; row < clusters.length; row++) {
68
+ for (let col = row + 1; col < clusters.length; col++) {
69
+ const distance = linkage(clusters[row].indexes, clusters[col].indexes, distances);
70
+ if (distance < nearestDistance) {
71
+ nearestDistance = distance;
72
+ nearestRow = row;
73
+ nearestCol = col;
74
+ }
75
+ }
76
+ }
77
+ const newCluster = {
78
+ indexes: [
79
+ ...clusters[nearestRow].indexes,
80
+ ...clusters[nearestCol].indexes,
81
+ ],
82
+ height: nearestDistance,
83
+ children: [clusters[nearestRow], clusters[nearestCol]],
84
+ };
85
+ clusters.splice(Math.max(nearestRow, nearestCol), 1);
86
+ clusters.splice(Math.min(nearestRow, nearestCol), 1);
87
+ clusters.push(newCluster);
88
+ }
89
+ clustersGivenK = [[], ...clustersGivenK.reverse()];
90
+ return {
91
+ clusters: clusters[0],
92
+ distances: distances,
93
+ order: clusters[0].indexes,
94
+ clustersGivenK: clustersGivenK,
95
+ };
96
+ }
package/util/idMaker.d.ts CHANGED
@@ -1 +1 @@
1
- export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): number;
1
+ export default function idMaker(args: Record<string, unknown>, id?: string, len?: number): string | number;
package/util/idMaker.js CHANGED
@@ -20,5 +20,5 @@ function idMaker(args, id = '', len = 5000) {
20
20
  }
21
21
  }
22
22
  }
23
- return (0, _1.hashCode)(id);
23
+ return `adp-${(0, _1.hashCode)(id)}`;
24
24
  }
package/util/index.d.ts CHANGED
@@ -75,6 +75,7 @@ export declare function renameRegionsIfNeeded<ARGTYPE extends {
75
75
  }>;
76
76
  export declare function minmax(a: number, b: number): readonly [number, number];
77
77
  export declare function shorten(name: string, max?: number, short?: number): string;
78
+ export declare function shorten2(name: string, max?: number): string;
78
79
  export declare function stringify({ refName, coord, assemblyName, oob, }: {
79
80
  assemblyName?: string;
80
81
  coord: number;
@@ -192,7 +193,8 @@ export interface ViewSnap {
192
193
  })[];
193
194
  }
194
195
  export declare function isSupportedIndexingAdapter(type?: string): boolean;
195
- export declare function getBpDisplayStr(totalBp: number): string;
196
+ export declare function getBpDisplayStr(total: number): string;
197
+ export declare function getProgressDisplayStr(current: number, total: number): string;
196
198
  export declare function toLocale(n: number): string;
197
199
  export declare function getTickDisplayStr(totalBp: number, bpPerPx: number): string;
198
200
  export declare function getViewParams(model: IAnyStateTreeNode, exportSVG?: boolean): {
@@ -257,6 +259,7 @@ export declare function fetchAndMaybeUnzipText(loc: GenericFilehandle, opts?: Ba
257
259
  export declare function isObject(x: unknown): x is Record<string | symbol | number, unknown>;
258
260
  export declare function localStorageGetNumber(key: string, defaultVal: number): number;
259
261
  export declare function localStorageGetBoolean(key: string, defaultVal: boolean): boolean;
262
+ export declare function forEachWithStopTokenCheck<T>(iter: Iterable<T>, stopToken: string | undefined, arg: (arg: T, idx: number) => void, durationMs?: number): void;
260
263
  export declare function testAdapter(fileName: string, regex: RegExp, adapterHint: string | undefined, expected: string): boolean;
261
264
  export { type Feature, type SimpleFeatureSerialized, type SimpleFeatureSerializedNoId, default as SimpleFeature, isFeature, } from './simpleFeature';
262
265
  export { blobToDataURL } from './blobToDataURL';
package/util/index.js CHANGED
@@ -49,6 +49,7 @@ exports.renameRegionIfNeeded = renameRegionIfNeeded;
49
49
  exports.renameRegionsIfNeeded = renameRegionsIfNeeded;
50
50
  exports.minmax = minmax;
51
51
  exports.shorten = shorten;
52
+ exports.shorten2 = shorten2;
52
53
  exports.stringify = stringify;
53
54
  exports.revcom = revcom;
54
55
  exports.reverse = reverse;
@@ -63,6 +64,7 @@ exports.objectHash = objectHash;
63
64
  exports.bytesForRegions = bytesForRegions;
64
65
  exports.isSupportedIndexingAdapter = isSupportedIndexingAdapter;
65
66
  exports.getBpDisplayStr = getBpDisplayStr;
67
+ exports.getProgressDisplayStr = getProgressDisplayStr;
66
68
  exports.toLocale = toLocale;
67
69
  exports.getTickDisplayStr = getTickDisplayStr;
68
70
  exports.getViewParams = getViewParams;
@@ -94,6 +96,7 @@ exports.fetchAndMaybeUnzipText = fetchAndMaybeUnzipText;
94
96
  exports.isObject = isObject;
95
97
  exports.localStorageGetNumber = localStorageGetNumber;
96
98
  exports.localStorageGetBoolean = localStorageGetBoolean;
99
+ exports.forEachWithStopTokenCheck = forEachWithStopTokenCheck;
97
100
  exports.testAdapter = testAdapter;
98
101
  const react_1 = require("react");
99
102
  const bgzf_filehandle_1 = require("@gmod/bgzf-filehandle");
@@ -528,6 +531,9 @@ function shorten(name, max = 70, short = 30) {
528
531
  ? `${name.slice(0, short)}...${name.slice(-short)}`
529
532
  : name;
530
533
  }
534
+ function shorten2(name, max = 70) {
535
+ return name.length > max ? `${name.slice(0, max)}...` : name;
536
+ }
531
537
  function stringify({ refName, coord, assemblyName, oob, }, useAssemblyName) {
532
538
  return [
533
539
  assemblyName && useAssemblyName ? `{${assemblyName}}` : '',
@@ -589,8 +595,8 @@ function reverse(str) {
589
595
  function complement(str) {
590
596
  var _a;
591
597
  let comp = '';
592
- for (let i = 0; i < str.length; i++) {
593
- comp += (_a = exports.complementTable[str[i]]) !== null && _a !== void 0 ? _a : str[i];
598
+ for (const element of str) {
599
+ comp += (_a = exports.complementTable[element]) !== null && _a !== void 0 ? _a : element;
594
600
  }
595
601
  return comp;
596
602
  }
@@ -691,7 +697,7 @@ exports.defaultCodonTable = {
691
697
  };
692
698
  function generateCodonTable(table) {
693
699
  const tempCodonTable = {};
694
- Object.keys(table).forEach(codon => {
700
+ for (const codon of Object.keys(table)) {
695
701
  const aa = table[codon];
696
702
  const nucs = [];
697
703
  for (let i = 0; i < 3; i++) {
@@ -711,7 +717,7 @@ function generateCodonTable(table) {
711
717
  }
712
718
  }
713
719
  }
714
- });
720
+ }
715
721
  return tempCodonTable;
716
722
  }
717
723
  async function updateStatus(msg, cb, fn) {
@@ -760,15 +766,29 @@ function isSupportedIndexingAdapter(type = '') {
760
766
  'VcfAdapter',
761
767
  ].includes(type);
762
768
  }
763
- function getBpDisplayStr(totalBp) {
764
- if (Math.floor(totalBp / 1000000) > 0) {
765
- return `${Number.parseFloat((totalBp / 1000000).toPrecision(3))}Mbp`;
769
+ function getBpDisplayStr(total) {
770
+ if (Math.floor(total / 1000000) > 0) {
771
+ return `${r(total / 1000000)}Mbp`;
766
772
  }
767
- else if (Math.floor(totalBp / 1000) > 0) {
768
- return `${Number.parseFloat((totalBp / 1000).toPrecision(3))}Kbp`;
773
+ else if (Math.floor(total / 1000) > 0) {
774
+ return `${r(total / 1000)}Kbp`;
769
775
  }
770
776
  else {
771
- return `${toLocale(Math.floor(totalBp))}bp`;
777
+ return `${Math.floor(total)}bp`;
778
+ }
779
+ }
780
+ function r(s) {
781
+ return toLocale(Number.parseFloat(s.toPrecision(3)));
782
+ }
783
+ function getProgressDisplayStr(current, total) {
784
+ if (Math.floor(total / 1000000) > 0) {
785
+ return `${r(current / 1000000)}/${r(total / 1000000)}Mb`;
786
+ }
787
+ else if (Math.floor(total / 1000) > 0) {
788
+ return `${r(current / 1000)}/${r(total / 1000)}Kb`;
789
+ }
790
+ else {
791
+ return `${r(current)}/${r(total)}}bytes`;
772
792
  }
773
793
  }
774
794
  function toLocale(n) {
@@ -988,6 +1008,17 @@ function localStorageGetNumber(key, defaultVal) {
988
1008
  function localStorageGetBoolean(key, defaultVal) {
989
1009
  return Boolean(JSON.parse(localStorageGetItem(key) || JSON.stringify(defaultVal)));
990
1010
  }
1011
+ function forEachWithStopTokenCheck(iter, stopToken, arg, durationMs = 400) {
1012
+ let start = performance.now();
1013
+ let i = 0;
1014
+ for (const t of iter) {
1015
+ if (performance.now() - start > durationMs) {
1016
+ (0, stopToken_1.checkStopToken)(stopToken);
1017
+ start = performance.now();
1018
+ }
1019
+ arg(t, i++);
1020
+ }
1021
+ }
991
1022
  function testAdapter(fileName, regex, adapterHint, expected) {
992
1023
  return (regex.test(fileName) && !adapterHint) || adapterHint === expected;
993
1024
  }
@@ -13,9 +13,9 @@ class ThrowingLayout {
13
13
  class PrecomputedMultiLayout extends MultiLayout_1.default {
14
14
  constructor(json) {
15
15
  super(ThrowingLayout);
16
- Object.entries(json).forEach(([layoutName, sublayoutJson]) => {
16
+ for (const [layoutName, sublayoutJson] of Object.entries(json)) {
17
17
  this.subLayouts.set(layoutName, new PrecomputedLayout_1.default(sublayoutJson));
18
- });
18
+ }
19
19
  }
20
20
  }
21
21
  exports.default = PrecomputedMultiLayout;
package/util/map-obj.js CHANGED
@@ -13,12 +13,12 @@ function map(object, mapper, isSeen = new WeakSet()) {
13
13
  }
14
14
  isSeen.add(object);
15
15
  const mapArray = (array) => {
16
- array.forEach(element => {
16
+ for (const element of array) {
17
17
  mapper(element);
18
18
  if (isObject(element)) {
19
19
  map(element, mapper, isSeen);
20
20
  }
21
- });
21
+ }
22
22
  };
23
23
  if (Array.isArray(object)) {
24
24
  mapArray(object);
@@ -1,18 +1,18 @@
1
- export type RenderReturn = Record<string, unknown> | undefined;
2
- type RendererRet = Promise<RenderReturn> | RenderReturn;
3
- export declare function renderToAbstractCanvas(width: number, height: number, opts: {
4
- exportSVG?: {
5
- rasterizeLayers?: boolean;
6
- scale?: number;
7
- };
1
+ interface ExportSVGOptions {
2
+ rasterizeLayers?: boolean;
3
+ scale?: number;
4
+ }
5
+ interface RenderToAbstractCanvasOptions {
6
+ exportSVG?: ExportSVGOptions;
8
7
  highResolutionScaling?: number;
9
- }, cb: (ctx: CanvasRenderingContext2D) => RendererRet): Promise<{
8
+ }
9
+ export declare function renderToAbstractCanvas<T>(width: number, height: number, opts: RenderToAbstractCanvasOptions, cb: (ctx: CanvasRenderingContext2D) => T): Promise<(Awaited<T> & {
10
10
  canvasRecordedData: any;
11
- } | {
11
+ }) | (Awaited<T> & {
12
12
  reactElement: import("react/jsx-runtime").JSX.Element;
13
- } | {
13
+ }) | (Awaited<T> & {
14
14
  imageData: any;
15
- }>;
15
+ })>;
16
16
  export declare function getSerializedSvg(results: {
17
17
  width: number;
18
18
  height: number;
@@ -80,7 +80,10 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
80
80
  }
81
81
  ctx.scale(s, s);
82
82
  const result = await cb(ctx);
83
- return { ...result, imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas) };
83
+ return {
84
+ ...result,
85
+ imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas),
86
+ };
84
87
  }
85
88
  }
86
89
  async function getSerializedSvg(results) {
package/util/rxjs.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import type { Observer } from 'rxjs';
3
- export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>, _stopToken?: string): Observable<T>;
3
+ export declare function ObservableCreate<T>(func: (arg: Observer<T>) => void | Promise<void>, stopToken?: string): Observable<T>;
package/util/rxjs.js CHANGED
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObservableCreate = ObservableCreate;
4
4
  const rxjs_1 = require("rxjs");
5
- function ObservableCreate(func, _stopToken) {
5
+ const stopToken_1 = require("./stopToken");
6
+ function ObservableCreate(func, stopToken) {
7
+ (0, stopToken_1.checkStopToken)(stopToken);
6
8
  return new rxjs_1.Observable((observer) => {
7
9
  try {
8
10
  const ret = func(observer);
@@ -1,3 +1,3 @@
1
1
  export declare function createStopToken(): string;
2
2
  export declare function stopStopToken(stopToken: string): void;
3
- export declare function checkStopToken(stopToken?: string): void;
3
+ export declare function checkStopToken(stopToken: string | undefined): void;