@jbrowse/core 2.10.1 → 2.10.3

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