@jbrowse/core 2.3.4 → 2.4.1
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 +18 -19
- package/BaseFeatureWidget/BaseFeatureDetail.js +76 -69
- package/BaseFeatureWidget/SequenceBox.js +9 -3
- package/BaseFeatureWidget/SequenceFeatureDetails.js +70 -52
- package/BaseFeatureWidget/SequencePanel.d.ts +3 -3
- package/BaseFeatureWidget/SequencePanel.js +8 -5
- package/BaseFeatureWidget/index.js +2 -2
- package/CorePlugin.js +2 -7
- package/PluginLoader.d.ts +1 -1
- package/PluginLoader.js +20 -24
- package/PluginManager.d.ts +1 -1
- package/PluginManager.js +2 -3
- package/ReExports/Attributes.d.ts +1 -2
- package/ReExports/Attributes.js +4 -3
- package/ReExports/BaseCard.d.ts +1 -2
- package/ReExports/BaseCard.js +4 -3
- package/ReExports/DataGrid.d.ts +1 -2
- package/ReExports/DataGrid.js +2 -2
- package/ReExports/FeatureDetails.d.ts +1 -2
- package/ReExports/FeatureDetails.js +4 -3
- package/ReExports/index.d.ts +1 -2
- package/ReExports/index.js +3 -2
- package/ReExports/modules.d.ts +1 -1
- package/ReExports/modules.js +2 -2
- package/assemblyManager/assembly.js +5 -5
- package/assemblyManager/assemblyConfigSchema.js +2 -2
- package/configuration/configurationSchema.js +1 -1
- package/configuration/util.js +1 -1
- package/data_adapters/BaseAdapter.js +1 -1
- package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +8 -0
- package/data_adapters/CytobandAdapter/CytobandAdapter.js +40 -0
- package/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
- package/data_adapters/CytobandAdapter/configSchema.js +17 -0
- package/data_adapters/CytobandAdapter/index.d.ts +3 -0
- package/data_adapters/CytobandAdapter/index.js +37 -0
- package/data_adapters/dataAdapterCache.d.ts +3 -2
- package/data_adapters/dataAdapterCache.js +2 -3
- package/package.json +5 -4
- package/pluggableElementTypes/PluggableElementBase.d.ts +1 -1
- package/pluggableElementTypes/PluggableElementBase.js +1 -2
- package/pluggableElementTypes/RpcMethodType.d.ts +5 -8
- package/pluggableElementTypes/RpcMethodType.js +23 -34
- package/pluggableElementTypes/index.d.ts +11 -1
- package/pluggableElementTypes/index.js +23 -23
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -2
- package/pluggableElementTypes/models/BaseTrackModel.js +8 -13
- package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +13 -2
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +10 -2
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +8 -2
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +10 -4
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +2 -34
- package/pluggableElementTypes/renderers/index.d.ts +7 -9
- package/pluggableElementTypes/renderers/index.js +15 -15
- package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -1
- package/rpc/BaseRpcDriver.js +7 -8
- package/rpc/WebWorkerRpcDriver.js +18 -12
- package/rpc/coreRpcMethods.d.ts +9 -11
- package/rpc/coreRpcMethods.js +17 -17
- package/rpc/methods/CoreGetFeatureDetails.js +1 -1
- package/rpc/methods/util.d.ts +2 -2
- package/rpc/methods/util.js +2 -2
- package/rpc/remoteAbortSignals.js +0 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/App.js +3 -18
- package/ui/AppLogo.js +1 -6
- package/ui/ColorPicker.js +1 -1
- package/ui/Dialog.js +1 -1
- package/ui/DrawerWidget.js +4 -4
- package/ui/EditableTypography.js +1 -1
- package/ui/FileSelector/FileSelector.d.ts +2 -2
- package/ui/FileSelector/FileSelector.js +24 -35
- package/ui/FileSelector/index.d.ts +1 -2
- package/ui/FileSelector/index.js +3 -2
- package/ui/LoadingEllipses.js +2 -2
- package/ui/Menu.js +45 -32
- package/ui/ResizeBar.js +10 -6
- package/ui/ResizeHandle.js +3 -6
- package/ui/SanitizedHTML.js +2 -0
- package/ui/ViewContainer.js +7 -44
- package/ui/ViewMenu.d.ts +9 -0
- package/ui/ViewMenu.js +69 -0
- package/ui/ViewPanel.d.ts +19 -0
- package/ui/ViewPanel.js +49 -0
- package/ui/theme.d.ts +10 -166
- package/ui/theme.js +260 -48
- package/util/Base1DUtils.js +16 -14
- package/util/Base1DViewModel.d.ts +1 -1
- package/util/Base1DViewModel.js +9 -8
- package/util/aborting.js +1 -1
- package/util/analytics.js +1 -1
- package/util/blockTypes.js +10 -10
- package/util/color/index.d.ts +1 -2
- package/util/color/index.js +4 -3
- package/util/idMaker.js +5 -8
- package/util/index.d.ts +9 -9
- package/util/index.js +35 -52
- package/util/io/RemoteFileWithRangeCache.js +2 -2
- package/util/io/index.d.ts +1 -2
- package/util/io/index.js +6 -6
- package/util/jexl.js +3 -1
- package/util/layouts/GranularRectLayout.js +10 -4
- package/util/layouts/MultiLayout.js +1 -1
- package/util/layouts/SceneGraph.js +3 -7
- package/util/map-obj.d.ts +3 -0
- package/util/map-obj.js +33 -0
- package/util/offscreenCanvasPonyfill.js +4 -3
- package/util/offscreenCanvasUtils.d.ts +18 -4
- package/util/offscreenCanvasUtils.js +49 -7
- package/util/tracks.d.ts +1 -1
- package/util/tracks.js +0 -1
- package/util/types/index.d.ts +1 -1
- package/util/types/index.js +3 -3
- package/util/types/mst.js +3 -3
- package/data_adapters/CytobandAdapter.d.ts +0 -8
- package/data_adapters/CytobandAdapter.js +0 -49
|
@@ -3,16 +3,15 @@ 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 map_obj_1 = __importDefault(require("../util/map-obj"));
|
|
6
7
|
const PluggableElementBase_1 = __importDefault(require("./PluggableElementBase"));
|
|
7
8
|
const tracks_1 = require("../util/tracks");
|
|
8
|
-
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
9
9
|
const types_1 = require("../util/types");
|
|
10
10
|
const remoteAbortSignals_1 = require("../rpc/remoteAbortSignals");
|
|
11
11
|
class RpcMethodType extends PluggableElementBase_1.default {
|
|
12
12
|
constructor(pluginManager) {
|
|
13
|
-
super({
|
|
13
|
+
super({});
|
|
14
14
|
this.pluginManager = pluginManager;
|
|
15
|
-
this.name = 'UNKNOWN';
|
|
16
15
|
}
|
|
17
16
|
async serializeArguments(args, _rpcDriverClassName) {
|
|
18
17
|
const blobMap = (0, tracks_1.getBlobMap)();
|
|
@@ -25,7 +24,7 @@ class RpcMethodType extends PluggableElementBase_1.default {
|
|
|
25
24
|
if (!(0, types_1.isAppRootModel)(rootModel) || loc.internetAccountPreAuthorization) {
|
|
26
25
|
return loc;
|
|
27
26
|
}
|
|
28
|
-
const account = rootModel
|
|
27
|
+
const account = rootModel.findAppropriateInternetAccount(loc);
|
|
29
28
|
if (account) {
|
|
30
29
|
loc.internetAccountPreAuthorization =
|
|
31
30
|
await account.getPreAuthorizationInformation(loc);
|
|
@@ -37,55 +36,45 @@ class RpcMethodType extends PluggableElementBase_1.default {
|
|
|
37
36
|
(0, tracks_1.setBlobMap)(serializedArgs.blobMap);
|
|
38
37
|
}
|
|
39
38
|
const { signal } = serializedArgs;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
return {
|
|
40
|
+
...serializedArgs,
|
|
41
|
+
signal: (0, remoteAbortSignals_1.isRemoteAbortSignal)(signal)
|
|
42
|
+
? (0, remoteAbortSignals_1.deserializeAbortSignal)(signal)
|
|
43
|
+
: undefined,
|
|
44
|
+
};
|
|
44
45
|
}
|
|
45
46
|
async serializeReturn(originalReturn, _args, _rpcDriverClassName) {
|
|
46
47
|
return originalReturn;
|
|
47
48
|
}
|
|
48
|
-
async deserializeReturn(serializedReturn, _args,
|
|
49
|
+
async deserializeReturn(serializedReturn, _args, _rpcDriver) {
|
|
50
|
+
var _a;
|
|
49
51
|
let r;
|
|
50
|
-
const { rootModel } = this.pluginManager;
|
|
51
52
|
try {
|
|
52
53
|
r = await serializedReturn;
|
|
53
54
|
}
|
|
54
55
|
catch (error) {
|
|
55
56
|
if ((0, types_1.isAuthNeededException)(error)) {
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
const retryAccount =
|
|
58
|
+
// @ts-expect-error
|
|
59
|
+
(_a = this.pluginManager.rootModel) === null || _a === void 0 ? void 0 : _a.createEphemeralInternetAccount(`HTTPBasicInternetAccount-${new URL(error.url).origin}`, {}, error.url);
|
|
58
60
|
throw new types_1.RetryError('Retrying with created internet account', retryAccount.internetAccountId);
|
|
59
61
|
}
|
|
60
62
|
throw error;
|
|
61
63
|
}
|
|
62
64
|
return r;
|
|
63
65
|
}
|
|
64
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
66
|
async augmentLocationObjects(thing) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
if (Array.isArray(thing)) {
|
|
73
|
-
for (const val of thing) {
|
|
74
|
-
await this.augmentLocationObjects(val);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (typeof thing === 'object' && thing !== null) {
|
|
78
|
-
for (const value of Object.values(thing)) {
|
|
79
|
-
if (Array.isArray(value)) {
|
|
80
|
-
for (const val of value) {
|
|
81
|
-
await this.augmentLocationObjects(val);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else if (typeof value === 'object' && value !== null) {
|
|
85
|
-
await this.augmentLocationObjects(value);
|
|
86
|
-
}
|
|
67
|
+
const uris = [];
|
|
68
|
+
// using map-obj avoids cycles, seen in circular view svg export
|
|
69
|
+
(0, map_obj_1.default)(thing, val => {
|
|
70
|
+
if ((0, types_1.isUriLocation)(val)) {
|
|
71
|
+
uris.push(val);
|
|
87
72
|
}
|
|
73
|
+
});
|
|
74
|
+
for (const uri of uris) {
|
|
75
|
+
await this.serializeNewAuthArguments(uri);
|
|
88
76
|
}
|
|
77
|
+
return thing;
|
|
89
78
|
}
|
|
90
79
|
}
|
|
91
80
|
exports.default = RpcMethodType;
|
|
@@ -11,6 +11,16 @@ import TextSearchAdapterType from './TextSearchAdapterType';
|
|
|
11
11
|
import AddTrackWorkflowType from './AddTrackWorkflowType';
|
|
12
12
|
export * from './renderers';
|
|
13
13
|
export * from './models';
|
|
14
|
-
export { AdapterType, ConnectionType, RendererType, WidgetType, TrackType, DisplayType, ViewType, RpcMethodType, InternetAccountType, TextSearchAdapterType, AddTrackWorkflowType, };
|
|
15
14
|
export type PluggableElementType = AdapterType | ConnectionType | RendererType | WidgetType | TrackType | DisplayType | ViewType | RpcMethodType | InternetAccountType | TextSearchAdapterType | AddTrackWorkflowType;
|
|
16
15
|
export type PluggableElementMember = keyof AdapterType | keyof ConnectionType | keyof RendererType | keyof WidgetType | keyof TrackType | keyof DisplayType | keyof ViewType | keyof RpcMethodType | keyof InternetAccountType | keyof TextSearchAdapterType | keyof AddTrackWorkflowType;
|
|
16
|
+
export { default as AdapterType } from './AdapterType';
|
|
17
|
+
export { default as RendererType } from './renderers/RendererType';
|
|
18
|
+
export { default as ConnectionType } from './ConnectionType';
|
|
19
|
+
export { default as TrackType } from './TrackType';
|
|
20
|
+
export { default as WidgetType } from './WidgetType';
|
|
21
|
+
export { default as ViewType } from './ViewType';
|
|
22
|
+
export { default as DisplayType } from './DisplayType';
|
|
23
|
+
export { default as InternetAccountType } from './InternetAccountType';
|
|
24
|
+
export { default as RpcMethodType } from './RpcMethodType';
|
|
25
|
+
export { default as AddTrackWorkflowType } from './AddTrackWorkflowType';
|
|
26
|
+
export { default as TextSearchAdapterType } from './TextSearchAdapterType';
|
|
@@ -17,28 +17,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.AddTrackWorkflowType = exports.
|
|
21
|
-
const AdapterType_1 = __importDefault(require("./AdapterType"));
|
|
22
|
-
exports.AdapterType = AdapterType_1.default;
|
|
23
|
-
const ConnectionType_1 = __importDefault(require("./ConnectionType"));
|
|
24
|
-
exports.ConnectionType = ConnectionType_1.default;
|
|
25
|
-
const RendererType_1 = __importDefault(require("./renderers/RendererType"));
|
|
26
|
-
exports.RendererType = RendererType_1.default;
|
|
27
|
-
const WidgetType_1 = __importDefault(require("./WidgetType"));
|
|
28
|
-
exports.WidgetType = WidgetType_1.default;
|
|
29
|
-
const TrackType_1 = __importDefault(require("./TrackType"));
|
|
30
|
-
exports.TrackType = TrackType_1.default;
|
|
31
|
-
const DisplayType_1 = __importDefault(require("./DisplayType"));
|
|
32
|
-
exports.DisplayType = DisplayType_1.default;
|
|
33
|
-
const ViewType_1 = __importDefault(require("./ViewType"));
|
|
34
|
-
exports.ViewType = ViewType_1.default;
|
|
35
|
-
const RpcMethodType_1 = __importDefault(require("./RpcMethodType"));
|
|
36
|
-
exports.RpcMethodType = RpcMethodType_1.default;
|
|
37
|
-
const InternetAccountType_1 = __importDefault(require("./InternetAccountType"));
|
|
38
|
-
exports.InternetAccountType = InternetAccountType_1.default;
|
|
39
|
-
const TextSearchAdapterType_1 = __importDefault(require("./TextSearchAdapterType"));
|
|
40
|
-
exports.TextSearchAdapterType = TextSearchAdapterType_1.default;
|
|
41
|
-
const AddTrackWorkflowType_1 = __importDefault(require("./AddTrackWorkflowType"));
|
|
42
|
-
exports.AddTrackWorkflowType = AddTrackWorkflowType_1.default;
|
|
20
|
+
exports.TextSearchAdapterType = exports.AddTrackWorkflowType = exports.RpcMethodType = exports.InternetAccountType = exports.DisplayType = exports.ViewType = exports.WidgetType = exports.TrackType = exports.ConnectionType = exports.RendererType = exports.AdapterType = void 0;
|
|
43
21
|
__exportStar(require("./renderers"), exports);
|
|
44
22
|
__exportStar(require("./models"), exports);
|
|
23
|
+
var AdapterType_1 = require("./AdapterType");
|
|
24
|
+
Object.defineProperty(exports, "AdapterType", { enumerable: true, get: function () { return __importDefault(AdapterType_1).default; } });
|
|
25
|
+
var RendererType_1 = require("./renderers/RendererType");
|
|
26
|
+
Object.defineProperty(exports, "RendererType", { enumerable: true, get: function () { return __importDefault(RendererType_1).default; } });
|
|
27
|
+
var ConnectionType_1 = require("./ConnectionType");
|
|
28
|
+
Object.defineProperty(exports, "ConnectionType", { enumerable: true, get: function () { return __importDefault(ConnectionType_1).default; } });
|
|
29
|
+
var TrackType_1 = require("./TrackType");
|
|
30
|
+
Object.defineProperty(exports, "TrackType", { enumerable: true, get: function () { return __importDefault(TrackType_1).default; } });
|
|
31
|
+
var WidgetType_1 = require("./WidgetType");
|
|
32
|
+
Object.defineProperty(exports, "WidgetType", { enumerable: true, get: function () { return __importDefault(WidgetType_1).default; } });
|
|
33
|
+
var ViewType_1 = require("./ViewType");
|
|
34
|
+
Object.defineProperty(exports, "ViewType", { enumerable: true, get: function () { return __importDefault(ViewType_1).default; } });
|
|
35
|
+
var DisplayType_1 = require("./DisplayType");
|
|
36
|
+
Object.defineProperty(exports, "DisplayType", { enumerable: true, get: function () { return __importDefault(DisplayType_1).default; } });
|
|
37
|
+
var InternetAccountType_1 = require("./InternetAccountType");
|
|
38
|
+
Object.defineProperty(exports, "InternetAccountType", { enumerable: true, get: function () { return __importDefault(InternetAccountType_1).default; } });
|
|
39
|
+
var RpcMethodType_1 = require("./RpcMethodType");
|
|
40
|
+
Object.defineProperty(exports, "RpcMethodType", { enumerable: true, get: function () { return __importDefault(RpcMethodType_1).default; } });
|
|
41
|
+
var AddTrackWorkflowType_1 = require("./AddTrackWorkflowType");
|
|
42
|
+
Object.defineProperty(exports, "AddTrackWorkflowType", { enumerable: true, get: function () { return __importDefault(AddTrackWorkflowType_1).default; } });
|
|
43
|
+
var TextSearchAdapterType_1 = require("./TextSearchAdapterType");
|
|
44
|
+
Object.defineProperty(exports, "TextSearchAdapterType", { enumerable: true, get: function () { return __importDefault(TextSearchAdapterType_1).default; } });
|
|
@@ -12,9 +12,9 @@ function getCompatibleDisplays(self) {
|
|
|
12
12
|
const { pluginManager } = (0, util_1.getEnv)(self);
|
|
13
13
|
const view = (0, util_1.getContainingView)(self);
|
|
14
14
|
const viewType = pluginManager.getViewType(view.type);
|
|
15
|
-
const compatTypes = viewType.displayTypes.map(d => d.name);
|
|
15
|
+
const compatTypes = new Set(viewType.displayTypes.map(d => d.name));
|
|
16
16
|
const displays = self.configuration.displays;
|
|
17
|
-
return displays.filter(d => compatTypes.
|
|
17
|
+
return displays.filter(d => compatTypes.has(d.type));
|
|
18
18
|
}
|
|
19
19
|
exports.getCompatibleDisplays = getCompatibleDisplays;
|
|
20
20
|
/**
|
|
@@ -85,20 +85,17 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
85
85
|
* #getter
|
|
86
86
|
*/
|
|
87
87
|
get viewMenuActions() {
|
|
88
|
-
return self.displays.
|
|
88
|
+
return self.displays.flatMap(d => d.viewMenuActions);
|
|
89
89
|
},
|
|
90
90
|
/**
|
|
91
91
|
* #getter
|
|
92
92
|
*/
|
|
93
93
|
get canConfigure() {
|
|
94
94
|
const session = (0, util_1.getSession)(self);
|
|
95
|
+
const { sessionTracks, adminMode } = session;
|
|
95
96
|
return ((0, types_1.isSessionModelWithConfigEditing)(session) &&
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
// @ts-ignore
|
|
99
|
-
session.sessionTracks.find(track => {
|
|
100
|
-
return track.trackId === self.configuration.trackId;
|
|
101
|
-
})));
|
|
97
|
+
(adminMode ||
|
|
98
|
+
sessionTracks.find((track) => track.trackId === self.configuration.trackId)));
|
|
102
99
|
},
|
|
103
100
|
}))
|
|
104
101
|
.actions(self => ({
|
|
@@ -115,7 +112,7 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
115
112
|
const session = (0, util_1.getSession)(self);
|
|
116
113
|
const view = (0, util_1.getContainingView)(self);
|
|
117
114
|
if ((0, types_1.isSessionModelWithConfigEditing)(session)) {
|
|
118
|
-
// @ts-
|
|
115
|
+
// @ts-expect-error
|
|
119
116
|
const trackConf = session.editTrackConfiguration(self.configuration);
|
|
120
117
|
if (trackConf && trackConf !== self.configuration) {
|
|
121
118
|
view.hideTrack(self.configuration);
|
|
@@ -176,9 +173,7 @@ function createBaseTrackModel(pm, trackType, baseTrackConfig) {
|
|
|
176
173
|
* #method
|
|
177
174
|
*/
|
|
178
175
|
trackMenuItems() {
|
|
179
|
-
const menuItems = self.displays
|
|
180
|
-
.map(d => d.trackMenuItems())
|
|
181
|
-
.flat();
|
|
176
|
+
const menuItems = self.displays.flatMap(d => d.trackMenuItems());
|
|
182
177
|
const shownId = self.displays[0].configuration.displayId;
|
|
183
178
|
const compatDisp = getCompatibleDisplays(self);
|
|
184
179
|
return [
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SimpleFeature, SimpleFeatureSerialized } from '../../util';
|
|
2
3
|
import FeatureRenderer from './FeatureRendererType';
|
|
3
4
|
export default class CircularChordRendererType extends FeatureRenderer {
|
|
5
|
+
supportsSVG: boolean;
|
|
4
6
|
deserializeResultsInClient(res: {
|
|
5
7
|
features: SimpleFeatureSerialized[];
|
|
6
8
|
html: string;
|
|
@@ -8,5 +10,14 @@ export default class CircularChordRendererType extends FeatureRenderer {
|
|
|
8
10
|
exportSVG?: {
|
|
9
11
|
rasterizeLayers?: boolean;
|
|
10
12
|
};
|
|
11
|
-
}):
|
|
13
|
+
}): {
|
|
14
|
+
features: Map<string, SimpleFeature>;
|
|
15
|
+
blockKey: string;
|
|
16
|
+
html: string;
|
|
17
|
+
} | {
|
|
18
|
+
features: Map<string, SimpleFeature>;
|
|
19
|
+
blockKey: string;
|
|
20
|
+
reactElement: JSX.Element;
|
|
21
|
+
html: string;
|
|
22
|
+
};
|
|
12
23
|
}
|
|
@@ -4,12 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const
|
|
7
|
+
const util_1 = require("../../util");
|
|
8
8
|
const FeatureRendererType_1 = __importDefault(require("./FeatureRendererType"));
|
|
9
9
|
const RpcRenderedSvgGroup_1 = __importDefault(require("./RpcRenderedSvgGroup"));
|
|
10
10
|
class CircularChordRendererType extends FeatureRendererType_1.default {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.supportsSVG = true;
|
|
14
|
+
}
|
|
11
15
|
deserializeResultsInClient(res, args) {
|
|
12
|
-
const deserializedFeatures = new Map(res.features.map(f =>
|
|
16
|
+
const deserializedFeatures = new Map(res.features.map(f => util_1.SimpleFeature.fromJSON(f)).map(f => [f.id(), f]));
|
|
13
17
|
// if we are rendering svg, we skip hydration
|
|
14
18
|
if (args.exportSVG) {
|
|
15
19
|
// only return the res if the renderer explicitly has
|
|
@@ -17,6 +21,8 @@ class CircularChordRendererType extends FeatureRendererType_1.default {
|
|
|
17
21
|
// document
|
|
18
22
|
return {
|
|
19
23
|
...res,
|
|
24
|
+
features: deserializedFeatures,
|
|
25
|
+
blockKey: 'circularChord',
|
|
20
26
|
html: this.supportsSVG
|
|
21
27
|
? res.html
|
|
22
28
|
: '<text y="12" fill="black">SVG export not supported for this track</text>',
|
|
@@ -25,6 +31,8 @@ class CircularChordRendererType extends FeatureRendererType_1.default {
|
|
|
25
31
|
// hydrate res using ServerSideRenderedContent
|
|
26
32
|
return {
|
|
27
33
|
...res,
|
|
34
|
+
features: deserializedFeatures,
|
|
35
|
+
blockKey: 'circularChord',
|
|
28
36
|
reactElement: (react_1.default.createElement(RpcRenderedSvgGroup_1.default, { ...args, ...res, features: deserializedFeatures, RenderingComponent: this.ReactComponent })),
|
|
29
37
|
};
|
|
30
38
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Feature } from '../../util/simpleFeature';
|
|
2
|
-
import ServerSideRenderer, { RenderArgs as ServerSideRenderArgs, RenderArgsSerialized as ServerSideRenderArgsSerialized, RenderArgsDeserialized as ServerSideRenderArgsDeserialized,
|
|
2
|
+
import ServerSideRenderer, { RenderArgs as ServerSideRenderArgs, RenderArgsSerialized as ServerSideRenderArgsSerialized, RenderArgsDeserialized as ServerSideRenderArgsDeserialized, ResultsSerialized as ServerSideResultsSerialized, ResultsDeserialized as ServerSideResultsDeserialized } from './ServerSideRendererType';
|
|
3
3
|
import RpcManager from '../../rpc/RpcManager';
|
|
4
4
|
export interface RenderArgs extends ServerSideRenderArgs {
|
|
5
5
|
displayModel: {};
|
|
@@ -13,11 +13,16 @@ export interface RenderArgsDeserialized extends ServerSideRenderArgsDeserialized
|
|
|
13
13
|
displayModel: {};
|
|
14
14
|
blockKey: string;
|
|
15
15
|
}
|
|
16
|
-
export type { RenderResults };
|
|
17
16
|
export type ResultsSerialized = ServerSideResultsSerialized;
|
|
18
17
|
export interface ResultsDeserialized extends ServerSideResultsDeserialized {
|
|
19
18
|
blockKey: string;
|
|
20
19
|
}
|
|
20
|
+
export interface ResultsSerializedSvgExport extends ResultsSerialized {
|
|
21
|
+
canvasRecordedData: unknown;
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
reactElement: unknown;
|
|
25
|
+
}
|
|
21
26
|
export default class ComparativeServerSideRenderer extends ServerSideRenderer {
|
|
22
27
|
/**
|
|
23
28
|
* directly modifies the render arguments to prepare
|
|
@@ -48,3 +53,4 @@ export default class ComparativeServerSideRenderer extends ServerSideRenderer {
|
|
|
48
53
|
featurePassesFilters(renderArgs: RenderArgsDeserialized, feature: Feature): boolean;
|
|
49
54
|
getFeatures(renderArgs: any): Promise<Feature[]>;
|
|
50
55
|
}
|
|
56
|
+
export { type RenderResults } from './ServerSideRendererType';
|
|
@@ -9,6 +9,9 @@ const ServerSideRendererType_1 = __importDefault(require("./ServerSideRendererTy
|
|
|
9
9
|
const dataAdapterCache_1 = require("../../data_adapters/dataAdapterCache");
|
|
10
10
|
const util_1 = require("../../util");
|
|
11
11
|
const rxjs_1 = require("rxjs");
|
|
12
|
+
function isSvgExport(e) {
|
|
13
|
+
return 'canvasRecordedData' in e;
|
|
14
|
+
}
|
|
12
15
|
class ComparativeServerSideRenderer extends ServerSideRendererType_1.default {
|
|
13
16
|
/**
|
|
14
17
|
* directly modifies the render arguments to prepare
|
|
@@ -43,7 +46,12 @@ class ComparativeServerSideRenderer extends ServerSideRendererType_1.default {
|
|
|
43
46
|
* calls `render` with the RPC manager.
|
|
44
47
|
*/
|
|
45
48
|
async renderInClient(rpcManager, args) {
|
|
46
|
-
|
|
49
|
+
const results = (await rpcManager.call(args.sessionId, 'ComparativeRender', args));
|
|
50
|
+
if (isSvgExport(results)) {
|
|
51
|
+
results.html = await (0, util_1.getSerializedSvg)(results);
|
|
52
|
+
delete results.reactElement;
|
|
53
|
+
}
|
|
54
|
+
return results;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* @param renderArgs -
|
|
@@ -59,9 +67,7 @@ class ComparativeServerSideRenderer extends ServerSideRendererType_1.default {
|
|
|
59
67
|
const pm = this.pluginManager;
|
|
60
68
|
const { sessionId, adapterConfig } = renderArgs;
|
|
61
69
|
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
62
|
-
|
|
63
|
-
// @ts-ignore this is instantiated by the getFeatures call
|
|
64
|
-
regions = renderArgs.regions;
|
|
70
|
+
const regions = renderArgs.regions;
|
|
65
71
|
if (!regions || regions.length === 0) {
|
|
66
72
|
console.warn('no regions supplied to comparative renderer');
|
|
67
73
|
return [];
|
|
@@ -25,7 +25,6 @@ export interface RenderArgsDeserialized extends BaseRenderArgs {
|
|
|
25
25
|
config: AnyConfigurationModel;
|
|
26
26
|
filters: SerializableFilterChain;
|
|
27
27
|
}
|
|
28
|
-
export type { RenderResults };
|
|
29
28
|
export interface ResultsSerialized extends Omit<RenderResults, 'reactElement'> {
|
|
30
29
|
html: string;
|
|
31
30
|
}
|
|
@@ -87,3 +86,4 @@ export default class ServerSideRenderer extends RendererType {
|
|
|
87
86
|
renderInWorker(args: RenderArgsSerialized): Promise<ResultsSerialized>;
|
|
88
87
|
freeResourcesInClient(rpcManager: RpcManager, args: RenderArgs): Promise<number>;
|
|
89
88
|
}
|
|
89
|
+
export { type RenderResults } from './RendererType';
|
|
@@ -1,34 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
6
|
const react_1 = __importDefault(require("react"));
|
|
30
7
|
const styles_1 = require("@mui/material/styles");
|
|
31
|
-
const canvas_sequencer_1 = require("canvas-sequencer");
|
|
32
8
|
const server_1 = require("react-dom/server");
|
|
33
9
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
34
10
|
// locals
|
|
@@ -79,7 +55,7 @@ class ServerSideRenderer extends RendererType_1.default {
|
|
|
79
55
|
: '<text y="12" fill="black">SVG export not supported for this track</text>',
|
|
80
56
|
};
|
|
81
57
|
}
|
|
82
|
-
//
|
|
58
|
+
// get res using ServerSideRenderedContent
|
|
83
59
|
return {
|
|
84
60
|
...res,
|
|
85
61
|
reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...res, RenderingComponent: this.ReactComponent })),
|
|
@@ -124,15 +100,7 @@ class ServerSideRenderer extends RendererType_1.default {
|
|
|
124
100
|
async renderInClient(rpcManager, args) {
|
|
125
101
|
const results = (await rpcManager.call(args.sessionId, 'CoreRender', args));
|
|
126
102
|
if (isSvgExport(results)) {
|
|
127
|
-
|
|
128
|
-
const C2S = await Promise.resolve().then(() => __importStar(require('canvas2svg')));
|
|
129
|
-
const ctx = new C2S.default(width, height);
|
|
130
|
-
const seq = new canvas_sequencer_1.CanvasSequence(canvasRecordedData);
|
|
131
|
-
seq.execute(ctx);
|
|
132
|
-
const str = ctx.getSvg();
|
|
133
|
-
// innerHTML strips the outer <svg> element from returned data, we add
|
|
134
|
-
// our own <svg> element in the view's SVG export
|
|
135
|
-
results.html = str.innerHTML;
|
|
103
|
+
results.html = await (0, util_1.getSerializedSvg)(results);
|
|
136
104
|
delete results.reactElement;
|
|
137
105
|
}
|
|
138
106
|
return results;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export { BoxRendererType, CircularChordRendererType, ComparativeServerSideRendererType, FeatureRendererType, RendererType, ServerSideRenderedContent, ServerSideRendererType, };
|
|
9
|
-
export type { RenderProps };
|
|
1
|
+
export { default as BoxRendererType } from './BoxRendererType';
|
|
2
|
+
export { default as ComparativeServerSideRendererType } from './ComparativeServerSideRendererType';
|
|
3
|
+
export { default as CircularChordRendererType } from './CircularChordRendererType';
|
|
4
|
+
export { default as RendererType, type RenderProps } from './RendererType';
|
|
5
|
+
export { default as FeatureRendererType } from './FeatureRendererType';
|
|
6
|
+
export { default as ServerSideRenderedContent } from './ServerSideRenderedContent';
|
|
7
|
+
export { default as ServerSideRendererType } from './ServerSideRendererType';
|
|
@@ -3,18 +3,18 @@ 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
|
-
exports.ServerSideRendererType = exports.ServerSideRenderedContent = exports.
|
|
7
|
-
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
exports
|
|
11
|
-
|
|
12
|
-
exports
|
|
13
|
-
|
|
14
|
-
exports
|
|
15
|
-
|
|
16
|
-
exports
|
|
17
|
-
|
|
18
|
-
exports
|
|
19
|
-
|
|
20
|
-
exports
|
|
6
|
+
exports.ServerSideRendererType = exports.ServerSideRenderedContent = exports.FeatureRendererType = exports.RendererType = exports.CircularChordRendererType = exports.ComparativeServerSideRendererType = exports.BoxRendererType = void 0;
|
|
7
|
+
var BoxRendererType_1 = require("./BoxRendererType");
|
|
8
|
+
Object.defineProperty(exports, "BoxRendererType", { enumerable: true, get: function () { return __importDefault(BoxRendererType_1).default; } });
|
|
9
|
+
var ComparativeServerSideRendererType_1 = require("./ComparativeServerSideRendererType");
|
|
10
|
+
Object.defineProperty(exports, "ComparativeServerSideRendererType", { enumerable: true, get: function () { return __importDefault(ComparativeServerSideRendererType_1).default; } });
|
|
11
|
+
var CircularChordRendererType_1 = require("./CircularChordRendererType");
|
|
12
|
+
Object.defineProperty(exports, "CircularChordRendererType", { enumerable: true, get: function () { return __importDefault(CircularChordRendererType_1).default; } });
|
|
13
|
+
var RendererType_1 = require("./RendererType");
|
|
14
|
+
Object.defineProperty(exports, "RendererType", { enumerable: true, get: function () { return __importDefault(RendererType_1).default; } });
|
|
15
|
+
var FeatureRendererType_1 = require("./FeatureRendererType");
|
|
16
|
+
Object.defineProperty(exports, "FeatureRendererType", { enumerable: true, get: function () { return __importDefault(FeatureRendererType_1).default; } });
|
|
17
|
+
var ServerSideRenderedContent_1 = require("./ServerSideRenderedContent");
|
|
18
|
+
Object.defineProperty(exports, "ServerSideRenderedContent", { enumerable: true, get: function () { return __importDefault(ServerSideRenderedContent_1).default; } });
|
|
19
|
+
var ServerSideRendererType_1 = require("./ServerSideRendererType");
|
|
20
|
+
Object.defineProperty(exports, "ServerSideRendererType", { enumerable: true, get: function () { return __importDefault(ServerSideRendererType_1).default; } });
|
package/rpc/BaseRpcDriver.js
CHANGED
|
@@ -76,7 +76,7 @@ class BaseRpcDriver {
|
|
|
76
76
|
filterArgs(thing, sessionId) {
|
|
77
77
|
if (Array.isArray(thing)) {
|
|
78
78
|
return thing
|
|
79
|
-
.filter(isClonable)
|
|
79
|
+
.filter(thing => isClonable(thing))
|
|
80
80
|
.map(t => this.filterArgs(t, sessionId));
|
|
81
81
|
}
|
|
82
82
|
if (typeof thing === 'object' && thing !== null) {
|
|
@@ -106,7 +106,11 @@ class BaseRpcDriver {
|
|
|
106
106
|
const hardwareConcurrency = detectHardwareConcurrency();
|
|
107
107
|
const workerCount = (0, configuration_1.readConfObject)(this.config, 'workerCount') ||
|
|
108
108
|
(0, util_1.clamp)(1, Math.max(1, hardwareConcurrency - 1), 5);
|
|
109
|
-
|
|
109
|
+
const workers = [];
|
|
110
|
+
for (let i = 0; i < workerCount; i++) {
|
|
111
|
+
workers.push(new LazyWorker(this));
|
|
112
|
+
}
|
|
113
|
+
return workers;
|
|
110
114
|
}
|
|
111
115
|
getWorkerPool() {
|
|
112
116
|
if (!this.workerPool) {
|
|
@@ -125,12 +129,7 @@ class BaseRpcDriver {
|
|
|
125
129
|
this.lastWorkerAssignment = workerAssignment;
|
|
126
130
|
workerNumber = workerAssignment;
|
|
127
131
|
}
|
|
128
|
-
|
|
129
|
-
const worker = workers[workerNumber].getWorker();
|
|
130
|
-
if (!worker) {
|
|
131
|
-
throw new Error('no web workers registered for RPC');
|
|
132
|
-
}
|
|
133
|
-
return worker;
|
|
132
|
+
return workers[workerNumber].getWorker();
|
|
134
133
|
}
|
|
135
134
|
async call(pluginManager, sessionId, functionName, args, options = {}) {
|
|
136
135
|
if (!sessionId) {
|
|
@@ -46,18 +46,24 @@ class WebWorkerRpcDriver extends BaseRpcDriver_1.default {
|
|
|
46
46
|
// send the worker its boot configuration using info from the pluginManager
|
|
47
47
|
return new Promise((resolve, reject) => {
|
|
48
48
|
const listener = (e) => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
switch (e.data.message) {
|
|
50
|
+
case 'ready': {
|
|
51
|
+
resolve(worker);
|
|
52
|
+
worker.workers[0].removeEventListener('message', listener);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case 'readyForConfig': {
|
|
56
|
+
worker.workers[0].postMessage({
|
|
57
|
+
message: 'config',
|
|
58
|
+
config: this.workerBootConfiguration,
|
|
59
|
+
});
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'error': {
|
|
63
|
+
reject((0, serialize_error_1.deserializeError)(e.data.error));
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
// No default
|
|
61
67
|
}
|
|
62
68
|
};
|
|
63
69
|
worker.workers[0].addEventListener('message', listener);
|
package/rpc/coreRpcMethods.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export type { RenderArgs };
|
|
11
|
-
export { CoreGetRefNames, CoreGetFileInfo, CoreGetMetadata, CoreGetFeatures, CoreRender, CoreGetFeatureDetails, CoreFreeResources, CoreEstimateRegionStats, };
|
|
1
|
+
export { default as CoreGetRefNames } from './methods/CoreGetRefNames';
|
|
2
|
+
export { default as CoreGetFeatureDetails } from './methods/CoreGetFeatureDetails';
|
|
3
|
+
export { default as CoreGetMetadata } from './methods/CoreGetMetadata';
|
|
4
|
+
export { default as CoreGetFileInfo } from './methods/CoreGetFileInfo';
|
|
5
|
+
export { default as CoreGetFeatures } from './methods/CoreGetFeatures';
|
|
6
|
+
export { default as CoreRender } from './methods/CoreRender';
|
|
7
|
+
export { default as CoreFreeResources } from './methods/CoreFreeResources';
|
|
8
|
+
export { type RenderArgs } from './methods/util';
|
|
9
|
+
export { default as CoreEstimateRegionStats } from './methods/CoreEstimateRegionStats';
|