@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.
Files changed (116) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +18 -19
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +76 -69
  3. package/BaseFeatureWidget/SequenceBox.js +9 -3
  4. package/BaseFeatureWidget/SequenceFeatureDetails.js +70 -52
  5. package/BaseFeatureWidget/SequencePanel.d.ts +3 -3
  6. package/BaseFeatureWidget/SequencePanel.js +8 -5
  7. package/BaseFeatureWidget/index.js +2 -2
  8. package/CorePlugin.js +2 -7
  9. package/PluginLoader.d.ts +1 -1
  10. package/PluginLoader.js +20 -24
  11. package/PluginManager.d.ts +1 -1
  12. package/PluginManager.js +2 -3
  13. package/ReExports/Attributes.d.ts +1 -2
  14. package/ReExports/Attributes.js +4 -3
  15. package/ReExports/BaseCard.d.ts +1 -2
  16. package/ReExports/BaseCard.js +4 -3
  17. package/ReExports/DataGrid.d.ts +1 -2
  18. package/ReExports/DataGrid.js +2 -2
  19. package/ReExports/FeatureDetails.d.ts +1 -2
  20. package/ReExports/FeatureDetails.js +4 -3
  21. package/ReExports/index.d.ts +1 -2
  22. package/ReExports/index.js +3 -2
  23. package/ReExports/modules.d.ts +1 -1
  24. package/ReExports/modules.js +2 -2
  25. package/assemblyManager/assembly.js +5 -5
  26. package/assemblyManager/assemblyConfigSchema.js +2 -2
  27. package/configuration/configurationSchema.js +1 -1
  28. package/configuration/util.js +1 -1
  29. package/data_adapters/BaseAdapter.js +1 -1
  30. package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +8 -0
  31. package/data_adapters/CytobandAdapter/CytobandAdapter.js +40 -0
  32. package/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
  33. package/data_adapters/CytobandAdapter/configSchema.js +17 -0
  34. package/data_adapters/CytobandAdapter/index.d.ts +3 -0
  35. package/data_adapters/CytobandAdapter/index.js +37 -0
  36. package/data_adapters/dataAdapterCache.d.ts +3 -2
  37. package/data_adapters/dataAdapterCache.js +2 -3
  38. package/package.json +5 -4
  39. package/pluggableElementTypes/PluggableElementBase.d.ts +1 -1
  40. package/pluggableElementTypes/PluggableElementBase.js +1 -2
  41. package/pluggableElementTypes/RpcMethodType.d.ts +5 -8
  42. package/pluggableElementTypes/RpcMethodType.js +23 -34
  43. package/pluggableElementTypes/index.d.ts +11 -1
  44. package/pluggableElementTypes/index.js +23 -23
  45. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -2
  46. package/pluggableElementTypes/models/BaseTrackModel.js +8 -13
  47. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +13 -2
  48. package/pluggableElementTypes/renderers/CircularChordRendererType.js +10 -2
  49. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +8 -2
  50. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +10 -4
  51. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  52. package/pluggableElementTypes/renderers/ServerSideRendererType.js +2 -34
  53. package/pluggableElementTypes/renderers/index.d.ts +7 -9
  54. package/pluggableElementTypes/renderers/index.js +15 -15
  55. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -1
  56. package/rpc/BaseRpcDriver.js +7 -8
  57. package/rpc/WebWorkerRpcDriver.js +18 -12
  58. package/rpc/coreRpcMethods.d.ts +9 -11
  59. package/rpc/coreRpcMethods.js +17 -17
  60. package/rpc/methods/CoreGetFeatureDetails.js +1 -1
  61. package/rpc/methods/util.d.ts +2 -2
  62. package/rpc/methods/util.js +2 -2
  63. package/rpc/remoteAbortSignals.js +0 -1
  64. package/tsconfig.build.tsbuildinfo +1 -1
  65. package/ui/App.js +3 -18
  66. package/ui/AppLogo.js +1 -6
  67. package/ui/ColorPicker.js +1 -1
  68. package/ui/Dialog.js +1 -1
  69. package/ui/DrawerWidget.js +4 -4
  70. package/ui/EditableTypography.js +1 -1
  71. package/ui/FileSelector/FileSelector.d.ts +2 -2
  72. package/ui/FileSelector/FileSelector.js +24 -35
  73. package/ui/FileSelector/index.d.ts +1 -2
  74. package/ui/FileSelector/index.js +3 -2
  75. package/ui/LoadingEllipses.js +2 -2
  76. package/ui/Menu.js +45 -32
  77. package/ui/ResizeBar.js +10 -6
  78. package/ui/ResizeHandle.js +3 -6
  79. package/ui/SanitizedHTML.js +2 -0
  80. package/ui/ViewContainer.js +7 -44
  81. package/ui/ViewMenu.d.ts +9 -0
  82. package/ui/ViewMenu.js +69 -0
  83. package/ui/ViewPanel.d.ts +19 -0
  84. package/ui/ViewPanel.js +49 -0
  85. package/ui/theme.d.ts +10 -166
  86. package/ui/theme.js +260 -48
  87. package/util/Base1DUtils.js +16 -14
  88. package/util/Base1DViewModel.d.ts +1 -1
  89. package/util/Base1DViewModel.js +9 -8
  90. package/util/aborting.js +1 -1
  91. package/util/analytics.js +1 -1
  92. package/util/blockTypes.js +10 -10
  93. package/util/color/index.d.ts +1 -2
  94. package/util/color/index.js +4 -3
  95. package/util/idMaker.js +5 -8
  96. package/util/index.d.ts +9 -9
  97. package/util/index.js +35 -52
  98. package/util/io/RemoteFileWithRangeCache.js +2 -2
  99. package/util/io/index.d.ts +1 -2
  100. package/util/io/index.js +6 -6
  101. package/util/jexl.js +3 -1
  102. package/util/layouts/GranularRectLayout.js +10 -4
  103. package/util/layouts/MultiLayout.js +1 -1
  104. package/util/layouts/SceneGraph.js +3 -7
  105. package/util/map-obj.d.ts +3 -0
  106. package/util/map-obj.js +33 -0
  107. package/util/offscreenCanvasPonyfill.js +4 -3
  108. package/util/offscreenCanvasUtils.d.ts +18 -4
  109. package/util/offscreenCanvasUtils.js +49 -7
  110. package/util/tracks.d.ts +1 -1
  111. package/util/tracks.js +0 -1
  112. package/util/types/index.d.ts +1 -1
  113. package/util/types/index.js +3 -3
  114. package/util/types/mst.js +3 -3
  115. package/data_adapters/CytobandAdapter.d.ts +0 -8
  116. 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({ name: '' });
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 === null || rootModel === void 0 ? void 0 : rootModel.findAppropriateInternetAccount(loc);
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
- if (signal && (0, remoteAbortSignals_1.isRemoteAbortSignal)(signal)) {
41
- return { ...serializedArgs, signal: (0, remoteAbortSignals_1.deserializeAbortSignal)(signal) };
42
- }
43
- return { ...serializedArgs, signal: undefined };
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, _rpcDriverClassName) {
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
- // @ts-ignore
57
- const retryAccount = rootModel === null || rootModel === void 0 ? void 0 : rootModel.createEphemeralInternetAccount(`HTTPBasicInternetAccount-${new URL(error.url).origin}`, {}, error.url);
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
- if ((0, mobx_state_tree_1.isStateTreeNode)(thing) && !(0, mobx_state_tree_1.isAlive)(thing)) {
67
- return thing;
68
- }
69
- if ((0, types_1.isUriLocation)(thing)) {
70
- await this.serializeNewAuthArguments(thing);
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.TextSearchAdapterType = exports.InternetAccountType = exports.RpcMethodType = exports.ViewType = exports.DisplayType = exports.TrackType = exports.WidgetType = exports.RendererType = exports.ConnectionType = exports.AdapterType = void 0;
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; } });
@@ -18,8 +18,8 @@ function stateModelFactory(pluginManager) {
18
18
  })
