@apollo-annotation/jbrowse-plugin-apollo 0.3.13 → 1.0.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 (192) hide show
  1. package/dist/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.d.ts +1 -1
  2. package/dist/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.d.ts.map +1 -1
  3. package/dist/BackendDrivers/BackendDriver.d.ts +29 -4
  4. package/dist/BackendDrivers/BackendDriver.d.ts.map +1 -1
  5. package/dist/BackendDrivers/CollaborationServerDriver.d.ts +3 -1
  6. package/dist/BackendDrivers/CollaborationServerDriver.d.ts.map +1 -1
  7. package/dist/BackendDrivers/LocalDriver/LocalDriver.d.ts +22 -0
  8. package/dist/BackendDrivers/LocalDriver/LocalDriver.d.ts.map +1 -0
  9. package/dist/BackendDrivers/LocalDriver/db.d.ts +4 -0
  10. package/dist/BackendDrivers/LocalDriver/db.d.ts.map +1 -0
  11. package/dist/BackendDrivers/index.d.ts +1 -2
  12. package/dist/BackendDrivers/index.d.ts.map +1 -1
  13. package/dist/ChangeManager.d.ts +3 -3
  14. package/dist/ChangeManager.d.ts.map +1 -1
  15. package/dist/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.d.ts +0 -6
  16. package/dist/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.d.ts.map +1 -1
  17. package/dist/FeatureDetailsWidget/TranscriptWidgetEditLocation.d.ts.map +1 -1
  18. package/dist/FeatureDetailsWidget/model.d.ts +0 -2
  19. package/dist/FeatureDetailsWidget/model.d.ts.map +1 -1
  20. package/dist/LinearApolloDisplay/components/CheckResultWarnings.d.ts.map +1 -1
  21. package/dist/LinearApolloDisplay/components/LinearApolloDisplay.d.ts.map +1 -1
  22. package/dist/LinearApolloDisplay/components/OverlayCanvas.d.ts +7 -0
  23. package/dist/LinearApolloDisplay/components/OverlayCanvas.d.ts.map +1 -0
  24. package/dist/LinearApolloDisplay/components/Tooltip.d.ts +10 -0
  25. package/dist/LinearApolloDisplay/components/Tooltip.d.ts.map +1 -0
  26. package/dist/LinearApolloDisplay/glyphs/BoxGlyph.d.ts +0 -1
  27. package/dist/LinearApolloDisplay/glyphs/BoxGlyph.d.ts.map +1 -1
  28. package/dist/LinearApolloDisplay/glyphs/CDSGlyph.d.ts +3 -0
  29. package/dist/LinearApolloDisplay/glyphs/CDSGlyph.d.ts.map +1 -0
  30. package/dist/LinearApolloDisplay/glyphs/ExonGlyph.d.ts +3 -0
  31. package/dist/LinearApolloDisplay/glyphs/ExonGlyph.d.ts.map +1 -0
  32. package/dist/LinearApolloDisplay/glyphs/GeneGlyph.d.ts.map +1 -1
  33. package/dist/LinearApolloDisplay/glyphs/GenericChildGlyph.d.ts.map +1 -1
  34. package/dist/LinearApolloDisplay/glyphs/Glyph.d.ts +26 -20
  35. package/dist/LinearApolloDisplay/glyphs/Glyph.d.ts.map +1 -1
  36. package/dist/LinearApolloDisplay/glyphs/TranscriptGlyph.d.ts +3 -0
  37. package/dist/LinearApolloDisplay/glyphs/TranscriptGlyph.d.ts.map +1 -0
  38. package/dist/LinearApolloDisplay/glyphs/util.d.ts +13 -0
  39. package/dist/LinearApolloDisplay/glyphs/util.d.ts.map +1 -1
  40. package/dist/LinearApolloDisplay/stateModel/base.d.ts +17 -0
  41. package/dist/LinearApolloDisplay/stateModel/base.d.ts.map +1 -1
  42. package/dist/LinearApolloDisplay/stateModel/index.d.ts +35 -17
  43. package/dist/LinearApolloDisplay/stateModel/index.d.ts.map +1 -1
  44. package/dist/LinearApolloDisplay/stateModel/layouts.d.ts +29 -7
  45. package/dist/LinearApolloDisplay/stateModel/layouts.d.ts.map +1 -1
  46. package/dist/LinearApolloDisplay/stateModel/mouseEvents.d.ts +69 -23
  47. package/dist/LinearApolloDisplay/stateModel/mouseEvents.d.ts.map +1 -1
  48. package/dist/LinearApolloDisplay/stateModel/rendering.d.ts +26 -9
  49. package/dist/LinearApolloDisplay/stateModel/rendering.d.ts.map +1 -1
  50. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/base.d.ts +6 -0
  51. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/base.d.ts.map +1 -1
  52. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/index.d.ts +6 -0
  53. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/index.d.ts.map +1 -1
  54. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/rendering.d.ts +6 -0
  55. package/dist/LinearApolloReferenceSequenceDisplay/stateModel/rendering.d.ts.map +1 -1
  56. package/dist/LinearApolloSixFrameDisplay/components/LinearApolloSixFrameDisplay.d.ts.map +1 -1
  57. package/dist/LinearApolloSixFrameDisplay/glyphs/GeneGlyph.d.ts.map +1 -1
  58. package/dist/LinearApolloSixFrameDisplay/glyphs/Glyph.d.ts +1 -1
  59. package/dist/LinearApolloSixFrameDisplay/glyphs/Glyph.d.ts.map +1 -1
  60. package/dist/LinearApolloSixFrameDisplay/stateModel/layouts.d.ts.map +1 -1
  61. package/dist/LinearApolloSixFrameDisplay/stateModel/rendering.d.ts.map +1 -1
  62. package/dist/OntologyManager/OntologyStore/fulltext.d.ts +1 -1
  63. package/dist/OntologyManager/OntologyStore/fulltext.d.ts.map +1 -1
  64. package/dist/OntologyManager/OntologyStore/index.d.ts +2 -2
  65. package/dist/OntologyManager/OntologyStore/index.d.ts.map +1 -1
  66. package/dist/OntologyManager/OntologyStore/indexeddb-storage.d.ts +1 -1
  67. package/dist/OntologyManager/OntologyStore/indexeddb-storage.d.ts.map +1 -1
  68. package/dist/OntologyManager/OntologyStore/types.d.ts +18 -0
  69. package/dist/OntologyManager/OntologyStore/types.d.ts.map +1 -0
  70. package/dist/TabularEditor/HybridGrid/featureContextMenuItems.d.ts.map +1 -1
  71. package/dist/components/AddChildFeature.d.ts.map +1 -1
  72. package/dist/components/ColorFeature.d.ts +13 -0
  73. package/dist/components/ColorFeature.d.ts.map +1 -0
  74. package/dist/components/CreateApolloAnnotation.d.ts.map +1 -1
  75. package/dist/components/DownloadGFF3.d.ts +4 -1
  76. package/dist/components/DownloadGFF3.d.ts.map +1 -1
  77. package/dist/components/DuplicateTranscript.d.ts.map +1 -1
  78. package/dist/components/ViewChangeLog.d.ts +2 -1
  79. package/dist/components/ViewChangeLog.d.ts.map +1 -1
  80. package/dist/components/ViewCheckResults.d.ts +2 -1
  81. package/dist/components/ViewCheckResults.d.ts.map +1 -1
  82. package/dist/components/index.d.ts +1 -1
  83. package/dist/components/index.d.ts.map +1 -1
  84. package/dist/config.d.ts +4 -0
  85. package/dist/config.d.ts.map +1 -0
  86. package/dist/extensions/annotationFromJBrowseFeature.d.ts.map +1 -1
  87. package/dist/extensions/annotationFromPileup.d.ts.map +1 -1
  88. package/dist/index.d.ts +11 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.esm.js +6325 -5997
  91. package/dist/index.esm.js.map +1 -1
  92. package/dist/jbrowse-plugin-apollo.cjs.development.js +5869 -5541
  93. package/dist/jbrowse-plugin-apollo.cjs.development.js.map +1 -1
  94. package/dist/jbrowse-plugin-apollo.cjs.production.min.js +1 -1
  95. package/dist/jbrowse-plugin-apollo.cjs.production.min.js.map +1 -1
  96. package/dist/jbrowse-plugin-apollo.umd.development.js +16782 -25897
  97. package/dist/jbrowse-plugin-apollo.umd.development.js.map +1 -1
  98. package/dist/jbrowse-plugin-apollo.umd.production.min.js +1 -1
  99. package/dist/jbrowse-plugin-apollo.umd.production.min.js.map +1 -1
  100. package/dist/makeDisplayComponent.d.ts.map +1 -1
  101. package/dist/menus/Icons.d.ts +3 -0
  102. package/dist/menus/Icons.d.ts.map +1 -0
  103. package/dist/menus/topLevelMenu.d.ts.map +1 -1
  104. package/dist/session/changeHandlers.d.ts +9 -0
  105. package/dist/session/changeHandlers.d.ts.map +1 -0
  106. package/dist/util/annotationFeatureUtils.d.ts +2 -1
  107. package/dist/util/annotationFeatureUtils.d.ts.map +1 -1
  108. package/dist/util/glyphUtils.d.ts +3 -3
  109. package/dist/util/glyphUtils.d.ts.map +1 -1
  110. package/dist/util/index.d.ts +0 -1
  111. package/dist/util/index.d.ts.map +1 -1
  112. package/package.json +4 -4
  113. package/src/ApolloInternetAccount/model.ts +68 -4
  114. package/src/ApolloRefNameAliasAdapter/ApolloRefNameAliasAdapter.ts +6 -3
  115. package/src/ApolloTextSearchAdapter/ApolloTextSearchAdapter.ts +1 -1
  116. package/src/BackendDrivers/BackendDriver.ts +36 -3
  117. package/src/BackendDrivers/CollaborationServerDriver.ts +78 -23
  118. package/src/BackendDrivers/LocalDriver/LocalDriver.ts +367 -0
  119. package/src/BackendDrivers/LocalDriver/db.ts +37 -0
  120. package/src/BackendDrivers/index.ts +1 -2
  121. package/src/ChangeManager.ts +27 -25
  122. package/src/FeatureDetailsWidget/ApolloTranscriptDetailsWidget.tsx +1 -1
  123. package/src/FeatureDetailsWidget/TranscriptWidgetEditLocation.tsx +69 -53
  124. package/src/LinearApolloDisplay/components/CheckResultWarnings.tsx +1 -5
  125. package/src/LinearApolloDisplay/components/LinearApolloDisplay.tsx +95 -115
  126. package/src/LinearApolloDisplay/components/OverlayCanvas.tsx +76 -0
  127. package/src/LinearApolloDisplay/components/Tooltip.tsx +42 -0
  128. package/src/LinearApolloDisplay/glyphs/BoxGlyph.ts +60 -302
  129. package/src/LinearApolloDisplay/glyphs/CDSGlyph.ts +145 -0
  130. package/src/LinearApolloDisplay/glyphs/ExonGlyph.ts +212 -0
  131. package/src/LinearApolloDisplay/glyphs/GeneGlyph.ts +65 -999
  132. package/src/LinearApolloDisplay/glyphs/GenericChildGlyph.ts +71 -181
  133. package/src/LinearApolloDisplay/glyphs/Glyph.ts +42 -66
  134. package/src/LinearApolloDisplay/glyphs/TranscriptGlyph.ts +291 -0
  135. package/src/LinearApolloDisplay/glyphs/util.ts +87 -0
  136. package/src/LinearApolloDisplay/stateModel/base.ts +83 -0
  137. package/src/LinearApolloDisplay/stateModel/layouts.ts +198 -138
  138. package/src/LinearApolloDisplay/stateModel/mouseEvents.ts +252 -158
  139. package/src/LinearApolloDisplay/stateModel/rendering.ts +103 -21
  140. package/src/LinearApolloReferenceSequenceDisplay/drawSequenceOverlay.ts +3 -3
  141. package/src/LinearApolloReferenceSequenceDisplay/stateModel/base.ts +20 -2
  142. package/src/LinearApolloSixFrameDisplay/components/LinearApolloSixFrameDisplay.tsx +7 -2
  143. package/src/LinearApolloSixFrameDisplay/glyphs/GeneGlyph.ts +8 -13
  144. package/src/LinearApolloSixFrameDisplay/glyphs/Glyph.ts +1 -1
  145. package/src/LinearApolloSixFrameDisplay/stateModel/layouts.ts +4 -3
  146. package/src/LinearApolloSixFrameDisplay/stateModel/mouseEvents.ts +1 -1
  147. package/src/LinearApolloSixFrameDisplay/stateModel/rendering.ts +2 -1
  148. package/src/OntologyManager/OntologyStore/__snapshots__/index.test.ts.snap +18262 -8519
  149. package/src/OntologyManager/OntologyStore/fulltext.ts +1 -2
  150. package/src/OntologyManager/OntologyStore/index.test.ts +5 -2
  151. package/src/OntologyManager/OntologyStore/index.ts +7 -8
  152. package/src/OntologyManager/OntologyStore/indexeddb-storage.ts +2 -2
  153. package/src/OntologyManager/OntologyStore/types.ts +27 -0
  154. package/src/OntologyManager/index.ts +15 -26
  155. package/src/TabularEditor/HybridGrid/featureContextMenuItems.ts +4 -5
  156. package/src/components/AddChildFeature.tsx +15 -8
  157. package/src/components/ColorFeature.tsx +167 -0
  158. package/src/components/CreateApolloAnnotation.tsx +35 -9
  159. package/src/components/DownloadGFF3.tsx +92 -121
  160. package/src/components/DuplicateTranscript.tsx +10 -0
  161. package/src/components/ViewChangeLog.tsx +123 -83
  162. package/src/components/ViewCheckResults.tsx +15 -73
  163. package/src/components/index.ts +1 -1
  164. package/src/config.ts +37 -19
  165. package/src/extensions/annotationFromJBrowseFeature.test.ts +1 -1
  166. package/src/extensions/annotationFromJBrowseFeature.ts +91 -63
  167. package/src/extensions/annotationFromPileup.ts +40 -40
  168. package/src/index.ts +45 -1
  169. package/src/makeDisplayComponent.tsx +10 -3
  170. package/src/menus/Icons.tsx +49 -0
  171. package/src/menus/topLevelMenu.ts +24 -96
  172. package/src/session/ClientDataStore.ts +16 -17
  173. package/src/session/changeHandlers.ts +261 -0
  174. package/src/session/session.ts +77 -46
  175. package/src/util/annotationFeatureUtils.ts +29 -1
  176. package/src/util/glyphUtils.ts +74 -31
  177. package/src/util/index.ts +0 -1
  178. package/dist/BackendDrivers/DesktopFileDriver.d.ts +0 -160
  179. package/dist/BackendDrivers/DesktopFileDriver.d.ts.map +0 -1
  180. package/dist/BackendDrivers/InMemoryFileDriver.d.ts +0 -162
  181. package/dist/BackendDrivers/InMemoryFileDriver.d.ts.map +0 -1
  182. package/dist/LinearApolloDisplay/glyphs/index.d.ts +0 -4
  183. package/dist/LinearApolloDisplay/glyphs/index.d.ts.map +0 -1
  184. package/dist/components/OpenLocalFile.d.ts +0 -15
  185. package/dist/components/OpenLocalFile.d.ts.map +0 -1
  186. package/dist/util/loadAssemblyIntoClient.d.ts +0 -5
  187. package/dist/util/loadAssemblyIntoClient.d.ts.map +0 -1
  188. package/src/BackendDrivers/DesktopFileDriver.ts +0 -184
  189. package/src/BackendDrivers/InMemoryFileDriver.ts +0 -107
  190. package/src/LinearApolloDisplay/glyphs/index.ts +0 -3
  191. package/src/components/OpenLocalFile.tsx +0 -189
  192. package/src/util/loadAssemblyIntoClient.ts +0 -94
