@apollo-annotation/shared 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.d.ts +33 -0
  2. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +86 -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 +100 -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 +146 -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 +8 -5
  117. package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +10 -6
  118. package/src/Changes/AddAssemblyFromExternalChange.ts +4 -1
  119. package/src/Changes/AddAssemblyFromFileChange.ts +138 -41
  120. package/src/Changes/ImportJBrowseConfigChange.ts +2 -1
  121. package/src/Checks/CDSCheck.ts +202 -252
  122. package/src/GFF3/gff3ToAnnotationFeature.test.ts +165 -5
  123. package/src/GFF3/gff3ToAnnotationFeature.ts +16 -16
  124. package/src/util.ts +1 -0
  125. package/test_data/braker.gff +13 -0
  126. package/test_data/example01.gff3 +26 -0
  127. package/test_data/example01.json +236 -0
  128. package/test_data/example02.json +225 -0
  129. package/test_data/example04.json +225 -0
  130. package/test_data/example05.gff3 +30 -0
  131. package/test_data/example06.gff3 +30 -0
  132. package/test_data/example07.gff3 +30 -0
  133. package/test_data/gene_mrna.gff3 +4 -0
  134. package/test_data/gene_representations.gff3 +1781 -0
  135. package/test_data/one_cds.gff3 +9 -0
  136. package/test_data/one_cds.json +67 -0
  137. package/test_data/two_cds.gff3 +9 -0
  138. package/test_data/two_cds.json +67 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImportJBrowseConfigChange = void 0;
