@apollo-annotation/shared 0.3.12 → 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 (170) hide show
  1. package/dist/Changes/{DeleteFeatureChange.d.ts → AddAndDeleteFeatureChanges.d.ts} +26 -11
  2. package/dist/Changes/AddAndDeleteFeatureChanges.d.ts.map +1 -0
  3. package/dist/Changes/AddAndDeleteFeatureChanges.js +117 -0
  4. package/dist/Changes/AddAndDeleteFeatureChanges.js.map +1 -0
  5. package/dist/Changes/AddAssemblyAliasesChange.d.ts +1 -4
  6. package/dist/Changes/AddAssemblyAliasesChange.d.ts.map +1 -1
  7. package/dist/Changes/AddAssemblyAliasesChange.js +0 -27
  8. package/dist/Changes/AddAssemblyAliasesChange.js.map +1 -1
  9. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts +2 -11
  10. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts.map +1 -1
  11. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +2 -82
  12. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -1
  13. package/dist/Changes/AddAssemblyFromExternalChange.d.ts +1 -9
  14. package/dist/Changes/AddAssemblyFromExternalChange.d.ts.map +1 -1
  15. package/dist/Changes/AddAssemblyFromExternalChange.js +0 -72
  16. package/dist/Changes/AddAssemblyFromExternalChange.js.map +1 -1
  17. package/dist/Changes/AddAssemblyFromFileChange.d.ts +2 -17
  18. package/dist/Changes/AddAssemblyFromFileChange.d.ts.map +1 -1
  19. package/dist/Changes/AddAssemblyFromFileChange.js +2 -119
  20. package/dist/Changes/AddAssemblyFromFileChange.js.map +1 -1
  21. package/dist/Changes/AddFeaturesFromFileChange.d.ts +2 -11
  22. package/dist/Changes/AddFeaturesFromFileChange.d.ts.map +1 -1
  23. package/dist/Changes/AddFeaturesFromFileChange.js +2 -66
  24. package/dist/Changes/AddFeaturesFromFileChange.js.map +1 -1
  25. package/dist/Changes/AddRefSeqAliasesChange.d.ts +1 -4
  26. package/dist/Changes/AddRefSeqAliasesChange.d.ts.map +1 -1
  27. package/dist/Changes/AddRefSeqAliasesChange.js +0 -34
  28. package/dist/Changes/AddRefSeqAliasesChange.js.map +1 -1
  29. package/dist/Changes/DeleteAssemblyChange.d.ts +1 -9
  30. package/dist/Changes/DeleteAssemblyChange.d.ts.map +1 -1
  31. package/dist/Changes/DeleteAssemblyChange.js +0 -53
  32. package/dist/Changes/DeleteAssemblyChange.js.map +1 -1
  33. package/dist/Changes/DeleteUserChange.d.ts +1 -4
  34. package/dist/Changes/DeleteUserChange.d.ts.map +1 -1
  35. package/dist/Changes/DeleteUserChange.js +0 -19
  36. package/dist/Changes/DeleteUserChange.js.map +1 -1
  37. package/dist/Changes/FeatureAttributeChange.d.ts +1 -9
  38. package/dist/Changes/FeatureAttributeChange.d.ts.map +1 -1
  39. package/dist/Changes/FeatureAttributeChange.js +0 -82
  40. package/dist/Changes/FeatureAttributeChange.js.map +1 -1
  41. package/dist/Changes/ImportJBrowseConfigChange.d.ts +1 -4
  42. package/dist/Changes/ImportJBrowseConfigChange.d.ts.map +1 -1
  43. package/dist/Changes/ImportJBrowseConfigChange.js +1 -18
  44. package/dist/Changes/ImportJBrowseConfigChange.js.map +1 -1
  45. package/dist/Changes/LocationEndChange.d.ts +1 -9
  46. package/dist/Changes/LocationEndChange.d.ts.map +1 -1
  47. package/dist/Changes/LocationEndChange.js +0 -90
  48. package/dist/Changes/LocationEndChange.js.map +1 -1
  49. package/dist/Changes/LocationStartChange.d.ts +1 -9
  50. package/dist/Changes/LocationStartChange.d.ts.map +1 -1
  51. package/dist/Changes/LocationStartChange.js +0 -90
  52. package/dist/Changes/LocationStartChange.js.map +1 -1
  53. package/dist/Changes/MergeAndUndoMergeExonsChanges.d.ts +46 -0
  54. package/dist/Changes/MergeAndUndoMergeExonsChanges.d.ts.map +1 -0
  55. package/dist/Changes/MergeAndUndoMergeExonsChanges.js +83 -0
  56. package/dist/Changes/MergeAndUndoMergeExonsChanges.js.map +1 -0
  57. package/dist/Changes/{MergeTranscriptsChange.d.ts → MergeAndUndoMergeTranscriptsChanges.d.ts} +22 -6
  58. package/dist/Changes/MergeAndUndoMergeTranscriptsChanges.d.ts.map +1 -0
  59. package/dist/Changes/{MergeTranscriptsChange.js → MergeAndUndoMergeTranscriptsChanges.js} +40 -50
  60. package/dist/Changes/MergeAndUndoMergeTranscriptsChanges.js.map +1 -0
  61. package/dist/Changes/SplitAndUndoSplitExonChanges.d.ts +55 -0
  62. package/dist/Changes/SplitAndUndoSplitExonChanges.d.ts.map +1 -0
  63. package/dist/Changes/SplitAndUndoSplitExonChanges.js +115 -0
  64. package/dist/Changes/SplitAndUndoSplitExonChanges.js.map +1 -0
  65. package/dist/Changes/StrandChange.d.ts +1 -9
  66. package/dist/Changes/StrandChange.d.ts.map +1 -1
  67. package/dist/Changes/StrandChange.js +0 -77
  68. package/dist/Changes/StrandChange.js.map +1 -1
  69. package/dist/Changes/TypeChange.d.ts +1 -9
  70. package/dist/Changes/TypeChange.d.ts.map +1 -1
  71. package/dist/Changes/TypeChange.js +0 -77
  72. package/dist/Changes/TypeChange.js.map +1 -1
  73. package/dist/Changes/UserChange.d.ts +1 -4
  74. package/dist/Changes/UserChange.d.ts.map +1 -1
  75. package/dist/Changes/UserChange.js +0 -23
  76. package/dist/Changes/UserChange.js.map +1 -1
  77. package/dist/Changes/index.d.ts +29 -22
  78. package/dist/Changes/index.d.ts.map +1 -1
  79. package/dist/Changes/index.js +19 -24
  80. package/dist/Changes/index.js.map +1 -1
  81. package/dist/Validations/Validation.d.ts +2 -2
  82. package/dist/Validations/Validation.d.ts.map +1 -1
  83. package/dist/Validations/Validation.js +1 -1
  84. package/dist/Validations/Validation.js.map +1 -1
  85. package/dist/Validations/ValidationSet.d.ts +2 -2
  86. package/dist/Validations/ValidationSet.d.ts.map +1 -1
  87. package/dist/Validations/ValidationSet.js +2 -2
  88. package/dist/Validations/ValidationSet.js.map +1 -1
  89. package/dist/index.d.ts +0 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +0 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +9 -4
  95. package/src/Changes/{DeleteFeatureChange.ts → AddAndDeleteFeatureChanges.ts} +77 -107
  96. package/src/Changes/AddAssemblyAliasesChange.ts +0 -35
  97. package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +5 -108
  98. package/src/Changes/AddAssemblyFromExternalChange.ts +0 -87
  99. package/src/Changes/AddAssemblyFromFileChange.ts +5 -169
  100. package/src/Changes/AddFeaturesFromFileChange.ts +5 -86
  101. package/src/Changes/AddRefSeqAliasesChange.ts +0 -44
  102. package/src/Changes/DeleteAssemblyChange.ts +0 -72
  103. package/src/Changes/DeleteUserChange.ts +0 -25
  104. package/src/Changes/FeatureAttributeChange.ts +0 -104
  105. package/src/Changes/ImportJBrowseConfigChange.ts +1 -27
  106. package/src/Changes/LocationEndChange.ts +0 -100
  107. package/src/Changes/LocationStartChange.ts +0 -100
  108. package/src/Changes/{MergeExonsChange.ts → MergeAndUndoMergeExonsChanges.ts} +70 -90
  109. package/src/Changes/{MergeTranscriptsChange.ts → MergeAndUndoMergeTranscriptsChanges.ts} +74 -66
  110. package/src/Changes/{SplitExonChange.ts → SplitAndUndoSplitExonChanges.ts} +95 -122
  111. package/src/Changes/StrandChange.ts +0 -94
  112. package/src/Changes/TypeChange.ts +0 -94
  113. package/src/Changes/UserChange.ts +0 -30
  114. package/src/Changes/index.ts +32 -24
  115. package/src/Validations/Validation.ts +2 -5
  116. package/src/Validations/ValidationSet.ts +3 -6
  117. package/src/index.ts +0 -1
  118. package/dist/Changes/AddFeatureChange.d.ts +0 -37
  119. package/dist/Changes/AddFeatureChange.d.ts.map +0 -1
  120. package/dist/Changes/AddFeatureChange.js +0 -169
  121. package/dist/Changes/AddFeatureChange.js.map +0 -1
  122. package/dist/Changes/DeleteFeatureChange.d.ts.map +0 -1
  123. package/dist/Changes/DeleteFeatureChange.js +0 -161
  124. package/dist/Changes/DeleteFeatureChange.js.map +0 -1
  125. package/dist/Changes/FromFileBaseChange.d.ts +0 -12
  126. package/dist/Changes/FromFileBaseChange.d.ts.map +0 -1
  127. package/dist/Changes/FromFileBaseChange.js +0 -196
  128. package/dist/Changes/FromFileBaseChange.js.map +0 -1
  129. package/dist/Changes/MergeExonsChange.d.ts +0 -30
  130. package/dist/Changes/MergeExonsChange.d.ts.map +0 -1
  131. package/dist/Changes/MergeExonsChange.js +0 -110
  132. package/dist/Changes/MergeExonsChange.js.map +0 -1
  133. package/dist/Changes/MergeTranscriptsChange.d.ts.map +0 -1
  134. package/dist/Changes/MergeTranscriptsChange.js.map +0 -1
  135. package/dist/Changes/SplitExonChange.d.ts +0 -34
  136. package/dist/Changes/SplitExonChange.d.ts.map +0 -1
  137. package/dist/Changes/SplitExonChange.js +0 -138
  138. package/dist/Changes/SplitExonChange.js.map +0 -1
  139. package/dist/Changes/UndoMergeExonsChange.d.ts +0 -28
  140. package/dist/Changes/UndoMergeExonsChange.d.ts.map +0 -1
  141. package/dist/Changes/UndoMergeExonsChange.js +0 -100
  142. package/dist/Changes/UndoMergeExonsChange.js.map +0 -1
  143. package/dist/Changes/UndoMergeTranscriptsChange.d.ts +0 -28
  144. package/dist/Changes/UndoMergeTranscriptsChange.d.ts.map +0 -1
  145. package/dist/Changes/UndoMergeTranscriptsChange.js +0 -100
  146. package/dist/Changes/UndoMergeTranscriptsChange.js.map +0 -1
  147. package/dist/Changes/UndoSplitExonChange.d.ts +0 -33
  148. package/dist/Changes/UndoSplitExonChange.d.ts.map +0 -1
  149. package/dist/Changes/UndoSplitExonChange.js +0 -107
  150. package/dist/Changes/UndoSplitExonChange.js.map +0 -1
  151. package/dist/Operations/GetAssembliesOperation.d.ts +0 -12
  152. package/dist/Operations/GetAssembliesOperation.d.ts.map +0 -1
  153. package/dist/Operations/GetAssembliesOperation.js +0 -16
  154. package/dist/Operations/GetAssembliesOperation.js.map +0 -1
  155. package/dist/Operations/GetFeaturesOperation.d.ts +0 -27
  156. package/dist/Operations/GetFeaturesOperation.d.ts.map +0 -1
  157. package/dist/Operations/GetFeaturesOperation.js +0 -38
  158. package/dist/Operations/GetFeaturesOperation.js.map +0 -1
  159. package/dist/Operations/index.d.ts +0 -9
  160. package/dist/Operations/index.d.ts.map +0 -1
  161. package/dist/Operations/index.js +0 -6
  162. package/dist/Operations/index.js.map +0 -1
  163. package/src/Changes/AddFeatureChange.ts +0 -236
  164. package/src/Changes/FromFileBaseChange.ts +0 -231
  165. package/src/Changes/UndoMergeExonsChange.ts +0 -149
  166. package/src/Changes/UndoMergeTranscriptsChange.ts +0 -153
  167. package/src/Changes/UndoSplitExonChange.ts +0 -174
  168. package/src/Operations/GetAssembliesOperation.ts +0 -28
  169. package/src/Operations/GetFeaturesOperation.ts +0 -58
  170. package/src/Operations/index.ts +0 -6
