@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.
Files changed (116) hide show
  1. package/README.md +76 -0
  2. package/dist/index.esm.js +10248 -0
  3. package/dist/index.esm.js.map +1 -0
  4. package/dist/index.js +7 -0
  5. package/dist/jbrowse-plugin-apollo.cjs.development.js +10298 -0
  6. package/dist/jbrowse-plugin-apollo.cjs.development.js.map +1 -0
  7. package/dist/jbrowse-plugin-apollo.cjs.production.min.js +2 -0
  8. package/dist/jbrowse-plugin-apollo.cjs.production.min.js.map +1 -0
  9. package/dist/jbrowse-plugin-apollo.umd.development.js +46957 -0
  10. package/dist/jbrowse-plugin-apollo.umd.development.js.map +1 -0
  11. package/dist/jbrowse-plugin-apollo.umd.production.min.js +2 -0
  12. package/dist/jbrowse-plugin-apollo.umd.production.min.js.map +1 -0
  13. package/package.json +130 -0
  14. package/src/ApolloInternetAccount/addMenuItems.ts +94 -0
  15. package/src/ApolloInternetAccount/components/AuthTypeSelector.tsx +121 -0
  16. package/src/ApolloInternetAccount/components/LoginButtons.tsx +62 -0
  17. package/src/ApolloInternetAccount/components/LoginIcons.tsx +74 -0
  18. package/src/ApolloInternetAccount/configSchema.ts +26 -0
  19. package/src/ApolloInternetAccount/index.ts +2 -0
  20. package/src/ApolloInternetAccount/model.ts +448 -0
  21. package/src/ApolloJobModel.ts +117 -0
  22. package/src/ApolloSequenceAdapter/ApolloSequenceAdapter.ts +186 -0
  23. package/src/ApolloSequenceAdapter/configSchema.ts +12 -0
  24. package/src/ApolloSequenceAdapter/index.ts +21 -0
  25. package/src/ApolloSixFrameRenderer/ApolloSixFrameRenderer.tsx +12 -0
  26. package/src/ApolloSixFrameRenderer/components/ApolloRendering.tsx +692 -0
  27. package/src/ApolloSixFrameRenderer/configSchema.ts +7 -0
  28. package/src/ApolloSixFrameRenderer/index.ts +3 -0
  29. package/src/ApolloTextSearchAdapter/ApolloTextSearchAdapter.ts +64 -0
  30. package/src/ApolloTextSearchAdapter/configSchema.ts +24 -0
  31. package/src/ApolloTextSearchAdapter/index.ts +18 -0
  32. package/src/BackendDrivers/BackendDriver.ts +31 -0
  33. package/src/BackendDrivers/CollaborationServerDriver.ts +318 -0
  34. package/src/BackendDrivers/DesktopFileDriver.ts +170 -0
  35. package/src/BackendDrivers/InMemoryFileDriver.ts +76 -0
  36. package/src/BackendDrivers/index.ts +4 -0
  37. package/src/ChangeManager.ts +148 -0
  38. package/src/LinearApolloDisplay/components/LinearApolloDisplay.tsx +248 -0
  39. package/src/LinearApolloDisplay/components/index.ts +1 -0
  40. package/src/LinearApolloDisplay/configSchema.ts +16 -0
  41. package/src/LinearApolloDisplay/glyphs/BoxGlyph.ts +422 -0
  42. package/src/LinearApolloDisplay/glyphs/CanonicalGeneGlyph.ts +1191 -0
  43. package/src/LinearApolloDisplay/glyphs/GenericChildGlyph.ts +151 -0
  44. package/src/LinearApolloDisplay/glyphs/Glyph.ts +382 -0
  45. package/src/LinearApolloDisplay/glyphs/ImplicitExonGeneGlyph.ts +697 -0
  46. package/src/LinearApolloDisplay/glyphs/index.ts +4 -0
  47. package/src/LinearApolloDisplay/index.ts +2 -0
  48. package/src/LinearApolloDisplay/stateModel/base.ts +146 -0
  49. package/src/LinearApolloDisplay/stateModel/getGlyph.ts +39 -0
  50. package/src/LinearApolloDisplay/stateModel/glyphs.ts +45 -0
  51. package/src/LinearApolloDisplay/stateModel/index.ts +20 -0
  52. package/src/LinearApolloDisplay/stateModel/layouts.ts +230 -0
  53. package/src/LinearApolloDisplay/stateModel/mouseEvents.ts +513 -0
  54. package/src/LinearApolloDisplay/stateModel/rendering.ts +441 -0
  55. package/src/LinearApolloDisplay/stateModel/trackHeightMixin.ts +43 -0
  56. package/src/LinearApolloDisplay/types.ts +1 -0
  57. package/src/OntologyManager/OntologyStore/__snapshots__/fulltext.test.ts.snap +208 -0
  58. package/src/OntologyManager/OntologyStore/__snapshots__/index.test.ts.snap +18846 -0
  59. package/src/OntologyManager/OntologyStore/fulltext-stopwords.ts +137 -0
  60. package/src/OntologyManager/OntologyStore/fulltext.test.ts +94 -0
  61. package/src/OntologyManager/OntologyStore/fulltext.ts +264 -0
  62. package/src/OntologyManager/OntologyStore/index.test.ts +130 -0
  63. package/src/OntologyManager/OntologyStore/index.ts +526 -0
  64. package/src/OntologyManager/OntologyStore/indexeddb-schema.ts +89 -0
  65. package/src/OntologyManager/OntologyStore/indexeddb-storage.ts +180 -0
  66. package/src/OntologyManager/OntologyStore/obo-graph-json-schema.ts +110 -0
  67. package/src/OntologyManager/OntologyStore/prefixes.ts +35 -0
  68. package/src/OntologyManager/index.ts +173 -0
  69. package/src/SixFrameFeatureDisplay/components/TrackLines.tsx +19 -0
  70. package/src/SixFrameFeatureDisplay/components/index.ts +1 -0
  71. package/src/SixFrameFeatureDisplay/configSchema.ts +21 -0
  72. package/src/SixFrameFeatureDisplay/index.ts +2 -0
  73. package/src/SixFrameFeatureDisplay/stateModel.ts +413 -0
  74. package/src/TabularEditor/HybridGrid/ChangeHandling.ts +88 -0
  75. package/src/TabularEditor/HybridGrid/Feature.tsx +346 -0
  76. package/src/TabularEditor/HybridGrid/FeatureAttributes.tsx +34 -0
  77. package/src/TabularEditor/HybridGrid/Highlight.tsx +40 -0
  78. package/src/TabularEditor/HybridGrid/HybridGrid.tsx +138 -0
  79. package/src/TabularEditor/HybridGrid/NumberCell.tsx +77 -0
  80. package/src/TabularEditor/HybridGrid/ToolBar.tsx +59 -0
  81. package/src/TabularEditor/HybridGrid/featureContextMenuItems.ts +119 -0
  82. package/src/TabularEditor/HybridGrid/index.ts +1 -0
  83. package/src/TabularEditor/TabularEditorPane.tsx +34 -0
  84. package/src/TabularEditor/index.ts +3 -0
  85. package/src/TabularEditor/model.ts +44 -0
  86. package/src/TabularEditor/types.ts +3 -0
  87. package/src/components/AddAssembly.tsx +464 -0
  88. package/src/components/AddChildFeature.tsx +247 -0
  89. package/src/components/AddFeature.tsx +252 -0
  90. package/src/components/CopyFeature.tsx +328 -0
  91. package/src/components/DeleteAssembly.tsx +185 -0
  92. package/src/components/DeleteFeature.tsx +90 -0
  93. package/src/components/Dialog.tsx +47 -0
  94. package/src/components/DownloadGFF3.tsx +213 -0
  95. package/src/components/ImportFeatures.tsx +295 -0
  96. package/src/components/ManageChecks.tsx +280 -0
  97. package/src/components/ManageUsers.tsx +218 -0
  98. package/src/components/ModifyFeatureAttribute.tsx +457 -0
  99. package/src/components/OntologyTermAutocomplete.tsx +240 -0
  100. package/src/components/OntologyTermMultiSelect.tsx +349 -0
  101. package/src/components/OpenLocalFile.tsx +178 -0
  102. package/src/components/ViewChangeLog.tsx +208 -0
  103. package/src/components/ViewCheckResults.tsx +151 -0
  104. package/src/components/index.ts +12 -0
  105. package/src/config.ts +10 -0
  106. package/src/declare.d.ts +3 -0
  107. package/src/extensions/annotationFromPileup.ts +208 -0
  108. package/src/extensions/index.ts +1 -0
  109. package/src/index.ts +394 -0
  110. package/src/makeDisplayComponent.tsx +244 -0
  111. package/src/session/ClientDataStore.ts +282 -0
  112. package/src/session/index.ts +1 -0
  113. package/src/session/session.ts +373 -0
  114. package/src/types.ts +10 -0
  115. package/src/util/index.ts +31 -0
  116. 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,12 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
+
3
+ export default ConfigurationSchema(
4
+ 'ApolloSequenceAdapter',
5
+ {
6
+ assemblyId: {
7
+ type: 'string',
8
+ defaultValue: '',
9
+ },
10
+ },
11
+ { explicitlyTyped: true },
12
+ )
@@ -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
+ }