19
19
  .actions(self => ({
20
20
  afterAttach() {
21
- if (!self.tracks.length) {
22
- // @ts-ignore
21
+ if (self.tracks.length === 0) {
22
+ // @ts-expect-error
23
23
  self.connect(self.configuration);
24
24
  }
25
25
  },
@@ -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.includes(d.type));
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.map(d => d.viewMenuActions).flat();
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
- // @ts-ignore
97
- (session.adminMode ||
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-ignore
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
- import { SimpleFeatureSerialized } from '../../util/simpleFeature';
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
- }): any;
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 simpleFeature_1 = __importDefault(require("../../util/simpleFeature"));
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 => simpleFeature_1.default.fromJSON(f)).map(f => [f.id(), 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, RenderResults, ResultsSerialized as ServerSideResultsSerialized, ResultsDeserialized as ServerSideResultsDeserialized } from './ServerSideRendererType';
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
- return rpcManager.call(args.sessionId, 'ComparativeRender', args);
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
- let regions = [];
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
- // hydrate res using ServerSideRenderedContent
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
- const { width, height, canvasRecordedData } = results;
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
- import BoxRendererType from './BoxRendererType';
2
- import CircularChordRendererType from './CircularChordRendererType';
3
- import ComparativeServerSideRendererType from './ComparativeServerSideRendererType';
4
- import FeatureRendererType from './FeatureRendererType';
5
- import RendererType, { RenderProps } from './RendererType';
6
- import ServerSideRenderedContent from './ServerSideRenderedContent';
7
- import ServerSideRendererType from './ServerSideRendererType';
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.RendererType = exports.FeatureRendererType = exports.ComparativeServerSideRendererType = exports.CircularChordRendererType = exports.BoxRendererType = void 0;
7
- const BoxRendererType_1 = __importDefault(require("./BoxRendererType"));
8
- exports.BoxRendererType = BoxRendererType_1.default;
9
- const CircularChordRendererType_1 = __importDefault(require("./CircularChordRendererType"));
10
- exports.CircularChordRendererType = CircularChordRendererType_1.default;
11
- const ComparativeServerSideRendererType_1 = __importDefault(require("./ComparativeServerSideRendererType"));
12
- exports.ComparativeServerSideRendererType = ComparativeServerSideRendererType_1.default;
13
- const FeatureRendererType_1 = __importDefault(require("./FeatureRendererType"));
14
- exports.FeatureRendererType = FeatureRendererType_1.default;
15
- const RendererType_1 = __importDefault(require("./RendererType"));
16
- exports.RendererType = RendererType_1.default;
17
- const ServerSideRenderedContent_1 = __importDefault(require("./ServerSideRenderedContent"));
18
- exports.ServerSideRenderedContent = ServerSideRenderedContent_1.default;
19
- const ServerSideRendererType_1 = __importDefault(require("./ServerSideRendererType"));
20
- exports.ServerSideRendererType = ServerSideRendererType_1.default;
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; } });
@@ -15,7 +15,7 @@ class SerializableFilterChain {
15
15
  passes(...args) {
16
16
  for (let i = 0; i < this.filterChain.length; i += 1) {
17
17
  if (
18
- // @ts-ignore
18
+ // @ts-expect-error
19
19
  !this.filterChain[i].expr.evalSync({ feature: args[0] })) {
20
20
  return false;
21
21
  }
@@ -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
- return [...new Array(workerCount)].map(() => new LazyWorker(this));
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
- // console.log(`${sessionId} -> worker ${workerNumber}`)
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
- if (e.data.message === 'ready') {
50
- resolve(worker);
51
- worker.workers[0].removeEventListener('message', listener);
52
- }
53
- else if (e.data.message === 'readyForConfig') {
54
- worker.workers[0].postMessage({
55
- message: 'config',
56
- config: this.workerBootConfiguration,
57
- });
58
- }
59
- else if (e.data.message === 'error') {
60
- reject((0, serialize_error_1.deserializeError)(e.data.error));
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);
@@ -1,11 +1,9 @@
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, };
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';