@apollo-annotation/jbrowse-plugin-apollo 0.1.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.
- package/README.md +76 -0
- package/dist/index.esm.js +10248 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/jbrowse-plugin-apollo.cjs.development.js +10298 -0
- package/dist/jbrowse-plugin-apollo.cjs.development.js.map +1 -0
- package/dist/jbrowse-plugin-apollo.cjs.production.min.js +2 -0
- package/dist/jbrowse-plugin-apollo.cjs.production.min.js.map +1 -0
- package/dist/jbrowse-plugin-apollo.umd.development.js +46957 -0
- package/dist/jbrowse-plugin-apollo.umd.development.js.map +1 -0
- package/dist/jbrowse-plugin-apollo.umd.production.min.js +2 -0
- package/dist/jbrowse-plugin-apollo.umd.production.min.js.map +1 -0
- package/package.json +130 -0
- package/src/ApolloInternetAccount/addMenuItems.ts +94 -0
- package/src/ApolloInternetAccount/components/AuthTypeSelector.tsx +121 -0
- package/src/ApolloInternetAccount/components/LoginButtons.tsx +62 -0
- package/src/ApolloInternetAccount/components/LoginIcons.tsx +74 -0
- package/src/ApolloInternetAccount/configSchema.ts +26 -0
- package/src/ApolloInternetAccount/index.ts +2 -0
- package/src/ApolloInternetAccount/model.ts +448 -0
- package/src/ApolloJobModel.ts +117 -0
- package/src/ApolloSequenceAdapter/ApolloSequenceAdapter.ts +186 -0
- package/src/ApolloSequenceAdapter/configSchema.ts +12 -0
- package/src/ApolloSequenceAdapter/index.ts +21 -0
- package/src/ApolloSixFrameRenderer/ApolloSixFrameRenderer.tsx +12 -0
- package/src/ApolloSixFrameRenderer/components/ApolloRendering.tsx +692 -0
- package/src/ApolloSixFrameRenderer/configSchema.ts +7 -0
- package/src/ApolloSixFrameRenderer/index.ts +3 -0
- package/src/ApolloTextSearchAdapter/ApolloTextSearchAdapter.ts +64 -0
- package/src/ApolloTextSearchAdapter/configSchema.ts +24 -0
- package/src/ApolloTextSearchAdapter/index.ts +18 -0
- package/src/BackendDrivers/BackendDriver.ts +31 -0
- package/src/BackendDrivers/CollaborationServerDriver.ts +318 -0
- package/src/BackendDrivers/DesktopFileDriver.ts +170 -0
- package/src/BackendDrivers/InMemoryFileDriver.ts +76 -0
- package/src/BackendDrivers/index.ts +4 -0
- package/src/ChangeManager.ts +148 -0
- package/src/LinearApolloDisplay/components/LinearApolloDisplay.tsx +248 -0
- package/src/LinearApolloDisplay/components/index.ts +1 -0
- package/src/LinearApolloDisplay/configSchema.ts +16 -0
- package/src/LinearApolloDisplay/glyphs/BoxGlyph.ts +422 -0
- package/src/LinearApolloDisplay/glyphs/CanonicalGeneGlyph.ts +1191 -0
- package/src/LinearApolloDisplay/glyphs/GenericChildGlyph.ts +151 -0
- package/src/LinearApolloDisplay/glyphs/Glyph.ts +382 -0
- package/src/LinearApolloDisplay/glyphs/ImplicitExonGeneGlyph.ts +697 -0
- package/src/LinearApolloDisplay/glyphs/index.ts +4 -0
- package/src/LinearApolloDisplay/index.ts +2 -0
- package/src/LinearApolloDisplay/stateModel/base.ts +146 -0
- package/src/LinearApolloDisplay/stateModel/getGlyph.ts +39 -0
- package/src/LinearApolloDisplay/stateModel/glyphs.ts +45 -0
- package/src/LinearApolloDisplay/stateModel/index.ts +20 -0
- package/src/LinearApolloDisplay/stateModel/layouts.ts +230 -0
- package/src/LinearApolloDisplay/stateModel/mouseEvents.ts +513 -0
- package/src/LinearApolloDisplay/stateModel/rendering.ts +441 -0
- package/src/LinearApolloDisplay/stateModel/trackHeightMixin.ts +43 -0
- package/src/LinearApolloDisplay/types.ts +1 -0
- package/src/OntologyManager/OntologyStore/__snapshots__/fulltext.test.ts.snap +208 -0
- package/src/OntologyManager/OntologyStore/__snapshots__/index.test.ts.snap +18846 -0
- package/src/OntologyManager/OntologyStore/fulltext-stopwords.ts +137 -0
- package/src/OntologyManager/OntologyStore/fulltext.test.ts +94 -0
- package/src/OntologyManager/OntologyStore/fulltext.ts +264 -0
- package/src/OntologyManager/OntologyStore/index.test.ts +130 -0
- package/src/OntologyManager/OntologyStore/index.ts +526 -0
- package/src/OntologyManager/OntologyStore/indexeddb-schema.ts +89 -0
- package/src/OntologyManager/OntologyStore/indexeddb-storage.ts +180 -0
- package/src/OntologyManager/OntologyStore/obo-graph-json-schema.ts +110 -0
- package/src/OntologyManager/OntologyStore/prefixes.ts +35 -0
- package/src/OntologyManager/index.ts +173 -0
- package/src/SixFrameFeatureDisplay/components/TrackLines.tsx +19 -0
- package/src/SixFrameFeatureDisplay/components/index.ts +1 -0
- package/src/SixFrameFeatureDisplay/configSchema.ts +21 -0
- package/src/SixFrameFeatureDisplay/index.ts +2 -0
- package/src/SixFrameFeatureDisplay/stateModel.ts +413 -0
- package/src/TabularEditor/HybridGrid/ChangeHandling.ts +88 -0
- package/src/TabularEditor/HybridGrid/Feature.tsx +346 -0
- package/src/TabularEditor/HybridGrid/FeatureAttributes.tsx +34 -0
- package/src/TabularEditor/HybridGrid/Highlight.tsx +40 -0
- package/src/TabularEditor/HybridGrid/HybridGrid.tsx +138 -0
- package/src/TabularEditor/HybridGrid/NumberCell.tsx +77 -0
- package/src/TabularEditor/HybridGrid/ToolBar.tsx +59 -0
- package/src/TabularEditor/HybridGrid/featureContextMenuItems.ts +119 -0
- package/src/TabularEditor/HybridGrid/index.ts +1 -0
- package/src/TabularEditor/TabularEditorPane.tsx +34 -0
- package/src/TabularEditor/index.ts +3 -0
- package/src/TabularEditor/model.ts +44 -0
- package/src/TabularEditor/types.ts +3 -0
- package/src/components/AddAssembly.tsx +464 -0
- package/src/components/AddChildFeature.tsx +247 -0
- package/src/components/AddFeature.tsx +252 -0
- package/src/components/CopyFeature.tsx +328 -0
- package/src/components/DeleteAssembly.tsx +185 -0
- package/src/components/DeleteFeature.tsx +90 -0
- package/src/components/Dialog.tsx +47 -0
- package/src/components/DownloadGFF3.tsx +213 -0
- package/src/components/ImportFeatures.tsx +295 -0
- package/src/components/ManageChecks.tsx +280 -0
- package/src/components/ManageUsers.tsx +218 -0
- package/src/components/ModifyFeatureAttribute.tsx +457 -0
- package/src/components/OntologyTermAutocomplete.tsx +240 -0
- package/src/components/OntologyTermMultiSelect.tsx +349 -0
- package/src/components/OpenLocalFile.tsx +178 -0
- package/src/components/ViewChangeLog.tsx +208 -0
- package/src/components/ViewCheckResults.tsx +151 -0
- package/src/components/index.ts +12 -0
- package/src/config.ts +10 -0
- package/src/declare.d.ts +3 -0
- package/src/extensions/annotationFromPileup.ts +208 -0
- package/src/extensions/index.ts +1 -0
- package/src/index.ts +394 -0
- package/src/makeDisplayComponent.tsx +244 -0
- package/src/session/ClientDataStore.ts +282 -0
- package/src/session/index.ts +1 -0
- package/src/session/session.ts +373 -0
- package/src/types.ts +10 -0
- package/src/util/index.ts +31 -0
- package/src/util/loadAssemblyIntoClient.ts +291 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { readConfObject } from '@jbrowse/core/configuration'
|
|
2
|
+
import {
|
|
3
|
+
BaseOptions,
|
|
4
|
+
BaseSequenceAdapter,
|
|
5
|
+
} from '@jbrowse/core/data_adapters/BaseAdapter'
|
|
6
|
+
import { ObservableCreate } from '@jbrowse/core/util/rxjs'
|
|
7
|
+
import SimpleFeature, { Feature } from '@jbrowse/core/util/simpleFeature'
|
|
8
|
+
import { NoAssemblyRegion, Region } from '@jbrowse/core/util/types'
|
|
9
|
+
import { nanoid } from 'nanoid'
|
|
10
|
+
|
|
11
|
+
import { BackendDriver } from '../BackendDrivers'
|
|
12
|
+
import { ApolloSessionModel } from '../session'
|
|
13
|
+
|
|
14
|
+
// declare global {
|
|
15
|
+
// var rpcServer: import('librpc-web-mod').RpcServer
|
|
16
|
+
// }
|
|
17
|
+
|
|
18
|
+
export interface RefSeq {
|
|
19
|
+
_id: string
|
|
20
|
+
name: string
|
|
21
|
+
description: string
|
|
22
|
+
length: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface ApolloMessageData {
|
|
26
|
+
apollo: true
|
|
27
|
+
messageId: string
|
|
28
|
+
sequence: string
|
|
29
|
+
regions: Region[]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function isApolloMessageData(data?: unknown): data is ApolloMessageData {
|
|
33
|
+
return (
|
|
34
|
+
typeof data === 'object' &&
|
|
35
|
+
data !== null &&
|
|
36
|
+
'apollo' in data &&
|
|
37
|
+
data.apollo === true
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const isInWebWorker = typeof sessionStorage === 'undefined'
|
|
42
|
+
|
|
43
|
+
export class ApolloSequenceAdapter extends BaseSequenceAdapter {
|
|
44
|
+
private regions: NoAssemblyRegion[] | undefined
|
|
45
|
+
|
|
46
|
+
public async getRefNames(opts?: BaseOptions) {
|
|
47
|
+
const regions = await this.getRegions(opts)
|
|
48
|
+
return regions.map((regions) => regions.refName)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public async getRegions(opts?: BaseOptions): Promise<NoAssemblyRegion[]> {
|
|
52
|
+
if (this.regions) {
|
|
53
|
+
return this.regions
|
|
54
|
+
}
|
|
55
|
+
const assemblyId = readConfObject(this.config, 'assemblyId')
|
|
56
|
+
if (!isInWebWorker) {
|
|
57
|
+
const dataStore = (
|
|
58
|
+
this.pluginManager?.rootModel?.session as ApolloSessionModel | undefined
|
|
59
|
+
)?.apolloDataStore
|
|
60
|
+
if (!dataStore) {
|
|
61
|
+
throw new Error('No Apollo data store found')
|
|
62
|
+
}
|
|
63
|
+
const backendDriver = dataStore.getBackendDriver(
|
|
64
|
+
assemblyId,
|
|
65
|
+
) as BackendDriver
|
|
66
|
+
const regions = await backendDriver.getRegions(assemblyId)
|
|
67
|
+
this.regions = regions
|
|
68
|
+
return regions
|
|
69
|
+
}
|
|
70
|
+
const regions = await new Promise(
|
|
71
|
+
(
|
|
72
|
+
resolve: (sequence: Region[]) => void,
|
|
73
|
+
reject: (reason: string) => void,
|
|
74
|
+
) => {
|
|
75
|
+
const timeoutId = setTimeout(() => {
|
|
76
|
+
reject('timeout')
|
|
77
|
+
}, 20_000)
|
|
78
|
+
const messageId = nanoid()
|
|
79
|
+
const messageListener = (event: MessageEvent) => {
|
|
80
|
+
const { data } = event
|
|
81
|
+
if (!isApolloMessageData(data)) {
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
if (data.messageId !== messageId) {
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
clearTimeout(timeoutId)
|
|
88
|
+
removeEventListener('message', messageListener)
|
|
89
|
+
resolve(data.regions)
|
|
90
|
+
}
|
|
91
|
+
addEventListener('message', messageListener, opts)
|
|
92
|
+
// @ts-expect-error waiting for types to be published
|
|
93
|
+
globalThis.rpcServer.emit('apollo', {
|
|
94
|
+
apollo: true,
|
|
95
|
+
method: 'getRegions',
|
|
96
|
+
assembly: assemblyId,
|
|
97
|
+
messageId,
|
|
98
|
+
})
|
|
99
|
+
},
|
|
100
|
+
)
|
|
101
|
+
this.regions = regions
|
|
102
|
+
return regions
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Fetch features for a certain region
|
|
107
|
+
* @param param -
|
|
108
|
+
* @returns Observable of Feature objects in the region
|
|
109
|
+
*/
|
|
110
|
+
public getFeatures(region: Region, opts?: BaseOptions) {
|
|
111
|
+
const { end, refName, start } = region
|
|
112
|
+
const assemblyId = readConfObject(this.config, 'assemblyId')
|
|
113
|
+
const regionWithAssemblyName = { ...region, assemblyName: assemblyId }
|
|
114
|
+
return ObservableCreate<Feature>(async (observer) => {
|
|
115
|
+
if (!isInWebWorker) {
|
|
116
|
+
const dataStore = (
|
|
117
|
+
this.pluginManager?.rootModel?.session as
|
|
118
|
+
| ApolloSessionModel
|
|
119
|
+
| undefined
|
|
120
|
+
)?.apolloDataStore
|
|
121
|
+
if (!dataStore) {
|
|
122
|
+
observer.error('No Apollo data store found')
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
|
+
const backendDriver = dataStore.getBackendDriver(
|
|
126
|
+
assemblyId,
|
|
127
|
+
) as BackendDriver
|
|
128
|
+
const { seq } = await backendDriver.getSequence(regionWithAssemblyName)
|
|
129
|
+
observer.next(
|
|
130
|
+
new SimpleFeature({
|
|
131
|
+
id: `${refName} ${start}-${end}`,
|
|
132
|
+
data: { refName, start, end, seq },
|
|
133
|
+
}),
|
|
134
|
+
)
|
|
135
|
+
observer.complete()
|
|
136
|
+
return
|
|
137
|
+
}
|
|
138
|
+
const seq = await new Promise(
|
|
139
|
+
(
|
|
140
|
+
resolve: (sequence: string) => void,
|
|
141
|
+
reject: (reason: string) => void,
|
|
142
|
+
) => {
|
|
143
|
+
const timeoutId = setTimeout(() => {
|
|
144
|
+
reject('timeout')
|
|
145
|
+
}, 20_000)
|
|
146
|
+
const messageId = nanoid()
|
|
147
|
+
const messageListener = (event: MessageEvent) => {
|
|
148
|
+
const { data } = event
|
|
149
|
+
if (!isApolloMessageData(data)) {
|
|
150
|
+
return
|
|
151
|
+
}
|
|
152
|
+
if (data.messageId !== messageId) {
|
|
153
|
+
return
|
|
154
|
+
}
|
|
155
|
+
clearTimeout(timeoutId)
|
|
156
|
+
removeEventListener('message', messageListener)
|
|
157
|
+
resolve(data.sequence)
|
|
158
|
+
}
|
|
159
|
+
addEventListener('message', messageListener, opts)
|
|
160
|
+
// @ts-expect-error waiting for types to be published
|
|
161
|
+
globalThis.rpcServer.emit('apollo', {
|
|
162
|
+
apollo: true,
|
|
163
|
+
method: 'getSequence',
|
|
164
|
+
region: regionWithAssemblyName,
|
|
165
|
+
messageId,
|
|
166
|
+
})
|
|
167
|
+
},
|
|
168
|
+
)
|
|
169
|
+
observer.next(
|
|
170
|
+
new SimpleFeature({
|
|
171
|
+
id: `${refName} ${start}-${end}`,
|
|
172
|
+
data: { refName, start, end, seq },
|
|
173
|
+
}),
|
|
174
|
+
)
|
|
175
|
+
observer.complete()
|
|
176
|
+
})
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* called to provide a hint that data tied to a certain region
|
|
181
|
+
* will not be needed for the foreseeable future and can be purged
|
|
182
|
+
* from caches, etc
|
|
183
|
+
*/
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
185
|
+
public freeResources(/* { region } */): void {}
|
|
186
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
|
|
2
|
+
import PluginManager from '@jbrowse/core/PluginManager'
|
|
3
|
+
|
|
4
|
+
import { ApolloSequenceAdapter } from './ApolloSequenceAdapter'
|
|
5
|
+
import configSchema from './configSchema'
|
|
6
|
+
|
|
7
|
+
export function installApolloSequenceAdapter(pluginManager: PluginManager) {
|
|
8
|
+
pluginManager.addAdapterType(
|
|
9
|
+
() =>
|
|
10
|
+
new AdapterType({
|
|
11
|
+
name: 'ApolloSequenceAdapter',
|
|
12
|
+
configSchema,
|
|
13
|
+
adapterMetadata: {
|
|
14
|
+
category: undefined,
|
|
15
|
+
hiddenFromGUI: true,
|
|
16
|
+
description: undefined,
|
|
17
|
+
},
|
|
18
|
+
AdapterClass: ApolloSequenceAdapter,
|
|
19
|
+
}),
|
|
20
|
+
)
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RenderProps, RendererType } from '@jbrowse/core/pluggableElementTypes'
|
|
2
|
+
import RpcManager from '@jbrowse/core/rpc/RpcManager'
|
|
3
|
+
|
|
4
|
+
export default class ApolloSixFrameRenderer extends RendererType {
|
|
5
|
+
async renderInClient(_rpcManager: RpcManager, args: RenderProps) {
|
|
6
|
+
return this.render(args)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async freeResourcesInClient(_rpcManager: RpcManager, _args: RenderProps) {
|
|
10
|
+
return 0
|
|
11
|
+
}
|
|
12
|
+
}
|