@@ -1,37 +0,0 @@
1
- import { type ChangeOptions, type ClientDataStore, FeatureChange, type LocalGFF3DataStore, type SerializedFeatureChange, type ServerDataStore } from '@apollo-annotation/common';
2
- import type { AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
3
- import { DeleteFeatureChange } from './DeleteFeatureChange.js';
4
- interface SerializedAddFeatureChangeBase extends SerializedFeatureChange {
5
- typeName: 'AddFeatureChange';
6
- }
7
- export interface AddFeatureChangeDetails {
8
- addedFeature: AnnotationFeatureSnapshot;
9
- parentFeatureId?: string;
10
- copyFeature?: boolean;
11
- allIds?: string[];
12
- }
13
- interface SerializedAddFeatureChangeSingle extends SerializedAddFeatureChangeBase, AddFeatureChangeDetails {
14
- }
15
- interface SerializedAddFeatureChangeMultiple extends SerializedAddFeatureChangeBase {
16
- changes: AddFeatureChangeDetails[];
17
- }
18
- export type SerializedAddFeatureChange = SerializedAddFeatureChangeSingle | SerializedAddFeatureChangeMultiple;
19
- export declare class AddFeatureChange extends FeatureChange {
20
- typeName: "AddFeatureChange";
21
- changes: AddFeatureChangeDetails[];
22
- constructor(json: SerializedAddFeatureChange, options?: ChangeOptions);
23
- get notification(): string;
24
- toJSON(): SerializedAddFeatureChange;
25
- /**
26
- * Applies the required change to database
27
- * @param backend - parameters from backend
28
- * @returns
29
- */
30
- executeOnServer(backend: ServerDataStore): Promise<void>;
31
- executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
32
- executeOnClient(dataStore: ClientDataStore): Promise<void>;
33
- getInverse(): DeleteFeatureChange;
34
- }
35
- export declare function isAddFeatureChange(change: unknown): change is AddFeatureChange;
36
- export {};
37
- //# sourceMappingURL=AddFeatureChange.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddFeatureChange.d.ts","sourceRoot":"","sources":["../../src/Changes/AddFeatureChange.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,UAAU,8BAA+B,SAAQ,uBAAuB;IACtE,QAAQ,EAAE,kBAAkB,CAAA;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,yBAAyB,CAAA;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,UAAU,gCACR,SAAQ,8BAA8B,EACpC,uBAAuB;CAAG;AAE9B,UAAU,kCACR,SAAQ,8BAA8B;IACtC,OAAO,EAAE,uBAAuB,EAAE,CAAA;CACnC;AAED,MAAM,MAAM,0BAA0B,GAClC,gCAAgC,GAChC,kCAAkC,CAAA;AAEtC,qBAAa,gBAAiB,SAAQ,aAAa;IACjD,QAAQ,qBAA8B;IACtC,OAAO,EAAE,uBAAuB,EAAE,CAAA;gBAEtB,IAAI,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE,aAAa;IAKrE,IAAI,YAAY,WAEf;IAED,MAAM,IAAI,0BAA0B;IAiBpC;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe;IA+FxC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB;IAI/C,eAAe,CAAC,SAAS,EAAE,eAAe;IAqChD,UAAU;CAkBX;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,gBAAgB,CAE5B"}
@@ -1,169 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
3
- /* eslint-disable @typescript-eslint/require-await */
4
- /* eslint-disable @typescript-eslint/no-unnecessary-condition */
5
- import { FeatureChange, } from '@apollo-annotation/common';
6
- import { DeleteFeatureChange } from './DeleteFeatureChange.js';
7
- export class AddFeatureChange extends FeatureChange {
8
- typeName = 'AddFeatureChange';
9
- changes;
10
- constructor(json, options) {
11
- super(json, options);
12
- this.changes = 'changes' in json ? json.changes : [json];
13
- }
14
- // eslint-disable-next-line @typescript-eslint/class-literal-property-style
15
- get notification() {
16
- return 'Feature added successfully';
17
- }
18
- toJSON() {
19
- const { assembly, changedIds, changes, typeName } = this;
20
- if (changes.length === 1) {
21
- const [{ addedFeature, allIds, copyFeature, parentFeatureId }] = changes;
22
- return {
23
- typeName,
24
- changedIds,
25
- assembly,
26
- addedFeature,
27
- parentFeatureId,
28
- copyFeature,
29
- allIds,
30
- };
31
- }
32
- return { typeName, changedIds, assembly, changes };
33
- }
34
- /**
35
- * Applies the required change to database
36
- * @param backend - parameters from backend
37
- * @returns
38
- */
39
- async executeOnServer(backend) {
40
- const { assemblyModel, featureModel, refSeqModel, session, user } = backend;
41
- const { assembly, changes, logger } = this;
42
- const assemblyDoc = await assemblyModel
43
- .findById(assembly)
44
- .session(session)
45
- .exec();
46
- if (!assemblyDoc) {
47
- const errMsg = `*** ERROR: Assembly with id "${assembly}" not found`;
48
- logger.error(errMsg);
49
- throw new Error(errMsg);
50
- }
51
- let featureCnt = 0;
52
- logger.debug?.(`changes: ${JSON.stringify(changes)}`);
53
- const { INDEXED_IDS } = process.env;
54
- let idsToIndex;
55
- if (INDEXED_IDS) {
56
- idsToIndex = INDEXED_IDS.split(',');
57
- }
58
- // Loop the changes
59
- for (const change of changes) {
60
- logger.debug?.(`change: ${JSON.stringify(change)}`);
61
- const { addedFeature, allIds, copyFeature, parentFeatureId } = change;
62
- const { _id, refSeq } = addedFeature;
63
- const refSeqDoc = await refSeqModel
64
- .findById(refSeq)
65
- .session(session)
66
- .exec();
67
- if (!refSeqDoc) {
68
- throw new Error(`RefSeq was not found by assembly "${assembly}" and seq_id "${refSeq}" not found`);
69
- }
70
- // CopyFeature is called from CopyFeature.tsx
71
- if (copyFeature) {
72
- const indexedIds = this.getIndexedIds(addedFeature, idsToIndex);
73
- // Add into Mongo
74
- const [newFeatureDoc] = await featureModel.create([{ ...addedFeature, allIds, indexedIds, status: -1, user }], { session });
75
- logger.debug?.(`Copied feature, docId "${newFeatureDoc._id}" to assembly "${assembly}"`);
76
- featureCnt++;
77
- }
78
- else {
79
- const indexedIds = this.getIndexedIds(addedFeature, idsToIndex);
80
- // Adding new child feature
81
- if (parentFeatureId) {
82
- const topLevelFeature = await featureModel
83
- .findOne({ allIds: parentFeatureId })
84
- .session(session)
85
- .exec();
86
- if (!topLevelFeature) {
87
- throw new Error(`Could not find feature with ID "${parentFeatureId}"`);
88
- }
89
- const parentFeature = this.getFeatureFromId(topLevelFeature, parentFeatureId);
90
- if (!parentFeature) {
91
- throw new Error(`Could not find feature with ID "${parentFeatureId}" in feature "${topLevelFeature._id}"`);
92
- }
93
- this.addChild(parentFeature, addedFeature);
94
- const childIds = this.getChildFeatureIds(addedFeature);
95
- topLevelFeature.allIds.push(_id, ...childIds);
96
- if (indexedIds.length > 0 && !topLevelFeature.indexedIds) {
97
- topLevelFeature.indexedIds = [];
98
- }
99
- topLevelFeature.indexedIds?.push(...indexedIds);
100
- await topLevelFeature.save();
101
- }
102
- else {
103
- const childIds = this.getChildFeatureIds(addedFeature);
104
- const allIdsV2 = [_id, ...childIds];
105
- const [newFeatureDoc] = await featureModel.create([{ allIds: allIdsV2, indexedIds, status: 0, ...addedFeature }], { session });
106
- logger.verbose?.(`Added docId "${newFeatureDoc._id}"`);
107
- }
108
- }
109
- featureCnt++;
110
- }
111
- logger.debug?.(`Added ${featureCnt} new feature(s) into database.`);
112
- }
113
- async executeOnLocalGFF3(_backend) {
114
- throw new Error('executeOnLocalGFF3 not implemented');
115
- }
116
- async executeOnClient(dataStore) {
117
- if (!dataStore) {
118
- throw new Error('No data store');
119
- }
120
- const { assembly, changes } = this;
121
- for (const change of changes) {
122
- const { addedFeature, parentFeatureId } = change;
123
- if (parentFeatureId) {
124
- let parentFeature = dataStore.getFeature(parentFeatureId);
125
- // maybe the parent feature hasn't been loaded yet
126
- if (!parentFeature) {
127
- await dataStore.loadFeatures([
128
- {
129
- assemblyName: assembly,
130
- refName: addedFeature.refSeq,
131
- start: addedFeature.min,
132
- end: addedFeature.max,
133
- },
134
- ]);
135
- parentFeature = dataStore.getFeature(parentFeatureId);
136
- if (!parentFeature) {
137
- throw new Error(`Could not find parent feature "${parentFeatureId}"`);
138
- }
139
- }
140
- // create an ID for the parent feature if it does not have one
141
- if (!parentFeature.attributes.get('_id')) {
142
- parentFeature.setAttribute('_id', [parentFeature._id]);
143
- }
144
- parentFeature.addChild(addedFeature);
145
- }
146
- else {
147
- dataStore.addFeature(assembly, addedFeature);
148
- }
149
- }
150
- }
151
- getInverse() {
152
- const { assembly, changedIds, changes, logger } = this;
153
- const inverseChangedIds = [...changedIds].reverse();
154
- const inverseChanges = [...changes].reverse().map((addFeatureChange) => ({
155
- deletedFeature: addFeatureChange.addedFeature,
156
- parentFeatureId: addFeatureChange.parentFeatureId,
157
- }));
158
- return new DeleteFeatureChange({
159
- changedIds: inverseChangedIds,
160
- typeName: 'DeleteFeatureChange',
161
- changes: inverseChanges,
162
- assembly,
163
- }, { logger });
164
- }
165
- }
166
- export function isAddFeatureChange(change) {
167
- return change.typeName === 'AddFeatureChange';
168
- }
169
- //# sourceMappingURL=AddFeatureChange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddFeatureChange.js","sourceRoot":"","sources":["../../src/Changes/AddFeatureChange.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteFeatureChange.d.ts","sourceRoot":"","sources":["../../src/Changes/DeleteFeatureChange.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,UAAU,iCAAkC,SAAQ,uBAAuB;IACzE,QAAQ,EAAE,qBAAqB,CAAA;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,yBAAyB,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,UAAU,mCACR,SAAQ,iCAAiC,EACvC,0BAA0B;CAAG;AAEjC,UAAU,qCACR,SAAQ,iCAAiC;IACzC,OAAO,EAAE,0BAA0B,EAAE,CAAA;CACtC;AAED,MAAM,MAAM,6BAA6B,GACrC,mCAAmC,GACnC,qCAAqC,CAAA;AAEzC,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,QAAQ,wBAAiC;IACzC,OAAO,EAAE,0BAA0B,EAAE,CAAA;gBAEzB,IAAI,EAAE,6BAA6B,EAAE,OAAO,CAAC,EAAE,aAAa;IAKxE,IAAI,YAAY,WAEf;IAED,MAAM,IAAI,6BAA6B;IASvC;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe;IA2ExC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB;IAI/C,eAAe,CAAC,SAAS,EAAE,eAAe;IAoBhD,UAAU;CAoBX;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,aAAa,GACpB,MAAM,EAAE,CAoBV;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,mBAAmB,CAE/B"}
@@ -1,161 +0,0 @@
1
- /* eslint-disable @typescript-eslint/restrict-template-expressions */
2
- /* eslint-disable @typescript-eslint/require-await */
3
- /* eslint-disable @typescript-eslint/no-unnecessary-condition */
4
- import { FeatureChange, } from '@apollo-annotation/common';
5
- import { AddFeatureChange } from './AddFeatureChange.js';
6
- export class DeleteFeatureChange extends FeatureChange {
7
- typeName = 'DeleteFeatureChange';
8
- changes;
9
- constructor(json, options) {
10
- super(json, options);
11
- this.changes = 'changes' in json ? json.changes : [json];
12
- }
13
- // eslint-disable-next-line @typescript-eslint/class-literal-property-style
14
- get notification() {
15
- return 'Feature deleted successfully';
16
- }
17
- toJSON() {
18
- const { assembly, changedIds, changes, typeName } = this;
19
- if (changes.length === 1) {
20
- const [{ deletedFeature, parentFeatureId }] = changes;
21
- return { typeName, changedIds, assembly, deletedFeature, parentFeatureId };
22
- }
23
- return { typeName, changedIds, assembly, changes };
24
- }
25
- /**
26
- * Applies the required change to database
27
- * @param backend - parameters from backend
28
- * @returns
29
- */
30
- async executeOnServer(backend) {
31
- const { featureModel, session } = backend;
32
- const { changes, logger } = this;
33
- const { INDEXED_IDS } = process.env;
34
- let idsToIndex;
35
- if (INDEXED_IDS) {
36
- idsToIndex = INDEXED_IDS.split(',');
37
- }
38
- // Loop the changes
39
- for (const change of changes) {
40
- const { deletedFeature, parentFeatureId } = change;
41
- // Search feature
42
- const featureDoc = await featureModel
43
- .findOne({ allIds: deletedFeature._id })
44
- .session(session)
45
- .exec();
46
- if (!featureDoc) {
47
- const errMsg = `*** ERROR: The following featureId was not found in database ='${deletedFeature._id}'`;
48
- logger.error(errMsg);
49
- throw new Error(errMsg);
50
- }
51
- // Check if feature is on top level, then simply delete the whole document (i.e. not just sub-feature inside document)
52
- if (featureDoc._id.equals(deletedFeature._id)) {
53
- if (parentFeatureId) {
54
- throw new Error(`Feature "${deletedFeature._id}" is top-level, but received a parent feature ID`);
55
- }
56
- await featureModel.findByIdAndDelete(featureDoc._id);
57
- logger.debug?.(`Feature "${deletedFeature._id}" deleted from document "${featureDoc._id}". Whole document deleted.`);
58
- continue;
59
- }
60
- const deletedIds = findAndDeleteChildFeature(featureDoc, deletedFeature._id, this);
61
- deletedIds.push(deletedFeature._id);
62
- featureDoc.allIds = featureDoc.allIds.filter((id) => !deletedIds.includes(id));
63
- const indexedIds = this.getIndexedIds(featureDoc, idsToIndex);
64
- if (featureDoc.indexedIds) {
65
- if (indexedIds.length > 0) {
66
- featureDoc.indexedIds = indexedIds;
67
- }
68
- else {
69
- delete featureDoc.indexedIds;
70
- }
71
- }
72
- else {
73
- if (indexedIds.length > 0) {
74
- featureDoc.indexedIds = indexedIds;
75
- }
76
- }
77
- // Save updated document in Mongo
78
- featureDoc.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
79
- try {
80
- await featureDoc.save();
81
- }
82
- catch (error) {
83
- logger.debug?.(`*** FAILED: ${error}`);
84
- throw error;
85
- }
86
- logger.debug?.(`Feature "${deletedFeature._id}" deleted from document "${featureDoc._id}"`);
87
- }
88
- }
89
- async executeOnLocalGFF3(_backend) {
90
- throw new Error('executeOnLocalGFF3 not implemented');
91
- }
92
- async executeOnClient(dataStore) {
93
- if (!dataStore) {
94
- throw new Error('No data store');
95
- }
96
- for (const change of this.changes) {
97
- const { deletedFeature, parentFeatureId } = change;
98
- if (parentFeatureId) {
99
- const parentFeature = dataStore.getFeature(parentFeatureId);
100
- if (!parentFeature) {
101
- throw new Error(`Could not find parent feature "${parentFeatureId}"`);
102
- }
103
- parentFeature.deleteChild(deletedFeature._id);
104
- }
105
- else {
106
- if (dataStore.getFeature(deletedFeature._id)) {
107
- dataStore.deleteFeature(deletedFeature._id);
108
- }
109
- }
110
- }
111
- }
112
- getInverse() {
113
- const { assembly, changedIds, changes, logger } = this;
114
- const inverseChangedIds = [...changedIds].reverse();
115
- const inverseChanges = [...changes]
116
- .reverse()
117
- .map((deleteFeatureChange) => ({
118
- addedFeature: deleteFeatureChange.deletedFeature,
119
- parentFeatureId: deleteFeatureChange.parentFeatureId,
120
- }));
121
- logger.debug?.(`INVERSE CHANGE '${JSON.stringify(inverseChanges)}'`);
122
- return new AddFeatureChange({
123
- changedIds: inverseChangedIds,
124
- typeName: 'AddFeatureChange',
125
- changes: inverseChanges,
126
- assembly,
127
- }, { logger });
128
- }
129
- }
130
- /**
131
- * Delete feature's subfeatures that match an ID and return the IDs of any
132
- * sub-subfeatures that were deleted
133
- * @param feature -
134
- * @param featureIdToDelete -
135
- * @returns - list of deleted feature IDs
136
- */
137
- export function findAndDeleteChildFeature(feature, featureIdToDelete, change) {
138
- if (!feature.children) {
139
- throw new Error(`Feature ${feature._id} has no children`);
140
- }
141
- const { _id, children } = feature;
142
- const child = children.get(featureIdToDelete);
143
- if (child) {
144
- const deletedIds = change.getChildFeatureIds(child);
145
- children.delete(featureIdToDelete);
146
- return deletedIds;
147
- }
148
- for (const [, childFeature] of children) {
149
- try {
150
- return findAndDeleteChildFeature(childFeature, featureIdToDelete, change);
151
- }
152
- catch {
153
- // pass
154
- }
155
- }
156
- throw new Error(`Feature "${featureIdToDelete}" not found in ${_id}`);
157
- }
158
- export function isDeleteFeatureChange(change) {
159
- return change.typeName === 'DeleteFeatureChange';
160
- }
161
- //# sourceMappingURL=DeleteFeatureChange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteFeatureChange.js","sourceRoot":"","sources":["../../src/Changes/DeleteFeatureChange.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { AssemblySpecificChange, type ServerDataStore } from '@apollo-annotation/common';
2
- import type { AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
3
- import type { FileDocument } from '@apollo-annotation/schemas';
4
- import type { GFF3Feature } from '@gmod/gff';
5
- export declare abstract class FromFileBaseChange extends AssemblySpecificChange {
6
- addRefSeqIntoDb(fileDoc: FileDocument, assembly: string, backend: ServerDataStore): Promise<void>;
7
- private refSeqCache;
8
- removeExistingFeatures(backend: ServerDataStore): Promise<void>;
9
- addFeatureIntoDb(gff3Feature: GFF3Feature, backend: ServerDataStore): Promise<void>;
10
- getAllIds(feature: AnnotationFeatureSnapshot): string[];
11
- }
12
- //# sourceMappingURL=FromFileBaseChange.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FromFileBaseChange.d.ts","sourceRoot":"","sources":["../../src/Changes/FromFileBaseChange.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAI5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IAC/D,eAAe,CACnB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe;IAoJ1B,OAAO,CAAC,WAAW,CAAoC;IAEjD,sBAAsB,CAAC,OAAO,EAAE,eAAe;IAc/C,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;IAwCzE,SAAS,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE;CAUxD"}
@@ -1,196 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
3
- import { AssemblySpecificChange, } from '@apollo-annotation/common';
4
- import { gff3ToAnnotationFeature } from '../GFF3/index.js';
5
- export class FromFileBaseChange extends AssemblySpecificChange {
6
- async addRefSeqIntoDb(fileDoc, assembly, backend) {
7
- const { logger } = this;
8
- const { filesService, refSeqChunkModel, refSeqModel, user } = backend;
9
- const { CHUNK_SIZE } = process.env;
10
- const customChunkSize = CHUNK_SIZE && Number(CHUNK_SIZE);
11
- let chunkIndex = 0;
12
- let refSeqLen = 0;
13
- let refSeqDoc;
14
- let fastaInfoStarted = fileDoc.type !== 'text/x-gff3';
15
- // Read data from compressed file and parse the content
16
- const sequenceStream = filesService.getFileStream(fileDoc);
17
- let sequenceBuffer = '';
18
- let incompleteLine = '';
19
- let lastLineIsIncomplete = true;
20
- let parsingStarted = false;
21
- logger.debug?.('starting sequence stream');
22
- let lineCount = 0;
23
- const decoder = new TextDecoder();
24
- for await (const data of sequenceStream) {
25
- const chunk = decoder.decode(data);
26
- lastLineIsIncomplete = !chunk.endsWith('\n');
27
- // chunk is small enough that you can split the whole thing into lines without having to make it into smaller chunks first.
28
- const lines = chunk.split(/\r?\n/);
29
- if (incompleteLine) {
30
- lines[0] = `${incompleteLine}${lines[0]}`;
31
- incompleteLine = '';
32
- }
33
- if (lastLineIsIncomplete) {
34
- incompleteLine = lines.pop() ?? '';
35
- }
36
- for (const line of lines) {
37
- lineCount++;
38
- if (lineCount % 1_000_000 === 0) {
39
- logger.debug?.(`Processed ${lineCount} lines`);
40
- }
41
- // In case of GFF3 file we start to read sequence after '##FASTA' is found
42
- if (!fastaInfoStarted) {
43
- if (line.trim() === '##FASTA') {
44
- fastaInfoStarted = true;
45
- }
46
- continue;
47
- }
48
- const refSeqInfoLine = /^>\s*(\S+)\s*(.*)/.exec(line);
49
- // Add new ref sequence info if we are reference seq info line
50
- if (refSeqInfoLine) {
51
- parsingStarted = true;
52
- logger.debug?.(`Reference sequence information line "${refSeqInfoLine[0]}"`);
53
- // If there is sequence from previous reference sequence then we need to add it to previous ref seq
54
- if (sequenceBuffer !== '') {
55
- if (!refSeqDoc) {
56
- throw new Error('No refSeq document found');
57
- }
58
- refSeqLen += sequenceBuffer.length;
59
- // We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
60
- await refSeqChunkModel.create([
61
- {
62
- refSeq: refSeqDoc._id,
63
- n: chunkIndex,
64
- sequence: sequenceBuffer,
65
- user,
66
- status: -1,
67
- },
68
- ]);
69
- sequenceBuffer = '';
70
- }
71
- await refSeqDoc?.updateOne({ length: refSeqLen });
72
- // await refSeqDoc?.updateOne({ length: refSeqLen }, { session })
73
- refSeqLen = 0;
74
- chunkIndex = 0;
75
- const name = refSeqInfoLine[1].trim();
76
- const description = refSeqInfoLine[2] ? refSeqInfoLine[2].trim() : '';
77
- // We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
78
- const [newRefSeqDoc] = await refSeqModel.create([
79
- {
80
- name,
81
- description,
82
- assembly,
83
- length: 0,
84
- ...(customChunkSize ? { chunkSize: customChunkSize } : null),
85
- user,
86
- status: -1,
87
- },
88
- ]);
89
- logger.debug?.(`Added new refSeq "${name}", desc "${description}", docId "${newRefSeqDoc._id}"`);
90
- refSeqDoc = newRefSeqDoc;
91
- }
92
- else if (/\S/.test(line)) {
93
- if (!refSeqDoc) {
94
- throw new Error('No refSeq document found');
95
- }
96
- const { _id, chunkSize } = refSeqDoc;
97
- sequenceBuffer += line.replaceAll(/\s/g, '');
98
- // If sequence block > chunk size then save chunk into Mongo
99
- while (sequenceBuffer.length >= chunkSize) {
100
- const sequence = sequenceBuffer.slice(0, chunkSize);
101
- refSeqLen += sequence.length;
102
- // We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
103
- await refSeqChunkModel.create([
104
- { refSeq: _id, n: chunkIndex, sequence, user, status: -1 },
105
- ]);
106
- chunkIndex++;
107
- // Set remaining sequence
108
- sequenceBuffer = sequenceBuffer.slice(chunkSize);
109
- }
110
- }
111
- }
112
- }
113
- if (!parsingStarted) {
114
- throw new Error('No reference sequences found in file');
115
- }
116
- if (sequenceBuffer || lastLineIsIncomplete) {
117
- if (!refSeqDoc) {
118
- throw new Error('No refSeq document found');
119
- }
120
- // If the file did not end with line break so the last line is incomplete
121
- if (lastLineIsIncomplete) {
122
- sequenceBuffer += incompleteLine;
123
- }
124
- refSeqLen += sequenceBuffer.length;
125
- logger.verbose?.(`*** Add the very last chunk to ref seq ("${refSeqDoc._id}", index ${chunkIndex} and total length for ref seq is ${refSeqLen}): "${sequenceBuffer}"`);
126
- logger.debug?.(`Creating refSeq chunk number ${chunkIndex} of "${refSeqDoc._id}"`);
127
- // We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
128
- await refSeqChunkModel.create([
129
- {
130
- refSeq: refSeqDoc._id,
131
- n: chunkIndex,
132
- sequence: sequenceBuffer,
133
- user,
134
- status: -1,
135
- },
136
- ]);
137
- await refSeqDoc.updateOne({ length: refSeqLen });
138
- }
139
- }
140
- refSeqCache = new Map();
141
- async removeExistingFeatures(backend) {
142
- const { featureModel, refSeqModel } = backend;
143
- const { assembly, logger } = this;
144
- logger.debug?.(`Removing existing features for assembly = ${assembly}`);
145
- const refSeqs = await refSeqModel
146
- .find({ assembly })
147
- .exec();
148
- for (const refSeq of refSeqs) {
149
- await featureModel.deleteMany({ refSeq: refSeq._id });
150
- }
151
- }
152
- async addFeatureIntoDb(gff3Feature, backend) {
153
- const { INDEXED_IDS } = process.env;
154
- let idsToIndex;
155
- if (INDEXED_IDS) {
156
- idsToIndex = INDEXED_IDS.split(',');
157
- }
158
- const { assembly, refSeqCache } = this;
159
- const { featureModel, refSeqModel, user } = backend;
160
- const [{ seq_id: refName }] = gff3Feature;
161
- if (!refName) {
162
- throw new Error(`Valid seq_id not found in feature ${JSON.stringify(gff3Feature)}`);
163
- }
164
- let refSeqDoc = refSeqCache.get(refName);
165
- if (!refSeqDoc) {
166
- refSeqDoc =
167
- (await refSeqModel.findOne({ assembly, name: refName }).exec()) ??
168
- undefined;
169
- if (refSeqDoc) {
170
- refSeqCache.set(refName, refSeqDoc);
171
- }
172
- }
173
- if (!refSeqDoc) {
174
- throw new Error(`RefSeq was not found by assembly "${assembly}" and seq_id "${refName}" not found`);
175
- }
176
- const newFeature = gff3ToAnnotationFeature(gff3Feature, refSeqDoc._id);
177
- const allIds = this.getAllIds(newFeature);
178
- const indexedIds = this.getIndexedIds(newFeature, idsToIndex);
179
- // Add into Mongo
180
- // We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
181
- await featureModel.create([
182
- { allIds, indexedIds, ...newFeature, user, status: -1 },
183
- ]);
184
- }
185
- getAllIds(feature) {
186
- const allIds = [feature._id];
187
- if (feature.children) {
188
- for (const child of Object.values(feature.children)) {
189
- const childIds = this.getAllIds(child);
190
- allIds.push(...childIds);
191
- }
192
- }
193
- return allIds;
194
- }
195
- }
196
- //# sourceMappingURL=FromFileBaseChange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FromFileBaseChange.js","sourceRoot":"","sources":["../../src/Changes/FromFileBaseChange.ts"],"names":[],"mappings":"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"}