@jbrowse/core 2.2.2 → 2.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 (80) hide show
  1. package/PluginManager.d.ts +4 -0
  2. package/PluginManager.js +12 -0
  3. package/README.md +6 -2
  4. package/package.json +3 -3
  5. package/pluggableElementTypes/AdapterType.d.ts +4 -4
  6. package/pluggableElementTypes/AdapterType.js +0 -1
  7. package/pluggableElementTypes/AddTrackWorkflowType.d.ts +3 -3
  8. package/pluggableElementTypes/ConnectionType.d.ts +0 -1
  9. package/pluggableElementTypes/ConnectionType.js +0 -1
  10. package/pluggableElementTypes/DisplayType.d.ts +9 -0
  11. package/pluggableElementTypes/DisplayType.js +1 -0
  12. package/pluggableElementTypes/PluggableElementBase.d.ts +3 -0
  13. package/pluggableElementTypes/PluggableElementBase.js +4 -0
  14. package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -0
  15. package/pluggableElementTypes/TrackType.d.ts +2 -1
  16. package/pluggableElementTypes/ViewType.d.ts +4 -3
  17. package/pluggableElementTypes/WidgetType.d.ts +10 -9
  18. package/pluggableElementTypes/models/BaseDisplayModel.js +1 -0
  19. package/pluggableElementTypes/models/BaseTrackModel.d.ts +19 -8
  20. package/pluggableElementTypes/models/BaseTrackModel.js +32 -26
  21. package/pluggableElementTypes/renderers/BoxRendererType.js +1 -14
  22. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +9 -0
  23. package/pluggableElementTypes/renderers/CircularChordRendererType.js +23 -0
  24. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +4 -1
  25. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +4 -4
  26. package/pluggableElementTypes/renderers/FeatureRendererType.js +11 -13
  27. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -0
  28. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +8 -0
  29. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.js +60 -0
  30. package/pluggableElementTypes/renderers/ServerSideRenderedContent.d.ts +2 -2
  31. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +6 -6
  32. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +4 -4
  33. package/pluggableElementTypes/renderers/ServerSideRendererType.js +13 -12
  34. package/rpc/BaseRpcDriver.d.ts +1 -1
  35. package/rpc/BaseRpcDriver.js +7 -17
  36. package/rpc/coreRpcMethods.d.ts +11 -99
  37. package/rpc/coreRpcMethods.js +17 -241
  38. package/rpc/methods/CoreEstimateRegionStats.d.ts +18 -0
  39. package/rpc/methods/CoreEstimateRegionStats.js +37 -0
  40. package/rpc/methods/CoreFreeResources.d.ts +12 -0
  41. package/rpc/methods/CoreFreeResources.js +35 -0
  42. package/rpc/methods/CoreGetFeatureDetails.d.ts +16 -0
  43. package/rpc/methods/CoreGetFeatureDetails.js +44 -0
  44. package/rpc/methods/CoreGetFeatures.d.ts +17 -0
  45. package/rpc/methods/CoreGetFeatures.js +44 -0
  46. package/rpc/methods/CoreGetFileInfo.d.ts +10 -0
  47. package/rpc/methods/CoreGetFileInfo.js +24 -0
  48. package/rpc/methods/CoreGetMetadata.d.ts +10 -0
  49. package/rpc/methods/CoreGetMetadata.js +24 -0
  50. package/rpc/methods/CoreGetRefNames.d.ts +10 -0
  51. package/rpc/methods/CoreGetRefNames.js +25 -0
  52. package/rpc/methods/CoreRender.d.ts +14 -0
  53. package/rpc/methods/CoreRender.js +57 -0
  54. package/rpc/methods/util.d.ts +14 -0
  55. package/rpc/methods/util.js +21 -0
  56. package/rpc/remoteAbortSignals.d.ts +3 -1
  57. package/rpc/remoteAbortSignals.js +3 -1
  58. package/tsconfig.build.tsbuildinfo +1 -1
  59. package/ui/App.js +9 -77
  60. package/ui/AppLogo.d.ts +8 -0
  61. package/ui/AppLogo.js +22 -0
  62. package/ui/AppToolbar.d.ts +19 -0
  63. package/ui/AppToolbar.js +56 -0
  64. package/ui/AssemblySelector.d.ts +5 -3
  65. package/ui/AssemblySelector.js +4 -4
  66. package/ui/PrerenderedCanvas.d.ts +3 -20
  67. package/ui/PrerenderedCanvas.js +1 -19
  68. package/ui/Snackbar.js +7 -53
  69. package/ui/ViewLauncher.d.ts +18 -0
  70. package/ui/ViewLauncher.js +50 -0
  71. package/ui/index.d.ts +9 -9
  72. package/ui/index.js +19 -19
  73. package/util/Base1DUtils.js +1 -1
  74. package/util/dedupe.d.ts +3 -0
  75. package/util/dedupe.js +18 -0
  76. package/util/index.d.ts +1 -1
  77. package/util/index.js +2 -5
  78. package/util/offscreenCanvasUtils.js +1 -1
  79. package/util/stats.d.ts +7 -3
  80. 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 ServerSideRenderedContentProps extends ResultsSerialized, RenderArgs {
3
+ interface Props extends ResultsSerialized, RenderArgs {
4
4
  RenderingComponent: React.ComponentType<any>;
5
5
  }
6
- export default function ServerSideRenderedContent(props: ServerSideRenderedContentProps): JSX.Element;
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 ServerSideRenderedContent(props) {
32
- const ssrContainerNode = (0, react_1.useRef)(null);
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 = ssrContainerNode.current;
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 (react_1.default.createElement("div", { ref: ssrContainerNode, "data-html-size": html.length, className: "ssr-container" }));
63
+ return react_1.default.createElement("div", { ref: ref });
64
64
  }
65
- exports.default = ServerSideRenderedContent;
65
+ exports.default = default_1;
@@ -1,13 +1,13 @@
1
- import { DeprecatedThemeOptions } from '@mui/material';
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: DeprecatedThemeOptions;
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(results: ResultsSerialized, args: RenderArgs): ResultsDeserialized;
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(elt) {
40
- return 'canvasRecordedData' in elt;
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 && args.filters.toJSON().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(results, args) {
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 results if the renderer explicitly has
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
- ...results,
76
+ ...res,
76
77
  html: this.supportsSVG
77
- ? results.html
78
+ ? res.html
78
79
  : '<text y="12" fill="black">SVG export not supported for this track</text>',
79
80
  };
80
81
  }
81
- // hydrate results using ServerSideRenderedContent
82
+ // hydrate res using ServerSideRenderedContent
82
83
  return {
83
- ...rest,
84
- reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...results, RenderingComponent: this.ReactComponent })),
84
+ ...res,
85
+ reactElement: (react_1.default.createElement(ServerSideRenderedContent_1.default, { ...args, ...res, RenderingComponent: this.ReactComponent })),
85
86
  };
