@jbrowse/core 2.1.7 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BaseFeatureWidget/BaseFeatureDetail.d.ts +3 -2
- package/BaseFeatureWidget/BaseFeatureDetail.js +43 -28
- package/BaseFeatureWidget/SequenceBox.js +4 -8
- package/BaseFeatureWidget/SequenceFeatureDetails.js +2 -1
- package/Plugin.d.ts +1 -1
- package/PluginLoader.d.ts +2 -2
- package/PluginManager.d.ts +6 -6
- package/ReExports/modules.d.ts +3 -3
- package/assemblyManager/assembly.d.ts +23 -17
- package/assemblyManager/assembly.js +75 -76
- package/assemblyManager/assemblyConfigSchema.d.ts +6 -2
- package/assemblyManager/assemblyConfigSchema.js +39 -2
- package/assemblyManager/assemblyManager.d.ts +76 -214
- package/assemblyManager/assemblyManager.js +17 -39
- package/configuration/configurationSchema.d.ts +2 -2
- package/data_adapters/BaseAdapter.d.ts +2 -2
- package/data_adapters/CytobandAdapter.js +7 -0
- package/data_adapters/dataAdapterCache.d.ts +1 -1
- package/package.json +2 -2
- package/pluggableElementTypes/AdapterType.d.ts +1 -1
- package/pluggableElementTypes/AddTrackWorkflowType.d.ts +2 -2
- package/pluggableElementTypes/RpcMethodType.d.ts +1 -1
- package/pluggableElementTypes/ViewType.d.ts +2 -2
- package/pluggableElementTypes/index.d.ts +2 -2
- package/pluggableElementTypes/models/BaseConnectionModelFactory.d.ts +23 -2
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +24 -2
- package/pluggableElementTypes/models/BaseDisplayModel.d.ts +62 -3
- package/pluggableElementTypes/models/BaseDisplayModel.js +138 -92
- package/pluggableElementTypes/models/BaseTrackModel.d.ts +49 -4
- package/pluggableElementTypes/models/BaseTrackModel.js +77 -26
- package/pluggableElementTypes/models/BaseViewModel.d.ts +22 -0
- package/pluggableElementTypes/models/BaseViewModel.js +41 -2
- package/pluggableElementTypes/models/InternetAccountModel.d.ts +53 -6
- package/pluggableElementTypes/models/InternetAccountModel.js +57 -6
- package/pluggableElementTypes/models/baseConnectionConfig.js +17 -1
- package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +2 -2
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +27 -1
- package/pluggableElementTypes/models/baseTrackConfig.d.ts +5 -2
- package/pluggableElementTypes/models/baseTrackConfig.js +52 -1
- package/pluggableElementTypes/renderers/BoxRendererType.d.ts +2 -2
- package/pluggableElementTypes/renderers/BoxRendererType.js +2 -0
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/RendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/util/serializableFilterChain.d.ts +2 -2
- package/rpc/MainThreadRpcDriver.d.ts +1 -1
- package/rpc/MainThreadRpcDriver.js +2 -2
- package/rpc/RpcManager.d.ts +2 -2
- package/rpc/WebWorkerRpcDriver.d.ts +5 -4
- package/rpc/WebWorkerRpcDriver.js +2 -2
- package/rpc/baseRpcConfig.d.ts +2 -0
- package/rpc/baseRpcConfig.js +18 -0
- package/rpc/configSchema.js +16 -10
- package/rpc/coreRpcMethods.d.ts +14 -14
- package/rpc/coreRpcMethods.js +60 -63
- package/rpc/mainThreadRpcConfig.d.ts +2 -0
- package/rpc/mainThreadRpcConfig.js +19 -0
- package/rpc/remoteAbortSignals.d.ts +1 -1
- package/rpc/webWorkerRpcConfig.d.ts +2 -0
- package/rpc/webWorkerRpcConfig.js +19 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AboutDialog.js +2 -1
- package/ui/App.d.ts +2 -2
- package/ui/App.js +11 -10
- package/ui/AssemblySelector.d.ts +1 -1
- package/ui/AssemblySelector.js +12 -10
- package/ui/DrawerWidget.js +2 -1
- package/ui/EditableTypography.d.ts +4 -4
- package/ui/EditableTypography.js +7 -11
- package/ui/LoadingEllipses.d.ts +7 -0
- package/ui/LoadingEllipses.js +38 -0
- package/ui/Logo.d.ts +1 -1
- package/ui/Menu.d.ts +2 -2
- package/ui/Snackbar.d.ts +1 -1
- package/ui/ViewContainer.d.ts +2 -1
- package/ui/ViewContainer.js +34 -22
- package/ui/index.d.ts +1 -0
- package/ui/index.js +3 -1
- package/util/Base1DUtils.js +9 -3
- package/util/Base1DViewModel.d.ts +72 -2
- package/util/Base1DViewModel.js +94 -3
- package/util/blockTypes.d.ts +1 -1
- package/util/calculateDynamicBlocks.js +1 -1
- package/util/calculateStaticBlocks.js +1 -1
- package/util/index.d.ts +3 -1
- package/util/index.js +19 -9
- package/util/io/RemoteFileWithRangeCache.d.ts +1 -2
- package/util/io/RemoteFileWithRangeCache.js +2 -2
- package/util/io/index.js +3 -3
- package/util/jexl.d.ts +1 -1
- package/util/layouts/BaseLayout.d.ts +1 -1
- package/util/layouts/GranularRectLayout.d.ts +7 -2
- package/util/layouts/GranularRectLayout.js +29 -45
- package/util/layouts/MultiLayout.d.ts +2 -2
- package/util/layouts/MultiLayout.js +4 -6
- package/util/offscreenCanvasPonyfill.d.ts +2 -2
- package/util/offscreenCanvasUtils.d.ts +1 -1
- package/util/simpleFeature.d.ts +3 -0
- package/util/stats.d.ts +26 -0
- package/util/stats.js +9 -9
- package/util/tracks.d.ts +2 -2
- package/util/types/index.d.ts +15 -8
- package/util/types/index.js +8 -1
- package/util/types/util.d.ts +5 -5
|
@@ -10,8 +10,8 @@ export declare const useStyles: (params: void, styleOverrides?: {
|
|
|
10
10
|
} | undefined) => {
|
|
11
11
|
classes: Record<"expansionPanelDetails" | "expandIcon" | "field" | "fieldDescription" | "fieldName" | "fieldValue" | "fieldSubvalue", string>;
|
|
12
12
|
theme: import("@mui/material").Theme;
|
|
13
|
-
css: import("tss-react
|
|
14
|
-
cx: import("tss-react
|
|
13
|
+
css: import("tss-react").Css;
|
|
14
|
+
cx: import("tss-react").Cx;
|
|
15
15
|
};
|
|
16
16
|
export declare function BaseCard({ children, title, defaultExpanded, }: BaseCardProps): JSX.Element;
|
|
17
17
|
export declare const FieldName: ({ description, name, width, prefix, }: {
|
|
@@ -34,6 +34,7 @@ export declare const BaseCoreDetails: (props: BaseProps) => JSX.Element;
|
|
|
34
34
|
interface AttributeProps {
|
|
35
35
|
attributes: Record<string, any>;
|
|
36
36
|
omit?: string[];
|
|
37
|
+
omitSingleLevel?: string[];
|
|
37
38
|
formatter?: (val: unknown, key: string) => React.ReactNode;
|
|
38
39
|
descriptions?: Record<string, React.ReactNode>;
|
|
39
40
|
prefix?: string[];
|
|
@@ -156,35 +156,41 @@ const ArrayValue = ({ name, value, description, prefix = [], }) => {
|
|
|
156
156
|
}
|
|
157
157
|
};
|
|
158
158
|
const toLocale = (n) => n.toLocaleString('en-US');
|
|
159
|
-
function
|
|
159
|
+
function Position(props) {
|
|
160
160
|
const { feature } = props;
|
|
161
|
-
const
|
|
162
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
163
|
-
const formattedFeat = { ...obj, ...obj.__jbrowsefmt };
|
|
164
|
-
const { start, strand, end, refName } = formattedFeat;
|
|
161
|
+
const strand = feature.strand;
|
|
165
162
|
const strandMap = {
|
|
166
163
|
'-1': '-',
|
|
167
164
|
'0': '',
|
|
168
165
|
'1': '+',
|
|
169
166
|
};
|
|
170
167
|
const str = strandMap[strand] ? `(${strandMap[strand]})` : '';
|
|
168
|
+
// @ts-ignore
|
|
169
|
+
const loc = (0, util_1.assembleLocString)(feature);
|
|
170
|
+
return react_1.default.createElement(react_1.default.Fragment, null, `${loc} ${str}`);
|
|
171
|
+
}
|
|
172
|
+
function CoreDetails(props) {
|
|
173
|
+
const { feature } = props;
|
|
174
|
+
const obj = feature;
|
|
175
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
176
|
+
const formattedFeat = { ...obj, ...obj.__jbrowsefmt };
|
|
177
|
+
const { start, end } = formattedFeat;
|
|
171
178
|
const displayedDetails = {
|
|
172
179
|
...formattedFeat,
|
|
173
180
|
length: toLocale(end - start),
|
|
174
|
-
position: `${refName}:${toLocale(start + 1)}..${toLocale(end)} ${str}`,
|
|
175
181
|
};
|
|
176
182
|
const coreRenderedDetails = {
|
|
177
|
-
position: 'Position',
|
|
178
183
|
description: 'Description',
|
|
179
184
|
name: 'Name',
|
|
180
185
|
length: 'Length',
|
|
181
186
|
type: 'Type',
|
|
182
|
-
assemblyName: 'Assembly name',
|
|
183
187
|
};
|
|
184
|
-
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
185
|
-
.
|
|
186
|
-
.
|
|
187
|
-
|
|
188
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
189
|
+
react_1.default.createElement(exports.SimpleValue, { name: "Position", value: react_1.default.createElement(Position, { ...props, feature: formattedFeat }) }),
|
|
190
|
+
Object.entries(coreRenderedDetails)
|
|
191
|
+
.map(([key, name]) => [name, displayedDetails[key]])
|
|
192
|
+
.filter(([, value]) => value != null)
|
|
193
|
+
.map(([name, value]) => (react_1.default.createElement(exports.SimpleValue, { key: name, name: name, value: value })))));
|
|
188
194
|
}
|
|
189
195
|
const BaseCoreDetails = (props) => {
|
|
190
196
|
return (react_1.default.createElement(BaseCard, { ...props, title: "Primary data" },
|
|
@@ -229,23 +235,25 @@ const DataGridDetails = ({ value, prefix, name, }) => {
|
|
|
229
235
|
width: (0, util_1.measureGridWidth)(rows.map(r => r[val])),
|
|
230
236
|
}));
|
|
231
237
|
const rowHeight = 25;
|
|
232
|
-
const
|
|
233
|
-
const
|
|
238
|
+
const hideFoot = rows.length < 100;
|
|
239
|
+
const headHeight = 80;
|
|
240
|
+
const height = Math.min(rows.length, 100) * rowHeight + headHeight + (hideFoot ? 0 : 50);
|
|
234
241
|
// disableSelection on click helps avoid
|
|
235
242
|
// https://github.com/mui-org/material-ui-x/issues/1197
|
|
236
243
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
237
244
|
react_1.default.createElement(exports.FieldName, { prefix: prefix, name: name }),
|
|
238
245
|
react_1.default.createElement("div", { style: {
|
|
239
|
-
height
|
|
240
|
-
headerHeight +
|
|
241
|
-
(hideFooter ? 0 : 50),
|
|
246
|
+
height,
|
|
242
247
|
width: '100%',
|
|
243
248
|
} },
|
|
244
|
-
react_1.default.createElement(x_data_grid_1.DataGrid, { disableSelectionOnClick: true, rowHeight: rowHeight, rows: rows,
|
|
249
|
+
react_1.default.createElement(x_data_grid_1.DataGrid, { disableSelectionOnClick: true, rowHeight: rowHeight, rows: rows, hideFooterSelectedRowCount: true, columns: columns, hideFooter: hideFoot }))));
|
|
245
250
|
}
|
|
246
251
|
return null;
|
|
247
252
|
};
|
|
248
|
-
//
|
|
253
|
+
// pick using a path from an object, similar to _.get from lodash with special logic
|
|
254
|
+
// for Descriptions from e.g. VCF headers
|
|
255
|
+
// @param arr example ['a','b'], obj = {a:{b:'hello}}
|
|
256
|
+
// @returns hello (with special addition to grab description also)
|
|
249
257
|
function accessNested(arr, obj = {}) {
|
|
250
258
|
arr.forEach(elt => {
|
|
251
259
|
if (obj) {
|
|
@@ -259,13 +267,11 @@ function accessNested(arr, obj = {}) {
|
|
|
259
267
|
: undefined;
|
|
260
268
|
}
|
|
261
269
|
function generateMaxWidth(array, prefix) {
|
|
262
|
-
// @ts-ignore
|
|
263
270
|
const arr = [];
|
|
264
|
-
array.forEach(
|
|
271
|
+
array.forEach(key => {
|
|
265
272
|
const val = [...prefix, key[0]].join('.');
|
|
266
273
|
arr.push((0, util_1.measureText)(val, 12));
|
|
267
274
|
});
|
|
268
|
-
// @ts-ignore
|
|
269
275
|
return Math.ceil(Math.max(...arr)) + 10;
|
|
270
276
|
}
|
|
271
277
|
function UriAttribute({ value, prefix, name, }) {
|
|
@@ -283,8 +289,8 @@ function UriAttribute({ value, prefix, name, }) {
|
|
|
283
289
|
react_1.default.createElement(exports.BasicValue, { value: href })));
|
|
284
290
|
}
|
|
285
291
|
function Attributes(props) {
|
|
286
|
-
const { attributes, omit = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
|
|
287
|
-
const omits = [...omit, ...globalOmit];
|
|
292
|
+
const { attributes, omit = [], omitSingleLevel = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
|
|
293
|
+
const omits = [...omit, ...globalOmit, ...omitSingleLevel];
|
|
288
294
|
const { __jbrowsefmt, ...rest } = attributes;
|
|
289
295
|
const formattedAttributes = { ...rest, ...__jbrowsefmt };
|
|
290
296
|
const maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.includes(k)), prefix);
|
|
@@ -298,7 +304,8 @@ function Attributes(props) {
|
|
|
298
304
|
return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(DataGridDetails, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(ArrayValue, { key: key, name: key, value: value, description: description, prefix: prefix }));
|
|
299
305
|
}
|
|
300
306
|
else if ((0, is_object_1.default)(value)) {
|
|
301
|
-
|
|
307
|
+
const { omitSingleLevel, ...rest } = props;
|
|
308
|
+
return (0, util_1.isUriLocation)(value) ? (hideUris ? null : (react_1.default.createElement(UriAttribute, { key: key, name: key, prefix: prefix, value: value }))) : (react_1.default.createElement(Attributes, { ...rest, key: key, attributes: value, descriptions: descriptions, prefix: [...prefix, key] }));
|
|
302
309
|
}
|
|
303
310
|
else {
|
|
304
311
|
return (react_1.default.createElement(exports.SimpleValue, { key: key, name: key, value: formatter(value, key), description: description, prefix: prefix, width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH) }));
|
|
@@ -323,15 +330,23 @@ function generateTitle(name, id, type) {
|
|
|
323
330
|
const FeatureDetails = (props) => {
|
|
324
331
|
const { omit = [], model, feature, depth = 0 } = props;
|
|
325
332
|
const { name = '', id = '', type = '', subfeatures } = feature;
|
|
326
|
-
const
|
|
333
|
+
const pm = (0, util_1.getEnv)(model).pluginManager;
|
|
327
334
|
const session = (0, util_1.getSession)(model);
|
|
328
|
-
const ExtraPanel =
|
|
335
|
+
const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {
|
|
336
|
+
session,
|
|
337
|
+
feature,
|
|
338
|
+
model,
|
|
339
|
+
});
|
|
329
340
|
return (react_1.default.createElement(BaseCard, { title: generateTitle(name, id, type) },
|
|
330
341
|
react_1.default.createElement(material_1.Typography, null, "Core details"),
|
|
331
342
|
react_1.default.createElement(CoreDetails, { ...props }),
|
|
343
|
+
feature.mate ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
344
|
+
react_1.default.createElement(material_1.Divider, null),
|
|
345
|
+
react_1.default.createElement(material_1.Typography, null, "Mate details"),
|
|
346
|
+
react_1.default.createElement(CoreDetails, { ...props, feature: feature.mate }))) : null,
|
|
332
347
|
react_1.default.createElement(material_1.Divider, null),
|
|
333
348
|
react_1.default.createElement(material_1.Typography, null, "Attributes"),
|
|
334
|
-
react_1.default.createElement(Attributes, { attributes: feature, ...props, omit:
|
|
349
|
+
react_1.default.createElement(Attributes, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
|
|
335
350
|
react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => react_1.default.createElement(ui_1.ErrorMessage, { error: error }) },
|
|
336
351
|
react_1.default.createElement(SequenceFeatureDetails_1.default, { ...props })),
|
|
337
352
|
ExtraPanel ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -29,21 +29,17 @@ function GeneProtein({ cds, sequence, codonTable, }) {
|
|
|
29
29
|
}
|
|
30
30
|
exports.GeneProtein = GeneProtein;
|
|
31
31
|
function GenecDNA({ utr, cds, exons, sequence, upstream, downstream, includeIntrons, collapseIntron, intronBp, }) {
|
|
32
|
-
const chunks = cds.length
|
|
33
|
-
? [...cds, ...utr].sort((a, b) => a.start - b.start)
|
|
34
|
-
: exons;
|
|
32
|
+
const chunks = (cds.length ? [...cds, ...utr].sort((a, b) => a.start - b.start) : exons).filter(f => f.start !== f.end);
|
|
35
33
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
36
34
|
upstream ? (react_1.default.createElement("span", { style: { background: updownstreamColor } }, upstream)) : null,
|
|
37
|
-
chunks
|
|
38
|
-
.filter(f => f.start !== f.end)
|
|
39
|
-
.map((chunk, index) => {
|
|
35
|
+
chunks.map((chunk, idx) => {
|
|
40
36
|
var _a;
|
|
41
|
-
const intron = sequence.slice(chunk.end, (_a = chunks[
|
|
37
|
+
const intron = sequence.slice(chunk.end, (_a = chunks[idx + 1]) === null || _a === void 0 ? void 0 : _a.start);
|
|
42
38
|
return (react_1.default.createElement(react_1.default.Fragment, { key: JSON.stringify(chunk) },
|
|
43
39
|
react_1.default.createElement("span", { style: {
|
|
44
40
|
background: chunk.type === 'CDS' ? cdsColor : utrColor,
|
|
45
41
|
} }, sequence.slice(chunk.start, chunk.end)),
|
|
46
|
-
includeIntrons &&
|
|
42
|
+
includeIntrons && idx < chunks.length - 1 ? (react_1.default.createElement("span", { style: { background: intronColor } }, collapseIntron && intron.length > intronBp * 2
|
|
47
43
|
? `${intron.slice(0, intronBp)}...${intron.slice(-intronBp)}`
|
|
48
44
|
: intron)) : null));
|
|
49
45
|
}),
|
|
@@ -36,6 +36,7 @@ const SequenceHelpDialog_1 = __importDefault(require("./SequenceHelpDialog"));
|
|
|
36
36
|
const SequencePanel_1 = __importDefault(require("./SequencePanel"));
|
|
37
37
|
const util_1 = require("../util");
|
|
38
38
|
const configuration_1 = require("../configuration");
|
|
39
|
+
const ui_1 = require("../ui");
|
|
39
40
|
// icons
|
|
40
41
|
const Settings_1 = __importDefault(require("@mui/icons-material/Settings"));
|
|
41
42
|
const Help_1 = __importDefault(require("@mui/icons-material/Help"));
|
|
@@ -201,7 +202,7 @@ function SequenceFeatureDetails({ model, feature }) {
|
|
|
201
202
|
react_1.default.createElement(material_1.IconButton, { onClick: () => setSettingsDlgOpen(true) },
|
|
202
203
|
react_1.default.createElement(Settings_1.default, null))),
|
|
203
204
|
react_1.default.createElement("br", null),
|
|
204
|
-
react_1.default.createElement(react_1.default.Fragment, null, error ? (react_1.default.createElement(material_1.Typography, { color: "error" }, `${error}`)) : loading ? (react_1.default.createElement(
|
|
205
|
+
react_1.default.createElement(react_1.default.Fragment, null, error ? (react_1.default.createElement(material_1.Typography, { color: "error" }, `${error}`)) : loading ? (react_1.default.createElement(ui_1.LoadingEllipses, null)) : sequence ? ('error' in sequence ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
205
206
|
react_1.default.createElement(material_1.Typography, { color: "error" }, sequence.error),
|
|
206
207
|
react_1.default.createElement(material_1.Button, { variant: "contained", color: "inherit", onClick: () => setForceLoad({ ...forceLoad, force: true }) }, "Force load"))) : (react_1.default.createElement(SequencePanel_1.default, { ref: seqPanelRef, feature: parentFeature, mode: mode, sequence: sequence, intronBp: intronBp }))) : (react_1.default.createElement(material_1.Typography, null, "No sequence found"))))) : null,
|
|
207
208
|
settingsDlgOpen ? (react_1.default.createElement(SequenceFeatureSettingsDialog_1.default, { handleClose: arg => {
|
package/Plugin.d.ts
CHANGED
|
@@ -11,4 +11,4 @@ export default abstract class Plugin {
|
|
|
11
11
|
configure(_pluginManager: PluginManager): void;
|
|
12
12
|
configurationSchema: AnyConfigurationSchemaType | undefined;
|
|
13
13
|
}
|
|
14
|
-
export
|
|
14
|
+
export type PluginConstructor = new (...args: unknown[]) => Plugin;
|
package/PluginLoader.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface LegacyUMDPluginDefinition {
|
|
|
14
14
|
url: string;
|
|
15
15
|
name: string;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
type UMDPluginDefinition = UMDLocPluginDefinition | UMDUrlPluginDefinition;
|
|
18
18
|
export declare function isUMDPluginDefinition(def: PluginDefinition): def is UMDPluginDefinition | LegacyUMDPluginDefinition;
|
|
19
19
|
export interface ESMLocPluginDefinition {
|
|
20
20
|
esmLoc: {
|
|
@@ -25,7 +25,7 @@ export interface ESMLocPluginDefinition {
|
|
|
25
25
|
export interface ESMUrlPluginDefinition {
|
|
26
26
|
esmUrl: string;
|
|
27
27
|
}
|
|
28
|
-
export
|
|
28
|
+
export type ESMPluginDefinition = ESMLocPluginDefinition | ESMUrlPluginDefinition;
|
|
29
29
|
export declare function isESMPluginDefinition(def: PluginDefinition): def is ESMPluginDefinition;
|
|
30
30
|
export interface CJSPluginDefinition {
|
|
31
31
|
cjsUrl: string;
|
package/PluginManager.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ declare class PhasedScheduler<PhaseName extends string> {
|
|
|
26
26
|
add(phase: PhaseName, callback: Function): void;
|
|
27
27
|
run(): void;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
type PluggableElementTypeGroup = 'renderer' | 'adapter' | 'display' | 'track' | 'connection' | 'view' | 'widget' | 'rpc method' | 'internet account' | 'text search adapter' | 'add track workflow';
|
|
30
30
|
/** internal class that holds the info for a certain element type */
|
|
31
31
|
declare class TypeRecord<ElementClass extends PluggableElementBase> {
|
|
32
32
|
typeName: string;
|
|
@@ -48,7 +48,7 @@ declare class TypeRecord<ElementClass extends PluggableElementBase> {
|
|
|
48
48
|
get(name: string): ElementClass;
|
|
49
49
|
all(): ElementClass[];
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
type AnyFunction = (...args: any) => any;
|
|
52
52
|
/**
|
|
53
53
|
* free-form string-to-unknown mapping of metadata related to the instance
|
|
54
54
|
* of this plugin. `isCore` is typically set to `Boolean(true)` if the plugin was
|
|
@@ -56,7 +56,7 @@ declare type AnyFunction = (...args: any) => any;
|
|
|
56
56
|
* Can also use this metadata to stash other things about why the plugin is
|
|
57
57
|
* loaded, such as where it came from, what plugin depends on it, etc.
|
|
58
58
|
*/
|
|
59
|
-
export
|
|
59
|
+
export type PluginMetadata = Record<string, unknown>;
|
|
60
60
|
export interface PluginLoadRecord {
|
|
61
61
|
metadata?: PluginMetadata;
|
|
62
62
|
plugin: Plugin;
|
|
@@ -223,7 +223,7 @@ export default class PluginManager {
|
|
|
223
223
|
makeStyles: <Params = void, RuleNameSubsetReferencableInNestedSelectors extends string = never>(params?: {
|
|
224
224
|
name?: string | Record<string, unknown> | undefined;
|
|
225
225
|
uniqId?: string | undefined;
|
|
226
|
-
} | undefined) => <RuleName extends string>(cssObjectByRuleNameOrGetCssObjectByRuleName: Record<RuleName, import("tss-react
|
|
226
|
+
} | undefined) => <RuleName extends string>(cssObjectByRuleNameOrGetCssObjectByRuleName: Record<RuleName, import("tss-react").CSSObject> | ((theme: import("@mui/material").Theme, params: Params, classes: Record<RuleNameSubsetReferencableInNestedSelectors, string>) => Record<RuleNameSubsetReferencableInNestedSelectors | RuleName, import("tss-react").CSSObject>)) => (params: Params, styleOverrides?: {
|
|
227
227
|
props: {
|
|
228
228
|
classes?: Record<string, string> | undefined;
|
|
229
229
|
} & Record<string, unknown>;
|
|
@@ -231,8 +231,8 @@ export default class PluginManager {
|
|
|
231
231
|
} | undefined) => {
|
|
232
232
|
classes: Record<RuleName, string>;
|
|
233
233
|
theme: import("@mui/material").Theme;
|
|
234
|
-
css: import("tss-react
|
|
235
|
-
cx: import("tss-react
|
|
234
|
+
css: import("tss-react").Css;
|
|
235
|
+
cx: import("tss-react").Cx;
|
|
236
236
|
};
|
|
237
237
|
};
|
|
238
238
|
'@material-ui/core': {
|
package/ReExports/modules.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ declare const libs: {
|
|
|
144
144
|
makeStyles: <Params = void, RuleNameSubsetReferencableInNestedSelectors extends string = never>(params?: {
|
|
145
145
|
name?: string | Record<string, unknown> | undefined;
|
|
146
146
|
uniqId?: string | undefined;
|
|
147
|
-
} | undefined) => <RuleName extends string>(cssObjectByRuleNameOrGetCssObjectByRuleName: Record<RuleName, import("tss-react
|
|
147
|
+
} | undefined) => <RuleName extends string>(cssObjectByRuleNameOrGetCssObjectByRuleName: Record<RuleName, import("tss-react").CSSObject> | ((theme: MUIStyles.Theme, params: Params, classes: Record<RuleNameSubsetReferencableInNestedSelectors, string>) => Record<RuleNameSubsetReferencableInNestedSelectors | RuleName, import("tss-react").CSSObject>)) => (params: Params, styleOverrides?: {
|
|
148
148
|
props: {
|
|
149
149
|
classes?: Record<string, string> | undefined;
|
|
150
150
|
} & Record<string, unknown>;
|
|
@@ -152,8 +152,8 @@ declare const libs: {
|
|
|
152
152
|
} | undefined) => {
|
|
153
153
|
classes: Record<RuleName, string>;
|
|
154
154
|
theme: MUIStyles.Theme;
|
|
155
|
-
css: import("tss-react
|
|
156
|
-
cx: import("tss-react
|
|
155
|
+
css: import("tss-react").Css;
|
|
156
|
+
cx: import("tss-react").Cx;
|
|
157
157
|
};
|
|
158
158
|
};
|
|
159
159
|
'@material-ui/core': {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Instance, IAnyType } from 'mobx-state-tree';
|
|
2
2
|
import PluginManager from '../PluginManager';
|
|
3
3
|
import { Region, Feature } from '../util';
|
|
4
|
-
|
|
4
|
+
type RefNameAliases = Record<string, string>;
|
|
5
5
|
export interface BaseOptions {
|
|
6
6
|
signal?: AbortSignal;
|
|
7
7
|
sessionId: string;
|
|
@@ -17,44 +17,50 @@ export interface BasicRegion {
|
|
|
17
17
|
refName: string;
|
|
18
18
|
assemblyName: string;
|
|
19
19
|
}
|
|
20
|
-
export
|
|
20
|
+
export interface Loading {
|
|
21
|
+
adapterRegionsWithAssembly: Region[];
|
|
22
|
+
refNameAliases: RefNameAliases;
|
|
23
|
+
lowerCaseRefNameAliases: RefNameAliases;
|
|
24
|
+
cytobands: Feature[];
|
|
25
|
+
}
|
|
26
|
+
export default function assemblyFactory(assemblyConfigType: IAnyType, pm: PluginManager): import("mobx-state-tree").IModelType<{
|
|
21
27
|
configuration: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<IAnyType>>;
|
|
22
28
|
}, {
|
|
23
|
-
error:
|
|
24
|
-
|
|
29
|
+
error: unknown;
|
|
30
|
+
loaded: boolean;
|
|
31
|
+
loadingP: Promise<void> | undefined;
|
|
32
|
+
volatileRegions: BasicRegion[] | undefined;
|
|
25
33
|
refNameAliases: RefNameAliases | undefined;
|
|
26
34
|
lowerCaseRefNameAliases: RefNameAliases | undefined;
|
|
27
35
|
cytobands: Feature[] | undefined;
|
|
28
36
|
} & {
|
|
29
37
|
readonly initialized: boolean;
|
|
30
38
|
readonly name: string;
|
|
39
|
+
readonly regions: BasicRegion[] | undefined;
|
|
31
40
|
readonly aliases: string[];
|
|
32
41
|
readonly displayName: string | undefined;
|
|
33
42
|
hasName(name: string): boolean;
|
|
34
43
|
readonly allAliases: string[];
|
|
35
|
-
readonly refNames: string[] | undefined;
|
|
36
44
|
readonly allRefNames: string[] | undefined;
|
|
37
45
|
readonly lowerCaseRefNames: string[] | undefined;
|
|
38
46
|
readonly allRefNamesWithLowerCase: string[] | undefined;
|
|
39
47
|
readonly rpcManager: any;
|
|
40
48
|
readonly refNameColors: string[];
|
|
49
|
+
} & {
|
|
50
|
+
readonly refNames: string[] | undefined;
|
|
41
51
|
} & {
|
|
42
52
|
getCanonicalRefName(refName: string): string;
|
|
43
53
|
getRefNameColor(refName: string): string | undefined;
|
|
44
54
|
isValidRefName(refName: string): boolean;
|
|
45
55
|
} & {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
adapterRegionsWithAssembly: Region[];
|
|
49
|
-
refNameAliases: RefNameAliases;
|
|
50
|
-
lowerCaseRefNameAliases: RefNameAliases;
|
|
51
|
-
cytobands: Feature[];
|
|
52
|
-
}): void;
|
|
53
|
-
setError(e: Error): void;
|
|
56
|
+
setLoaded({ adapterRegionsWithAssembly, refNameAliases, lowerCaseRefNameAliases, cytobands, }: Loading): void;
|
|
57
|
+
setError(e: unknown): void;
|
|
54
58
|
setRegions(regions: Region[]): void;
|
|
55
|
-
setRefNameAliases(aliases: RefNameAliases,
|
|
59
|
+
setRefNameAliases(aliases: RefNameAliases, lcAliases: RefNameAliases): void;
|
|
56
60
|
setCytobands(cytobands: Feature[]): void;
|
|
57
|
-
|
|
61
|
+
setLoadingP(p?: Promise<void>): void;
|
|
62
|
+
load(): Promise<void>;
|
|
63
|
+
loadPre(): Promise<void>;
|
|
58
64
|
} & {
|
|
59
65
|
getAdapterMapEntry(adapterConf: unknown, options: BaseOptions): Promise<RefNameMap>;
|
|
60
66
|
/**
|
|
@@ -66,6 +72,6 @@ export default function assemblyFactory(assemblyConfigType: IAnyType, pluginMana
|
|
|
66
72
|
*/
|
|
67
73
|
getReverseRefNameMapForAdapter(adapterConf: unknown, opts: BaseOptions): Promise<RefNameAliases>;
|
|
68
74
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
69
|
-
export
|
|
70
|
-
export
|
|
75
|
+
export type AssemblyModel = ReturnType<typeof assemblyFactory>;
|
|
76
|
+
export type Assembly = Instance<AssemblyModel>;
|
|
71
77
|
export {};
|
|
@@ -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 json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
7
6
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
7
|
+
const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
|
|
8
8
|
const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
|
|
9
9
|
// locals
|
|
10
10
|
const configuration_1 = require("../configuration");
|
|
@@ -45,7 +45,7 @@ const refNameColors = [
|
|
|
45
45
|
];
|
|
46
46
|
async function loadRefNameMap(assembly, adapterConfig, options, signal) {
|
|
47
47
|
const { sessionId } = options;
|
|
48
|
-
await (0, util_1.when)(() =>
|
|
48
|
+
await (0, util_1.when)(() => !!(assembly.regions && assembly.refNameAliases), {
|
|
49
49
|
signal,
|
|
50
50
|
name: 'when assembly ready',
|
|
51
51
|
});
|
|
@@ -81,7 +81,7 @@ function checkRefName(refName) {
|
|
|
81
81
|
function getAdapterId(adapterConf) {
|
|
82
82
|
return (0, json_stable_stringify_1.default)(adapterConf);
|
|
83
83
|
}
|
|
84
|
-
function assemblyFactory(assemblyConfigType,
|
|
84
|
+
function assemblyFactory(assemblyConfigType, pm) {
|
|
85
85
|
const adapterLoads = new abortable_promise_cache_1.default({
|
|
86
86
|
cache: new QuickLRU_1.default({ maxSize: 1000 }),
|
|
87
87
|
async fill(args, signal, statusCallback) {
|
|
@@ -95,18 +95,27 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
95
95
|
})
|
|
96
96
|
.volatile(() => ({
|
|
97
97
|
error: undefined,
|
|
98
|
-
|
|
98
|
+
loaded: false,
|
|
99
|
+
loadingP: undefined,
|
|
100
|
+
volatileRegions: undefined,
|
|
99
101
|
refNameAliases: undefined,
|
|
100
102
|
lowerCaseRefNameAliases: undefined,
|
|
101
103
|
cytobands: undefined,
|
|
102
104
|
}))
|
|
103
105
|
.views(self => ({
|
|
104
106
|
get initialized() {
|
|
107
|
+
// @ts-ignore
|
|
108
|
+
self.load();
|
|
105
109
|
return !!self.refNameAliases;
|
|
106
110
|
},
|
|
107
111
|
get name() {
|
|
108
112
|
return (0, configuration_1.getConf)(self, 'name');
|
|
109
113
|
},
|
|
114
|
+
get regions() {
|
|
115
|
+
// @ts-ignore
|
|
116
|
+
self.load();
|
|
117
|
+
return self.volatileRegions;
|
|
118
|
+
},
|
|
110
119
|
get aliases() {
|
|
111
120
|
return (0, configuration_1.getConf)(self, 'aliases');
|
|
112
121
|
},
|
|
@@ -119,10 +128,6 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
119
128
|
get allAliases() {
|
|
120
129
|
return [this.name, ...this.aliases];
|
|
121
130
|
},
|
|
122
|
-
get refNames() {
|
|
123
|
-
var _a;
|
|
124
|
-
return (_a = self.regions) === null || _a === void 0 ? void 0 : _a.map(region => region.refName);
|
|
125
|
-
},
|
|
126
131
|
// note: lowerCaseRefNameAliases not included here: this allows the list
|
|
127
132
|
// of refnames to be just the "normal casing", but things like
|
|
128
133
|
// getCanonicalRefName can resolve a lower-case name if needed
|
|
@@ -149,6 +154,12 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
149
154
|
const colors = (0, configuration_1.getConf)(self, 'refNameColors');
|
|
150
155
|
return colors.length === 0 ? refNameColors : colors;
|
|
151
156
|
},
|
|
157
|
+
}))
|
|
158
|
+
.views(self => ({
|
|
159
|
+
get refNames() {
|
|
160
|
+
var _a;
|
|
161
|
+
return (_a = self.regions) === null || _a === void 0 ? void 0 : _a.map(region => region.refName);
|
|
162
|
+
},
|
|
152
163
|
}))
|
|
153
164
|
.views(self => ({
|
|
154
165
|
getCanonicalRefName(refName) {
|
|
@@ -158,9 +169,11 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
158
169
|
return (self.refNameAliases[refName] || self.lowerCaseRefNameAliases[refName]);
|
|
159
170
|
},
|
|
160
171
|
getRefNameColor(refName) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
172
|
+
if (!self.refNames) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
const idx = self.refNames.findIndex(r => r === refName);
|
|
176
|
+
if (idx === -1) {
|
|
164
177
|
return undefined;
|
|
165
178
|
}
|
|
166
179
|
return self.refNameColors[idx % self.refNameColors.length];
|
|
@@ -173,8 +186,8 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
173
186
|
},
|
|
174
187
|
}))
|
|
175
188
|
.actions(self => ({
|
|
176
|
-
setLoading() { },
|
|
177
189
|
setLoaded({ adapterRegionsWithAssembly, refNameAliases, lowerCaseRefNameAliases, cytobands, }) {
|
|
190
|
+
self.loaded = true;
|
|
178
191
|
this.setRegions(adapterRegionsWithAssembly);
|
|
179
192
|
this.setRefNameAliases(refNameAliases, lowerCaseRefNameAliases);
|
|
180
193
|
this.setCytobands(cytobands);
|
|
@@ -184,21 +197,62 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
184
197
|
self.error = e;
|
|
185
198
|
},
|
|
186
199
|
setRegions(regions) {
|
|
187
|
-
self.
|
|
200
|
+
self.volatileRegions = regions;
|
|
188
201
|
},
|
|
189
|
-
setRefNameAliases(aliases,
|
|
202
|
+
setRefNameAliases(aliases, lcAliases) {
|
|
190
203
|
self.refNameAliases = aliases;
|
|
191
|
-
self.lowerCaseRefNameAliases =
|
|
204
|
+
self.lowerCaseRefNameAliases = lcAliases;
|
|
192
205
|
},
|
|
193
206
|
setCytobands(cytobands) {
|
|
194
207
|
self.cytobands = cytobands;
|
|
195
208
|
},
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
209
|
+
setLoadingP(p) {
|
|
210
|
+
self.loadingP = p;
|
|
211
|
+
},
|
|
212
|
+
load() {
|
|
213
|
+
if (!self.loadingP) {
|
|
214
|
+
self.loadingP = this.loadPre().catch(e => {
|
|
215
|
+
this.setLoadingP(undefined);
|
|
216
|
+
this.setError(e);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return self.loadingP;
|
|
220
|
+
},
|
|
221
|
+
async loadPre() {
|
|
222
|
+
var _a, _b;
|
|
223
|
+
const conf = self.configuration;
|
|
224
|
+
const refNameAliasesAdapterConf = (_a = conf.refNameAliases) === null || _a === void 0 ? void 0 : _a.adapter;
|
|
225
|
+
const cytobandAdapterConf = (_b = conf.cytobands) === null || _b === void 0 ? void 0 : _b.adapter;
|
|
226
|
+
const sequenceAdapterConf = conf.sequence.adapter;
|
|
227
|
+
const assemblyName = self.name;
|
|
228
|
+
const regions = await getAssemblyRegions(sequenceAdapterConf, pm);
|
|
229
|
+
const adapterRegionsWithAssembly = regions.map(r => {
|
|
230
|
+
checkRefName(r.refName);
|
|
231
|
+
return { ...r, assemblyName };
|
|
232
|
+
});
|
|
233
|
+
const refNameAliases = {};
|
|
234
|
+
const ret = await getRefNameAliases(refNameAliasesAdapterConf, pm);
|
|
235
|
+
const cytobands = await getCytobands(cytobandAdapterConf, pm);
|
|
236
|
+
ret.forEach(({ refName, aliases }) => {
|
|
237
|
+
aliases.forEach(a => {
|
|
238
|
+
checkRefName(a);
|
|
239
|
+
refNameAliases[a] = refName;
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
// add identity to the refNameAliases list
|
|
243
|
+
adapterRegionsWithAssembly.forEach(region => {
|
|
244
|
+
refNameAliases[region.refName] = region.refName;
|
|
245
|
+
});
|
|
246
|
+
const lowerCaseRefNameAliases = Object.fromEntries(Object.entries(refNameAliases).map(([key, val]) => [
|
|
247
|
+
key.toLowerCase(),
|
|
248
|
+
val,
|
|
249
|
+
]));
|
|
250
|
+
this.setLoaded({
|
|
251
|
+
adapterRegionsWithAssembly,
|
|
252
|
+
refNameAliases,
|
|
253
|
+
lowerCaseRefNameAliases,
|
|
254
|
+
cytobands,
|
|
255
|
+
});
|
|
202
256
|
},
|
|
203
257
|
}))
|
|
204
258
|
.views(self => ({
|
|
@@ -237,61 +291,6 @@ function assemblyFactory(assemblyConfigType, pluginManager) {
|
|
|
237
291
|
}));
|
|
238
292
|
}
|
|
239
293
|
exports.default = assemblyFactory;
|
|
240
|
-
function makeLoadAssemblyData(pluginManager) {
|
|
241
|
-
return (self) => {
|
|
242
|
-
if (self.configuration) {
|
|
243
|
-
// use full configuration instead of snapshot of the config, the
|
|
244
|
-
// rpcManager normally receives a snapshot but we bypass rpcManager here
|
|
245
|
-
// to avoid spinning up a webworker
|
|
246
|
-
const { sequence, refNameAliases, cytobands } = self.configuration;
|
|
247
|
-
const sequenceAdapterConfig = sequence.adapter;
|
|
248
|
-
const refNameAliasesAdapterConfig = refNameAliases === null || refNameAliases === void 0 ? void 0 : refNameAliases.adapter;
|
|
249
|
-
const cytobandAdapterConfig = cytobands === null || cytobands === void 0 ? void 0 : cytobands.adapter;
|
|
250
|
-
return {
|
|
251
|
-
sequenceAdapterConfig,
|
|
252
|
-
assemblyName: self.name,
|
|
253
|
-
refNameAliasesAdapterConfig,
|
|
254
|
-
cytobandAdapterConfig,
|
|
255
|
-
pluginManager,
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
return undefined;
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
async function loadAssemblyReaction(props, signal) {
|
|
262
|
-
if (!props) {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
const { sequenceAdapterConfig, assemblyName, refNameAliasesAdapterConfig, cytobandAdapterConfig, pluginManager, } = props;
|
|
266
|
-
const adapterRegions = await getAssemblyRegions(sequenceAdapterConfig, pluginManager, signal);
|
|
267
|
-
const adapterRegionsWithAssembly = adapterRegions.map(adapterRegion => {
|
|
268
|
-
checkRefName(adapterRegion.refName);
|
|
269
|
-
return { ...adapterRegion, assemblyName };
|
|
270
|
-
});
|
|
271
|
-
const refNameAliases = {};
|
|
272
|
-
const aliases = await getRefNameAliases(refNameAliasesAdapterConfig, pluginManager, signal);
|
|
273
|
-
const cytobands = await getCytobands(cytobandAdapterConfig, pluginManager);
|
|
274
|
-
aliases.forEach(({ refName, aliases }) => {
|
|
275
|
-
aliases.forEach(alias => {
|
|
276
|
-
checkRefName(alias);
|
|
277
|
-
refNameAliases[alias] = refName;
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
// add identity to the refNameAliases list
|
|
281
|
-
adapterRegionsWithAssembly.forEach(region => {
|
|
282
|
-
refNameAliases[region.refName] = region.refName;
|
|
283
|
-
});
|
|
284
|
-
const lowerCaseRefNameAliases = Object.fromEntries(Object.entries(refNameAliases).map(([key, val]) => [
|
|
285
|
-
key.toLowerCase(),
|
|
286
|
-
val,
|
|
287
|
-
]));
|
|
288
|
-
return {
|
|
289
|
-
adapterRegionsWithAssembly,
|
|
290
|
-
refNameAliases,
|
|
291
|
-
lowerCaseRefNameAliases,
|
|
292
|
-
cytobands,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
294
|
async function getRefNameAliases(config, pm, signal) {
|
|
296
295
|
const type = pm.getAdapterType(config.type);
|
|
297
296
|
const CLASS = await type.getAdapterClass();
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import PluginManager from '../PluginManager';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* #config BaseAssembly
|
|
4
|
+
* This corresponds to the assemblies section of the config
|
|
5
|
+
*/
|
|
6
|
+
declare function assemblyConfigSchema(pluginManager: PluginManager): import("../configuration").AnyConfigurationSchemaType;
|
|
7
|
+
export default assemblyConfigSchema;
|