@jbrowse/core 2.2.2 → 2.3.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/PluginManager.d.ts +4 -0
- package/PluginManager.js +12 -0
- package/README.md +6 -2
- package/package.json +3 -3
- package/pluggableElementTypes/AdapterType.d.ts +4 -4
- package/pluggableElementTypes/AdapterType.js +0 -1
- package/pluggableElementTypes/AddTrackWorkflowType.d.ts +3 -3
- package/pluggableElementTypes/ConnectionType.d.ts +0 -1
- package/pluggableElementTypes/ConnectionType.js +0 -1
- package/pluggableElementTypes/DisplayType.d.ts +9 -0
- package/pluggableElementTypes/DisplayType.js +1 -0
- package/pluggableElementTypes/PluggableElementBase.d.ts +3 -0
- package/pluggableElementTypes/PluggableElementBase.js +4 -0
- package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -0
- package/pluggableElementTypes/TrackType.d.ts +2 -1
- package/pluggableElementTypes/ViewType.d.ts +4 -3
- package/pluggableElementTypes/WidgetType.d.ts +10 -9
- package/pluggableElementTypes/models/BaseDisplayModel.js +1 -0
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +19 -8
- package/pluggableElementTypes/models/BaseTrackModel.js +32 -26
- package/pluggableElementTypes/renderers/BoxRendererType.js +1 -14
- package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +9 -0
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +23 -0
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +4 -1
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +4 -4
- package/pluggableElementTypes/renderers/FeatureRendererType.js +11 -13
- package/pluggableElementTypes/renderers/RendererType.d.ts +1 -0
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +8 -0
- package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +60 -0
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +2 -2
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +6 -6
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +4 -4
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +13 -12
- package/rpc/BaseRpcDriver.d.ts +1 -1
- package/rpc/BaseRpcDriver.js +7 -17
- package/rpc/coreRpcMethods.d.ts +11 -99
- package/rpc/coreRpcMethods.js +17 -241
- package/rpc/methods/CoreEstimateRegionStats.d.ts +18 -0
- package/rpc/methods/CoreEstimateRegionStats.js +37 -0
- package/rpc/methods/CoreFreeResources.d.ts +12 -0
- package/rpc/methods/CoreFreeResources.js +35 -0
- package/rpc/methods/CoreGetFeatureDetails.d.ts +16 -0
- package/rpc/methods/CoreGetFeatureDetails.js +44 -0
- package/rpc/methods/CoreGetFeatures.d.ts +17 -0
- package/rpc/methods/CoreGetFeatures.js +44 -0
- package/rpc/methods/CoreGetFileInfo.d.ts +10 -0
- package/rpc/methods/CoreGetFileInfo.js +24 -0
- package/rpc/methods/CoreGetMetadata.d.ts +10 -0
- package/rpc/methods/CoreGetMetadata.js +24 -0
- package/rpc/methods/CoreGetRefNames.d.ts +10 -0
- package/rpc/methods/CoreGetRefNames.js +25 -0
- package/rpc/methods/CoreRender.d.ts +14 -0
- package/rpc/methods/CoreRender.js +57 -0
- package/rpc/methods/util.d.ts +14 -0
- package/rpc/methods/util.js +21 -0
- package/rpc/remoteAbortSignals.d.ts +3 -1
- package/rpc/remoteAbortSignals.js +3 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/App.js +9 -77
- package/ui/AppLogo.d.ts +8 -0
- package/ui/AppLogo.js +22 -0
- package/ui/AppToolbar.d.ts +19 -0
- package/ui/AppToolbar.js +56 -0
- package/ui/AssemblySelector.d.ts +5 -3
- package/ui/AssemblySelector.js +4 -4
- package/ui/PrerenderedCanvas.d.ts +3 -20
- package/ui/PrerenderedCanvas.js +1 -19
- package/ui/Snackbar.js +7 -53
- package/ui/ViewLauncher.d.ts +18 -0
- package/ui/ViewLauncher.js +50 -0
- package/ui/index.d.ts +9 -9
- package/ui/index.js +19 -19
- package/util/Base1DUtils.js +1 -1
- package/util/dedupe.d.ts +3 -0
- package/util/dedupe.js +18 -0
- package/util/index.d.ts +1 -1
- package/util/index.js +2 -5
- package/util/offscreenCanvasUtils.js +1 -1
- package/util/stats.d.ts +7 -3
- package/util/stats.js +33 -24
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const react_1 = __importStar(require("react"));
|
|
27
|
+
const mobx_react_1 = require("mobx-react");
|
|
28
|
+
const react_dom_1 = require("react-dom");
|
|
29
|
+
const util_1 = require("../../util");
|
|
30
|
+
exports.default = (0, mobx_react_1.observer)(function (props) {
|
|
31
|
+
const { html, RenderingComponent } = props;
|
|
32
|
+
const ref = (0, react_1.useRef)(null);
|
|
33
|
+
(0, react_1.useEffect)(() => {
|
|
34
|
+
const domNode = ref.current;
|
|
35
|
+
function doHydrate() {
|
|
36
|
+
if (domNode && html) {
|
|
37
|
+
if (domNode.innerHTML) {
|
|
38
|
+
(0, react_dom_1.unmountComponentAtNode)(domNode);
|
|
39
|
+
}
|
|
40
|
+
// setting outline:none fixes react "focusable" element issue. see
|
|
41
|
+
// https://github.com/GMOD/jbrowse-components/issues/2160
|
|
42
|
+
domNode.style.outline = 'none';
|
|
43
|
+
domNode.innerHTML = html;
|
|
44
|
+
// use requestIdleCallback to defer main-thread rendering
|
|
45
|
+
// and hydration for when we have some free time. helps
|
|
46
|
+
// keep the framerate up.
|
|
47
|
+
(0, util_1.rIC)(() => {
|
|
48
|
+
(0, react_dom_1.hydrate)(react_1.default.createElement(RenderingComponent, { ...props }), domNode);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
doHydrate();
|
|
53
|
+
return () => {
|
|
54
|
+
if (domNode) {
|
|
55
|
+
(0, react_dom_1.unmountComponentAtNode)(domNode);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}, [html, RenderingComponent, props]);
|
|
59
|
+
return react_1.default.createElement("g", { ref: ref });
|
|
60
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ResultsSerialized, RenderArgs } from './ServerSideRendererType';
|
|
3
|
-
interface
|
|
3
|
+
interface Props extends ResultsSerialized, RenderArgs {
|
|
4
4
|
RenderingComponent: React.ComponentType<any>;
|
|
5
5
|
}
|
|
6
|
-
export default function
|
|
6
|
+
export default function ({ theme, html, RenderingComponent, ...rest }: Props): JSX.Element;
|
|
7
7
|
export {};
|
|
@@ -26,14 +26,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
const react_1 = __importStar(require("react"));
|
|
27
27
|
const styles_1 = require("@mui/material/styles");
|
|
28
28
|
const react_dom_1 = require("react-dom");
|
|
29
|
+
// locals
|
|
29
30
|
const ui_1 = require("../../ui");
|
|
30
31
|
const util_1 = require("../../util");
|
|
31
|
-
function
|
|
32
|
-
const
|
|
33
|
-
const { theme, html, RenderingComponent, ...rest } = props;
|
|
32
|
+
function default_1({ theme, html, RenderingComponent, ...rest }) {
|
|
33
|
+
const ref = (0, react_1.useRef)(null);
|
|
34
34
|
const jbrowseTheme = (0, ui_1.createJBrowseTheme)(theme);
|
|
35
35
|
(0, react_1.useEffect)(() => {
|
|
36
|
-
const domNode =
|
|
36
|
+
const domNode = ref.current;
|
|
37
37
|
function doHydrate() {
|
|
38
38
|
if (domNode) {
|
|
39
39
|
if (domNode) {
|
|
@@ -60,6 +60,6 @@ function ServerSideRenderedContent(props) {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
}, [html, jbrowseTheme, rest, RenderingComponent]);
|
|
63
|
-
return
|
|
63
|
+
return react_1.default.createElement("div", { ref: ref });
|
|
64
64
|
}
|
|
65
|
-
exports.default =
|
|
65
|
+
exports.default = default_1;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ThemeOptions } from '@mui/material';
|
|
2
2
|
import { SnapshotOrInstance, SnapshotIn } from 'mobx-state-tree';
|
|
3
|
-
import RendererType, { RenderProps, RenderResults } from './RendererType';
|
|
4
3
|
import SerializableFilterChain, { SerializedFilterChain } from './util/serializableFilterChain';
|
|
5
4
|
import { AnyConfigurationModel } from '../../configuration/configurationSchema';
|
|
6
5
|
import RpcManager from '../../rpc/RpcManager';
|
|
6
|
+
import RendererType, { RenderProps, RenderResults } from './RendererType';
|
|
7
7
|
interface BaseRenderArgs extends RenderProps {
|
|
8
8
|
sessionId: string;
|
|
9
9
|
signal?: AbortSignal;
|
|
10
|
-
theme:
|
|
10
|
+
theme: ThemeOptions;
|
|
11
11
|
exportSVG: {
|
|
12
12
|
rasterizeLayers?: boolean;
|
|
13
13
|
};
|
|
@@ -53,7 +53,7 @@ export default class ServerSideRenderer extends RendererType {
|
|
|
53
53
|
* @param results - the results of the render
|
|
54
54
|
* @param args - the arguments passed to render
|
|
55
55
|
*/
|
|
56
|
-
deserializeResultsInClient(
|
|
56
|
+
deserializeResultsInClient(res: ResultsSerialized, args: RenderArgs): ResultsDeserialized;
|
|
57
57
|
/**
|
|
58
58
|
* modifies the passed arguments object to inflate arguments as necessary.
|
|
59
59
|
* called in the worker process.
|
|
@@ -31,13 +31,14 @@ const styles_1 = require("@mui/material/styles");
|
|
|
31
31
|
const canvas_sequencer_1 = require("canvas-sequencer");
|
|
32
32
|
const server_1 = require("react-dom/server");
|
|
33
33
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
34
|
+
// locals
|
|
34
35
|
const util_1 = require("../../util");
|
|
35
|
-
const RendererType_1 = __importDefault(require("./RendererType"));
|
|
36
36
|
const serializableFilterChain_1 = __importDefault(require("./util/serializableFilterChain"));
|
|
37
37
|
const ui_1 = require("../../ui");
|
|
38
|
+
const RendererType_1 = __importDefault(require("./RendererType"));
|
|
38
39
|
const ServerSideRenderedContent_1 = __importDefault(require("./ServerSideRenderedContent"));
|
|
39
|
-
function isSvgExport(
|
|
40
|
-
return 'canvasRecordedData' in
|
|
40
|
+
function isSvgExport(e) {
|
|
41
|
+
return 'canvasRecordedData' in e;
|
|
41
42
|
}
|
|
42
43
|
class ServerSideRenderer extends RendererType_1.default {
|
|
43
44
|
/**
|
|
@@ -48,12 +49,13 @@ class ServerSideRenderer extends RendererType_1.default {
|
|
|
48
49
|
* @returns the same object
|
|
49
50
|
*/
|
|
50
51
|
serializeArgsInClient(args) {
|
|
52
|
+
var _a;
|
|
51
53
|
return {
|
|
52
54
|
...args,
|
|
53
55
|
config: (0, mobx_state_tree_1.isStateTreeNode)(args.config)
|
|
54
56
|
? (0, mobx_state_tree_1.getSnapshot)(args.config)
|
|
55
57
|
: args.config,
|
|
56
|
-
filters: args.filters
|
|
58
|
+
filters: (_a = args.filters) === null || _a === void 0 ? void 0 : _a.toJSON().filters,
|
|
57
59
|
};
|
|
58
60
|
}
|
|
59
61
|
/**
|
|
@@ -64,24 +66,23 @@ class ServerSideRenderer extends RendererType_1.default {
|
|
|
64
66
|
* @param results - the results of the render
|
|
65
67
|
* @param args - the arguments passed to render
|
|
66
68
|
*/
|
|
67
|
-
deserializeResultsInClient(
|
|
68
|
-
const { html, ...rest } = results;
|
|
69
|
+
deserializeResultsInClient(res, args) {
|
|
69
70
|
// if we are rendering svg, we skip hydration
|
|
70
71
|
if (args.exportSVG) {
|
|
71
|
-
// only return the
|
|
72
|
+
// only return the res if the renderer explicitly has
|
|
72
73
|
// this.supportsSVG support to avoid garbage being rendered in SVG
|
|
73
74
|
// document
|
|
74
75
|
return {
|
|
75
|
-
...
|
|
76
|
+
...res,
|
|
76
77
|
html: this.supportsSVG
|
|
77
|
-
?
|
|
78
|
+
? res.html
|
|
78
79
|
: '<text y="12" fill="black">SVG export not supported for this track</text>',
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
// hydrate
|
|
82
|
+
// hydrate res using ServerSideRenderedContent
|
|
82
83
|
return {
|
|
83
|
-
...
|
|
84
|
-
reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...
|
|
84
|
+
...res,
|
|
85
|
+
reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...res, RenderingComponent: this.ReactComponent })),
|
|
85
86
|
};
|
|
86
87
|
}
|
|
87
88
|
/**
|
package/rpc/BaseRpcDriver.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface WorkerHandle {
|
|
|
15
15
|
export interface RpcDriverConstructorArgs {
|
|
16
16
|
config: AnyConfigurationModel;
|
|
17
17
|
}
|
|
18
|
-
export declare function watchWorker(worker: WorkerHandle, pingTime: number, rpcDriverClassName: string): Promise<
|
|
18
|
+
export declare function watchWorker(worker: WorkerHandle, pingTime: number, rpcDriverClassName: string): Promise<void>;
|
|
19
19
|
declare class LazyWorker {
|
|
20
20
|
driver: BaseRpcDriver;
|
|
21
21
|
workerP?: Promise<WorkerHandle> | undefined;
|
package/rpc/BaseRpcDriver.js
CHANGED
|
@@ -18,23 +18,13 @@ function isClonable(thing) {
|
|
|
18
18
|
// the worker times out
|
|
19
19
|
async function watchWorker(worker, pingTime, rpcDriverClassName) {
|
|
20
20
|
// after first ping succeeds, apply wait for timeout
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
});
|
|
29
|
-
delay();
|
|
30
|
-
}
|
|
31
|
-
catch (e) {
|
|
32
|
-
reject(e);
|
|
33
|
-
}
|
|
34
|
-
}, pingTime);
|
|
35
|
-
}
|
|
36
|
-
delay();
|
|
37
|
-
});
|
|
21
|
+
while (true) {
|
|
22
|
+
await worker.call('ping', [], {
|
|
23
|
+
timeout: pingTime * 2,
|
|
24
|
+
rpcDriverClassName,
|
|
25
|
+
});
|
|
26
|
+
await new Promise(resolve => setTimeout(resolve, pingTime));
|
|
27
|
+
}
|
|
38
28
|
}
|
|
39
29
|
exports.watchWorker = watchWorker;
|
|
40
30
|
function detectHardwareConcurrency() {
|
package/rpc/coreRpcMethods.d.ts
CHANGED
|
@@ -1,99 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}, rpcDriver: string): Promise<string[]>;
|
|
13
|
-
}
|
|
14
|
-
export declare class CoreGetFileInfo extends RpcMethodType {
|
|
15
|
-
name: string;
|
|
16
|
-
execute(args: {
|
|
17
|
-
sessionId: string;
|
|
18
|
-
signal: RemoteAbortSignal;
|
|
19
|
-
adapterConfig: {};
|
|
20
|
-
}, rpcDriver: string): Promise<unknown>;
|
|
21
|
-
}
|
|
22
|
-
export declare class CoreGetMetadata extends RpcMethodType {
|
|
23
|
-
name: string;
|
|
24
|
-
execute(args: {
|
|
25
|
-
sessionId: string;
|
|
26
|
-
signal: RemoteAbortSignal;
|
|
27
|
-
adapterConfig: {};
|
|
28
|
-
}, rpcDriver: string): Promise<unknown>;
|
|
29
|
-
}
|
|
30
|
-
export declare class CoreGetFeatures extends RpcMethodType {
|
|
31
|
-
name: string;
|
|
32
|
-
deserializeReturn(feats: SimpleFeatureSerialized[], args: unknown, rpcDriver: string): Promise<SimpleFeature[]>;
|
|
33
|
-
serializeArguments(args: RenderArgs, rpcDriver: string): Promise<RenderArgs>;
|
|
34
|
-
execute(args: {
|
|
35
|
-
sessionId: string;
|
|
36
|
-
regions: Region[];
|
|
37
|
-
adapterConfig: {};
|
|
38
|
-
signal?: RemoteAbortSignal;
|
|
39
|
-
opts?: any;
|
|
40
|
-
}, rpcDriver: string): Promise<SimpleFeatureSerialized[]>;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* free up any resources (e.g. cached adapter objects)
|
|
44
|
-
* that are only associated with the given track ID.
|
|
45
|
-
*
|
|
46
|
-
* returns number of objects deleted
|
|
47
|
-
*/
|
|
48
|
-
export declare class CoreFreeResources extends RpcMethodType {
|
|
49
|
-
name: string;
|
|
50
|
-
execute(specification: {}): Promise<number>;
|
|
51
|
-
serializeArguments(args: {}, _rpcDriver: string): Promise<{}>;
|
|
52
|
-
}
|
|
53
|
-
export interface RenderArgs extends ServerSideRenderArgs {
|
|
54
|
-
adapterConfig: {};
|
|
55
|
-
rendererType: string;
|
|
56
|
-
}
|
|
57
|
-
export interface RenderArgsSerialized extends ServerSideRenderArgsSerialized {
|
|
58
|
-
assemblyName: string;
|
|
59
|
-
regions: Region[];
|
|
60
|
-
adapterConfig: {};
|
|
61
|
-
rendererType: string;
|
|
62
|
-
}
|
|
63
|
-
export declare class CoreEstimateRegionStats extends RpcMethodType {
|
|
64
|
-
name: string;
|
|
65
|
-
serializeArguments(args: RenderArgs & {
|
|
66
|
-
signal?: AbortSignal;
|
|
67
|
-
statusCallback?: (arg: string) => void;
|
|
68
|
-
}, rpcDriver: string): Promise<{}>;
|
|
69
|
-
execute(args: {
|
|
70
|
-
adapterConfig: {};
|
|
71
|
-
regions: Region[];
|
|
72
|
-
signal?: RemoteAbortSignal;
|
|
73
|
-
headers?: Record<string, string>;
|
|
74
|
-
sessionId: string;
|
|
75
|
-
}, rpcDriver: string): Promise<import("../data_adapters/BaseAdapter").Stats>;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* fetches features from an adapter and call a renderer with them
|
|
79
|
-
*/
|
|
80
|
-
export declare class CoreRender extends RpcMethodType {
|
|
81
|
-
name: string;
|
|
82
|
-
serializeArguments(args: RenderArgs, rpcDriver: string): Promise<ServerSideRenderArgsSerialized | RenderArgs>;
|
|
83
|
-
execute(args: RenderArgsSerialized & {
|
|
84
|
-
signal?: RemoteAbortSignal;
|
|
85
|
-
}, rpcDriver: string): Promise<ResultsSerialized | RenderResults>;
|
|
86
|
-
deserializeReturn(serializedReturn: RenderResults | ResultsSerialized, args: RenderArgs, rpcDriver: string): Promise<unknown>;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* fetches features from an adapter and call a renderer with them
|
|
90
|
-
*/
|
|
91
|
-
export declare class CoreGetFeatureDetails extends RpcMethodType {
|
|
92
|
-
name: string;
|
|
93
|
-
serializeArguments(args: RenderArgs, rpcDriver: string): Promise<ServerSideRenderArgsSerialized | RenderArgs>;
|
|
94
|
-
execute(args: RenderArgsSerialized & {
|
|
95
|
-
signal?: RemoteAbortSignal;
|
|
96
|
-
}, rpcDriver: string): Promise<{
|
|
97
|
-
feature: any;
|
|
98
|
-
}>;
|
|
99
|
-
}
|
|
1
|
+
import CoreGetRefNames from './methods/CoreGetRefNames';
|
|
2
|
+
import CoreGetMetadata from './methods/CoreGetMetadata';
|
|
3
|
+
import CoreGetFeatureDetails from './methods/CoreGetFeatureDetails';
|
|
4
|
+
import CoreGetFeatures from './methods/CoreGetFeatures';
|
|
5
|
+
import CoreGetFileInfo from './methods/CoreGetFileInfo';
|
|
6
|
+
import CoreFreeResources from './methods/CoreFreeResources';
|
|
7
|
+
import CoreRender from './methods/CoreRender';
|
|
8
|
+
import CoreEstimateRegionStats from './methods/CoreEstimateRegionStats';
|
|
9
|
+
import { RenderArgs } from './methods/util';
|
|
10
|
+
export type { RenderArgs };
|
|
11
|
+
export { CoreGetRefNames, CoreGetFileInfo, CoreGetMetadata, CoreGetFeatures, CoreRender, CoreGetFeatureDetails, CoreFreeResources, CoreEstimateRegionStats, };
|
package/rpc/coreRpcMethods.js
CHANGED
|
@@ -3,244 +3,20 @@ 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.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const { sessionId, adapterConfig } = deserializedArgs;
|
|
24
|
-
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
25
|
-
if ((0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)) {
|
|
26
|
-
return dataAdapter.getRefNames(deserializedArgs);
|
|
27
|
-
}
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.CoreGetRefNames = CoreGetRefNames;
|
|
32
|
-
class CoreGetFileInfo extends RpcMethodType_1.default {
|
|
33
|
-
constructor() {
|
|
34
|
-
super(...arguments);
|
|
35
|
-
this.name = 'CoreGetInfo';
|
|
36
|
-
}
|
|
37
|
-
async execute(args, rpcDriver) {
|
|
38
|
-
const pm = this.pluginManager;
|
|
39
|
-
const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
40
|
-
const { sessionId, adapterConfig } = deserializedArgs;
|
|
41
|
-
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
42
|
-
return (0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)
|
|
43
|
-
? dataAdapter.getHeader(deserializedArgs)
|
|
44
|
-
: null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.CoreGetFileInfo = CoreGetFileInfo;
|
|
48
|
-
class CoreGetMetadata extends RpcMethodType_1.default {
|
|
49
|
-
constructor() {
|
|
50
|
-
super(...arguments);
|
|
51
|
-
this.name = 'CoreGetMetadata';
|
|
52
|
-
}
|
|
53
|
-
async execute(args, rpcDriver) {
|
|
54
|
-
const pm = this.pluginManager;
|
|
55
|
-
const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
56
|
-
const { sessionId, adapterConfig } = deserializedArgs;
|
|
57
|
-
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
58
|
-
return (0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)
|
|
59
|
-
? dataAdapter.getMetadata(deserializedArgs)
|
|
60
|
-
: null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
exports.CoreGetMetadata = CoreGetMetadata;
|
|
64
|
-
class CoreGetFeatures extends RpcMethodType_1.default {
|
|
65
|
-
constructor() {
|
|
66
|
-
super(...arguments);
|
|
67
|
-
this.name = 'CoreGetFeatures';
|
|
68
|
-
}
|
|
69
|
-
async deserializeReturn(feats, args, rpcDriver) {
|
|
70
|
-
const superDeserialized = (await super.deserializeReturn(feats, args, rpcDriver));
|
|
71
|
-
return superDeserialized.map(feat => new simpleFeature_1.default(feat));
|
|
72
|
-
}
|
|
73
|
-
async serializeArguments(args, rpcDriver) {
|
|
74
|
-
const { rootModel } = this.pluginManager;
|
|
75
|
-
const assemblyManager = rootModel.session.assemblyManager;
|
|
76
|
-
const renamedArgs = await (0, util_1.renameRegionsIfNeeded)(assemblyManager, args);
|
|
77
|
-
return super.serializeArguments(renamedArgs, rpcDriver);
|
|
78
|
-
}
|
|
79
|
-
async execute(args, rpcDriver) {
|
|
80
|
-
const pm = this.pluginManager;
|
|
81
|
-
const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
82
|
-
const { signal, sessionId, adapterConfig, regions, opts } = deserializedArgs;
|
|
83
|
-
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
84
|
-
if (!(0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)) {
|
|
85
|
-
throw new Error('Adapter does not support retrieving features');
|
|
86
|
-
}
|
|
87
|
-
const ret = dataAdapter.getFeaturesInMultipleRegions(regions, {
|
|
88
|
-
...opts,
|
|
89
|
-
signal,
|
|
90
|
-
});
|
|
91
|
-
const r = await ret.pipe((0, operators_1.toArray)()).toPromise();
|
|
92
|
-
return r.map(f => f.toJSON());
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
exports.CoreGetFeatures = CoreGetFeatures;
|
|
96
|
-
/**
|
|
97
|
-
* free up any resources (e.g. cached adapter objects)
|
|
98
|
-
* that are only associated with the given track ID.
|
|
99
|
-
*
|
|
100
|
-
* returns number of objects deleted
|
|
101
|
-
*/
|
|
102
|
-
class CoreFreeResources extends RpcMethodType_1.default {
|
|
103
|
-
constructor() {
|
|
104
|
-
super(...arguments);
|
|
105
|
-
this.name = 'CoreFreeResources';
|
|
106
|
-
}
|
|
107
|
-
async execute(specification) {
|
|
108
|
-
let deleteCount = 0;
|
|
109
|
-
deleteCount += (0, dataAdapterCache_1.freeAdapterResources)(specification);
|
|
110
|
-
// pass the freeResources hint along to all the renderers as well
|
|
111
|
-
this.pluginManager.getRendererTypes().forEach(renderer => {
|
|
112
|
-
const count = renderer.freeResources( /* specification */);
|
|
113
|
-
if (count) {
|
|
114
|
-
deleteCount += count;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
return deleteCount;
|
|
118
|
-
}
|
|
119
|
-
async serializeArguments(args, _rpcDriver) {
|
|
120
|
-
return args;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
exports.CoreFreeResources = CoreFreeResources;
|
|
124
|
-
class CoreEstimateRegionStats extends RpcMethodType_1.default {
|
|
125
|
-
constructor() {
|
|
126
|
-
super(...arguments);
|
|
127
|
-
this.name = 'CoreEstimateRegionStats';
|
|
128
|
-
}
|
|
129
|
-
async serializeArguments(args, rpcDriver) {
|
|
130
|
-
var _a;
|
|
131
|
-
const { rootModel } = this.pluginManager;
|
|
132
|
-
const assemblyManager = rootModel.session.assemblyManager;
|
|
133
|
-
const renamedArgs = await (0, util_1.renameRegionsIfNeeded)(assemblyManager, {
|
|
134
|
-
...args,
|
|
135
|
-
filters: (_a = args.filters) === null || _a === void 0 ? void 0 : _a.toJSON().filters,
|
|
136
|
-
});
|
|
137
|
-
return super.serializeArguments(renamedArgs, rpcDriver);
|
|
138
|
-
}
|
|
139
|
-
async execute(args, rpcDriver) {
|
|
140
|
-
const pm = this.pluginManager;
|
|
141
|
-
const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
142
|
-
const { adapterConfig, sessionId, regions } = deserializedArgs;
|
|
143
|
-
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
144
|
-
if (!(0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)) {
|
|
145
|
-
throw new Error('Adapter does not support retrieving features');
|
|
146
|
-
}
|
|
147
|
-
return dataAdapter.estimateRegionsStats(regions, deserializedArgs);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
exports.CoreEstimateRegionStats = CoreEstimateRegionStats;
|
|
151
|
-
/**
|
|
152
|
-
* fetches features from an adapter and call a renderer with them
|
|
153
|
-
*/
|
|
154
|
-
class CoreRender extends RpcMethodType_1.default {
|
|
155
|
-
constructor() {
|
|
156
|
-
super(...arguments);
|
|
157
|
-
this.name = 'CoreRender';
|
|
158
|
-
}
|
|
159
|
-
async serializeArguments(args, rpcDriver) {
|
|
160
|
-
const { rootModel } = this.pluginManager;
|
|
161
|
-
const assemblyManager = rootModel.session.assemblyManager;
|
|
162
|
-
const renamedArgs = await (0, util_1.renameRegionsIfNeeded)(assemblyManager, args);
|
|
163
|
-
const superArgs = (await super.serializeArguments(renamedArgs, rpcDriver));
|
|
164
|
-
if (rpcDriver === 'MainThreadRpcDriver') {
|
|
165
|
-
return superArgs;
|
|
166
|
-
}
|
|
167
|
-
const { rendererType } = args;
|
|
168
|
-
const RendererType = validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType));
|
|
169
|
-
return RendererType.serializeArgsInClient(superArgs);
|
|
170
|
-
}
|
|
171
|
-
async execute(args, rpcDriver) {
|
|
172
|
-
let deserializedArgs = args;
|
|
173
|
-
if (rpcDriver !== 'MainThreadRpcDriver') {
|
|
174
|
-
deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
175
|
-
}
|
|
176
|
-
const { sessionId, rendererType, signal } = deserializedArgs;
|
|
177
|
-
if (!sessionId) {
|
|
178
|
-
throw new Error('must pass a unique session id');
|
|
179
|
-
}
|
|
180
|
-
(0, util_1.checkAbortSignal)(signal);
|
|
181
|
-
const RendererType = validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType));
|
|
182
|
-
const result = rpcDriver === 'MainThreadRpcDriver'
|
|
183
|
-
? await RendererType.render(deserializedArgs)
|
|
184
|
-
: await RendererType.renderInWorker(deserializedArgs);
|
|
185
|
-
(0, util_1.checkAbortSignal)(signal);
|
|
186
|
-
return result;
|
|
187
|
-
}
|
|
188
|
-
async deserializeReturn(serializedReturn, args, rpcDriver) {
|
|
189
|
-
const des = await super.deserializeReturn(serializedReturn, args, rpcDriver);
|
|
190
|
-
if (rpcDriver === 'MainThreadRpcDriver') {
|
|
191
|
-
return des;
|
|
192
|
-
}
|
|
193
|
-
const { rendererType } = args;
|
|
194
|
-
const RendererType = validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType));
|
|
195
|
-
return RendererType.deserializeResultsInClient(des, args);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
exports.CoreRender = CoreRender;
|
|
199
|
-
/**
|
|
200
|
-
* fetches features from an adapter and call a renderer with them
|
|
201
|
-
*/
|
|
202
|
-
class CoreGetFeatureDetails extends RpcMethodType_1.default {
|
|
203
|
-
constructor() {
|
|
204
|
-
super(...arguments);
|
|
205
|
-
this.name = 'CoreGetFeatureDetails';
|
|
206
|
-
}
|
|
207
|
-
async serializeArguments(args, rpcDriver) {
|
|
208
|
-
const { rootModel } = this.pluginManager;
|
|
209
|
-
const assemblyManager = rootModel.session.assemblyManager;
|
|
210
|
-
const renamedArgs = await (0, util_1.renameRegionsIfNeeded)(assemblyManager, args);
|
|
211
|
-
const superArgs = (await super.serializeArguments(renamedArgs, rpcDriver));
|
|
212
|
-
if (rpcDriver === 'MainThreadRpcDriver') {
|
|
213
|
-
return superArgs;
|
|
214
|
-
}
|
|
215
|
-
const { rendererType } = args;
|
|
216
|
-
const RendererType = validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType));
|
|
217
|
-
return RendererType.serializeArgsInClient(superArgs);
|
|
218
|
-
}
|
|
219
|
-
async execute(args, rpcDriver) {
|
|
220
|
-
let deserializedArgs = args;
|
|
221
|
-
if (rpcDriver !== 'MainThreadRpcDriver') {
|
|
222
|
-
deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
223
|
-
}
|
|
224
|
-
const { rendererType, featureId } = deserializedArgs;
|
|
225
|
-
const RendererType = validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType));
|
|
226
|
-
// @ts-ignore
|
|
227
|
-
const sess = RendererType.sessions[(0, util_1.getLayoutId)(args)];
|
|
228
|
-
const { layout } = sess.cachedLayout;
|
|
229
|
-
const xref = layout.getDataByID(featureId);
|
|
230
|
-
return { feature: xref.toJSON() };
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
exports.CoreGetFeatureDetails = CoreGetFeatureDetails;
|
|
234
|
-
function validateRendererType(rendererType, RendererType) {
|
|
235
|
-
if (!RendererType) {
|
|
236
|
-
throw new Error(`renderer "${rendererType}" not found`);
|
|
237
|
-
}
|
|
238
|
-
// @ts-ignore
|
|
239
|
-
if (!RendererType.ReactComponent) {
|
|
240
|
-
throw new Error(`renderer ${rendererType} has no ReactComponent, it may not be completely implemented yet`);
|
|
241
|
-
}
|
|
242
|
-
if (!(RendererType instanceof ServerSideRendererType_1.default)) {
|
|
243
|
-
throw new Error('CoreRender requires a renderer that is a subclass of ServerSideRendererType');
|
|
244
|
-
}
|
|
245
|
-
return RendererType;
|
|
246
|
-
}
|
|
6
|
+
exports.CoreEstimateRegionStats = exports.CoreFreeResources = exports.CoreGetFeatureDetails = exports.CoreRender = exports.CoreGetFeatures = exports.CoreGetMetadata = exports.CoreGetFileInfo = exports.CoreGetRefNames = void 0;
|
|
7
|
+
const CoreGetRefNames_1 = __importDefault(require("./methods/CoreGetRefNames"));
|
|
8
|
+
exports.CoreGetRefNames = CoreGetRefNames_1.default;
|
|
9
|
+
const CoreGetMetadata_1 = __importDefault(require("./methods/CoreGetMetadata"));
|
|
10
|
+
exports.CoreGetMetadata = CoreGetMetadata_1.default;
|
|
11
|
+
const CoreGetFeatureDetails_1 = __importDefault(require("./methods/CoreGetFeatureDetails"));
|
|
12
|
+
exports.CoreGetFeatureDetails = CoreGetFeatureDetails_1.default;
|
|
13
|
+
const CoreGetFeatures_1 = __importDefault(require("./methods/CoreGetFeatures"));
|
|
14
|
+
exports.CoreGetFeatures = CoreGetFeatures_1.default;
|
|
15
|
+
const CoreGetFileInfo_1 = __importDefault(require("./methods/CoreGetFileInfo"));
|
|
16
|
+
exports.CoreGetFileInfo = CoreGetFileInfo_1.default;
|
|
17
|
+
const CoreFreeResources_1 = __importDefault(require("./methods/CoreFreeResources"));
|
|
18
|
+
exports.CoreFreeResources = CoreFreeResources_1.default;
|
|
19
|
+
const CoreRender_1 = __importDefault(require("./methods/CoreRender"));
|
|
20
|
+
exports.CoreRender = CoreRender_1.default;
|
|
21
|
+
const CoreEstimateRegionStats_1 = __importDefault(require("./methods/CoreEstimateRegionStats"));
|
|
22
|
+
exports.CoreEstimateRegionStats = CoreEstimateRegionStats_1.default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import RpcMethodType from '../../pluggableElementTypes/RpcMethodType';
|
|
2
|
+
import { RenderArgs } from './util';
|
|
3
|
+
import { RemoteAbortSignal } from '../remoteAbortSignals';
|
|
4
|
+
import { Region } from '../../util';
|
|
5
|
+
export default class CoreEstimateRegionStats extends RpcMethodType {
|
|
6
|
+
name: string;
|
|
7
|
+
serializeArguments(args: RenderArgs & {
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
statusCallback?: (arg: string) => void;
|
|
10
|
+
}, rpcDriver: string): Promise<{}>;
|
|
11
|
+
execute(args: {
|
|
12
|
+
adapterConfig: {};
|
|
13
|
+
regions: Region[];
|
|
14
|
+
signal?: RemoteAbortSignal;
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
sessionId: string;
|
|
17
|
+
}, rpcDriver: string): Promise<import("../../data_adapters/BaseAdapter").Stats>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
7
|
+
const dataAdapterCache_1 = require("../../data_adapters/dataAdapterCache");
|
|
8
|
+
const RpcMethodType_1 = __importDefault(require("../../pluggableElementTypes/RpcMethodType"));
|
|
9
|
+
const BaseAdapter_1 = require("../../data_adapters/BaseAdapter");
|
|
10
|
+
const util_1 = require("../../util");
|
|
11
|
+
class CoreEstimateRegionStats extends RpcMethodType_1.default {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.name = 'CoreEstimateRegionStats';
|
|
15
|
+
}
|
|
16
|
+
async serializeArguments(args, rpcDriver) {
|
|
17
|
+
var _a;
|
|
18
|
+
const { rootModel } = this.pluginManager;
|
|
19
|
+
const assemblyManager = rootModel.session.assemblyManager;
|
|
20
|
+
const renamedArgs = await (0, util_1.renameRegionsIfNeeded)(assemblyManager, {
|
|
21
|
+
...args,
|
|
22
|
+
filters: (_a = args.filters) === null || _a === void 0 ? void 0 : _a.toJSON().filters,
|
|
23
|
+
});
|
|
24
|
+
return super.serializeArguments(renamedArgs, rpcDriver);
|
|
25
|
+
}
|
|
26
|
+
async execute(args, rpcDriver) {
|
|
27
|
+
const pm = this.pluginManager;
|
|
28
|
+
const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
|
|
29
|
+
const { adapterConfig, sessionId, regions } = deserializedArgs;
|
|
30
|
+
const { dataAdapter } = await (0, dataAdapterCache_1.getAdapter)(pm, sessionId, adapterConfig);
|
|
31
|
+
if (!(0, BaseAdapter_1.isFeatureAdapter)(dataAdapter)) {
|
|
32
|
+
throw new Error('Adapter does not support retrieving features');
|
|
33
|
+
}
|
|
34
|
+
return dataAdapter.estimateRegionsStats(regions, deserializedArgs);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.default = CoreEstimateRegionStats;
|