@apollo-annotation/shared 0.1.19 → 0.1.20
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 +83 -0
- package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -0
- package/dist/Changes/AddAssemblyFromExternalChange.d.ts +34 -0
- package/dist/Changes/AddAssemblyFromExternalChange.js +97 -0
- package/dist/Changes/AddAssemblyFromExternalChange.js.map +1 -0
- package/dist/Changes/AddAssemblyFromFileChange.d.ts +43 -0
- package/dist/Changes/AddAssemblyFromFileChange.js +140 -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 +6 -5
- package/src/Changes/AddAssemblyFromFileChange.ts +126 -41
- 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,33 @@
|
|
|
1
|
+
import { ChangeOptions, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
import { FromFileBaseChange } from './FromFileBaseChange';
|
|
3
|
+
export interface SerializedAddAssemblyAndFeaturesFromFileChangeBase extends SerializedAssemblySpecificChange {
|
|
4
|
+
typeName: 'AddAssemblyAndFeaturesFromFileChange';
|
|
5
|
+
}
|
|
6
|
+
export interface AddAssemblyAndFeaturesFromFileChangeDetails {
|
|
7
|
+
assemblyName: string;
|
|
8
|
+
fileIds: {
|
|
9
|
+
fa: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface SerializedAddAssemblyAndFeaturesFromFileChangeSingle extends SerializedAddAssemblyAndFeaturesFromFileChangeBase, AddAssemblyAndFeaturesFromFileChangeDetails {
|
|
13
|
+
}
|
|
14
|
+
export interface SerializedAddAssemblyAndFeaturesFromFileChangeMultiple extends SerializedAddAssemblyAndFeaturesFromFileChangeBase {
|
|
15
|
+
changes: AddAssemblyAndFeaturesFromFileChangeDetails[];
|
|
16
|
+
}
|
|
17
|
+
export type SerializedAddAssemblyAndFeaturesFromFileChange = SerializedAddAssemblyAndFeaturesFromFileChangeSingle | SerializedAddAssemblyAndFeaturesFromFileChangeMultiple;
|
|
18
|
+
export declare class AddAssemblyAndFeaturesFromFileChange extends FromFileBaseChange {
|
|
19
|
+
typeName: "AddAssemblyAndFeaturesFromFileChange";
|
|
20
|
+
changes: AddAssemblyAndFeaturesFromFileChangeDetails[];
|
|
21
|
+
constructor(json: SerializedAddAssemblyAndFeaturesFromFileChange, options?: ChangeOptions);
|
|
22
|
+
get notification(): string;
|
|
23
|
+
toJSON(): SerializedAddAssemblyAndFeaturesFromFileChange;
|
|
24
|
+
/**
|
|
25
|
+
* Applies the required change to database
|
|
26
|
+
* @param backend - parameters from backend
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
30
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
31
|
+
executeOnClient(_dataStore: ClientDataStore): Promise<void>;
|
|
32
|
+
getInverse(): AddAssemblyAndFeaturesFromFileChange;
|
|
33
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AddAssemblyAndFeaturesFromFileChange = void 0;
|
|
5
|
+
const FromFileBaseChange_1 = require("./FromFileBaseChange");
|
|
6
|
+
class AddAssemblyAndFeaturesFromFileChange extends FromFileBaseChange_1.FromFileBaseChange {
|
|
7
|
+
typeName = 'AddAssemblyAndFeaturesFromFileChange';
|
|
8
|
+
changes;
|
|
9
|
+
constructor(json, options) {
|
|
10
|
+
super(json, options);
|
|
11
|
+
this.changes = 'changes' in json ? json.changes : [json];
|
|
12
|
+
}
|
|
13
|
+
get notification() {
|
|
14
|
+
return `Assembly "${this.changes[0].assemblyName}" added successfully. To use it, please refresh the page.`;
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
const { assembly, changes, typeName } = this;
|
|
18
|
+
if (changes.length === 1) {
|
|
19
|
+
const [{ assemblyName, fileIds }] = changes;
|
|
20
|
+
return { typeName, assembly, assemblyName, fileIds };
|
|
21
|
+
}
|
|
22
|
+
return { typeName, assembly, changes };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Applies the required change to database
|
|
26
|
+
* @param backend - parameters from backend
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
async executeOnServer(backend) {
|
|
30
|
+
const { assemblyModel, fileModel, filesService, user } = backend;
|
|
31
|
+
const { assembly, changes, logger } = this;
|
|
32
|
+
for (const change of changes) {
|
|
33
|
+
const { assemblyName, fileIds } = change;
|
|
34
|
+
const fileId = fileIds.fa;
|
|
35
|
+
const { FILE_UPLOAD_FOLDER } = process.env;
|
|
36
|
+
if (!FILE_UPLOAD_FOLDER) {
|
|
37
|
+
throw new Error('No FILE_UPLOAD_FOLDER found in .env file');
|
|
38
|
+
}
|
|
39
|
+
// Get file checksum
|
|
40
|
+
const fileDoc = await fileModel.findById(fileId).exec();
|
|
41
|
+
if (!fileDoc) {
|
|
42
|
+
throw new Error(`File "${fileId}" not found in Mongo`);
|
|
43
|
+
}
|
|
44
|
+
logger.debug?.(`FileId "${fileId}", checksum "${fileDoc.checksum}"`);
|
|
45
|
+
// Check and add new assembly
|
|
46
|
+
const assemblyDoc = await assemblyModel
|
|
47
|
+
.findOne({ name: assemblyName })
|
|
48
|
+
.exec();
|
|
49
|
+
if (assemblyDoc) {
|
|
50
|
+
throw new Error(`Assembly "${assemblyName}" already exists`);
|
|
51
|
+
}
|
|
52
|
+
// Add assembly
|
|
53
|
+
const [newAssemblyDoc] = await assemblyModel.create([
|
|
54
|
+
{ _id: assembly, name: assemblyName, user, status: -1, fileId },
|
|
55
|
+
]);
|
|
56
|
+
logger.debug?.(`Added new assembly "${assemblyName}", docId "${newAssemblyDoc._id.toHexString()}"`);
|
|
57
|
+
logger.debug?.(`File type: "${fileDoc.type}"`);
|
|
58
|
+
// Add refSeqs
|
|
59
|
+
// We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
|
|
60
|
+
await this.addRefSeqIntoDb(fileDoc, newAssemblyDoc._id.toString(), backend);
|
|
61
|
+
// Loop all features
|
|
62
|
+
logger.debug?.(`**************** LOOPATAAN KAIKKI FEATURET SEURAAVAKSI File type: "${fileDoc.type}"`);
|
|
63
|
+
const featureStream = filesService.parseGFF3(filesService.getFileStream(fileDoc));
|
|
64
|
+
for await (const f of featureStream) {
|
|
65
|
+
const gff3Feature = f;
|
|
66
|
+
logger.verbose?.(`ENTRY=${JSON.stringify(gff3Feature)}`);
|
|
67
|
+
// Add new feature into database
|
|
68
|
+
await this.addFeatureIntoDb(gff3Feature, backend);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async executeOnLocalGFF3(_backend) {
|
|
73
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
74
|
+
}
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
76
|
+
async executeOnClient(_dataStore) { }
|
|
77
|
+
getInverse() {
|
|
78
|
+
const { assembly, changes, logger, typeName } = this;
|
|
79
|
+
return new AddAssemblyAndFeaturesFromFileChange({ typeName, changes, assembly }, { logger });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.AddAssemblyAndFeaturesFromFileChange = AddAssemblyAndFeaturesFromFileChange;
|
|
83
|
+
//# sourceMappingURL=AddAssemblyAndFeaturesFromFileChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddAssemblyAndFeaturesFromFileChange.js","sourceRoot":"","sources":["../../src/Changes/AddAssemblyAndFeaturesFromFileChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AssemblySpecificChange, ChangeOptions, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
export interface SerializedAddAssemblyFromExternalChangeBase extends SerializedAssemblySpecificChange {
|
|
3
|
+
typeName: 'AddAssemblyFromExternalChange';
|
|
4
|
+
}
|
|
5
|
+
export interface AddAssemblyFromExternalChangeDetails {
|
|
6
|
+
assemblyName: string;
|
|
7
|
+
externalLocation: {
|
|
8
|
+
fa: string;
|
|
9
|
+
fai: string;
|
|
10
|
+
gzi?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface SerializedAddAssemblyFromExternalChangeSingle extends SerializedAddAssemblyFromExternalChangeBase, AddAssemblyFromExternalChangeDetails {
|
|
14
|
+
}
|
|
15
|
+
export interface SerializedAddAssemblyFromExternalChangeMultiple extends SerializedAddAssemblyFromExternalChangeBase {
|
|
16
|
+
changes: AddAssemblyFromExternalChangeDetails[];
|
|
17
|
+
}
|
|
18
|
+
export type SerializedAddAssemblyFromExternalChange = SerializedAddAssemblyFromExternalChangeSingle | SerializedAddAssemblyFromExternalChangeMultiple;
|
|
19
|
+
export declare class AddAssemblyFromExternalChange extends AssemblySpecificChange {
|
|
20
|
+
typeName: "AddAssemblyFromExternalChange";
|
|
21
|
+
changes: AddAssemblyFromExternalChangeDetails[];
|
|
22
|
+
constructor(json: SerializedAddAssemblyFromExternalChange, options?: ChangeOptions);
|
|
23
|
+
get notification(): string;
|
|
24
|
+
toJSON(): SerializedAddAssemblyFromExternalChange;
|
|
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(): AddAssemblyFromExternalChange;
|
|
34
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.AddAssemblyFromExternalChange = void 0;
|
|
6
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
7
|
+
const common_1 = require("@apollo-annotation/common");
|
|
8
|
+
const indexedfasta_1 = require("@gmod/indexedfasta");
|
|
9
|
+
const generic_filehandle_1 = require("generic-filehandle");
|
|
10
|
+
class AddAssemblyFromExternalChange extends common_1.AssemblySpecificChange {
|
|
11
|
+
typeName = 'AddAssemblyFromExternalChange';
|
|
12
|
+
changes;
|
|
13
|
+
constructor(json, options) {
|
|
14
|
+
super(json, options);
|
|
15
|
+
this.changes = 'changes' in json ? json.changes : [json];
|
|
16
|
+
}
|
|
17
|
+
get notification() {
|
|
18
|
+
return `Assembly "${this.changes[0].assemblyName}" added successfully. To use it, please refresh the page.`;
|
|
19
|
+
}
|
|
20
|
+
toJSON() {
|
|
21
|
+
const { assembly, changes, typeName } = this;
|
|
22
|
+
if (changes.length === 1) {
|
|
23
|
+
const [{ assemblyName, externalLocation }] = changes;
|
|
24
|
+
return { typeName, assembly, assemblyName, externalLocation };
|
|
25
|
+
}
|
|
26
|
+
return { typeName, assembly, changes };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Applies the required change to database
|
|
30
|
+
* @param backend - parameters from backend
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
async executeOnServer(backend) {
|
|
34
|
+
const { assemblyModel, refSeqModel, user } = backend;
|
|
35
|
+
const { assembly, changes, logger } = this;
|
|
36
|
+
const { CHUNK_SIZE } = process.env;
|
|
37
|
+
const customChunkSize = CHUNK_SIZE && Number(CHUNK_SIZE);
|
|
38
|
+
for (const change of changes) {
|
|
39
|
+
const { assemblyName, externalLocation } = change;
|
|
40
|
+
const { fa, fai, gzi } = externalLocation;
|
|
41
|
+
const sequenceAdapter = gzi
|
|
42
|
+
? new indexedfasta_1.BgzipIndexedFasta({
|
|
43
|
+
fasta: new generic_filehandle_1.RemoteFile(fa, { fetch }),
|
|
44
|
+
fai: new generic_filehandle_1.RemoteFile(fai, { fetch }),
|
|
45
|
+
gzi: new generic_filehandle_1.RemoteFile(gzi, { fetch }),
|
|
46
|
+
})
|
|
47
|
+
: new indexedfasta_1.IndexedFasta({
|
|
48
|
+
fasta: new generic_filehandle_1.RemoteFile(fa, { fetch }),
|
|
49
|
+
fai: new generic_filehandle_1.RemoteFile(fai, { fetch }),
|
|
50
|
+
});
|
|
51
|
+
const allSequenceSizes = await sequenceAdapter.getSequenceSizes();
|
|
52
|
+
if (!allSequenceSizes) {
|
|
53
|
+
throw new Error('No data read from indexed fasta getSequenceSizes');
|
|
54
|
+
}
|
|
55
|
+
const assemblyDoc = await assemblyModel
|
|
56
|
+
.findOne({ name: assemblyName })
|
|
57
|
+
.exec();
|
|
58
|
+
if (assemblyDoc) {
|
|
59
|
+
throw new Error(`Assembly "${assemblyName}" already exists`);
|
|
60
|
+
}
|
|
61
|
+
const [newAssemblyDoc] = await assemblyModel.create([
|
|
62
|
+
{
|
|
63
|
+
_id: assembly,
|
|
64
|
+
name: assemblyName,
|
|
65
|
+
user,
|
|
66
|
+
status: -1,
|
|
67
|
+
externalLocation,
|
|
68
|
+
},
|
|
69
|
+
]);
|
|
70
|
+
logger.debug?.(`Added new assembly "${assemblyName}", docId "${newAssemblyDoc._id}"`);
|
|
71
|
+
for (const sequenceName in allSequenceSizes) {
|
|
72
|
+
const [newRefSeqDoc] = await refSeqModel.create([
|
|
73
|
+
{
|
|
74
|
+
name: sequenceName,
|
|
75
|
+
assembly: newAssemblyDoc._id,
|
|
76
|
+
length: allSequenceSizes[sequenceName],
|
|
77
|
+
...(customChunkSize ? { chunkSize: customChunkSize } : null),
|
|
78
|
+
user,
|
|
79
|
+
status: -1,
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
82
|
+
logger.debug?.(`Added new refSeq "${sequenceName}", docId "${newRefSeqDoc._id}"`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async executeOnLocalGFF3(_backend) {
|
|
87
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
88
|
+
}
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
90
|
+
async executeOnClient(_dataStore) { }
|
|
91
|
+
getInverse() {
|
|
92
|
+
const { assembly, changes, logger, typeName } = this;
|
|
93
|
+
return new AddAssemblyFromExternalChange({ typeName, changes, assembly }, { logger });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.AddAssemblyFromExternalChange = AddAssemblyFromExternalChange;
|
|
97
|
+
//# sourceMappingURL=AddAssemblyFromExternalChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddAssemblyFromExternalChange.js","sourceRoot":"","sources":["../../src/Changes/AddAssemblyFromExternalChange.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,gEAAgE;;;AAEhE,qDAAqD;AACrD,sDAOkC;AAClC,qDAAoE;AACpE,2DAA+C;AAyB/C,MAAa,6BAA8B,SAAQ,+BAAsB;IACvE,QAAQ,GAAG,+BAAwC,CAAA;IACnD,OAAO,CAAwC;IAE/C,YACE,IAA6C,EAC7C,OAAuB;QAEvB,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,IAAI,YAAY;QACd,OAAO,aAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,2DAA2D,CAAA;IAC7G,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAA;YACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAA;QAC/D,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QACpD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC1C,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;QAClC,MAAM,eAAe,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAExD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAA;YACjD,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAA;YACzC,MAAM,eAAe,GAAG,GAAG;gBACzB,CAAC,CAAC,IAAI,gCAAiB,CAAC;oBACpB,KAAK,EAAE,IAAI,+BAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;oBACpC,GAAG,EAAE,IAAI,+BAAU,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;oBACnC,GAAG,EAAE,IAAI,+BAAU,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;iBACpC,CAAC;gBACJ,CAAC,CAAC,IAAI,2BAAY,CAAC;oBACf,KAAK,EAAE,IAAI,+BAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;oBACpC,GAAG,EAAE,IAAI,+BAAU,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;iBACpC,CAAC,CAAA;YACN,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAA;YAEjE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACrE,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,aAAa;iBACpC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBAC/B,IAAI,EAAE,CAAA;YACT,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,kBAAkB,CAAC,CAAA;YAC9D,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;gBAClD;oBACE,GAAG,EAAE,QAAQ;oBACb,IAAI,EAAE,YAAY;oBAClB,IAAI;oBACJ,MAAM,EAAE,CAAC,CAAC;oBACV,gBAAgB;iBACjB;aACF,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,EAAE,CACZ,uBAAuB,YAAY,aAAa,cAAc,CAAC,GAAG,GAAG,CACtE,CAAA;YAED,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;gBAC5C,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;oBAC9C;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,cAAc,CAAC,GAAG;wBAC5B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC;wBACtC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC5D,IAAI;wBACJ,MAAM,EAAE,CAAC,CAAC;qBACX;iBACF,CAAC,CAAA;gBACF,MAAM,CAAC,KAAK,EAAE,CACZ,qBAAqB,YAAY,aAAa,YAAY,CAAC,GAAG,GAAG,CAClE,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAA4B;QACnD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,eAAe,CAAC,UAA2B,IAAG,CAAC;IAErD,UAAU;QACR,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QACpD,OAAO,IAAI,6BAA6B,CACtC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAC/B,EAAE,MAAM,EAAE,CACX,CAAA;IACH,CAAC;CACF;AA1GD,sEA0GC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChangeOptions, ClientDataStore, LocalGFF3DataStore, SerializedAssemblySpecificChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
import { FromFileBaseChange } from './FromFileBaseChange';
|
|
3
|
+
export interface SerializedAddAssemblyFromFileChangeBase extends SerializedAssemblySpecificChange {
|
|
4
|
+
typeName: 'AddAssemblyFromFileChange';
|
|
5
|
+
}
|
|
6
|
+
export interface AddAssemblyFromFileChangeDetails {
|
|
7
|
+
assemblyName: string;
|
|
8
|
+
fileIds: {
|
|
9
|
+
fa: string;
|
|
10
|
+
} | {
|
|
11
|
+
fa: string;
|
|
12
|
+
fai: string;
|
|
13
|
+
gzi: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface SerializedAddAssemblyFromFileChangeSingle extends SerializedAddAssemblyFromFileChangeBase, AddAssemblyFromFileChangeDetails {
|
|
17
|
+
}
|
|
18
|
+
export interface SerializedAddAssemblyFromFileChangeMultiple extends SerializedAddAssemblyFromFileChangeBase {
|
|
19
|
+
changes: AddAssemblyFromFileChangeDetails[];
|
|
20
|
+
}
|
|
21
|
+
export type SerializedAddAssemblyFromFileChange = SerializedAddAssemblyFromFileChangeSingle | SerializedAddAssemblyFromFileChangeMultiple;
|
|
22
|
+
export declare class AddAssemblyFromFileChange extends FromFileBaseChange {
|
|
23
|
+
typeName: "AddAssemblyFromFileChange";
|
|
24
|
+
changes: AddAssemblyFromFileChangeDetails[];
|
|
25
|
+
constructor(json: SerializedAddAssemblyFromFileChange, options?: ChangeOptions);
|
|
26
|
+
get notification(): string;
|
|
27
|
+
toJSON(): SerializedAddAssemblyFromFileChange;
|
|
28
|
+
/**
|
|
29
|
+
* Applies the required change to database
|
|
30
|
+
* @param backend - parameters from backend
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
34
|
+
executeOnServerIndexed(backend: ServerDataStore, assemblyName: string, fileIds: {
|
|
35
|
+
fa: string;
|
|
36
|
+
fai: string;
|
|
37
|
+
gzi: string;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
executeOnServerFasta(backend: ServerDataStore, assemblyName: string, fileId: string): Promise<void>;
|
|
40
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
41
|
+
executeOnClient(_dataStore: ClientDataStore): Promise<void>;
|
|
42
|
+
getInverse(): AddAssemblyFromFileChange;
|
|
43
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddAssemblyFromFileChange = void 0;
|
|
4
|
+
const indexedfasta_1 = require("@gmod/indexedfasta");
|
|
5
|
+
const FromFileBaseChange_1 = require("./FromFileBaseChange");
|
|
6
|
+
class AddAssemblyFromFileChange extends FromFileBaseChange_1.FromFileBaseChange {
|
|
7
|
+
typeName = 'AddAssemblyFromFileChange';
|
|
8
|
+
changes;
|
|
9
|
+
constructor(json, options) {
|
|
10
|
+
super(json, options);
|
|
11
|
+
this.changes = 'changes' in json ? json.changes : [json];
|
|
12
|
+
}
|
|
13
|
+
get notification() {
|
|
14
|
+
return `Assembly "${this.changes[0].assemblyName}" added successfully. To use it, please refresh the page.`;
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
const { assembly, changes, typeName } = this;
|
|
18
|
+
if (changes.length === 1) {
|
|
19
|
+
const [{ assemblyName, fileIds }] = changes;
|
|
20
|
+
return { typeName, assembly, assemblyName, fileIds };
|
|
21
|
+
}
|
|
22
|
+
return { typeName, assembly, changes };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Applies the required change to database
|
|
26
|
+
* @param backend - parameters from backend
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
async executeOnServer(backend) {
|
|
30
|
+
const { changes } = this;
|
|
31
|
+
for (const change of changes) {
|
|
32
|
+
const { assemblyName, fileIds } = change;
|
|
33
|
+
await ('gzi' in fileIds
|
|
34
|
+
? this.executeOnServerIndexed(backend, assemblyName, fileIds)
|
|
35
|
+
: this.executeOnServerFasta(backend, assemblyName, fileIds.fa));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async executeOnServerIndexed(backend, assemblyName, fileIds) {
|
|
39
|
+
const { CHUNK_SIZE } = process.env;
|
|
40
|
+
const customChunkSize = CHUNK_SIZE && Number(CHUNK_SIZE);
|
|
41
|
+
const { FILE_UPLOAD_FOLDER } = process.env;
|
|
42
|
+
if (!FILE_UPLOAD_FOLDER) {
|
|
43
|
+
throw new Error('No FILE_UPLOAD_FOLDER found in .env file');
|
|
44
|
+
}
|
|
45
|
+
const { fa, fai, gzi } = fileIds;
|
|
46
|
+
const { assemblyModel, fileModel, filesService, refSeqModel, user } = backend;
|
|
47
|
+
const faDoc = await fileModel.findById(fa);
|
|
48
|
+
const faChecksum = faDoc?.checksum;
|
|
49
|
+
if (!faChecksum) {
|
|
50
|
+
throw new Error(`No checksum for file document ${faDoc}`);
|
|
51
|
+
}
|
|
52
|
+
const faiDoc = await fileModel.findById(fai);
|
|
53
|
+
const faiChecksum = faiDoc?.checksum;
|
|
54
|
+
if (!faiChecksum) {
|
|
55
|
+
throw new Error(`No checksum for file document ${faiDoc}`);
|
|
56
|
+
}
|
|
57
|
+
const gziDoc = await fileModel.findById(gzi);
|
|
58
|
+
const gziChecksum = gziDoc?.checksum;
|
|
59
|
+
if (!gziChecksum) {
|
|
60
|
+
throw new Error(`No checksum for file document ${gziDoc}`);
|
|
61
|
+
}
|
|
62
|
+
const sequenceAdapter = new indexedfasta_1.BgzipIndexedFasta({
|
|
63
|
+
fasta: filesService.getFileHandle(faDoc),
|
|
64
|
+
fai: filesService.getFileHandle(faiDoc),
|
|
65
|
+
gzi: filesService.getFileHandle(gziDoc),
|
|
66
|
+
});
|
|
67
|
+
const allSequenceSizes = await sequenceAdapter.getSequenceSizes();
|
|
68
|
+
const assemblyDoc = await assemblyModel
|
|
69
|
+
.findOne({ name: assemblyName })
|
|
70
|
+
.exec();
|
|
71
|
+
if (assemblyDoc) {
|
|
72
|
+
throw new Error(`Assembly "${assemblyName}" already exists`);
|
|
73
|
+
}
|
|
74
|
+
const [newAssemblyDoc] = await assemblyModel.create([
|
|
75
|
+
{
|
|
76
|
+
_id: this.assembly,
|
|
77
|
+
name: assemblyName,
|
|
78
|
+
user,
|
|
79
|
+
status: -1,
|
|
80
|
+
fileIds,
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
this.logger.debug?.(`Added new assembly "${assemblyName}", docId "${newAssemblyDoc._id}"`);
|
|
84
|
+
for (const sequenceName in allSequenceSizes) {
|
|
85
|
+
const [newRefSeqDoc] = await refSeqModel.create([
|
|
86
|
+
{
|
|
87
|
+
name: sequenceName,
|
|
88
|
+
assembly: newAssemblyDoc._id,
|
|
89
|
+
length: allSequenceSizes[sequenceName],
|
|
90
|
+
...(customChunkSize ? { chunkSize: customChunkSize } : null),
|
|
91
|
+
user,
|
|
92
|
+
status: -1,
|
|
93
|
+
},
|
|
94
|
+
]);
|
|
95
|
+
this.logger.debug?.(`Added new refSeq "${sequenceName}", docId "${newRefSeqDoc._id}"`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async executeOnServerFasta(backend, assemblyName, fileId) {
|
|
99
|
+
const { assemblyModel, fileModel, user } = backend;
|
|
100
|
+
// Get file checksum
|
|
101
|
+
const fileDoc = await fileModel.findById(fileId).exec();
|
|
102
|
+
if (!fileDoc) {
|
|
103
|
+
throw new Error(`File "${fileId}" not found in Mongo`);
|
|
104
|
+
}
|
|
105
|
+
this.logger.debug?.(`FileId "${fileId}", checksum "${fileDoc.checksum}"`);
|
|
106
|
+
// Check and add new assembly
|
|
107
|
+
const assemblyDoc = await assemblyModel
|
|
108
|
+
.findOne({ name: assemblyName })
|
|
109
|
+
.exec();
|
|
110
|
+
if (assemblyDoc) {
|
|
111
|
+
throw new Error(`Assembly "${assemblyName}" already exists`);
|
|
112
|
+
}
|
|
113
|
+
// Add assembly
|
|
114
|
+
const [newAssemblyDoc] = await assemblyModel.create([
|
|
115
|
+
{
|
|
116
|
+
_id: this.assembly,
|
|
117
|
+
name: assemblyName,
|
|
118
|
+
user,
|
|
119
|
+
status: -1,
|
|
120
|
+
fileIds: { fa: fileId },
|
|
121
|
+
},
|
|
122
|
+
]);
|
|
123
|
+
this.logger.debug?.(`Added new assembly "${assemblyName}", docId "${newAssemblyDoc._id}"`);
|
|
124
|
+
this.logger.debug?.(`File type: "${fileDoc.type}", assemblyId: "${newAssemblyDoc._id}"`);
|
|
125
|
+
// Add refSeqs
|
|
126
|
+
// We cannot use Mongo 'session' / transaction here because Mongo has 16 MB limit for transaction
|
|
127
|
+
await this.addRefSeqIntoDb(fileDoc, newAssemblyDoc._id.toString(), backend);
|
|
128
|
+
}
|
|
129
|
+
async executeOnLocalGFF3(_backend) {
|
|
130
|
+
throw new Error('executeOnLocalGFF3 not implemented');
|
|
131
|
+
}
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
133
|
+
async executeOnClient(_dataStore) { }
|
|
134
|
+
getInverse() {
|
|
135
|
+
const { assembly, changes, logger, typeName } = this;
|
|
136
|
+
return new AddAssemblyFromFileChange({ typeName, changes, assembly }, { logger });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.AddAssemblyFromFileChange = AddAssemblyFromFileChange;
|
|
140
|
+
//# sourceMappingURL=AddAssemblyFromFileChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddAssemblyFromFileChange.js","sourceRoot":"","sources":["../../src/Changes/AddAssemblyFromFileChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
|
|
2
|
+
import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
|
|
3
|
+
import { DeleteFeatureChange } from './DeleteFeatureChange';
|
|
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
|
+
toJSON(): SerializedAddFeatureChange;
|
|
24
|
+
/**
|
|
25
|
+
* Applies the required change to database
|
|
26
|
+
* @param backend - parameters from backend
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
executeOnServer(backend: ServerDataStore): Promise<void>;
|
|
30
|
+
executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
|
|
31
|
+
executeOnClient(dataStore: ClientDataStore): Promise<void>;
|
|
32
|
+
getInverse(): DeleteFeatureChange;
|
|
33
|
+
}
|
|
34
|
+
export declare function isAddFeatureChange(change: unknown): change is AddFeatureChange;
|
|
35
|
+
export {};
|