@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,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":";AAAA,qDAAqD;;;AAWrD,6DAAyD;AAyBzD,MAAa,oCAAqC,SAAQ,uCAAkB;IAC1E,QAAQ,GAAG,sCAA+C,CAAA;IAC1D,OAAO,CAA+C;IAEtD,YACE,IAAoD,EACpD,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,OAAO,EAAE,CAAC,GAAG,OAAO,CAAA;YAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA;QACtD,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,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAChE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;YAEzB,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;YAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YAC7D,CAAC;YACD,oBAAoB;YACpB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;YACvD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,sBAAsB,CAAC,CAAA;YACxD,CAAC;YACD,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,MAAM,gBAAgB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YAEpE,6BAA6B;YAC7B,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,eAAe;YACf,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;gBAClD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE;aAChE,CAAC,CAAA;YACF,MAAM,CAAC,KAAK,EAAE,CACZ,uBAAuB,YAAY,aAAa,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CACpF,CAAA;YACD,MAAM,CAAC,KAAK,EAAE,CAAC,eAAe,OAAO,CAAC,IAAI,GAAG,CAAC,CAAA;YAE9C,cAAc;YACd,iGAAiG;YACjG,MAAM,IAAI,CAAC,eAAe,CACxB,OAAO,EACP,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAC7B,OAAO,CACR,CAAA;YAED,oBAAoB;YACpB,MAAM,CAAC,KAAK,EAAE,CACZ,sEAAsE,OAAO,CAAC,IAAI,GAAG,CACtF,CAAA;YACD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAC1C,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CACpC,CAAA;YACD,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,CAAgB,CAAA;gBACpC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBACxD,gCAAgC;gBAChC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YACnD,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,oCAAoC,CAC7C,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAC/B,EAAE,MAAM,EAAE,CACX,CAAA;IACH,CAAC;CACF;AAtGD,oFAsGC"}
@@ -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":";;;AASA,qDAAsD;AAEtD,6DAAyD;AAyBzD,MAAa,yBAA0B,SAAQ,uCAAkB;IAC/D,QAAQ,GAAG,2BAAoC,CAAA;IAC/C,OAAO,CAAoC;IAE3C,YACE,IAAyC,EACzC,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,OAAO,EAAE,CAAC,GAAG,OAAO,CAAA;YAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA;QACtD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;YACxC,MAAM,CAAC,KAAK,IAAI,OAAO;gBACrB,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;gBAC7D,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,OAAwB,EACxB,YAAoB,EACpB,OAAiD;QAEjD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;QAClC,MAAM,eAAe,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,CAAA;QAExD,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QAChC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,GACjE,OAAO,CAAA;QAET,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,KAAK,EAAE,QAAQ,CAAA;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,MAAM,EAAE,QAAQ,CAAA;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,MAAM,EAAE,QAAQ,CAAA;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,gCAAiB,CAAC;YAC5C,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC;YACxC,GAAG,EAAE,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;YACvC,GAAG,EAAE,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;SACxC,CAAC,CAAA;QACF,MAAM,gBAAgB,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAA;QAEjE,MAAM,WAAW,GAAG,MAAM,aAAa;aACpC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aAC/B,IAAI,EAAE,CAAA;QACT,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,kBAAkB,CAAC,CAAA;QAC9D,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;YAClD;gBACE,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI;gBACJ,MAAM,EAAE,CAAC,CAAC;gBACV,OAAO;aACR;SACF,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CACjB,uBAAuB,YAAY,aAAa,cAAc,CAAC,GAAG,GAAG,CACtE,CAAA;QAED,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;YAC5C,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;gBAC9C;oBACE,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,cAAc,CAAC,GAAG;oBAC5B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC;oBACtC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5D,IAAI;oBACJ,MAAM,EAAE,CAAC,CAAC;iBACX;aACF,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CACjB,qBAAqB,YAAY,aAAa,YAAY,CAAC,GAAG,GAAG,CAClE,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,OAAwB,EACxB,YAAoB,EACpB,MAAc;QAEd,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAClD,oBAAoB;QACpB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,sBAAsB,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,MAAM,gBAAgB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QAEzE,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,aAAa;aACpC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aAC/B,IAAI,EAAE,CAAA;QACT,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,kBAAkB,CAAC,CAAA;QAC9D,CAAC;QACD,eAAe;QACf,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;YAClD;gBACE,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI;gBACJ,MAAM,EAAE,CAAC,CAAC;gBACV,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;aACxB;SACF,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CACjB,uBAAuB,YAAY,aAAa,cAAc,CAAC,GAAG,GAAG,CACtE,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CACjB,eAAe,OAAO,CAAC,IAAI,mBAAmB,cAAc,CAAC,GAAG,GAAG,CACpE,CAAA;QAED,cAAc;QACd,iGAAiG;QACjG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IAC7E,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,yBAAyB,CAClC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAC/B,EAAE,MAAM,EAAE,CACX,CAAA;IACH,CAAC;CACF;AA9KD,8DA8KC"}
@@ -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 {};