@apollo-annotation/shared 0.1.18 → 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.
Files changed (157) hide show
  1. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts +33 -0
  2. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +83 -0
  3. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -0
  4. package/dist/Changes/AddAssemblyFromExternalChange.d.ts +34 -0
  5. package/dist/Changes/AddAssemblyFromExternalChange.js +97 -0
  6. package/dist/Changes/AddAssemblyFromExternalChange.js.map +1 -0
  7. package/dist/Changes/AddAssemblyFromFileChange.d.ts +43 -0
  8. package/dist/Changes/AddAssemblyFromFileChange.js +140 -0
  9. package/dist/Changes/AddAssemblyFromFileChange.js.map +1 -0
  10. package/dist/Changes/AddFeatureChange.d.ts +35 -0
  11. package/dist/Changes/AddFeatureChange.js +169 -0
  12. package/dist/Changes/AddFeatureChange.js.map +1 -0
  13. package/dist/Changes/AddFeaturesFromFileChange.d.ts +32 -0
  14. package/dist/Changes/AddFeaturesFromFileChange.js +76 -0
  15. package/dist/Changes/AddFeaturesFromFileChange.js.map +1 -0
  16. package/dist/Changes/AddRefSeqAliasesChange.d.ts +20 -0
  17. package/dist/Changes/AddRefSeqAliasesChange.js +61 -0
  18. package/dist/Changes/AddRefSeqAliasesChange.js.map +1 -0
  19. package/dist/Changes/DeleteAssemblyChange.d.ts +18 -0
  20. package/dist/Changes/DeleteAssemblyChange.js +72 -0
  21. package/dist/Changes/DeleteAssemblyChange.js.map +1 -0
  22. package/dist/Changes/DeleteFeatureChange.d.ts +42 -0
  23. package/dist/Changes/DeleteFeatureChange.js +143 -0
  24. package/dist/Changes/DeleteFeatureChange.js.map +1 -0
  25. package/dist/Changes/DeleteUserChange.d.ts +25 -0
  26. package/dist/Changes/DeleteUserChange.js +53 -0
  27. package/dist/Changes/DeleteUserChange.js.map +1 -0
  28. package/dist/Changes/FeatureAttributeChange.d.ts +31 -0
  29. package/dist/Changes/FeatureAttributeChange.js +112 -0
  30. package/dist/Changes/FeatureAttributeChange.js.map +1 -0
  31. package/dist/Changes/FromFileBaseChange.d.ts +9 -0
  32. package/dist/Changes/FromFileBaseChange.js +187 -0
  33. package/dist/Changes/FromFileBaseChange.js.map +1 -0
  34. package/dist/Changes/ImportJBrowseConfigChange.d.ts +43 -0
  35. package/dist/Changes/ImportJBrowseConfigChange.js +67 -0
  36. package/dist/Changes/ImportJBrowseConfigChange.js.map +1 -0
  37. package/dist/Changes/LocationEndChange.d.ts +32 -0
  38. package/dist/Changes/LocationEndChange.js +129 -0
  39. package/dist/Changes/LocationEndChange.js.map +1 -0
  40. package/dist/Changes/LocationStartChange.d.ts +32 -0
  41. package/dist/Changes/LocationStartChange.js +129 -0
  42. package/dist/Changes/LocationStartChange.js.map +1 -0
  43. package/dist/Changes/StrandChange.d.ts +31 -0
  44. package/dist/Changes/StrandChange.js +114 -0
  45. package/dist/Changes/StrandChange.js.map +1 -0
  46. package/dist/Changes/TypeChange.d.ts +31 -0
  47. package/dist/Changes/TypeChange.js +114 -0
  48. package/dist/Changes/TypeChange.js.map +1 -0
  49. package/dist/Changes/UserChange.d.ts +25 -0
  50. package/dist/Changes/UserChange.js +51 -0
  51. package/dist/Changes/UserChange.js.map +1 -0
  52. package/dist/Changes/index.d.ts +50 -0
  53. package/dist/Changes/index.js +55 -0
  54. package/dist/Changes/index.js.map +1 -0
  55. package/dist/Checks/CDSCheck.d.ts +8 -0
  56. package/dist/Checks/CDSCheck.js +197 -0
  57. package/dist/Checks/CDSCheck.js.map +1 -0
  58. package/dist/Checks/index.d.ts +1 -0
  59. package/dist/Checks/index.js +5 -0
  60. package/dist/Checks/index.js.map +1 -0
  61. package/dist/Common/index.d.ts +1 -0
  62. package/dist/Common/index.js +5 -0
  63. package/dist/Common/index.js.map +1 -0
  64. package/dist/Common/jwtPayload.d.ts +12 -0
  65. package/dist/Common/jwtPayload.js +16 -0
  66. package/dist/Common/jwtPayload.js.map +1 -0
  67. package/dist/GFF3/gff3ToAnnotationFeature.d.ts +3 -0
  68. package/dist/GFF3/gff3ToAnnotationFeature.js +211 -0
  69. package/dist/GFF3/gff3ToAnnotationFeature.js.map +1 -0
  70. package/dist/GFF3/gff3ToAnnotationFeature.test.d.ts +1 -0
  71. package/dist/GFF3/gff3ToAnnotationFeature.test.js +174 -0
  72. package/dist/GFF3/gff3ToAnnotationFeature.test.js.map +1 -0
  73. package/dist/GFF3/gffReservedKeys.d.ts +5 -0
  74. package/dist/GFF3/gffReservedKeys.js +34 -0
  75. package/dist/GFF3/gffReservedKeys.js.map +1 -0
  76. package/dist/GFF3/index.d.ts +2 -0
  77. package/dist/GFF3/index.js +6 -0
  78. package/dist/GFF3/index.js.map +1 -0
  79. package/dist/Messages.d.ts +28 -0
  80. package/dist/Messages.js +3 -0
  81. package/dist/Messages.js.map +1 -0
  82. package/dist/Operations/GetAssembliesOperation.d.ts +13 -0
  83. package/dist/Operations/GetAssembliesOperation.js +20 -0
  84. package/dist/Operations/GetAssembliesOperation.js.map +1 -0
  85. package/dist/Operations/GetFeaturesOperation.d.ts +26 -0
  86. package/dist/Operations/GetFeaturesOperation.js +42 -0
  87. package/dist/Operations/GetFeaturesOperation.js.map +1 -0
  88. package/dist/Operations/index.d.ts +8 -0
  89. package/dist/Operations/index.js +10 -0
  90. package/dist/Operations/index.js.map +1 -0
  91. package/dist/Validations/CoreValidation.d.ts +17 -0
  92. package/dist/Validations/CoreValidation.js +36 -0
  93. package/dist/Validations/CoreValidation.js.map +1 -0
  94. package/dist/Validations/ParentChildValidation.d.ts +17 -0
  95. package/dist/Validations/ParentChildValidation.js +61 -0
  96. package/dist/Validations/ParentChildValidation.js.map +1 -0
  97. package/dist/Validations/Validation.d.ts +27 -0
  98. package/dist/Validations/Validation.js +27 -0
  99. package/dist/Validations/Validation.js.map +1 -0
  100. package/dist/Validations/ValidationSet.d.ts +24 -0
  101. package/dist/Validations/ValidationSet.js +86 -0
  102. package/dist/Validations/ValidationSet.js.map +1 -0
  103. package/dist/Validations/index.d.ts +4 -0
  104. package/dist/Validations/index.js +8 -0
  105. package/dist/Validations/index.js.map +1 -0
  106. package/dist/Validations/soSequenceTypes.d.ts +2 -0
  107. package/dist/Validations/soSequenceTypes.js +1868 -0
  108. package/dist/Validations/soSequenceTypes.js.map +1 -0
  109. package/dist/index.d.ts +8 -0
  110. package/dist/index.js +12 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/tsconfig.tsbuildinfo +1 -0
  113. package/dist/util.d.ts +4 -0
  114. package/dist/util.js +102 -0
  115. package/dist/util.js.map +1 -0
  116. package/package.json +17 -8
  117. package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +13 -9
  118. package/src/Changes/AddAssemblyFromFileChange.ts +129 -43
  119. package/src/Changes/AddFeatureChange.ts +2 -3
  120. package/src/Changes/AddFeaturesFromFileChange.ts +8 -3
  121. package/src/Changes/AddRefSeqAliasesChange.ts +88 -0
  122. package/src/Changes/DeleteAssemblyChange.ts +1 -1
  123. package/src/Changes/DeleteFeatureChange.ts +1 -1
  124. package/src/Changes/FeatureAttributeChange.ts +1 -1
  125. package/src/Changes/FromFileBaseChange.ts +221 -0
  126. package/src/Changes/ImportJBrowseConfigChange.ts +116 -0
  127. package/src/Changes/LocationEndChange.ts +25 -18
  128. package/src/Changes/LocationStartChange.ts +25 -18
  129. package/src/Changes/TypeChange.ts +1 -1
  130. package/src/Changes/index.ts +6 -6
  131. package/src/Checks/CDSCheck.ts +125 -173
  132. package/src/Common/jwtPayload.ts +1 -1
  133. package/src/GFF3/gff3ToAnnotationFeature.test.ts +209 -0
  134. package/src/GFF3/gff3ToAnnotationFeature.ts +257 -0
  135. package/src/GFF3/gffReservedKeys.ts +61 -0
  136. package/src/GFF3/index.ts +2 -0
  137. package/src/Operations/GetFeaturesOperation.ts +2 -2
  138. package/src/Validations/ParentChildValidation.ts +5 -5
  139. package/src/index.ts +1 -0
  140. package/src/util.ts +16 -12
  141. package/test_data/braker.gff +13 -0
  142. package/test_data/example01.gff3 +26 -0
  143. package/test_data/example01.json +236 -0
  144. package/test_data/example02.json +225 -0
  145. package/test_data/example04.json +225 -0
  146. package/test_data/example05.gff3 +30 -0
  147. package/test_data/example06.gff3 +30 -0
  148. package/test_data/example07.gff3 +30 -0
  149. package/test_data/gene_mrna.gff3 +4 -0
  150. package/test_data/gene_representations.gff3 +1781 -0
  151. package/test_data/one_cds.gff3 +9 -0
  152. package/test_data/one_cds.json +67 -0
  153. package/test_data/two_cds.gff3 +9 -0
  154. package/test_data/two_cds.json +67 -0
  155. package/tsconfig.json +4 -4
  156. package/src/Changes/DiscontinuousLocationEndChange.ts +0 -182
  157. package/src/Changes/DiscontinuousLocationStartChange.ts +0 -182
@@ -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":"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"}
@@ -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 {};