86
87
  }
87
88
  /**
@@ -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<unknown>;
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;
@@ -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
- return new Promise((_resolve, reject) => {
22
- function delay() {
23
- setTimeout(async () => {
24
- try {
25
- await worker.call('ping', [], {
26
- timeout: pingTime * 2,
27
- rpcDriverClassName,
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() {
@@ -1,99 +1,11 @@
1
- import RpcMethodType from '../pluggableElementTypes/RpcMethodType';
2
- import { RenderArgs as ServerSideRenderArgs, RenderArgsSerialized as ServerSideRenderArgsSerialized, RenderResults, ResultsSerialized } from '../pluggableElementTypes/renderers/ServerSideRendererType';
3
- import { RemoteAbortSignal } from './remoteAbortSignals';
4
- import { Region } from '../util';
5
- import SimpleFeature, { SimpleFeatureSerialized } from '../util/simpleFeature';
6
- export declare class CoreGetRefNames extends RpcMethodType {
7
- name: string;
8
- execute(args: {
9
- sessionId: string;
10
- signal: RemoteAbortSignal;
11
- adapterConfig: {};
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, };
@@ -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.CoreGetFeatureDetails = exports.CoreRender = exports.CoreEstimateRegionStats = exports.CoreFreeResources = exports.CoreGetFeatures = exports.CoreGetMetadata = exports.CoreGetFileInfo = exports.CoreGetRefNames = void 0;
7
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
8
- const operators_1 = require("rxjs/operators");
9
- const dataAdapterCache_1 = require("../data_adapters/dataAdapterCache");
10
- const RpcMethodType_1 = __importDefault(require("../pluggableElementTypes/RpcMethodType"));
11
- const ServerSideRendererType_1 = __importDefault(require("../pluggableElementTypes/renderers/ServerSideRendererType"));
12
- const BaseAdapter_1 = require("../data_adapters/BaseAdapter");
13
- const util_1 = require("../util");
14
- const simpleFeature_1 = __importDefault(require("../util/simpleFeature"));
15
- class CoreGetRefNames extends RpcMethodType_1.default {
16
- constructor() {
17
- super(...arguments);
18
- this.name = 'CoreGetRefNames';
19
- }
20
- async execute(args, rpcDriver) {
21
- const pm = this.pluginManager;
22
- const deserializedArgs = await this.deserializeArguments(args, rpcDriver);
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;