@@ -1,189 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-call */
2
- /* eslint-disable @typescript-eslint/unbound-method */
3
- /* eslint-disable @typescript-eslint/no-unnecessary-condition */
4
- /* eslint-disable @typescript-eslint/no-misused-promises */
5
- import { type AbstractSessionModel, isElectron } from '@jbrowse/core/util'
6
- import {
7
- Button,
8
- DialogActions,
9
- DialogContent,
10
- DialogContentText,
11
- FormControl,
12
- FormHelperText,
13
- TextField,
14
- useTheme,
15
- } from '@mui/material'
16
- import { nanoid } from 'nanoid'
17
- import React, { useState } from 'react'
18
-
19
- import type { InMemoryFileDriver } from '../BackendDrivers'
20
- import type { ApolloSessionModel } from '../session'
21
- import { loadAssemblyIntoClient } from '../util'
22
-
23
- import { Dialog } from './Dialog'
24
-
25
- interface OpenLocalFileProps {
26
- session: ApolloSessionModel
27
- handleClose(): void
28
- inMemoryFileDriver: InMemoryFileDriver
29
- }
30
-
31
- export interface RefSeqInterface {
32
- refName: string
33
- uniqueId: string
34
- aliases?: string[]
35
- }
36
-
37
- export function OpenLocalFile({ handleClose, session }: OpenLocalFileProps) {
38
- const { apolloDataStore } = session
39
- const { addAssembly, addSessionAssembly, assemblyManager, notify } =
40
- session as unknown as AbstractSessionModel & {
41
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
42
- addSessionAssembly: Function
43
- }
44
-
45
- const [file, setFile] = useState<File | null>(null)
46
- const [assemblyName, setAssemblyName] = useState('')
47
- const [errorMessage, setErrorMessage] = useState('')
48
- const [submitted, setSubmitted] = useState(false)
49
- const theme = useTheme()
50
-
51
- function handleChangeFile(e: React.ChangeEvent<HTMLInputElement>) {
52
- const selectedFile = e.target.files?.item(0)
53
- if (!selectedFile) {
54
- return
55
- }
56
- setErrorMessage('')
57
- setFile(selectedFile)
58
- if (!assemblyName) {
59
- const fileName = selectedFile.name
60
- const lastDotIndex = fileName.lastIndexOf('.')
61
- if (lastDotIndex === -1) {
62
- setAssemblyName(fileName)
63
- } else {
64
- setAssemblyName(fileName.slice(0, lastDotIndex))
65
- }
66
- }
67
- }
68
-
69
- async function onSubmit(event: React.FormEvent<HTMLFormElement>) {
70
- event.preventDefault()
71
- setErrorMessage('')
72
- setSubmitted(true)
73
-
74
- if (!file) {
75
- throw new Error('No file selected')
76
- }
77
-
78
- // Right now we are not using stream because there was a problem with 'pipe' in ReadStream
79
- const fileData = await new Response(file).text()
80
- const assemblyId = `${assemblyName}-${file.name}-${nanoid(8)}`
81
- try {
82
- await loadAssemblyIntoClient(assemblyId, fileData, apolloDataStore)
83
- } catch (error) {
84
- console.error(error)
85
- notify(`Error loading GFF3 ${file.name}, ${String(error)}`, 'error')
86
- handleClose()
87
- return
88
- }
89
-
90
- const fileMetadata: { file?: string } = {}
91
- if (isElectron) {
92
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
93
- const { webUtils } = globalThis.require('electron')
94
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
95
- fileMetadata.file = webUtils.getPathForFile(file) as string
96
- }
97
- const assemblyConfig = {
98
- name: assemblyId,
99
- aliases: [assemblyName],
100
- displayName: assemblyName,
101
- sequence: {
102
- trackId: `sequenceConfigId-${assemblyName}`,
103
- type: 'ReferenceSequenceTrack',
104
- adapter: { type: 'ApolloSequenceAdapter', assemblyId },
105
- metadata: { apollo: true, ...fileMetadata },
106
- },
107
- }
108
-
109
- // Save assembly into session
110
- await (isElectron
111
- ? addAssembly?.(assemblyConfig)
112
- : (addSessionAssembly || addAssembly)(assemblyConfig))
113
- const a = await assemblyManager.waitForAssembly(assemblyConfig.name)
114
- if (a) {
115
- // @ts-expect-error MST type coercion problem?
116
- session.addApolloTrackConfig(a)
117
- notify(`Loaded GFF3 ${file.name}`, 'success')
118
- } else {
119
- notify(`Error loading GFF3 ${file.name}`, 'error')
120
- }
121
- handleClose()
122
- }
123
-
124
- function handleAssemblyNameChange(
125
- event: React.ChangeEvent<HTMLInputElement>,
126
- ) {
127
- setAssemblyName(event.target.value)
128
- }
129
-
130
- return (
131
- <Dialog
132
- open
133
- title="Open local GFF3 file"
134
- handleClose={handleClose}
135
- maxWidth={false}
136
- data-testid="open-local-file"
137
- >
138
- <form onSubmit={onSubmit}>
139
- <DialogContent style={{ display: 'flex', flexDirection: 'column' }}>
140
- <FormControl>
141
- <div style={{ flexDirection: 'row' }}>
142
- <Button
143
- variant="contained"
144
- component="label"
145
- style={{ marginRight: theme.spacing() }}
146
- >
147
- Choose File
148
- <input
149
- type="file"
150
- required
151
- hidden
152
- onChange={handleChangeFile}
153
- />
154
- </Button>
155
- {file ? file.name : 'No file chosen'}
156
- </div>
157
- <FormHelperText>
158
- Make sure your GFF3 has an embedded FASTA section
159
- </FormHelperText>
160
- </FormControl>
161
- <TextField
162
- required
163
- label="Assembly name"
164
- value={assemblyName}
165
- onChange={handleAssemblyNameChange}
166
- />
167
- </DialogContent>
168
- <DialogActions>
169
- <Button disabled={false} variant="contained" type="submit">
170
- {submitted ? 'Submitting...' : 'Submit'}
171
- </Button>
172
- <Button
173
- disabled={submitted}
174
- variant="outlined"
175
- type="submit"
176
- onClick={handleClose}
177
- >
178
- Cancel
179
- </Button>
180
- </DialogActions>
181
- </form>
182
- {errorMessage ? (
183
- <DialogContent>
184
- <DialogContentText color="error">{errorMessage}</DialogContentText>
185
- </DialogContent>
186
- ) : null}
187
- </Dialog>
188
- )
189
- }
@@ -1,94 +0,0 @@
1
- import { type ClientDataStore, checkRegistry } from '@apollo-annotation/common'
2
- import type {
3
- ApolloAssemblyI,
4
- CheckResultSnapshot,
5
- } from '@apollo-annotation/mst'
6
- import { gff3ToAnnotationFeature } from '@apollo-annotation/shared'
7
- import {
8
- type GFF3Comment,
9
- type GFF3Feature,
10
- type GFF3Sequence,
11
- parseStringSync,
12
- } from '@gmod/gff'
13
- import { getSnapshot } from '@jbrowse/mobx-state-tree'
14
-
15
- export async function loadAssemblyIntoClient(
16
- assemblyId: string,
17
- gff3FileText: string,
18
- apolloDataStore: ClientDataStore,
19
- ) {
20
- const featuresAndSequences: (GFF3Feature | GFF3Sequence | GFF3Comment)[] =
21
- parseStringSync(gff3FileText, {
22
- parseSequences: true,
23
- parseComments: true,
24
- parseDirectives: false,
25
- parseFeatures: true,
26
- })
27
- if (featuresAndSequences.length === 0) {
28
- throw new Error('No features found in GFF3 file')
29
- }
30
-
31
- let sequenceFeatureCount = 0
32
- let assembly = apolloDataStore.assemblies.get(assemblyId)
33
- if (!assembly) {
34
- assembly = apolloDataStore.addAssembly(assemblyId, 'InMemoryFileDriver')
35
- }
36
-
37
- for (const seqLine of featuresAndSequences) {
38
- if (Array.isArray(seqLine)) {
39
- // regular feature
40
- const feature = gff3ToAnnotationFeature(seqLine)
41
-
42
- const ref =
43
- assembly.refSeqs.get(feature.refSeq) ??
44
- assembly.addRefSeq(feature.refSeq, feature.refSeq)
45
- if (!ref.features.has(feature._id)) {
46
- ref.addFeature(feature)
47
- }
48
- } else if ('comment' in seqLine) {
49
- assembly.addComment(seqLine.comment)
50
- } else {
51
- sequenceFeatureCount++
52
- // sequence feature
53
- let ref = assembly.refSeqs.get(seqLine.id)
54
- if (!ref) {
55
- ref = assembly.addRefSeq(seqLine.id, seqLine.id, seqLine.description)
56
- }
57
- if (seqLine.description && !ref.description) {
58
- ref.setDescription(seqLine.description)
59
- }
60
- ref.addSequence({
61
- start: 0,
62
- stop: seqLine.sequence.length,
63
- sequence: seqLine.sequence,
64
- })
65
- }
66
- }
67
-
68
- if (sequenceFeatureCount === 0) {
69
- throw new Error('No embedded FASTA section found in GFF3')
70
- }
71
-
72
- const checkResults: CheckResultSnapshot[] = await checkFeatures(assembly)
73
- apolloDataStore.addCheckResults(checkResults)
74
- return assembly
75
- }
76
-
77
- export async function checkFeatures(
78
- assembly: ApolloAssemblyI,
79
- ): Promise<CheckResultSnapshot[]> {
80
- const checkResults: CheckResultSnapshot[] = []
81
- for (const ref of assembly.refSeqs.values()) {
82
- for (const feature of ref.features.values()) {
83
- for (const check of checkRegistry.getChecks().values()) {
84
- const result: CheckResultSnapshot[] = await check.checkFeature(
85
- getSnapshot(feature),
86
- (start: number, stop: number) =>
87
- Promise.resolve(ref.getSequence(start, stop)),
88
- )
89
- checkResults.push(...result)
90
- }
91
- }
92
- }
93
- return checkResults
94
- }