@jbrowse/core 2.10.1 → 2.10.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/index.d.ts +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/index.js +1 -1
- package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +0 -1
- package/BaseFeatureWidget/BaseFeatureDetail/util.js +1 -5
- package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +6 -6
- package/BaseFeatureWidget/SequenceFeatureDetails/index.js +12 -8
- package/BaseFeatureWidget/configSchema.d.ts +2 -0
- package/BaseFeatureWidget/configSchema.js +6 -0
- package/BaseFeatureWidget/index.d.ts +2 -128
- package/BaseFeatureWidget/index.js +4 -168
- package/BaseFeatureWidget/stateModelFactory.d.ts +126 -0
- package/BaseFeatureWidget/stateModelFactory.js +168 -0
- package/Plugin.d.ts +1 -1
- package/Plugin.js +0 -3
- package/ReExports/modules.js +5 -5
- package/package.json +3 -2
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +3 -2
- package/rpc/BaseRpcDriver.d.ts +3 -3
- package/rpc/WebWorkerRpcDriver.d.ts +2 -3
- package/rpc/WebWorkerRpcDriver.js +1 -1
- package/rpc/methods/CoreRender.d.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/ErrorMessage.js +33 -10
- package/ui/ErrorMessageStackTraceDialog.d.ts +5 -0
- package/ui/ErrorMessageStackTraceDialog.js +158 -0
- package/ui/RedErrorMessageBox.d.ts +4 -0
- package/ui/RedErrorMessageBox.js +17 -0
- package/ui/Snackbar.js +1 -1
- package/util/tracks.js +1 -1
- package/util/types/index.d.ts +0 -4
- package/util/types/index.js +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.stateModelFactory = void 0;
|
|
7
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
8
|
+
const mobx_1 = require("mobx");
|
|
9
|
+
const clone_1 = __importDefault(require("clone"));
|
|
10
|
+
const configuration_1 = require("../configuration");
|
|
11
|
+
const util_1 = require("../util");
|
|
12
|
+
const mst_1 = require("../util/types/mst");
|
|
13
|
+
function formatSubfeatures(obj, depth, parse, currentDepth = 0, returnObj = {}) {
|
|
14
|
+
var _a;
|
|
15
|
+
if (depth <= currentDepth) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
(_a = obj.subfeatures) === null || _a === void 0 ? void 0 : _a.map(sub => {
|
|
19
|
+
formatSubfeatures(sub, depth, parse, currentDepth + 1, returnObj);
|
|
20
|
+
parse(sub);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* #stateModel BaseFeatureWidget
|
|
25
|
+
* displays data about features, allowing configuration callbacks to modify the
|
|
26
|
+
* contents of what is displayed
|
|
27
|
+
*
|
|
28
|
+
* see: formatDetails-\>feature,formatDetails-\>subfeatures
|
|
29
|
+
*/
|
|
30
|
+
function stateModelFactory(pluginManager) {
|
|
31
|
+
return mobx_state_tree_1.types
|
|
32
|
+
.model('BaseFeatureWidget', {
|
|
33
|
+
/**
|
|
34
|
+
* #property
|
|
35
|
+
*/
|
|
36
|
+
id: mst_1.ElementId,
|
|
37
|
+
/**
|
|
38
|
+
* #property
|
|
39
|
+
*/
|
|
40
|
+
type: mobx_state_tree_1.types.literal('BaseFeatureWidget'),
|
|
41
|
+
/**
|
|
42
|
+
* #property
|
|
43
|
+
*/
|
|
44
|
+
featureData: mobx_state_tree_1.types.frozen(),
|
|
45
|
+
/**
|
|
46
|
+
* #property
|
|
47
|
+
*/
|
|
48
|
+
formattedFields: mobx_state_tree_1.types.frozen(),
|
|
49
|
+
/**
|
|
50
|
+
* #property
|
|
51
|
+
*/
|
|
52
|
+
unformattedFeatureData: mobx_state_tree_1.types.frozen(),
|
|
53
|
+
/**
|
|
54
|
+
* #property
|
|
55
|
+
*/
|
|
56
|
+
view: mobx_state_tree_1.types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
57
|
+
/**
|
|
58
|
+
* #property
|
|
59
|
+
*/
|
|
60
|
+
track: mobx_state_tree_1.types.safeReference(pluginManager.pluggableMstType('track', 'stateModel')),
|
|
61
|
+
/**
|
|
62
|
+
* #property
|
|
63
|
+
*/
|
|
64
|
+
trackId: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
65
|
+
/**
|
|
66
|
+
* #property
|
|
67
|
+
*/
|
|
68
|
+
trackType: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
69
|
+
/**
|
|
70
|
+
* #property
|
|
71
|
+
*/
|
|
72
|
+
maxDepth: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.number),
|
|
73
|
+
})
|
|
74
|
+
.volatile(() => ({
|
|
75
|
+
error: undefined,
|
|
76
|
+
}))
|
|
77
|
+
.actions(self => ({
|
|
78
|
+
/**
|
|
79
|
+
* #action
|
|
80
|
+
*/
|
|
81
|
+
setFeatureData(featureData) {
|
|
82
|
+
self.unformattedFeatureData = featureData;
|
|
83
|
+
},
|
|
84
|
+
/**
|
|
85
|
+
* #action
|
|
86
|
+
*/
|
|
87
|
+
clearFeatureData() {
|
|
88
|
+
self.featureData = undefined;
|
|
89
|
+
},
|
|
90
|
+
/**
|
|
91
|
+
* #action
|
|
92
|
+
*/
|
|
93
|
+
setFormattedData(feat) {
|
|
94
|
+
self.featureData = feat;
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* #action
|
|
98
|
+
*/
|
|
99
|
+
setExtra(type, trackId, maxDepth) {
|
|
100
|
+
self.trackId = trackId;
|
|
101
|
+
self.trackType = type;
|
|
102
|
+
self.maxDepth = maxDepth;
|
|
103
|
+
},
|
|
104
|
+
/**
|
|
105
|
+
* #action
|
|
106
|
+
*/
|
|
107
|
+
setError(e) {
|
|
108
|
+
self.error = e;
|
|
109
|
+
},
|
|
110
|
+
}))
|
|
111
|
+
.actions(self => ({
|
|
112
|
+
afterCreate() {
|
|
113
|
+
(0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => {
|
|
114
|
+
try {
|
|
115
|
+
const { unformattedFeatureData, track } = self;
|
|
116
|
+
const session = (0, util_1.getSession)(self);
|
|
117
|
+
if (track) {
|
|
118
|
+
self.setExtra(track.type, track.configuration.trackId, (0, configuration_1.getConf)(track, ['formatDetails', 'maxDepth']));
|
|
119
|
+
}
|
|
120
|
+
if (unformattedFeatureData) {
|
|
121
|
+
const feature = (0, clone_1.default)(unformattedFeatureData);
|
|
122
|
+
const combine = (arg2, feature) => ({
|
|
123
|
+
...(0, configuration_1.getConf)(session, ['formatDetails', arg2], { feature }),
|
|
124
|
+
...(0, configuration_1.getConf)(track, ['formatDetails', arg2], { feature }),
|
|
125
|
+
});
|
|
126
|
+
if (track) {
|
|
127
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
128
|
+
feature.__jbrowsefmt = combine('feature', feature);
|
|
129
|
+
formatSubfeatures(feature, (0, configuration_1.getConf)(track, ['formatDetails', 'depth']), sub => {
|
|
130
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
131
|
+
sub.__jbrowsefmt = combine('subfeatures', sub);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
self.setFormattedData(feature);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
console.error(e);
|
|
139
|
+
self.setError(e);
|
|
140
|
+
}
|
|
141
|
+
}));
|
|
142
|
+
},
|
|
143
|
+
}))
|
|
144
|
+
.preProcessSnapshot(snap => {
|
|
145
|
+
// @ts-expect-error
|
|
146
|
+
const { featureData, finalizedFeatureData, ...rest } = snap;
|
|
147
|
+
return {
|
|
148
|
+
unformattedFeatureData: featureData,
|
|
149
|
+
featureData: finalizedFeatureData,
|
|
150
|
+
...rest,
|
|
151
|
+
};
|
|
152
|
+
})
|
|
153
|
+
.postProcessSnapshot(snap => {
|
|
154
|
+
// xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
|
|
155
|
+
const { unformattedFeatureData, featureData, ...rest } = snap;
|
|
156
|
+
// finalizedFeatureData avoids running formatter twice if loading from
|
|
157
|
+
// snapshot
|
|
158
|
+
return {
|
|
159
|
+
// replacing undefined with null helps with allowing fields to be
|
|
160
|
+
// hidden, setting null is not allowed by jexl so we set it to
|
|
161
|
+
// undefined to hide. see config guide. this replacement happens both
|
|
162
|
+
// here and when displaying the featureData in base feature widget
|
|
163
|
+
finalizedFeatureData: JSON.parse(JSON.stringify(featureData, (_, v) => (v === undefined ? null : v))),
|
|
164
|
+
...rest,
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
exports.stateModelFactory = stateModelFactory;
|
package/Plugin.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export default abstract class Plugin {
|
|
|
9
9
|
version?: string;
|
|
10
10
|
install(_pluginManager: PluginManager): void;
|
|
11
11
|
configure(_pluginManager: PluginManager): void;
|
|
12
|
-
configurationSchema
|
|
12
|
+
configurationSchema?: AnyConfigurationSchemaType;
|
|
13
13
|
}
|
|
14
14
|
export type PluginConstructor = new (...args: unknown[]) => Plugin;
|
package/Plugin.js
CHANGED
package/ReExports/modules.js
CHANGED
|
@@ -180,7 +180,7 @@ const Entries = {
|
|
|
180
180
|
};
|
|
181
181
|
const LazyMUICore = Object.fromEntries(Object.entries(Entries).map(([key, ReactComponent]) => {
|
|
182
182
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
183
|
-
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
183
|
+
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
184
184
|
react_1.default.createElement(ReactComponent, { ...props, ref: ref }))));
|
|
185
185
|
Component.displayName = key;
|
|
186
186
|
return [key, Component];
|
|
@@ -353,21 +353,21 @@ const DataGridEntries = {
|
|
|
353
353
|
};
|
|
354
354
|
const LazyDataGridComponents = Object.fromEntries(Object.entries(DataGridEntries).map(([key, ReactComponent]) => {
|
|
355
355
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
|
-
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
356
|
+
const Component = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
357
357
|
react_1.default.createElement(ReactComponent, { ...props, ref: ref }))));
|
|
358
358
|
Component.displayName = key;
|
|
359
359
|
return [key, Component];
|
|
360
360
|
}));
|
|
361
361
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
362
|
-
const LazyAttributes = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
362
|
+
const LazyAttributes = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
363
363
|
react_1.default.createElement(Attributes, { ...props, ref: ref }))));
|
|
364
364
|
LazyAttributes.displayName = 'Attributes';
|
|
365
365
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
366
|
-
const LazyFeatureDetails = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
366
|
+
const LazyFeatureDetails = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
367
367
|
react_1.default.createElement(FeatureDetails, { ...props, ref: ref }))));
|
|
368
368
|
LazyFeatureDetails.displayName = 'FeatureDetails';
|
|
369
369
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
370
|
-
const LazyBaseCard = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback:
|
|
370
|
+
const LazyBaseCard = react_1.default.forwardRef((props, ref) => (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
371
371
|
react_1.default.createElement(BaseCard, { ...props, ref: ref }))));
|
|
372
372
|
LazyBaseCard.displayName = 'BaseCard';
|
|
373
373
|
const libs = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/core",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.3",
|
|
4
4
|
"description": "JBrowse 2 core libraries used by plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"rbush": "^3.0.1",
|
|
54
54
|
"react-error-boundary": "^4.0.3",
|
|
55
55
|
"serialize-error": "^8.0.0",
|
|
56
|
+
"source-map-js": "^1.0.2",
|
|
56
57
|
"svg-path-generator": "^1.1.0"
|
|
57
58
|
},
|
|
58
59
|
"peerDependencies": {
|
|
@@ -71,5 +72,5 @@
|
|
|
71
72
|
"access": "public",
|
|
72
73
|
"directory": "dist"
|
|
73
74
|
},
|
|
74
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "c8fc800cd17decd72b2e971c7a6add3b95214e72"
|
|
75
76
|
}
|
|
@@ -65,8 +65,9 @@ const NewHydrate = (0, mobx_react_1.observer)(function ServerSideRenderedContent
|
|
|
65
65
|
});
|
|
66
66
|
};
|
|
67
67
|
}, [html, theme, rest, hydrateFn, RenderingComponent]);
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
return (react_1.default.createElement("div", { "data-testid": "hydrationContainer", ref: ref,
|
|
69
|
+
// eslint-disable-next-line react/no-danger
|
|
70
|
+
dangerouslySetInnerHTML: { __html: html } }));
|
|
70
71
|
});
|
|
71
72
|
const OldHydrate = (0, mobx_react_1.observer)(function ({ theme, html, RenderingComponent, ...rest }) {
|
|
72
73
|
const ref = (0, react_1.useRef)(null);
|
package/rpc/BaseRpcDriver.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { AnyConfigurationModel } from '../configuration';
|
|
|
3
3
|
export interface WorkerHandle {
|
|
4
4
|
status?: string;
|
|
5
5
|
error?: Error;
|
|
6
|
-
on?: (channel: string, callback: (message:
|
|
7
|
-
off?: (channel: string, callback: (message:
|
|
6
|
+
on?: (channel: string, callback: (message: unknown) => void) => void;
|
|
7
|
+
off?: (channel: string, callback: (message: unknown) => void) => void;
|
|
8
8
|
destroy(): void;
|
|
9
9
|
call(functionName: string, args?: unknown, options?: {
|
|
10
10
|
statusCallback?(message: string): void;
|
|
@@ -38,7 +38,7 @@ export default abstract class BaseRpcDriver {
|
|
|
38
38
|
getWorkerPool(): LazyWorker[];
|
|
39
39
|
getWorker(sessionId: string): Promise<WorkerHandle>;
|
|
40
40
|
call(pluginManager: PluginManager, sessionId: string, functionName: string, args: {
|
|
41
|
-
statusCallback?: (message:
|
|
41
|
+
statusCallback?: (message: unknown) => void;
|
|
42
42
|
}, options?: {}): Promise<unknown>;
|
|
43
43
|
}
|
|
44
44
|
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference path="../../rpc/declaration.d.ts" />
|
|
2
1
|
import Rpc from 'librpc-web-mod';
|
|
3
2
|
import BaseRpcDriver, { RpcDriverConstructorArgs } from './BaseRpcDriver';
|
|
4
3
|
import { PluginDefinition } from '../PluginLoader';
|
|
@@ -6,12 +5,12 @@ interface WebWorkerRpcDriverConstructorArgs extends RpcDriverConstructorArgs {
|
|
|
6
5
|
makeWorkerInstance: () => Worker;
|
|
7
6
|
}
|
|
8
7
|
interface Options {
|
|
9
|
-
statusCallback?: (arg0:
|
|
8
|
+
statusCallback?: (arg0: unknown) => void;
|
|
10
9
|
rpcDriverClassName: string;
|
|
11
10
|
}
|
|
12
11
|
declare class WebWorkerHandle extends Rpc.Client {
|
|
13
12
|
destroy(): void;
|
|
14
|
-
call(funcName: string, args: Record<string, unknown>, opts: Options): Promise<
|
|
13
|
+
call(funcName: string, args: Record<string, unknown>, opts: Options): Promise<unknown>;
|
|
15
14
|
}
|
|
16
15
|
export default class WebWorkerRpcDriver extends BaseRpcDriver {
|
|
17
16
|
workerBootConfiguration: {
|
|
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const librpc_web_mod_1 = __importDefault(require("librpc-web-mod"));
|
|
7
6
|
const serialize_error_1 = require("serialize-error");
|
|
7
|
+
const librpc_web_mod_1 = __importDefault(require("librpc-web-mod"));
|
|
8
8
|
// locals
|
|
9
9
|
const nanoid_1 = require("../util/nanoid");
|
|
10
10
|
const BaseRpcDriver_1 = __importDefault(require("./BaseRpcDriver"));
|
|
@@ -9,6 +9,6 @@ export default class CoreRender extends RpcMethodType {
|
|
|
9
9
|
serializeArguments(args: RenderArgs, rpcDriver: string): Promise<import("../../pluggableElementTypes/renderers/ServerSideRendererType").RenderArgsSerialized | RenderArgs>;
|
|
10
10
|
execute(args: RenderArgsSerialized & {
|
|
11
11
|
signal?: RemoteAbortSignal;
|
|
12
|
-
}, rpcDriver: string): Promise<
|
|
12
|
+
}, rpcDriver: string): Promise<RenderResults | ResultsSerialized>;
|
|
13
13
|
deserializeReturn(serializedReturn: RenderResults | ResultsSerialized, args: RenderArgs, rpcDriver: string): Promise<unknown>;
|
|
14
14
|
}
|