4
+ exports.filterJBrowseConfig = filterJBrowseConfig;
5
+ /* eslint-disable @typescript-eslint/require-await */
6
+ const common_1 = require("@apollo-annotation/common");
7
+ function filterJBrowseConfig(config) {
8
+ const { __v, _id, assemblies, internetAccounts, plugins, tracks, ...rest } = config;
9
+ const filteredAssemblies = assemblies?.filter((a) => a.sequence.adapter.type !== 'ApolloSequenceAdapter');
10
+ const filteredTracks = tracks?.filter((t) => t.type !== 'ApolloTrack');
11
+ const filteredPlugins = plugins?.filter((p) => p.name !== 'Apollo');
12
+ const filteredInternetAccounts = internetAccounts?.filter((i) => i.type !== 'ApolloInternetAccount');
13
+ const filteredConfig = rest;
14
+ if (filteredAssemblies) {
15
+ filteredConfig.assemblies = filteredAssemblies;
16
+ }
17
+ if (filteredTracks) {
18
+ filteredConfig.tracks = filteredTracks;
19
+ }
20
+ if (filteredPlugins) {
21
+ filteredConfig.plugins = filteredPlugins;
22
+ }
23
+ if (filteredInternetAccounts) {
24
+ filteredConfig.internetAccounts = filteredInternetAccounts;
25
+ }
26
+ return filteredConfig;
27
+ }
28
+ class ImportJBrowseConfigChange extends common_1.Change {
29
+ typeName = 'ImportJBrowseConfigChange';
30
+ oldJBrowseConfig;
31
+ newJBrowseConfig;
32
+ constructor(json, options) {
33
+ super(json, options);
34
+ this.oldJBrowseConfig = json.oldJBrowseConfig;
35
+ this.newJBrowseConfig = json.newJBrowseConfig;
36
+ }
37
+ toJSON() {
38
+ const { newJBrowseConfig, oldJBrowseConfig, typeName } = this;
39
+ return { typeName, oldJBrowseConfig, newJBrowseConfig };
40
+ }
41
+ async executeOnServer(backend) {
42
+ const { jbrowseConfigModel } = backend;
43
+ const { logger, newJBrowseConfig } = this;
44
+ await jbrowseConfigModel.deleteMany();
45
+ if (!newJBrowseConfig) {
46
+ return;
47
+ }
48
+ const filteredConfig = filterJBrowseConfig(newJBrowseConfig);
49
+ await jbrowseConfigModel.create(filteredConfig);
50
+ logger.debug?.('Stored new JBrowse Config');
51
+ }
52
+ async executeOnLocalGFF3(_backend) {
53
+ throw new Error('executeOnLocalGFF3 not implemented');
54
+ }
55
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
56
+ async executeOnClient(_dataStore) { }
57
+ getInverse() {
58
+ const { logger, newJBrowseConfig, oldJBrowseConfig } = this;
59
+ return new ImportJBrowseConfigChange({
60
+ typeName: 'ImportJBrowseConfigChange',
61
+ oldJBrowseConfig: newJBrowseConfig,
62
+ newJBrowseConfig: oldJBrowseConfig,
63
+ }, { logger });
64
+ }
65
+ }
66
+ exports.ImportJBrowseConfigChange = ImportJBrowseConfigChange;
67
+ //# sourceMappingURL=ImportJBrowseConfigChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportJBrowseConfigChange.js","sourceRoot":"","sources":["../../src/Changes/ImportJBrowseConfigChange.ts"],"names":[],"mappings":";;;AAwCA,kDAyBC;AAjED,qDAAqD;AACrD,sDAMkC;AAiClC,SAAgB,mBAAmB,CAAC,MAAqB;IACvD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GACxE,MAAM,CAAA;IACR,MAAM,kBAAkB,GAAG,UAAU,EAAE,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAC3D,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;IACtE,MAAM,eAAe,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;IACnE,MAAM,wBAAwB,GAAG,gBAAgB,EAAE,MAAM,CACvD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAC1C,CAAA;IACD,MAAM,cAAc,GAAG,IAAqB,CAAA;IAC5C,IAAI,kBAAkB,EAAE,CAAC;QACvB,cAAc,CAAC,UAAU,GAAG,kBAAkB,CAAA;IAChD,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,MAAM,GAAG,cAAc,CAAA;IACxC,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,cAAc,CAAC,OAAO,GAAG,eAAe,CAAA;IAC1C,CAAC;IACD,IAAI,wBAAwB,EAAE,CAAC;QAC7B,cAAc,CAAC,gBAAgB,GAAG,wBAAwB,CAAA;IAC5D,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAa,yBAA0B,SAAQ,eAAM;IACnD,QAAQ,GAAG,2BAAoC,CAAA;IAC/C,gBAAgB,CAAgB;IAChC,gBAAgB,CAAgB;IAEhC,YACE,IAAyC,EACzC,OAAuB;QAEvB,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAC/C,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAC7D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAA;QACtC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;QACzC,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAA;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAM;QACR,CAAC;QACD,MAAM,cAAc,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAC5D,MAAM,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAC/C,MAAM,CAAC,KAAK,EAAE,CAAC,2BAA2B,CAAC,CAAA;IAC7C,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,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;QAC3D,OAAO,IAAI,yBAAyB,CAClC;YACE,QAAQ,EAAE,2BAA2B;YACrC,gBAAgB,EAAE,gBAAgB;YAClC,gBAAgB,EAAE,gBAAgB;SACnC,EACD,EAAE,MAAM,EAAE,CACX,CAAA;IACH,CAAC;CACF;AAjDD,8DAiDC"}
@@ -0,0 +1,32 @@
1
+ import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
2
+ interface SerializedLocationEndChangeBase extends SerializedFeatureChange {
3
+ typeName: 'LocationEndChange';
4
+ }
5
+ export interface LocationEndChangeDetails {
6
+ featureId: string;
7
+ oldEnd: number;
8
+ newEnd: number;
9
+ }
10
+ interface SerializedLocationEndChangeSingle extends SerializedLocationEndChangeBase, LocationEndChangeDetails {
11
+ }
12
+ interface SerializedLocationEndChangeMultiple extends SerializedLocationEndChangeBase {
13
+ changes: LocationEndChangeDetails[];
14
+ }
15
+ export type SerializedLocationEndChange = SerializedLocationEndChangeSingle | SerializedLocationEndChangeMultiple;
16
+ export declare class LocationEndChange extends FeatureChange {
17
+ typeName: "LocationEndChange";
18
+ changes: LocationEndChangeDetails[];
19
+ constructor(json: SerializedLocationEndChange, options?: ChangeOptions);
20
+ toJSON(): SerializedLocationEndChange;
21
+ /**
22
+ * Applies the required change to database
23
+ * @param backend - parameters from backend
24
+ * @returns
25
+ */
26
+ executeOnServer(backend: ServerDataStore): Promise<void>;
27
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
28
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
29
+ getInverse(): LocationEndChange;
30
+ }
31
+ export declare function isLocationEndChange(change: unknown): change is LocationEndChange;
32
+ export {};
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocationEndChange = void 0;
4
+ exports.isLocationEndChange = isLocationEndChange;
5
+ /* eslint-disable @typescript-eslint/restrict-template-expressions */
6
+ /* eslint-disable @typescript-eslint/require-await */
7
+ /* eslint-disable @typescript-eslint/no-unnecessary-condition */
8
+ const common_1 = require("@apollo-annotation/common");
9
+ class LocationEndChange extends common_1.FeatureChange {
10
+ typeName = 'LocationEndChange';
11
+ changes;
12
+ constructor(json, options) {
13
+ super(json, options);
14
+ this.changes = 'changes' in json ? json.changes : [json];
15
+ }
16
+ toJSON() {
17
+ const { assembly, changedIds, changes, typeName } = this;
18
+ if (changes.length === 1) {
19
+ const [{ featureId, newEnd, oldEnd }] = changes;
20
+ return { typeName, changedIds, assembly, featureId, oldEnd, newEnd };
21
+ }
22
+ return { typeName, changedIds, 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 { featureModel, session } = backend;
31
+ const { changes, logger } = this;
32
+ const featuresForChanges = [];
33
+ // Let's first check that all features are found and those old values match with expected ones. We do this just to be sure that all changes can be done.
34
+ for (const change of changes) {
35
+ const { featureId, oldEnd } = change;
36
+ // Search correct feature
37
+ const topLevelFeature = await featureModel
38
+ .findOne({ allIds: featureId })
39
+ .session(session)
40
+ .exec();
41
+ if (!topLevelFeature) {
42
+ const errMsg = `*** ERROR: The following featureId was not found in database ='${featureId}'`;
43
+ logger.error(errMsg);
44
+ throw new Error(errMsg);
45
+ // throw new NotFoundException(errMsg) -- This is causing runtime error because Exception comes from @nestjs/common!!!
46
+ }
47
+ logger.debug?.(`*** TOP level feature found: ${JSON.stringify(topLevelFeature)}`);
48
+ const foundFeature = this.getFeatureFromId(topLevelFeature, featureId);
49
+ if (!foundFeature) {
50
+ const errMsg = 'ERROR when searching feature by featureId';
51
+ logger.error(errMsg);
52
+ throw new Error(errMsg);
53
+ }
54
+ logger.debug?.(`*** Found feature: ${JSON.stringify(foundFeature)}`);
55
+ if (foundFeature.max === oldEnd) {
56
+ featuresForChanges.push({ feature: foundFeature, topLevelFeature });
57
+ }
58
+ else {
59
+ if (foundFeature.children) {
60
+ for (const [, childFeature] of foundFeature.children) {
61
+ if (childFeature.max === oldEnd) {
62
+ logger.debug?.(`*************** UPDATE CHILD FEATURE ID= ${featureId}, CHILD: ${JSON.stringify(childFeature)}`);
63
+ featuresForChanges.push({
64
+ feature: childFeature,
65
+ topLevelFeature,
66
+ });
67
+ break;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ // Let's update objects.
74
+ for (const [idx, change] of changes.entries()) {
75
+ const { newEnd } = change;
76
+ const { feature, topLevelFeature } = featuresForChanges[idx];
77
+ feature.max = newEnd;
78
+ if (topLevelFeature._id.equals(feature._id)) {
79
+ topLevelFeature.markModified('end'); // Mark as modified. Without this save() -method is not updating data in database
80
+ }
81
+ else {
82
+ topLevelFeature.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
83
+ }
84
+ try {
85
+ await topLevelFeature.save();
86
+ }
87
+ catch (error) {
88
+ logger.debug?.(`*** FAILED: ${error}`);
89
+ throw error;
90
+ }
91
+ logger.debug?.(`*** Object updated in Mongo. New object: ${JSON.stringify(topLevelFeature)}`);
92
+ }
93
+ }
94
+ async executeOnLocalGFF3(_backend) {
95
+ throw new Error('executeOnLocalGFF3 not implemented');
96
+ }
97
+ async executeOnClient(dataStore) {
98
+ if (!dataStore) {
99
+ throw new Error('No data store');
100
+ }
101
+ for (const [idx, changedId] of this.changedIds.entries()) {
102
+ const feature = dataStore.getFeature(changedId);
103
+ if (!feature) {
104
+ throw new Error(`Could not find feature with identifier "${changedId}"`);
105
+ }
106
+ feature.setMax(this.changes[idx].newEnd);
107
+ }
108
+ }
109
+ getInverse() {
110
+ const { assembly, changedIds, changes, logger, typeName } = this;
111
+ const inverseChangedIds = [...changedIds].reverse();
112
+ const inverseChanges = [...changes].reverse().map((endChange) => ({
113
+ featureId: endChange.featureId,
114
+ oldEnd: endChange.newEnd,
115
+ newEnd: endChange.oldEnd,
116
+ }));
117
+ return new LocationEndChange({
118
+ changedIds: inverseChangedIds,
119
+ typeName,
120
+ changes: inverseChanges,
121
+ assembly,
122
+ }, { logger });
123
+ }
124
+ }
125
+ exports.LocationEndChange = LocationEndChange;
126
+ function isLocationEndChange(change) {
127
+ return change.typeName === 'LocationEndChange';
128
+ }
129
+ //# sourceMappingURL=LocationEndChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationEndChange.js","sourceRoot":"","sources":["../../src/Changes/LocationEndChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
2
+ interface SerializedLocationStartChangeBase extends SerializedFeatureChange {
3
+ typeName: 'LocationStartChange';
4
+ }
5
+ interface LocationStartChangeDetails {
6
+ featureId: string;
7
+ oldStart: number;
8
+ newStart: number;
9
+ }
10
+ interface SerializedLocationStartChangeSingle extends SerializedLocationStartChangeBase, LocationStartChangeDetails {
11
+ }
12
+ interface SerializedLocationStartChangeMultiple extends SerializedLocationStartChangeBase {
13
+ changes: LocationStartChangeDetails[];
14
+ }
15
+ export type SerializedLocationStartChange = SerializedLocationStartChangeSingle | SerializedLocationStartChangeMultiple;
16
+ export declare class LocationStartChange extends FeatureChange {
17
+ typeName: "LocationStartChange";
18
+ changes: LocationStartChangeDetails[];
19
+ constructor(json: SerializedLocationStartChange, options?: ChangeOptions);
20
+ toJSON(): SerializedLocationStartChange;
21
+ /**
22
+ * Applies the required change to database
23
+ * @param backend - parameters from backend
24
+ * @returns
25
+ */
26
+ executeOnServer(backend: ServerDataStore): Promise<void>;
27
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
28
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
29
+ getInverse(): LocationStartChange;
30
+ }
31
+ export declare function isLocationStartChange(change: unknown): change is LocationStartChange;
32
+ export {};
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocationStartChange = void 0;
4
+ exports.isLocationStartChange = isLocationStartChange;
5
+ /* eslint-disable @typescript-eslint/restrict-template-expressions */
6
+ /* eslint-disable @typescript-eslint/require-await */
7
+ /* eslint-disable @typescript-eslint/no-unnecessary-condition */
8
+ const common_1 = require("@apollo-annotation/common");
9
+ class LocationStartChange extends common_1.FeatureChange {
10
+ typeName = 'LocationStartChange';
11
+ changes;
12
+ constructor(json, options) {
13
+ super(json, options);
14
+ this.changes = 'changes' in json ? json.changes : [json];
15
+ }
16
+ toJSON() {
17
+ const { assembly, changedIds, changes, typeName } = this;
18
+ if (changes.length === 1) {
19
+ const [{ featureId, newStart, oldStart }] = changes;
20
+ return { typeName, changedIds, assembly, featureId, oldStart, newStart };
21
+ }
22
+ return { typeName, changedIds, 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 { featureModel, session } = backend;
31
+ const { changes, logger } = this;
32
+ const featuresForChanges = [];
33
+ // Let's first check that all features are found and those old values match with expected ones. We do this just to be sure that all changes can be done.
34
+ for (const change of changes) {
35
+ const { featureId, oldStart } = change;
36
+ // Search correct feature
37
+ const topLevelFeature = await featureModel
38
+ .findOne({ allIds: featureId })
39
+ .session(session)
40
+ .exec();
41
+ if (!topLevelFeature) {
42
+ const errMsg = `*** ERROR: The following featureId was not found in database ='${featureId}'`;
43
+ logger.error(errMsg);
44
+ throw new Error(errMsg);
45
+ // throw new NotFoundException(errMsg) -- This is causing runtime error because Exception comes from @nestjs/common!!!
46
+ }
47
+ logger.debug?.(`*** TOP level feature found: ${JSON.stringify(topLevelFeature)}`);
48
+ const foundFeature = this.getFeatureFromId(topLevelFeature, featureId);
49
+ if (!foundFeature) {
50
+ const errMsg = 'ERROR when searching feature by featureId';
51
+ logger.error(errMsg);
52
+ throw new Error(errMsg);
53
+ }
54
+ logger.debug?.(`*** Found feature: ${JSON.stringify(foundFeature)}`);
55
+ if (foundFeature.min === oldStart) {
56
+ featuresForChanges.push({ feature: foundFeature, topLevelFeature });
57
+ }
58
+ else {
59
+ if (foundFeature.children) {
60
+ for (const [, childFeature] of foundFeature.children) {
61
+ if (childFeature.min === oldStart) {
62
+ logger.debug?.(`*** UPDATE CHILD FEATURE ID= ${featureId}, CHILD: ${JSON.stringify(childFeature)}`);
63
+ featuresForChanges.push({
64
+ feature: childFeature,
65
+ topLevelFeature,
66
+ });
67
+ break;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ // Let's update objects.
74
+ for (const [idx, change] of changes.entries()) {
75
+ const { newStart } = change;
76
+ const { feature, topLevelFeature } = featuresForChanges[idx];
77
+ feature.min = newStart;
78
+ if (topLevelFeature._id.equals(feature._id)) {
79
+ topLevelFeature.markModified('start'); // Mark as modified. Without this save() -method is not updating data in database
80
+ }
81
+ else {
82
+ topLevelFeature.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
83
+ }
84
+ try {
85
+ await topLevelFeature.save();
86
+ }
87
+ catch (error) {
88
+ logger.debug?.(`*** FAILED: ${error}`);
89
+ throw error;
90
+ }
91
+ logger.debug?.(`*** Object updated in Mongo. New object: ${JSON.stringify(topLevelFeature)}`);
92
+ }
93
+ }
94
+ async executeOnLocalGFF3(_backend) {
95
+ throw new Error('executeOnLocalGFF3 not implemented');
96
+ }
97
+ async executeOnClient(dataStore) {
98
+ if (!dataStore) {
99
+ throw new Error('No data store');
100
+ }
101
+ for (const [idx, changedId] of this.changedIds.entries()) {
102
+ const feature = dataStore.getFeature(changedId);
103
+ if (!feature) {
104
+ throw new Error(`Could not find feature with identifier "${changedId}"`);
105
+ }
106
+ feature.setMin(this.changes[idx].newStart);
107
+ }
108
+ }
109
+ getInverse() {
110
+ const { assembly, changedIds, changes, logger, typeName } = this;
111
+ const inverseChangedIds = [...changedIds].reverse();
112
+ const inverseChanges = [...changes].reverse().map((startChange) => ({
113
+ featureId: startChange.featureId,
114
+ oldStart: startChange.newStart,
115
+ newStart: startChange.oldStart,
116
+ }));
117
+ return new LocationStartChange({
118
+ changedIds: inverseChangedIds,
119
+ typeName,
120
+ changes: inverseChanges,
121
+ assembly,
122
+ }, { logger });
123
+ }
124
+ }
125
+ exports.LocationStartChange = LocationStartChange;
126
+ function isLocationStartChange(change) {
127
+ return change.typeName === 'LocationStartChange';
128
+ }
129
+ //# sourceMappingURL=LocationStartChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationStartChange.js","sourceRoot":"","sources":["../../src/Changes/LocationStartChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
2
+ interface SerializedStrandChangeBase extends SerializedFeatureChange {
3
+ typeName: 'StrandChange';
4
+ }
5
+ interface StrandChangeDetails {
6
+ featureId: string;
7
+ oldStrand: -1 | 1 | undefined;
8
+ newStrand: -1 | 1 | undefined;
9
+ }
10
+ interface SerializedStrandChangeSingle extends SerializedStrandChangeBase, StrandChangeDetails {
11
+ }
12
+ interface SerializedStrandChangeMultiple extends SerializedStrandChangeBase {
13
+ changes: StrandChangeDetails[];
14
+ }
15
+ type SerializedStrandChange = SerializedStrandChangeSingle | SerializedStrandChangeMultiple;
16
+ export declare class StrandChange extends FeatureChange {
17
+ typeName: "StrandChange";
18
+ changes: StrandChangeDetails[];
19
+ constructor(json: SerializedStrandChange, options?: ChangeOptions);
20
+ toJSON(): SerializedStrandChange;
21
+ /**
22
+ * Applies the required change to database
23
+ * @param backend - parameters from backend
24
+ * @returns
25
+ */
26
+ executeOnServer(backend: ServerDataStore): Promise<void>;
27
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
28
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
29
+ getInverse(): StrandChange;
30
+ }
31
+ export {};
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StrandChange = void 0;
4
+ /* eslint-disable @typescript-eslint/restrict-template-expressions */
5
+ /* eslint-disable @typescript-eslint/require-await */
6
+ /* eslint-disable @typescript-eslint/no-unnecessary-condition */
7
+ const common_1 = require("@apollo-annotation/common");
8
+ class StrandChange extends common_1.FeatureChange {
9
+ typeName = 'StrandChange';
10
+ changes;
11
+ constructor(json, options) {
12
+ super(json, options);
13
+ this.changes = 'changes' in json ? json.changes : [json];
14
+ }
15
+ toJSON() {
16
+ const { assembly, changedIds, changes, typeName } = this;
17
+ if (changes.length === 1) {
18
+ const [{ featureId, newStrand, oldStrand }] = changes;
19
+ return { typeName, changedIds, assembly, featureId, oldStrand, newStrand };
20
+ }
21
+ return { typeName, changedIds, assembly, changes };
22
+ }
23
+ /**
24
+ * Applies the required change to database
25
+ * @param backend - parameters from backend
26
+ * @returns
27
+ */
28
+ async executeOnServer(backend) {
29
+ const { featureModel, session } = backend;
30
+ const { changes, logger } = this;
31
+ const featuresForChanges = [];
32
+ // Let's first check that all features are found and those old values match with expected ones. We do this just to be sure that all changes can be done.
33
+ for (const entry of changes) {
34
+ const { featureId, oldStrand } = entry;
35
+ // Search correct feature
36
+ const topLevelFeature = await featureModel
37
+ .findOne({ allIds: featureId })
38
+ .session(session)
39
+ .exec();
40
+ if (!topLevelFeature) {
41
+ const errMsg = `*** ERROR: The following featureId was not found in database ='${featureId}'`;
42
+ logger.error(errMsg);
43
+ throw new Error(errMsg);
44
+ // throw new NotFoundException(errMsg) -- This is causing runtime error because Exception comes from @nestjs/common!!!
45
+ }
46
+ logger.debug?.(`*** Feature found: ${JSON.stringify(topLevelFeature)}`);
47
+ const foundFeature = this.getFeatureFromId(topLevelFeature, featureId);
48
+ if (!foundFeature) {
49
+ const errMsg = 'ERROR when searching feature by featureId';
50
+ logger.error(errMsg);
51
+ throw new Error(errMsg);
52
+ }
53
+ logger.debug?.(`*** Found feature: ${JSON.stringify(foundFeature)}`);
54
+ if (foundFeature.strand !== oldStrand) {
55
+ const errMsg = `*** ERROR: Feature's current strand "${topLevelFeature.strand}" doesn't match with expected value "${oldStrand}"`;
56
+ logger.error(errMsg);
57
+ throw new Error(errMsg);
58
+ }
59
+ featuresForChanges.push({ feature: foundFeature, topLevelFeature });
60
+ }
61
+ // Let's update objects.
62
+ for (const [idx, change] of changes.entries()) {
63
+ const { newStrand } = change;
64
+ const { feature, topLevelFeature } = featuresForChanges[idx];
65
+ feature.strand = newStrand;
66
+ if (topLevelFeature._id.equals(feature._id)) {
67
+ topLevelFeature.markModified('strand'); // Mark as modified. Without this save() -method is not updating data in database
68
+ }
69
+ else {
70
+ topLevelFeature.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
71
+ }
72
+ try {
73
+ await topLevelFeature.save();
74
+ }
75
+ catch (error) {
76
+ logger.debug?.(`*** FAILED: ${error}`);
77
+ throw error;
78
+ }
79
+ logger.debug?.(`*** Object updated in Mongo. New object: ${JSON.stringify(topLevelFeature)}`);
80
+ }
81
+ }
82
+ async executeOnLocalGFF3(_backend) {
83
+ throw new Error('executeOnLocalGFF3 not implemented');
84
+ }
85
+ async executeOnClient(dataStore) {
86
+ if (!dataStore) {
87
+ throw new Error('No data store');
88
+ }
89
+ for (const [idx, changedId] of this.changedIds.entries()) {
90
+ const feature = dataStore.getFeature(changedId);
91
+ if (!feature) {
92
+ throw new Error(`Could not find feature with identifier "${changedId}"`);
93
+ }
94
+ feature.setStrand(this.changes[idx].newStrand);
95
+ }
96
+ }
97
+ getInverse() {
98
+ const { assembly, changedIds, changes, logger, typeName } = this;
99
+ const inverseChangedIds = [...changedIds].reverse();
100
+ const inverseChanges = [...changes].reverse().map((endChange) => ({
101
+ featureId: endChange.featureId,
102
+ oldStrand: endChange.newStrand,
103
+ newStrand: endChange.oldStrand,
104
+ }));
105
+ return new StrandChange({
106
+ changedIds: inverseChangedIds,
107
+ typeName,
108
+ changes: inverseChanges,
109
+ assembly,
110
+ }, { logger });
111
+ }
112
+ }
113
+ exports.StrandChange = StrandChange;
114
+ //# sourceMappingURL=StrandChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrandChange.js","sourceRoot":"","sources":["../../src/Changes/StrandChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { ChangeOptions, ClientDataStore, FeatureChange, LocalGFF3DataStore, SerializedFeatureChange, ServerDataStore } from '@apollo-annotation/common';
2
+ interface SerializedTypeChangeBase extends SerializedFeatureChange {
3
+ typeName: 'TypeChange';
4
+ }
5
+ interface TypeChangeDetails {
6
+ featureId: string;
7
+ oldType: string;
8
+ newType: string;
9
+ }
10
+ interface SerializedTypeChangeSingle extends SerializedTypeChangeBase, TypeChangeDetails {
11
+ }
12
+ interface SerializedTypeChangeMultiple extends SerializedTypeChangeBase {
13
+ changes: TypeChangeDetails[];
14
+ }
15
+ export type SerializedTypeChange = SerializedTypeChangeSingle | SerializedTypeChangeMultiple;
16
+ export declare class TypeChange extends FeatureChange {
17
+ typeName: "TypeChange";
18
+ changes: TypeChangeDetails[];
19
+ constructor(json: SerializedTypeChange, options?: ChangeOptions);
20
+ toJSON(): SerializedTypeChange;
21
+ /**
22
+ * Applies the required change to database
23
+ * @param backend - parameters from backend
24
+ * @returns
25
+ */
26
+ executeOnServer(backend: ServerDataStore): Promise<void>;
27
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
28
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
29
+ getInverse(): TypeChange;
30
+ }
31
+ export {};