@apollo-annotation/shared 0.1.19 → 0.1.21
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/AddAssemblyAndFeaturesFromFileChange.d.ts +33 -0
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +86 -0
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -0
- package/dist/Changes/AddAssemblyFromExternalChange.d.ts +34 -0
- package/dist/Changes/AddAssemblyFromExternalChange.js +100 -0
- package/dist/Changes/AddAssemblyFromExternalChange.js.map +1 -0
- package/dist/Changes/AddAssemblyFromFileChange.d.ts +43 -0
- package/dist/Changes/AddAssemblyFromFileChange.js +146 -0
- package/dist/Changes/AddAssemblyFromFileChange.js.map +1 -0
- package/dist/Changes/AddFeatureChange.d.ts +35 -0
- package/dist/Changes/AddFeatureChange.js +169 -0
- package/dist/Changes/AddFeatureChange.js.map +1 -0
- package/dist/Changes/AddFeaturesFromFileChange.d.ts +32 -0
- package/dist/Changes/AddFeaturesFromFileChange.js +76 -0
- package/dist/Changes/AddFeaturesFromFileChange.js.map +1 -0
- package/dist/Changes/AddRefSeqAliasesChange.d.ts +20 -0
- package/dist/Changes/AddRefSeqAliasesChange.js +61 -0
- package/dist/Changes/AddRefSeqAliasesChange.js.map +1 -0
- package/dist/Changes/DeleteAssemblyChange.d.ts +18 -0
- package/dist/Changes/DeleteAssemblyChange.js +72 -0
- package/dist/Changes/DeleteAssemblyChange.js.map +1 -0
- package/dist/Changes/DeleteFeatureChange.d.ts +42 -0
- package/dist/Changes/DeleteFeatureChange.js +143 -0
- package/dist/Changes/DeleteFeatureChange.js.map +1 -0
- package/dist/Changes/DeleteUserChange.d.ts +25 -0
- package/dist/Changes/DeleteUserChange.js +53 -0
- package/dist/Changes/DeleteUserChange.js.map +1 -0
- package/dist/Changes/FeatureAttributeChange.d.ts +31 -0
- package/dist/Changes/FeatureAttributeChange.js +112 -0
- package/dist/Changes/FeatureAttributeChange.js.map +1 -0
- package/dist/Changes/FromFileBaseChange.d.ts +9 -0
- package/dist/Changes/FromFileBaseChange.js +187 -0
- package/dist/Changes/FromFileBaseChange.js.map +1 -0
- package/dist/Changes/ImportJBrowseConfigChange.d.ts +43 -0
- package/dist/Changes/ImportJBrowseConfigChange.js +67 -0
- package/dist/Changes/ImportJBrowseConfigChange.js.map +1 -0
- package/dist/Changes/LocationEndChange.d.ts +32 -0
- package/dist/Changes/LocationEndChange.js +129 -0
- package/dist/Changes/LocationEndChange.js.map +1 -0
- package/dist/Changes/LocationStartChange.d.ts +32 -0
- package/dist/Changes/LocationStartChange.js +129 -0
- package/dist/Changes/LocationStartChange.js.map +1 -0
- package/dist/Changes/StrandChange.d.ts +31 -0
- package/dist/Changes/StrandChange.js +114 -0
- package/dist/Changes/StrandChange.js.map +1 -0
- package/dist/Changes/TypeChange.d.ts +31 -0
- package/dist/Changes/TypeChange.js +114 -0
- package/dist/Changes/TypeChange.js.map +1 -0
- package/dist/Changes/UserChange.d.ts +25 -0
- package/dist/Changes/UserChange.js +51 -0
- package/dist/Changes/UserChange.js.map +1 -0
- package/dist/Changes/index.d.ts +50 -0
- package/dist/Changes/index.js +55 -0
- package/dist/Changes/index.js.map +1 -0
- package/dist/Checks/CDSCheck.d.ts +8 -0
- package/dist/Checks/CDSCheck.js +197 -0
- package/dist/Checks/CDSCheck.js.map +1 -0
- package/dist/Checks/index.d.ts +1 -0
- package/dist/Checks/index.js +5 -0
- package/dist/Checks/index.js.map +1 -0
- package/dist/Common/index.d.ts +1 -0
- package/dist/Common/index.js +5 -0
- package/dist/Common/index.js.map +1 -0
- package/dist/Common/jwtPayload.d.ts +12 -0
- package/dist/Common/jwtPayload.js +16 -0
- package/dist/Common/jwtPayload.js.map +1 -0
- package/dist/GFF3/gff3ToAnnotationFeature.d.ts +3 -0
- package/dist/GFF3/gff3ToAnnotationFeature.js +211 -0
- package/dist/GFF3/gff3ToAnnotationFeature.js.map +1 -0
- package/dist/GFF3/gff3ToAnnotationFeature.test.d.ts +1 -0
- package/dist/GFF3/gff3ToAnnotationFeature.test.js +174 -0
- package/dist/GFF3/gff3ToAnnotationFeature.test.js.map +1 -0
- package/dist/GFF3/gffReservedKeys.d.ts +5 -0
- package/dist/GFF3/gffReservedKeys.js +34 -0
- package/dist/GFF3/gffReservedKeys.js.map +1 -0
- package/dist/GFF3/index.d.ts +2 -0
- package/dist/GFF3/index.js +6 -0
- package/dist/GFF3/index.js.map +1 -0
- package/dist/Messages.d.ts +28 -0
- package/dist/Messages.js +3 -0
- package/dist/Messages.js.map +1 -0
- package/dist/Operations/GetAssembliesOperation.d.ts +13 -0
- package/dist/Operations/GetAssembliesOperation.js +20 -0
- package/dist/Operations/GetAssembliesOperation.js.map +1 -0
- package/dist/Operations/GetFeaturesOperation.d.ts +26 -0
- package/dist/Operations/GetFeaturesOperation.js +42 -0
- package/dist/Operations/GetFeaturesOperation.js.map +1 -0
- package/dist/Operations/index.d.ts +8 -0
- package/dist/Operations/index.js +10 -0
- package/dist/Operations/index.js.map +1 -0
- package/dist/Validations/CoreValidation.d.ts +17 -0
- package/dist/Validations/CoreValidation.js +36 -0
- package/dist/Validations/CoreValidation.js.map +1 -0
- package/dist/Validations/ParentChildValidation.d.ts +17 -0
- package/dist/Validations/ParentChildValidation.js +61 -0
- package/dist/Validations/ParentChildValidation.js.map +1 -0
- package/dist/Validations/Validation.d.ts +27 -0
- package/dist/Validations/Validation.js +27 -0
- package/dist/Validations/Validation.js.map +1 -0
- package/dist/Validations/ValidationSet.d.ts +24 -0
- package/dist/Validations/ValidationSet.js +86 -0
- package/dist/Validations/ValidationSet.js.map +1 -0
- package/dist/Validations/index.d.ts +4 -0
- package/dist/Validations/index.js +8 -0
- package/dist/Validations/index.js.map +1 -0
- package/dist/Validations/soSequenceTypes.d.ts +2 -0
- package/dist/Validations/soSequenceTypes.js +1868 -0
- package/dist/Validations/soSequenceTypes.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/util.d.ts +4 -0
- package/dist/util.js +102 -0
- package/dist/util.js.map +1 -0
- package/package.json +8 -5
- package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +10 -6
- package/src/Changes/AddAssemblyFromExternalChange.ts +4 -1
- package/src/Changes/AddAssemblyFromFileChange.ts +138 -41
- package/src/Changes/ImportJBrowseConfigChange.ts +2 -1
- package/src/Checks/CDSCheck.ts +202 -252
- package/src/GFF3/gff3ToAnnotationFeature.test.ts +165 -5
- package/src/GFF3/gff3ToAnnotationFeature.ts +16 -16
- package/src/util.ts +1 -0
- package/test_data/braker.gff +13 -0
- package/test_data/example01.gff3 +26 -0
- package/test_data/example01.json +236 -0
- package/test_data/example02.json +225 -0
- package/test_data/example04.json +225 -0
- package/test_data/example05.gff3 +30 -0
- package/test_data/example06.gff3 +30 -0
- package/test_data/example07.gff3 +30 -0
- package/test_data/gene_mrna.gff3 +4 -0
- package/test_data/gene_representations.gff3 +1781 -0
- package/test_data/one_cds.gff3 +9 -0
- package/test_data/one_cds.json +67 -0
- package/test_data/two_cds.gff3 +9 -0
- package/test_data/two_cds.json +67 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddFeatureChange = void 0;
|
|
4
|
+
exports.isAddFeatureChange = isAddFeatureChange;
|
|
5
|
+
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
7
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
9
|
+
const common_1 = require("@apollo-annotation/common");
|
|
10
|
+
const DeleteFeatureChange_1 = require("./DeleteFeatureChange");
|
|
11
|
+
class AddFeatureChange extends common_1.FeatureChange {
|
|
12
|
+
typeName = 'AddFeatureChange';
|
|
13
|
+
changes;
|
|
14
|
+
constructor(json, options) {
|
|
15
|
+
super(json, options);
|
|
16
|
+
this.changes = 'changes' in json ? json.changes : [json];
|
|
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
|
+
// Loop the changes
|
|
54
|
+
for (const change of changes) {
|
|
55
|
+
logger.debug?.(`change: ${JSON.stringify(change)}`);
|
|
56
|
+
const { addedFeature, allIds, copyFeature, parentFeatureId } = change;
|
|
57
|
+
const { _id, refSeq } = addedFeature;
|
|
58
|
+
const refSeqDoc = await refSeqModel
|
|
59
|
+
.findById(refSeq)
|
|
60
|
+
.session(session)
|
|
61
|
+
.exec();
|
|
62
|
+
if (!refSeqDoc) {
|
|
63
|
+
throw new Error(`RefSeq was not found by assembly "${assembly}" and seq_id "${refSeq}" not found`);
|
|
64
|
+
}
|
|
65
|
+
// CopyFeature is called from CopyFeature.tsx
|
|
66
|
+
if (copyFeature) {
|
|
67
|
+
// Add into Mongo
|
|
68
|
+
const [newFeatureDoc] = await featureModel.create([{ ...addedFeature, allIds, status: -1, user }], { session });
|
|
69
|
+
logger.debug?.(`Copied feature, docId "${newFeatureDoc._id}" to assembly "${assembly}"`);
|
|
70
|
+
featureCnt++;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Adding new child feature
|
|
74
|
+
if (parentFeatureId) {
|
|
75
|
+
const topLevelFeature = await featureModel
|
|
76
|
+
.findOne({ allIds: parentFeatureId })
|
|
77
|
+
.session(session)
|
|
78
|
+
.exec();
|
|
79
|
+
if (!topLevelFeature) {
|
|
80
|
+
throw new Error(`Could not find feature with ID "${parentFeatureId}"`);
|
|
81
|
+
}
|
|
82
|
+
const parentFeature = this.getFeatureFromId(topLevelFeature, parentFeatureId);
|
|
83
|
+
if (!parentFeature) {
|
|
84
|
+
throw new Error(`Could not find feature with ID "${parentFeatureId}" in feature "${topLevelFeature._id}"`);
|
|
85
|
+
}
|
|
86
|
+
if (!parentFeature.children) {
|
|
87
|
+
parentFeature.children = new Map();
|
|
88
|
+
}
|
|
89
|
+
if (!parentFeature.attributes?._id) {
|
|
90
|
+
let { attributes } = parentFeature;
|
|
91
|
+
if (!attributes) {
|
|
92
|
+
attributes = {};
|
|
93
|
+
}
|
|
94
|
+
attributes = {
|
|
95
|
+
_id: [parentFeature._id.toString()],
|
|
96
|
+
...JSON.parse(JSON.stringify(attributes)),
|
|
97
|
+
};
|
|
98
|
+
parentFeature.attributes = attributes;
|
|
99
|
+
}
|
|
100
|
+
parentFeature.children.set(_id, {
|
|
101
|
+
allIds: [],
|
|
102
|
+
...addedFeature,
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
104
|
+
// @ts-expect-error
|
|
105
|
+
_id,
|
|
106
|
+
});
|
|
107
|
+
// Child features should be sorted for click and drag of gene glyphs to work properly
|
|
108
|
+
parentFeature.children = new Map([...parentFeature.children.entries()].sort((a, b) => a[1].min - b[1].min));
|
|
109
|
+
const childIds = this.getChildFeatureIds(addedFeature);
|
|
110
|
+
topLevelFeature.allIds.push(_id, ...childIds);
|
|
111
|
+
await topLevelFeature.save();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const childIds = this.getChildFeatureIds(addedFeature);
|
|
115
|
+
const allIdsV2 = [_id, ...childIds];
|
|
116
|
+
const [newFeatureDoc] = await featureModel.create([{ allIds: allIdsV2, status: 0, ...addedFeature }], { session });
|
|
117
|
+
logger.verbose?.(`Added docId "${newFeatureDoc._id}"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
featureCnt++;
|
|
121
|
+
}
|
|
122
|
+
logger.debug?.(`Added ${featureCnt} new feature(s) into database.`);
|
|
123
|
+
}
|
|
124
|
+
async executeOnLocalGFF3(_backend) {
|
|
125
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
126
|
+
}
|
|
127
|
+
async executeOnClient(dataStore) {
|
|
128
|
+
if (!dataStore) {
|
|
129
|
+
throw new Error('No data store');
|
|
130
|
+
}
|
|
131
|
+
const { assembly, changes } = this;
|
|
132
|
+
for (const change of changes) {
|
|
133
|
+
const { addedFeature, parentFeatureId } = change;
|
|
134
|
+
if (parentFeatureId) {
|
|
135
|
+
const parentFeature = dataStore.getFeature(parentFeatureId);
|
|
136
|
+
if (!parentFeature) {
|
|
137
|
+
throw new Error(`Could not find parent feature "${parentFeatureId}"`);
|
|
138
|
+
}
|
|
139
|
+
// create an ID for the parent feature if it does not have one
|
|
140
|
+
if (!parentFeature.attributes.get('_id')) {
|
|
141
|
+
parentFeature.setAttribute('_id', [parentFeature._id]);
|
|
142
|
+
}
|
|
143
|
+
parentFeature.addChild(addedFeature);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
dataStore.addFeature(assembly, addedFeature);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
getInverse() {
|
|
151
|
+
const { assembly, changedIds, changes, logger } = this;
|
|
152
|
+
const inverseChangedIds = [...changedIds].reverse();
|
|
153
|
+
const inverseChanges = [...changes].reverse().map((addFeatureChange) => ({
|
|
154
|
+
deletedFeature: addFeatureChange.addedFeature,
|
|
155
|
+
parentFeatureId: addFeatureChange.parentFeatureId,
|
|
156
|
+
}));
|
|
157
|
+
return new DeleteFeatureChange_1.DeleteFeatureChange({
|
|
158
|
+
changedIds: inverseChangedIds,
|
|
159
|
+
typeName: 'DeleteFeatureChange',
|
|
160
|
+
changes: inverseChanges,
|
|
161
|
+
assembly,
|
|
162
|
+
}, { logger });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.AddFeatureChange = AddFeatureChange;
|
|
166
|
+
function isAddFeatureChange(change) {
|
|
167
|
+
return change.typeName === 'AddFeatureChange';
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=AddFeatureChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddFeatureChange.js","sourceRoot":"","sources":["../../src/Changes/AddFeatureChange.ts"],"names":[],"mappings":";;;AAmOA,gDAIC;AAvOD,qEAAqE;AACrE,4DAA4D;AAC5D,qDAAqD;AACrD,gEAAgE;AAChE,sDAOkC;AAGlC,+DAA2D;AA0B3D,MAAa,gBAAiB,SAAQ,sBAAa;IACjD,QAAQ,GAAG,kBAA2B,CAAA;IACtC,OAAO,CAA2B;IAElC,YAAY,IAAgC,EAAE,OAAuB;QACnE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,GAAG,OAAO,CAAA;YACxE,OAAO;gBACL,QAAQ;gBACR,UAAU;gBACV,QAAQ;gBACR,YAAY;gBACZ,eAAe;gBACf,WAAW;gBACX,MAAM;aACP,CAAA;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAC3E,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAE1C,MAAM,WAAW,GAAG,MAAM,aAAa;aACpC,QAAQ,CAAC,QAAQ,CAAC;aAClB,OAAO,CAAC,OAAO,CAAC;aAChB,IAAI,EAAE,CAAA;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,gCAAgC,QAAQ,aAAa,CAAA;YACpE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAErD,mBAAmB;QACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACnD,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;YACrE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;YACpC,MAAM,SAAS,GAAG,MAAM,WAAW;iBAChC,QAAQ,CAAC,MAAM,CAAC;iBAChB,OAAO,CAAC,OAAO,CAAC;iBAChB,IAAI,EAAE,CAAA;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,iBAAiB,MAAM,aAAa,CAClF,CAAA;YACH,CAAC;YAED,6CAA6C;YAC7C,IAAI,WAAW,EAAE,CAAC;gBAChB,iBAAiB;gBACjB,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,CAC/C,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAC/C,EAAE,OAAO,EAAE,CACZ,CAAA;gBACD,MAAM,CAAC,KAAK,EAAE,CACZ,0BAA0B,aAAa,CAAC,GAAG,kBAAkB,QAAQ,GAAG,CACzE,CAAA;gBACD,UAAU,EAAE,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,IAAI,eAAe,EAAE,CAAC;oBACpB,MAAM,eAAe,GAAG,MAAM,YAAY;yBACvC,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;yBACpC,OAAO,CAAC,OAAO,CAAC;yBAChB,IAAI,EAAE,CAAA;oBACT,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CACb,mCAAmC,eAAe,GAAG,CACtD,CAAA;oBACH,CAAC;oBACD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CACzC,eAAe,EACf,eAAe,CAChB,CAAA;oBACD,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,MAAM,IAAI,KAAK,CACb,mCAAmC,eAAe,iBAAiB,eAAe,CAAC,GAAG,GAAG,CAC1F,CAAA;oBACH,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;wBAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;oBACpC,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;wBACnC,IAAI,EAAE,UAAU,EAAE,GAAG,aAAa,CAAA;wBAClC,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,UAAU,GAAG,EAAE,CAAA;wBACjB,CAAC;wBACD,UAAU,GAAG;4BACX,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;4BACnC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;yBAC1C,CAAA;wBACD,aAAa,CAAC,UAAU,GAAG,UAAU,CAAA;oBACvC,CAAC;oBACD,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;wBAC9B,MAAM,EAAE,EAAE;wBACV,GAAG,YAAY;wBACf,6DAA6D;wBAC7D,mBAAmB;wBACnB,GAAG;qBACJ,CAAC,CAAA;oBACF,qFAAqF;oBACrF,aAAa,CAAC,QAAQ,GAAG,IAAI,GAAG,CAC9B,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAC9B,CACF,CAAA;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;oBACtD,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAA;oBAC7C,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;oBACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAA;oBACnC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,CAC/C,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,EAClD,EAAE,OAAO,EAAE,CACZ,CAAA;oBACD,MAAM,CAAC,OAAO,EAAE,CAAC,gBAAgB,aAAa,CAAC,GAAG,GAAG,CAAC,CAAA;gBACxD,CAAC;YACH,CAAC;YACD,UAAU,EAAE,CAAA;QACd,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,UAAU,gCAAgC,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAA4B;QACnD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAA0B;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;YAChD,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;gBAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,kCAAkC,eAAe,GAAG,CAAC,CAAA;gBACvE,CAAC;gBACD,8DAA8D;gBAC9D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxD,CAAC;gBACD,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU;QACR,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACtD,MAAM,iBAAiB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;QACnD,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACvE,cAAc,EAAE,gBAAgB,CAAC,YAAY;YAC7C,eAAe,EAAE,gBAAgB,CAAC,eAAe;SAClD,CAAC,CAAC,CAAA;QAEH,OAAO,IAAI,yCAAmB,CAC5B;YACE,UAAU,EAAE,iBAAiB;YAC7B,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,cAAc;YACvB,QAAQ;SACT,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IACH,CAAC;CACF;AAzLD,4CAyLC;AAED,SAAgB,kBAAkB,CAChC,MAAe;IAEf,OAAQ,MAA2B,CAAC,QAAQ,KAAK,kBAAkB,CAAA;AACrE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ChangeOptions, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
import { FromFileBaseChange } from './FromFileBaseChange';
|
|
3
|
+
export interface SerializedAddFeaturesFromFileChangeBase extends SerializedAssemblySpecificChange {
|
|
4
|
+
typeName: 'AddFeaturesFromFileChange';
|
|
5
|
+
deleteExistingFeatures?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface AddFeaturesFromFileChangeDetails {
|
|
8
|
+
fileId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SerializedAddFeaturesFromFileChangeSingle extends SerializedAddFeaturesFromFileChangeBase, AddFeaturesFromFileChangeDetails {
|
|
11
|
+
}
|
|
12
|
+
export interface SerializedAddFeaturesFromFileChangeMultiple extends SerializedAddFeaturesFromFileChangeBase {
|
|
13
|
+
changes: AddFeaturesFromFileChangeDetails[];
|
|
14
|
+
}
|
|
15
|
+
export type SerializedAddFeaturesFromFileChange = SerializedAddFeaturesFromFileChangeSingle | SerializedAddFeaturesFromFileChangeMultiple;
|
|
16
|
+
export declare class AddFeaturesFromFileChange extends FromFileBaseChange {
|
|
17
|
+
typeName: "AddFeaturesFromFileChange";
|
|
18
|
+
changes: AddFeaturesFromFileChangeDetails[];
|
|
19
|
+
deleteExistingFeatures: boolean;
|
|
20
|
+
constructor(json: SerializedAddFeaturesFromFileChange, options?: ChangeOptions);
|
|
21
|
+
get notification(): string;
|
|
22
|
+
toJSON(): SerializedAddFeaturesFromFileChange;
|
|
23
|
+
/**
|
|
24
|
+
* Applies the required change to database
|
|
25
|
+
* @param backend - parameters from backend
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
29
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
30
|
+
executeOnClient(_dataStore: ClientDataStore): Promise<void>;
|
|
31
|
+
getInverse(): AddFeaturesFromFileChange;
|
|
32
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddFeaturesFromFileChange = void 0;
|
|
4
|
+
const FromFileBaseChange_1 = require("./FromFileBaseChange");
|
|
5
|
+
class AddFeaturesFromFileChange extends FromFileBaseChange_1.FromFileBaseChange {
|
|
6
|
+
typeName = 'AddFeaturesFromFileChange';
|
|
7
|
+
changes;
|
|
8
|
+
deleteExistingFeatures = false;
|
|
9
|
+
constructor(json, options) {
|
|
10
|
+
super(json, options);
|
|
11
|
+
this.deleteExistingFeatures = json.deleteExistingFeatures ?? false;
|
|
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 'Features have been added. To see them, please refresh the page.';
|
|
17
|
+
}
|
|
18
|
+
toJSON() {
|
|
19
|
+
const { assembly, changes, deleteExistingFeatures, typeName } = this;
|
|
20
|
+
if (changes.length === 1) {
|
|
21
|
+
const [{ fileId }] = changes;
|
|
22
|
+
return { typeName, assembly, fileId, deleteExistingFeatures };
|
|
23
|
+
}
|
|
24
|
+
return { typeName, assembly, changes, deleteExistingFeatures };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Applies the required change to database
|
|
28
|
+
* @param backend - parameters from backend
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
async executeOnServer(backend) {
|
|
32
|
+
const { fileModel, filesService } = backend;
|
|
33
|
+
const { changes, deleteExistingFeatures, logger } = this;
|
|
34
|
+
if (deleteExistingFeatures) {
|
|
35
|
+
await this.removeExistingFeatures(backend);
|
|
36
|
+
}
|
|
37
|
+
for (const change of changes) {
|
|
38
|
+
const { fileId } = change;
|
|
39
|
+
const { FILE_UPLOAD_FOLDER } = process.env;
|
|
40
|
+
if (!FILE_UPLOAD_FOLDER) {
|
|
41
|
+
throw new Error('No FILE_UPLOAD_FOLDER found in .env file');
|
|
42
|
+
}
|
|
43
|
+
// Get file checksum
|
|
44
|
+
const fileDoc = await fileModel.findById(fileId).exec();
|
|
45
|
+
if (!fileDoc) {
|
|
46
|
+
throw new Error(`File "${fileId}" not found in Mongo`);
|
|
47
|
+
}
|
|
48
|
+
logger.debug?.(`FileId "${fileId}", checksum "${fileDoc.checksum}"`);
|
|
49
|
+
// Read data from compressed file and parse the content
|
|
50
|
+
const featureStream = filesService.parseGFF3(filesService.getFileStream(fileDoc));
|
|
51
|
+
let featureCount = 0;
|
|
52
|
+
for await (const f of featureStream) {
|
|
53
|
+
const gff3Feature = f;
|
|
54
|
+
// Add new feature into database
|
|
55
|
+
// We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
|
|
56
|
+
await this.addFeatureIntoDb(gff3Feature, backend);
|
|
57
|
+
featureCount++;
|
|
58
|
+
if (featureCount % 1000 === 0) {
|
|
59
|
+
logger.debug?.(`Processed ${featureCount} features`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
logger.debug?.('New features added into database!');
|
|
64
|
+
}
|
|
65
|
+
async executeOnLocalGFF3(_backend) {
|
|
66
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
67
|
+
}
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
69
|
+
async executeOnClient(_dataStore) { }
|
|
70
|
+
getInverse() {
|
|
71
|
+
const { assembly, changes, logger, typeName } = this;
|
|
72
|
+
return new AddFeaturesFromFileChange({ typeName, changes, assembly }, { logger });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.AddFeaturesFromFileChange = AddFeaturesFromFileChange;
|
|
76
|
+
//# sourceMappingURL=AddFeaturesFromFileChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddFeaturesFromFileChange.js","sourceRoot":"","sources":["../../src/Changes/AddFeaturesFromFileChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AssemblySpecificChange, Change, ChangeOptions, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
export interface SerializedRefSeqAliases {
|
|
3
|
+
refName: string;
|
|
4
|
+
aliases: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface SerializedRefSeqAliasesChange extends SerializedAssemblySpecificChange {
|
|
7
|
+
typeName: 'AddRefSeqAliasesChange';
|
|
8
|
+
refSeqAliases: SerializedRefSeqAliases[];
|
|
9
|
+
}
|
|
10
|
+
export declare class AddRefSeqAliasesChange extends AssemblySpecificChange {
|
|
11
|
+
typeName: "AddRefSeqAliasesChange";
|
|
12
|
+
refSeqAliases: SerializedRefSeqAliases[];
|
|
13
|
+
constructor(json: SerializedRefSeqAliasesChange, options?: ChangeOptions);
|
|
14
|
+
executeOnClient(clientDataStore: ClientDataStore): Promise<void>;
|
|
15
|
+
getInverse(): Change;
|
|
16
|
+
toJSON(): SerializedRefSeqAliasesChange;
|
|
17
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
18
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<unknown>;
|
|
19
|
+
get notification(): string;
|
|
20
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddRefSeqAliasesChange = void 0;
|
|
4
|
+
const common_1 = require("@apollo-annotation/common");
|
|
5
|
+
const util_1 = require("@jbrowse/core/util");
|
|
6
|
+
class AddRefSeqAliasesChange extends common_1.AssemblySpecificChange {
|
|
7
|
+
typeName = 'AddRefSeqAliasesChange';
|
|
8
|
+
refSeqAliases;
|
|
9
|
+
constructor(json, options) {
|
|
10
|
+
super(json, options);
|
|
11
|
+
this.refSeqAliases = json.refSeqAliases;
|
|
12
|
+
}
|
|
13
|
+
executeOnClient(clientDataStore) {
|
|
14
|
+
const { assemblyManager } = (0, util_1.getSession)(clientDataStore);
|
|
15
|
+
const assembly = assemblyManager.get(this.assembly);
|
|
16
|
+
if (!assembly) {
|
|
17
|
+
throw new Error(`assembly ${this.assembly} not found`);
|
|
18
|
+
}
|
|
19
|
+
const sessionAliases = assembly.refNameAliases;
|
|
20
|
+
const sessionLCAliases = assembly.lowerCaseRefNameAliases;
|
|
21
|
+
if (!sessionAliases || !sessionLCAliases) {
|
|
22
|
+
throw new Error('Session refNameAliases not found in assembly');
|
|
23
|
+
}
|
|
24
|
+
for (const refSeqAlias of this.refSeqAliases) {
|
|
25
|
+
const { aliases, refName } = refSeqAlias;
|
|
26
|
+
for (const alias of aliases) {
|
|
27
|
+
sessionAliases[alias] = refName;
|
|
28
|
+
sessionLCAliases[alias.toLowerCase()] = refName;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
assembly.setRefNameAliases(sessionAliases, sessionLCAliases);
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
}
|
|
34
|
+
getInverse() {
|
|
35
|
+
throw new Error('Method not implemented.');
|
|
36
|
+
}
|
|
37
|
+
toJSON() {
|
|
38
|
+
const { assembly, refSeqAliases, typeName } = this;
|
|
39
|
+
return { assembly, typeName, refSeqAliases };
|
|
40
|
+
}
|
|
41
|
+
async executeOnServer(backend) {
|
|
42
|
+
const { refSeqModel, session } = backend;
|
|
43
|
+
const { assembly, logger, refSeqAliases } = this;
|
|
44
|
+
for (const refSeqAlias of refSeqAliases) {
|
|
45
|
+
logger.debug?.(`Updating Refname alias for assembly: ${assembly}, refSeqAlias: ${JSON.stringify(refSeqAlias)}`);
|
|
46
|
+
const { aliases, refName } = refSeqAlias;
|
|
47
|
+
await refSeqModel
|
|
48
|
+
.updateOne({ assembly, name: refName }, { $set: { aliases } })
|
|
49
|
+
.session(session);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
executeOnLocalGFF3(_backend) {
|
|
53
|
+
throw new Error('Method not implemented.');
|
|
54
|
+
}
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/class-literal-property-style
|
|
56
|
+
get notification() {
|
|
57
|
+
return 'RefSeq aliases have been added.';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.AddRefSeqAliasesChange = AddRefSeqAliasesChange;
|
|
61
|
+
//# sourceMappingURL=AddRefSeqAliasesChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddRefSeqAliasesChange.js","sourceRoot":"","sources":["../../src/Changes/AddRefSeqAliasesChange.ts"],"names":[],"mappings":";;;AAAA,sDAQkC;AAClC,6CAA+C;AAa/C,MAAa,sBAAuB,SAAQ,+BAAsB;IAChE,QAAQ,GAAG,wBAAiC,CAAA;IAC5C,aAAa,CAA2B;IAExC,YAAY,IAAmC,EAAE,OAAuB;QACtE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;IACzC,CAAC;IAED,eAAe,CAAC,eAAgC;QAC9C,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,iBAAU,EAAC,eAAe,CAAC,CAAA;QACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,QAAQ,YAAY,CAAC,CAAA;QACxD,CAAC;QACD,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAA;QAC9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,uBAAuB,CAAA;QAEzD,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,CAAA;YACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;gBAC/B,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAA;YACjD,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;QAC5D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED,UAAU;QACR,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;QACxC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;QAEhD,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,EAAE,CACZ,wCAAwC,QAAQ,kBAAkB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAChG,CAAA;YACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,CAAA;YACxC,MAAM,WAAW;iBACd,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;iBAC7D,OAAO,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,QAA4B;QAC7C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,2EAA2E;IAC3E,IAAI,YAAY;QACd,OAAO,iCAAiC,CAAA;IAC1C,CAAC;CACF;AAjED,wDAiEC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AssemblySpecificChange, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
export interface SerializedDeleteAssemblyChange extends SerializedAssemblySpecificChange {
|
|
3
|
+
typeName: 'DeleteAssemblyChange';
|
|
4
|
+
}
|
|
5
|
+
export declare class DeleteAssemblyChange extends AssemblySpecificChange {
|
|
6
|
+
typeName: "DeleteAssemblyChange";
|
|
7
|
+
get notification(): string;
|
|
8
|
+
toJSON(): SerializedDeleteAssemblyChange;
|
|
9
|
+
/**
|
|
10
|
+
* Applies the required change to database
|
|
11
|
+
* @param backend - parameters from backend
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
15
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
16
|
+
executeOnClient(dataStore: ClientDataStore): Promise<void>;
|
|
17
|
+
getInverse(): DeleteAssemblyChange;
|
|
18
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteAssemblyChange = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
5
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
8
|
+
const common_1 = require("@apollo-annotation/common");
|
|
9
|
+
const util_1 = require("@jbrowse/core/util");
|
|
10
|
+
class DeleteAssemblyChange extends common_1.AssemblySpecificChange {
|
|
11
|
+
typeName = 'DeleteAssemblyChange';
|
|
12
|
+
get notification() {
|
|
13
|
+
return `Assembly "${this.assembly}" deleted successfully.`;
|
|
14
|
+
}
|
|
15
|
+
toJSON() {
|
|
16
|
+
const { assembly, typeName } = this;
|
|
17
|
+
return { typeName, assembly };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Applies the required change to database
|
|
21
|
+
* @param backend - parameters from backend
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
async executeOnServer(backend) {
|
|
25
|
+
const { assemblyModel, featureModel, refSeqChunkModel, refSeqModel, session, } = backend;
|
|
26
|
+
const { assembly, logger } = this;
|
|
27
|
+
const assemblyDoc = await assemblyModel
|
|
28
|
+
.findById(assembly)
|
|
29
|
+
.session(session)
|
|
30
|
+
.exec();
|
|
31
|
+
if (!assemblyDoc) {
|
|
32
|
+
const errMsg = `*** ERROR: Assembly with id "${assembly}" not found`;
|
|
33
|
+
logger.error(errMsg);
|
|
34
|
+
throw new Error(errMsg);
|
|
35
|
+
}
|
|
36
|
+
// We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
|
|
37
|
+
// Get RefSeqs
|
|
38
|
+
const refSeqs = await refSeqModel.find({ assembly }).exec();
|
|
39
|
+
const refSeqIds = refSeqs.map((refSeq) => refSeq._id);
|
|
40
|
+
// Get and delete RefSeqChunks
|
|
41
|
+
await refSeqChunkModel.deleteMany({ refSeq: refSeqIds }).exec();
|
|
42
|
+
// Get and delete Features
|
|
43
|
+
await featureModel.deleteMany({ refSeq: refSeqIds }).exec();
|
|
44
|
+
// Delete RefSeqs and Assembly
|
|
45
|
+
await refSeqModel.deleteMany({ assembly }).exec();
|
|
46
|
+
await assemblyModel.findByIdAndDelete(assembly).exec();
|
|
47
|
+
logger.debug?.(`Assembly "${assembly}" deleted from database.`);
|
|
48
|
+
}
|
|
49
|
+
async executeOnLocalGFF3(_backend) {
|
|
50
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
51
|
+
}
|
|
52
|
+
async executeOnClient(dataStore) {
|
|
53
|
+
const { assembly } = this;
|
|
54
|
+
if (!dataStore) {
|
|
55
|
+
throw new Error('No data store');
|
|
56
|
+
}
|
|
57
|
+
const session = (0, util_1.getSession)(dataStore);
|
|
58
|
+
// If assemblyId is not present in client data store
|
|
59
|
+
if (dataStore.assemblies.has(assembly)) {
|
|
60
|
+
dataStore.deleteAssembly(assembly);
|
|
61
|
+
}
|
|
62
|
+
await session.removeAssembly?.(assembly);
|
|
63
|
+
// @ts-expect-error this isn't on the AbstractSessionModel
|
|
64
|
+
await session.removeSessionAssembly?.(assembly);
|
|
65
|
+
}
|
|
66
|
+
getInverse() {
|
|
67
|
+
const { assembly, logger } = this;
|
|
68
|
+
return new DeleteAssemblyChange({ typeName: 'DeleteAssemblyChange', assembly }, { logger });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.DeleteAssemblyChange = DeleteAssemblyChange;
|
|
72
|
+
//# sourceMappingURL=DeleteAssemblyChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteAssemblyChange.js","sourceRoot":"","sources":["../../src/Changes/DeleteAssemblyChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
|
|
3
|
+
import { Feature } from '@apollo-annotation/schemas';
|
|
4
|
+
import { AddFeatureChange } from './AddFeatureChange';
|
|
5
|
+
interface SerializedDeleteFeatureChangeBase extends SerializedFeatureChange {
|
|
6
|
+
typeName: 'DeleteFeatureChange';
|
|
7
|
+
}
|
|
8
|
+
export interface DeleteFeatureChangeDetails {
|
|
9
|
+
deletedFeature: AnnotationFeatureSnapshot;
|
|
10
|
+
parentFeatureId?: string;
|
|
11
|
+
}
|
|
12
|
+
interface SerializedDeleteFeatureChangeSingle extends SerializedDeleteFeatureChangeBase, DeleteFeatureChangeDetails {
|
|
13
|
+
}
|
|
14
|
+
interface SerializedDeleteFeatureChangeMultiple extends SerializedDeleteFeatureChangeBase {
|
|
15
|
+
changes: DeleteFeatureChangeDetails[];
|
|
16
|
+
}
|
|
17
|
+
export type SerializedDeleteFeatureChange = SerializedDeleteFeatureChangeSingle | SerializedDeleteFeatureChangeMultiple;
|
|
18
|
+
export declare class DeleteFeatureChange extends FeatureChange {
|
|
19
|
+
typeName: "DeleteFeatureChange";
|
|
20
|
+
changes: DeleteFeatureChangeDetails[];
|
|
21
|
+
constructor(json: SerializedDeleteFeatureChange, options?: ChangeOptions);
|
|
22
|
+
toJSON(): SerializedDeleteFeatureChange;
|
|
23
|
+
/**
|
|
24
|
+
* Applies the required change to database
|
|
25
|
+
* @param backend - parameters from backend
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Delete feature's subfeatures that match an ID and return the IDs of any
|
|
31
|
+
* sub-subfeatures that were deleted
|
|
32
|
+
* @param feature -
|
|
33
|
+
* @param featureIdToDelete -
|
|
34
|
+
* @returns - list of deleted feature IDs
|
|
35
|
+
*/
|
|
36
|
+
findAndDeleteChildFeature(feature: Feature, featureIdToDelete: string): string[];
|
|
37
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
38
|
+
executeOnClient(dataStore: ClientDataStore): Promise<void>;
|
|
39
|
+
getInverse(): AddFeatureChange;
|
|
40
|
+
}
|
|
41
|
+
export declare function isDeleteFeatureChange(change: unknown): change is DeleteFeatureChange;
|
|
42
|
+
export {};
|