@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.
- package/dist/Changes/{DeleteFeatureChange.d.ts → AddAndDeleteFeatureChanges.d.ts} +26 -11
- package/dist/Changes/AddAndDeleteFeatureChanges.d.ts.map +1 -0
- package/dist/Changes/AddAndDeleteFeatureChanges.js +117 -0
- package/dist/Changes/AddAndDeleteFeatureChanges.js.map +1 -0
- package/dist/Changes/AddAssemblyAliasesChange.d.ts +1 -4
- package/dist/Changes/AddAssemblyAliasesChange.d.ts.map +1 -1
- package/dist/Changes/AddAssemblyAliasesChange.js +0 -27
- package/dist/Changes/AddAssemblyAliasesChange.js.map +1 -1
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts +2 -11
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts.map +1 -1
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +2 -82
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -1
- package/dist/Changes/AddAssemblyFromExternalChange.d.ts +1 -9
- package/dist/Changes/AddAssemblyFromExternalChange.d.ts.map +1 -1
- package/dist/Changes/AddAssemblyFromExternalChange.js +0 -72
- package/dist/Changes/AddAssemblyFromExternalChange.js.map +1 -1
- package/dist/Changes/AddAssemblyFromFileChange.d.ts +2 -17
- package/dist/Changes/AddAssemblyFromFileChange.d.ts.map +1 -1
- package/dist/Changes/AddAssemblyFromFileChange.js +2 -119
- package/dist/Changes/AddAssemblyFromFileChange.js.map +1 -1
- package/dist/Changes/AddFeaturesFromFileChange.d.ts +2 -11
- package/dist/Changes/AddFeaturesFromFileChange.d.ts.map +1 -1
- package/dist/Changes/AddFeaturesFromFileChange.js +2 -66
- package/dist/Changes/AddFeaturesFromFileChange.js.map +1 -1
- package/dist/Changes/AddRefSeqAliasesChange.d.ts +1 -4
- package/dist/Changes/AddRefSeqAliasesChange.d.ts.map +1 -1
- package/dist/Changes/AddRefSeqAliasesChange.js +0 -34
- package/dist/Changes/AddRefSeqAliasesChange.js.map +1 -1
- package/dist/Changes/DeleteAssemblyChange.d.ts +1 -9
- package/dist/Changes/DeleteAssemblyChange.d.ts.map +1 -1
- package/dist/Changes/DeleteAssemblyChange.js +0 -53
- package/dist/Changes/DeleteAssemblyChange.js.map +1 -1
- package/dist/Changes/DeleteUserChange.d.ts +1 -4
- package/dist/Changes/DeleteUserChange.d.ts.map +1 -1
- package/dist/Changes/DeleteUserChange.js +0 -19
- package/dist/Changes/DeleteUserChange.js.map +1 -1
- package/dist/Changes/FeatureAttributeChange.d.ts +1 -9
- package/dist/Changes/FeatureAttributeChange.d.ts.map +1 -1
- package/dist/Changes/FeatureAttributeChange.js +0 -82
- package/dist/Changes/FeatureAttributeChange.js.map +1 -1
- package/dist/Changes/ImportJBrowseConfigChange.d.ts +1 -4
- package/dist/Changes/ImportJBrowseConfigChange.d.ts.map +1 -1
- package/dist/Changes/ImportJBrowseConfigChange.js +1 -18
- package/dist/Changes/ImportJBrowseConfigChange.js.map +1 -1
- package/dist/Changes/LocationEndChange.d.ts +1 -9
- package/dist/Changes/LocationEndChange.d.ts.map +1 -1
- package/dist/Changes/LocationEndChange.js +0 -90
- package/dist/Changes/LocationEndChange.js.map +1 -1
- package/dist/Changes/LocationStartChange.d.ts +1 -9
- package/dist/Changes/LocationStartChange.d.ts.map +1 -1
- package/dist/Changes/LocationStartChange.js +0 -90
- package/dist/Changes/LocationStartChange.js.map +1 -1
- package/dist/Changes/MergeAndUndoMergeExonsChanges.d.ts +46 -0
- package/dist/Changes/MergeAndUndoMergeExonsChanges.d.ts.map +1 -0
- package/dist/Changes/MergeAndUndoMergeExonsChanges.js +83 -0
- package/dist/Changes/MergeAndUndoMergeExonsChanges.js.map +1 -0
- package/dist/Changes/{MergeTranscriptsChange.d.ts → MergeAndUndoMergeTranscriptsChanges.d.ts} +22 -6
- package/dist/Changes/MergeAndUndoMergeTranscriptsChanges.d.ts.map +1 -0
- package/dist/Changes/{MergeTranscriptsChange.js → MergeAndUndoMergeTranscriptsChanges.js} +40 -50
- package/dist/Changes/MergeAndUndoMergeTranscriptsChanges.js.map +1 -0
- package/dist/Changes/SplitAndUndoSplitExonChanges.d.ts +55 -0
- package/dist/Changes/SplitAndUndoSplitExonChanges.d.ts.map +1 -0
- package/dist/Changes/SplitAndUndoSplitExonChanges.js +115 -0
- package/dist/Changes/SplitAndUndoSplitExonChanges.js.map +1 -0
- package/dist/Changes/StrandChange.d.ts +1 -9
- package/dist/Changes/StrandChange.d.ts.map +1 -1
- package/dist/Changes/StrandChange.js +0 -77
- package/dist/Changes/StrandChange.js.map +1 -1
- package/dist/Changes/TypeChange.d.ts +1 -9
- package/dist/Changes/TypeChange.d.ts.map +1 -1
- package/dist/Changes/TypeChange.js +0 -77
- package/dist/Changes/TypeChange.js.map +1 -1
- package/dist/Changes/UserChange.d.ts +1 -4
- package/dist/Changes/UserChange.d.ts.map +1 -1
- package/dist/Changes/UserChange.js +0 -23
- package/dist/Changes/UserChange.js.map +1 -1
- package/dist/Changes/index.d.ts +29 -22
- package/dist/Changes/index.d.ts.map +1 -1
- package/dist/Changes/index.js +19 -24
- package/dist/Changes/index.js.map +1 -1
- package/dist/Validations/Validation.d.ts +2 -2
- package/dist/Validations/Validation.d.ts.map +1 -1
- package/dist/Validations/Validation.js +1 -1
- package/dist/Validations/Validation.js.map +1 -1
- package/dist/Validations/ValidationSet.d.ts +2 -2
- package/dist/Validations/ValidationSet.d.ts.map +1 -1
- package/dist/Validations/ValidationSet.js +2 -2
- package/dist/Validations/ValidationSet.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -4
- package/src/Changes/{DeleteFeatureChange.ts → AddAndDeleteFeatureChanges.ts} +77 -107
- package/src/Changes/AddAssemblyAliasesChange.ts +0 -35
- package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +5 -108
- package/src/Changes/AddAssemblyFromExternalChange.ts +0 -87
- package/src/Changes/AddAssemblyFromFileChange.ts +5 -169
- package/src/Changes/AddFeaturesFromFileChange.ts +5 -86
- package/src/Changes/AddRefSeqAliasesChange.ts +0 -44
- package/src/Changes/DeleteAssemblyChange.ts +0 -72
- package/src/Changes/DeleteUserChange.ts +0 -25
- package/src/Changes/FeatureAttributeChange.ts +0 -104
- package/src/Changes/ImportJBrowseConfigChange.ts +1 -27
- package/src/Changes/LocationEndChange.ts +0 -100
- package/src/Changes/LocationStartChange.ts +0 -100
- package/src/Changes/{MergeExonsChange.ts → MergeAndUndoMergeExonsChanges.ts} +70 -90
- package/src/Changes/{MergeTranscriptsChange.ts → MergeAndUndoMergeTranscriptsChanges.ts} +74 -66
- package/src/Changes/{SplitExonChange.ts → SplitAndUndoSplitExonChanges.ts} +95 -122
- package/src/Changes/StrandChange.ts +0 -94
- package/src/Changes/TypeChange.ts +0 -94
- package/src/Changes/UserChange.ts +0 -30
- package/src/Changes/index.ts +32 -24
- package/src/Validations/Validation.ts +2 -5
- package/src/Validations/ValidationSet.ts +3 -6
- package/src/index.ts +0 -1
- package/dist/Changes/AddFeatureChange.d.ts +0 -37
- package/dist/Changes/AddFeatureChange.d.ts.map +0 -1
- package/dist/Changes/AddFeatureChange.js +0 -169
- package/dist/Changes/AddFeatureChange.js.map +0 -1
- package/dist/Changes/DeleteFeatureChange.d.ts.map +0 -1
- package/dist/Changes/DeleteFeatureChange.js +0 -161
- package/dist/Changes/DeleteFeatureChange.js.map +0 -1
- package/dist/Changes/FromFileBaseChange.d.ts +0 -12
- package/dist/Changes/FromFileBaseChange.d.ts.map +0 -1
- package/dist/Changes/FromFileBaseChange.js +0 -196
- package/dist/Changes/FromFileBaseChange.js.map +0 -1
- package/dist/Changes/MergeExonsChange.d.ts +0 -30
- package/dist/Changes/MergeExonsChange.d.ts.map +0 -1
- package/dist/Changes/MergeExonsChange.js +0 -110
- package/dist/Changes/MergeExonsChange.js.map +0 -1
- package/dist/Changes/MergeTranscriptsChange.d.ts.map +0 -1
- package/dist/Changes/MergeTranscriptsChange.js.map +0 -1
- package/dist/Changes/SplitExonChange.d.ts +0 -34
- package/dist/Changes/SplitExonChange.d.ts.map +0 -1
- package/dist/Changes/SplitExonChange.js +0 -138
- package/dist/Changes/SplitExonChange.js.map +0 -1
- package/dist/Changes/UndoMergeExonsChange.d.ts +0 -28
- package/dist/Changes/UndoMergeExonsChange.d.ts.map +0 -1
- package/dist/Changes/UndoMergeExonsChange.js +0 -100
- package/dist/Changes/UndoMergeExonsChange.js.map +0 -1
- package/dist/Changes/UndoMergeTranscriptsChange.d.ts +0 -28
- package/dist/Changes/UndoMergeTranscriptsChange.d.ts.map +0 -1
- package/dist/Changes/UndoMergeTranscriptsChange.js +0 -100
- package/dist/Changes/UndoMergeTranscriptsChange.js.map +0 -1
- package/dist/Changes/UndoSplitExonChange.d.ts +0 -33
- package/dist/Changes/UndoSplitExonChange.d.ts.map +0 -1
- package/dist/Changes/UndoSplitExonChange.js +0 -107
- package/dist/Changes/UndoSplitExonChange.js.map +0 -1
- package/dist/Operations/GetAssembliesOperation.d.ts +0 -12
- package/dist/Operations/GetAssembliesOperation.d.ts.map +0 -1
- package/dist/Operations/GetAssembliesOperation.js +0 -16
- package/dist/Operations/GetAssembliesOperation.js.map +0 -1
- package/dist/Operations/GetFeaturesOperation.d.ts +0 -27
- package/dist/Operations/GetFeaturesOperation.d.ts.map +0 -1
- package/dist/Operations/GetFeaturesOperation.js +0 -38
- package/dist/Operations/GetFeaturesOperation.js.map +0 -1
- package/dist/Operations/index.d.ts +0 -9
- package/dist/Operations/index.d.ts.map +0 -1
- package/dist/Operations/index.js +0 -6
- package/dist/Operations/index.js.map +0 -1
- package/src/Changes/AddFeatureChange.ts +0 -236
- package/src/Changes/FromFileBaseChange.ts +0 -231
- package/src/Changes/UndoMergeExonsChange.ts +0 -149
- package/src/Changes/UndoMergeTranscriptsChange.ts +0 -153
- package/src/Changes/UndoSplitExonChange.ts +0 -174
- package/src/Operations/GetAssembliesOperation.ts +0 -28
- package/src/Operations/GetFeaturesOperation.ts +0 -58
- 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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"}
|