@apollo-annotation/shared 0.3.6 → 0.3.8

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 (94) hide show
  1. package/dist/Changes/AddAssemblyAliasesChange.d.ts +16 -0
  2. package/dist/Changes/AddAssemblyAliasesChange.js +50 -0
  3. package/dist/Changes/AddAssemblyAliasesChange.js.map +1 -0
  4. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js +1 -1
  5. package/dist/Changes/AddAssemblyAndFeaturesFromFileChange.js.map +1 -1
  6. package/dist/Changes/AddAssemblyFromFileChange.js +1 -1
  7. package/dist/Changes/AddAssemblyFromFileChange.js.map +1 -1
  8. package/dist/Changes/AddFeatureChange.d.ts +1 -0
  9. package/dist/Changes/AddFeatureChange.js +5 -25
  10. package/dist/Changes/AddFeatureChange.js.map +1 -1
  11. package/dist/Changes/AddRefSeqAliasesChange.js +2 -4
  12. package/dist/Changes/AddRefSeqAliasesChange.js.map +1 -1
  13. package/dist/Changes/DeleteFeatureChange.d.ts +9 -8
  14. package/dist/Changes/DeleteFeatureChange.js +37 -32
  15. package/dist/Changes/DeleteFeatureChange.js.map +1 -1
  16. package/dist/Changes/FeatureAttributeChange.d.ts +2 -1
  17. package/dist/Changes/FeatureAttributeChange.js +14 -6
  18. package/dist/Changes/FeatureAttributeChange.js.map +1 -1
  19. package/dist/Changes/ImportJBrowseConfigChange.d.ts +3 -0
  20. package/dist/Changes/ImportJBrowseConfigChange.js +17 -13
  21. package/dist/Changes/ImportJBrowseConfigChange.js.map +1 -1
  22. package/dist/Changes/LocationEndChange.js +40 -37
  23. package/dist/Changes/LocationEndChange.js.map +1 -1
  24. package/dist/Changes/LocationStartChange.js +40 -37
  25. package/dist/Changes/LocationStartChange.js.map +1 -1
  26. package/dist/Changes/MergeExonsChange.d.ts +29 -0
  27. package/dist/Changes/MergeExonsChange.js +114 -0
  28. package/dist/Changes/MergeExonsChange.js.map +1 -0
  29. package/dist/Changes/MergeTranscriptsChange.d.ts +34 -0
  30. package/dist/Changes/MergeTranscriptsChange.js +245 -0
  31. package/dist/Changes/MergeTranscriptsChange.js.map +1 -0
  32. package/dist/Changes/SplitExonChange.d.ts +33 -0
  33. package/dist/Changes/SplitExonChange.js +142 -0
  34. package/dist/Changes/SplitExonChange.js.map +1 -0
  35. package/dist/Changes/UndoMergeExonsChange.d.ts +27 -0
  36. package/dist/Changes/UndoMergeExonsChange.js +104 -0
  37. package/dist/Changes/UndoMergeExonsChange.js.map +1 -0
  38. package/dist/Changes/UndoMergeTranscriptsChange.d.ts +27 -0
  39. package/dist/Changes/UndoMergeTranscriptsChange.js +104 -0
  40. package/dist/Changes/UndoMergeTranscriptsChange.js.map +1 -0
  41. package/dist/Changes/UndoSplitExonChange.d.ts +32 -0
  42. package/dist/Changes/UndoSplitExonChange.js +111 -0
  43. package/dist/Changes/UndoSplitExonChange.js.map +1 -0
  44. package/dist/Changes/index.d.ts +21 -0
  45. package/dist/Changes/index.js +21 -0
  46. package/dist/Changes/index.js.map +1 -1
  47. package/dist/Checks/CDSCheck.d.ts +1 -1
  48. package/dist/Checks/CDSCheck.js +8 -9
  49. package/dist/Checks/CDSCheck.js.map +1 -1
  50. package/dist/Checks/TranscriptCheck.d.ts +9 -0
  51. package/dist/Checks/TranscriptCheck.js +109 -0
  52. package/dist/Checks/TranscriptCheck.js.map +1 -0
  53. package/dist/Checks/index.d.ts +1 -0
  54. package/dist/Checks/index.js +1 -0
  55. package/dist/Checks/index.js.map +1 -1
  56. package/dist/GFF3/annotationFeatureToGFF3.js +7 -1
  57. package/dist/GFF3/annotationFeatureToGFF3.js.map +1 -1
  58. package/dist/GFF3/gff3ToAnnotationFeature.test.js +1 -1
  59. package/dist/GFF3/gff3ToAnnotationFeature.test.js.map +1 -1
  60. package/dist/Validations/ParentChildValidation.js +3 -1
  61. package/dist/Validations/ParentChildValidation.js.map +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -1
  63. package/dist/util.d.ts +5 -0
  64. package/dist/util.js +46 -0
  65. package/dist/util.js.map +1 -1
  66. package/package.json +7 -7
  67. package/src/Changes/AddAssemblyAliasesChange.ts +69 -0
  68. package/src/Changes/AddAssemblyAndFeaturesFromFileChange.ts +2 -1
  69. package/src/Changes/AddAssemblyFromFileChange.ts +1 -1
  70. package/src/Changes/AddFeatureChange.ts +5 -29
  71. package/src/Changes/AddRefSeqAliasesChange.ts +2 -4
  72. package/src/Changes/DeleteFeatureChange.ts +42 -36
  73. package/src/Changes/FeatureAttributeChange.ts +16 -7
  74. package/src/Changes/ImportJBrowseConfigChange.ts +33 -18
  75. package/src/Changes/LocationEndChange.ts +41 -50
  76. package/src/Changes/LocationStartChange.ts +41 -50
  77. package/src/Changes/MergeExonsChange.ts +201 -0
  78. package/src/Changes/MergeTranscriptsChange.ts +394 -0
  79. package/src/Changes/SplitExonChange.ts +249 -0
  80. package/src/Changes/UndoMergeExonsChange.ts +149 -0
  81. package/src/Changes/UndoMergeTranscriptsChange.ts +153 -0
  82. package/src/Changes/UndoSplitExonChange.ts +174 -0
  83. package/src/Changes/index.ts +21 -0
  84. package/src/Checks/CDSCheck.ts +10 -10
  85. package/src/Checks/TranscriptCheck.ts +139 -0
  86. package/src/Checks/index.ts +1 -0
  87. package/src/GFF3/annotationFeatureToGFF3.ts +7 -1
  88. package/src/GFF3/gff3ToAnnotationFeature.test.ts +1 -1
  89. package/src/Validations/ParentChildValidation.ts +3 -2
  90. package/src/util.ts +53 -0
  91. package/test_data/example01.json +20 -20
  92. package/test_data/example02.json +38 -38
  93. package/test_data/example04.json +57 -57
  94. package/test_data/gene_representations.gff3 +1054 -276
@@ -29,15 +29,31 @@ class LocationEndChange extends common_1.FeatureChange {
29
29
  async executeOnServer(backend) {
30
30
  const { featureModel, session } = backend;
31
31
  const { changes, logger } = this;
32
- const featuresForChanges = [];
33
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
+ const topLevelFeatures = [];
34
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();
35
+ const { featureId, oldEnd, newEnd } = change;
36
+ // See if we already have top-level feature for this feature
37
+ let topLevelFeature;
38
+ let feature;
39
+ for (const tlv of topLevelFeatures) {
40
+ const childFeature = this.getFeatureFromId(tlv, featureId);
41
+ if (childFeature) {
42
+ topLevelFeature = tlv;
43
+ feature = childFeature;
44
+ break;
45
+ }
46
+ }
47
+ if (!topLevelFeature) {
48
+ // Don't already have top-level feature, so let's query it
49
+ topLevelFeature = await featureModel
50
+ .findOne({ allIds: featureId })
51
+ .session(session)
52
+ .exec();
53
+ if (topLevelFeature) {
54
+ topLevelFeatures.push(topLevelFeature);
55
+ }
56
+ }
41
57
  if (!topLevelFeature) {
42
58
  const errMsg = `*** ERROR: The following featureId was not found in database ='${featureId}'`;
43
59
  logger.error(errMsg);
@@ -45,35 +61,20 @@ class LocationEndChange extends common_1.FeatureChange {
45
61
  // throw new NotFoundException(errMsg) -- This is causing runtime error because Exception comes from @nestjs/common!!!
46
62
  }
47
63
  logger.debug?.(`*** TOP level feature found: ${JSON.stringify(topLevelFeature)}`);
48
- const foundFeature = this.getFeatureFromId(topLevelFeature, featureId);
49
- if (!foundFeature) {
64
+ if (!feature) {
65
+ feature = this.getFeatureFromId(topLevelFeature, featureId);
66
+ }
67
+ if (!feature) {
50
68
  const errMsg = 'ERROR when searching feature by featureId';
51
69
  logger.error(errMsg);
52
70
  throw new Error(errMsg);
53
71
  }
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
- }
72
+ logger.debug?.(`*** Found feature: ${JSON.stringify(feature)}`);
73
+ if (feature.max !== oldEnd) {
74
+ const errMsg = 'Expected previous max does not match';
75
+ logger.error(errMsg);
76
+ throw new Error(errMsg);
71
77
  }
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
78
  feature.max = newEnd;
78
79
  if (topLevelFeature._id.equals(feature._id)) {
79
80
  topLevelFeature.markModified('end'); // Mark as modified. Without this save() -method is not updating data in database
@@ -81,14 +82,15 @@ class LocationEndChange extends common_1.FeatureChange {
81
82
  else {
82
83
  topLevelFeature.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
83
84
  }
85
+ }
86
+ for (const tlv of topLevelFeatures) {
84
87
  try {
85
- await topLevelFeature.save();
88
+ await tlv.save();
86
89
  }
87
90
  catch (error) {
88
91
  logger.debug?.(`*** FAILED: ${error}`);
89
92
  throw error;
90
93
  }
91
- logger.debug?.(`*** Object updated in Mongo. New object: ${JSON.stringify(topLevelFeature)}`);
92
94
  }
93
95
  }
94
96
  async executeOnLocalGFF3(_backend) {
@@ -98,12 +100,13 @@ class LocationEndChange extends common_1.FeatureChange {
98
100
  if (!dataStore) {
99
101
  throw new Error('No data store');
100
102
  }
101
- for (const [idx, changedId] of this.changedIds.entries()) {
102
- const feature = dataStore.getFeature(changedId);
103
+ for (const change of this.changes) {
104
+ const { featureId, newEnd } = change;
105
+ const feature = dataStore.getFeature(featureId);
103
106
  if (!feature) {
104
- throw new Error(`Could not find feature with identifier "${changedId}"`);
107
+ throw new Error(`Could not find feature with identifier "${featureId}"`);
105
108
  }
106
- feature.setMax(this.changes[idx].newEnd);
109
+ feature.setMax(newEnd);
107
110
  }
108
111
  }
109
112
  getInverse() {
@@ -1 +1 @@
1
- {"version":3,"file":"LocationEndChange.js","sourceRoot":"","sources":["../../src/Changes/LocationEndChange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocationEndChange.js","sourceRoot":"","sources":["../../src/Changes/LocationEndChange.ts"],"names":[],"mappings":"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"}
@@ -29,15 +29,31 @@ class LocationStartChange extends common_1.FeatureChange {
29
29
  async executeOnServer(backend) {
30
30
  const { featureModel, session } = backend;
31
31
  const { changes, logger } = this;
32
- const featuresForChanges = [];
33
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
+ const topLevelFeatures = [];
34
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();
35
+ const { featureId, oldStart, newStart } = change;
36
+ // See if we already have top-level feature for this feature
37
+ let topLevelFeature;
38
+ let feature;
39
+ for (const tlv of topLevelFeatures) {
40
+ const childFeature = this.getFeatureFromId(tlv, featureId);
41
+ if (childFeature) {
42
+ topLevelFeature = tlv;
43
+ feature = childFeature;
44
+ break;
45
+ }
46
+ }
47
+ if (!topLevelFeature) {
48
+ // Don't already have top-level feature, so let's query it
49
+ topLevelFeature = await featureModel
50
+ .findOne({ allIds: featureId })
51
+ .session(session)
52
+ .exec();
53
+ if (topLevelFeature) {
54
+ topLevelFeatures.push(topLevelFeature);
55
+ }
56
+ }
41
57
  if (!topLevelFeature) {
42
58
  const errMsg = `*** ERROR: The following featureId was not found in database ='${featureId}'`;
43
59
  logger.error(errMsg);
@@ -45,35 +61,20 @@ class LocationStartChange extends common_1.FeatureChange {
45
61
  // throw new NotFoundException(errMsg) -- This is causing runtime error because Exception comes from @nestjs/common!!!
46
62
  }
47
63
  logger.debug?.(`*** TOP level feature found: ${JSON.stringify(topLevelFeature)}`);
48
- const foundFeature = this.getFeatureFromId(topLevelFeature, featureId);
49
- if (!foundFeature) {
64
+ if (!feature) {
65
+ feature = this.getFeatureFromId(topLevelFeature, featureId);
66
+ }
67
+ if (!feature) {
50
68
  const errMsg = 'ERROR when searching feature by featureId';
51
69
  logger.error(errMsg);
52
70
  throw new Error(errMsg);
53
71
  }
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
- }
72
+ logger.debug?.(`*** Found feature: ${JSON.stringify(feature)}`);
73
+ if (feature.min !== oldStart) {
74
+ const errMsg = 'Expected previous max does not match';
75
+ logger.error(errMsg);
76
+ throw new Error(errMsg);
71
77
  }
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
78
  feature.min = newStart;
78
79
  if (topLevelFeature._id.equals(feature._id)) {
79
80
  topLevelFeature.markModified('start'); // Mark as modified. Without this save() -method is not updating data in database
@@ -81,14 +82,15 @@ class LocationStartChange extends common_1.FeatureChange {
81
82
  else {
82
83
  topLevelFeature.markModified('children'); // Mark as modified. Without this save() -method is not updating data in database
83
84
  }
85
+ }
86
+ for (const tlv of topLevelFeatures) {
84
87
  try {
85
- await topLevelFeature.save();
88
+ await tlv.save();
86
89
  }
87
90
  catch (error) {
88
91
  logger.debug?.(`*** FAILED: ${error}`);
89
92
  throw error;
90
93
  }
91
- logger.debug?.(`*** Object updated in Mongo. New object: ${JSON.stringify(topLevelFeature)}`);
92
94
  }
93
95
  }
94
96
  async executeOnLocalGFF3(_backend) {
@@ -98,12 +100,13 @@ class LocationStartChange extends common_1.FeatureChange {
98
100
  if (!dataStore) {
99
101
  throw new Error('No data store');
100
102
  }
101
- for (const [idx, changedId] of this.changedIds.entries()) {
102
- const feature = dataStore.getFeature(changedId);
103
+ for (const change of this.changes) {
104
+ const { featureId, newStart } = change;
105
+ const feature = dataStore.getFeature(featureId);
103
106
  if (!feature) {
104
- throw new Error(`Could not find feature with identifier "${changedId}"`);
107
+ throw new Error(`Could not find feature with identifier "${featureId}"`);
105
108
  }
106
- feature.setMin(this.changes[idx].newStart);
109
+ feature.setMin(newStart);
107
110
  }
108
111
  }
109
112
  getInverse() {
@@ -1 +1 @@
1
- {"version":3,"file":"LocationStartChange.js","sourceRoot":"","sources":["../../src/Changes/LocationStartChange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocationStartChange.js","sourceRoot":"","sources":["../../src/Changes/LocationStartChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type ChangeOptions, type ClientDataStore, FeatureChange, type LocalGFF3DataStore, type SerializedFeatureChange, type ServerDataStore } from '@apollo-annotation/common';
2
+ import { type AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
3
+ import { UndoMergeExonsChange } from './UndoMergeExonsChange';
4
+ interface SerializedMergeExonsChangeBase extends SerializedFeatureChange {
5
+ typeName: 'MergeExonsChange';
6
+ }
7
+ export interface MergeExonsChangeDetails {
8
+ firstExon: AnnotationFeatureSnapshot;
9
+ secondExon: AnnotationFeatureSnapshot;
10
+ parentFeatureId: string;
11
+ }
12
+ interface SerializedMergeExonsChangeSingle extends SerializedMergeExonsChangeBase, MergeExonsChangeDetails {
13
+ }
14
+ interface SerializedMergeExonsChangeMultiple extends SerializedMergeExonsChangeBase {
15
+ changes: MergeExonsChangeDetails[];
16
+ }
17
+ export type SerializedMergeExonsChange = SerializedMergeExonsChangeSingle | SerializedMergeExonsChangeMultiple;
18
+ export declare class MergeExonsChange extends FeatureChange {
19
+ typeName: "MergeExonsChange";
20
+ changes: MergeExonsChangeDetails[];
21
+ constructor(json: SerializedMergeExonsChange, options?: ChangeOptions);
22
+ get notification(): string;
23
+ toJSON(): SerializedMergeExonsChange;
24
+ executeOnServer(backend: ServerDataStore): Promise<void>;
25
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
26
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
27
+ getInverse(): UndoMergeExonsChange;
28
+ }
29
+ export {};
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /* eslint-disable unicorn/prefer-structured-clone */
3
+ /* eslint-disable @typescript-eslint/require-await */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MergeExonsChange = void 0;
7
+ const common_1 = require("@apollo-annotation/common");
8
+ const util_1 = require("../util");
9
+ const DeleteFeatureChange_1 = require("./DeleteFeatureChange");
10
+ const UndoMergeExonsChange_1 = require("./UndoMergeExonsChange");
11
+ class MergeExonsChange extends common_1.FeatureChange {
12
+ typeName = 'MergeExonsChange';
13
+ changes;
14
+ constructor(json, options) {
15
+ super(json, options);
16
+ this.changes = 'changes' in json ? json.changes : [json];
17
+ }
18
+ // eslint-disable-next-line @typescript-eslint/class-literal-property-style
19
+ get notification() {
20
+ return 'Exons successfully merged';
21
+ }
22
+ toJSON() {
23
+ const { assembly, changedIds, changes, typeName } = this;
24
+ if (changes.length === 1) {
25
+ const [{ firstExon, secondExon, parentFeatureId }] = changes;
26
+ return {
27
+ typeName,
28
+ changedIds,
29
+ assembly,
30
+ firstExon,
31
+ secondExon,
32
+ parentFeatureId,
33
+ };
34
+ }
35
+ return { typeName, changedIds, assembly, changes };
36
+ }
37
+ async executeOnServer(backend) {
38
+ const { featureModel, session } = backend;
39
+ const { changes, logger } = this;
40
+ for (const change of changes) {
41
+ const { firstExon, secondExon } = change;
42
+ const topLevelFeature = await featureModel
43
+ .findOne({ allIds: firstExon._id })
44
+ .session(session)
45
+ .exec();
46
+ if (!topLevelFeature) {
47
+ const errMsg = `*** ERROR: The following featureId was not found in database ='${firstExon._id}'`;
48
+ logger.error(errMsg);
49
+ throw new Error(errMsg);
50
+ }
51
+ const mergedExon = this.getFeatureFromId(topLevelFeature, firstExon._id);
52
+ if (!mergedExon) {
53
+ const errMsg = 'ERROR when searching feature by featureId';
54
+ logger.error(errMsg);
55
+ throw new Error(errMsg);
56
+ }
57
+ mergedExon.min = Math.min(firstExon.min, secondExon.min);
58
+ mergedExon.max = Math.max(firstExon.max, secondExon.max);
59
+ const mergedAttributes = mergedExon.attributes
60
+ ? JSON.parse(JSON.stringify(mergedExon.attributes))
61
+ : {};
62
+ mergedAttributes.merged_with = [
63
+ (0, util_1.stringifyAttributes)((0, util_1.attributesToRecords)(secondExon.attributes)),
64
+ ];
65
+ mergedExon.attributes = mergedAttributes;
66
+ const deletedIds = (0, DeleteFeatureChange_1.findAndDeleteChildFeature)(topLevelFeature, secondExon._id, this);
67
+ deletedIds.push(secondExon._id);
68
+ topLevelFeature.allIds = topLevelFeature.allIds.filter((id) => !deletedIds.includes(id));
69
+ await topLevelFeature.save();
70
+ }
71
+ }
72
+ async executeOnLocalGFF3(_backend) {
73
+ throw new Error('executeOnLocalGFF3 not implemented');
74
+ }
75
+ async executeOnClient(dataStore) {
76
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
77
+ if (!dataStore) {
78
+ throw new Error('No data store');
79
+ }
80
+ for (const change of this.changes) {
81
+ const { firstExon, secondExon } = change;
82
+ const mergedExon = dataStore.getFeature(firstExon._id);
83
+ if (!mergedExon) {
84
+ throw new Error(`Could not find feature with identifier "${firstExon._id}"`);
85
+ }
86
+ mergedExon.setMin(Math.min(firstExon.min, secondExon.min));
87
+ mergedExon.setMax(Math.max(firstExon.max, secondExon.max));
88
+ const mrg = mergedExon.attributes.get('merged_with')?.slice() ?? [];
89
+ const mergedWith = (0, util_1.stringifyAttributes)((0, util_1.attributesToRecords)(secondExon.attributes));
90
+ if (!mrg.includes(mergedWith)) {
91
+ mrg.push(mergedWith);
92
+ }
93
+ mergedExon.setAttribute('merged_with', mrg);
94
+ mergedExon.parent?.deleteChild(secondExon._id);
95
+ }
96
+ }
97
+ getInverse() {
98
+ const { assembly, changedIds, changes, logger } = this;
99
+ const inverseChangedIds = [...changedIds].reverse();
100
+ const inverseChanges = [...changes].reverse().map((mergeExonChange) => ({
101
+ exonsToRestore: [mergeExonChange.firstExon, mergeExonChange.secondExon],
102
+ parentFeatureId: mergeExonChange.parentFeatureId,
103
+ }));
104
+ logger.debug?.(`INVERSE CHANGE '${JSON.stringify(inverseChanges)}'`);
105
+ return new UndoMergeExonsChange_1.UndoMergeExonsChange({
106
+ changedIds: inverseChangedIds,
107
+ typeName: 'UndoMergeExonsChange',
108
+ changes: inverseChanges,
109
+ assembly,
110
+ }, { logger });
111
+ }
112
+ }
113
+ exports.MergeExonsChange = MergeExonsChange;
114
+ //# sourceMappingURL=MergeExonsChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MergeExonsChange.js","sourceRoot":"","sources":["../../src/Changes/MergeExonsChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type ChangeOptions, type ClientDataStore, FeatureChange, type LocalGFF3DataStore, type SerializedFeatureChange, type ServerDataStore } from '@apollo-annotation/common';
2
+ import { type AnnotationFeature, type AnnotationFeatureSnapshot } from '@apollo-annotation/mst';
3
+ import { type Feature } from '@apollo-annotation/schemas';
4
+ import { UndoMergeTranscriptsChange } from './UndoMergeTranscriptsChange';
5
+ interface SerializedMergeTranscriptsChangeBase extends SerializedFeatureChange {
6
+ typeName: 'MergeTranscriptsChange';
7
+ }
8
+ export interface MergeTranscriptsChangeDetails {
9
+ firstTranscript: AnnotationFeatureSnapshot;
10
+ secondTranscript: AnnotationFeatureSnapshot;
11
+ parentFeatureId: string;
12
+ }
13
+ interface SerializedMergeTranscriptsChangeSingle extends SerializedMergeTranscriptsChangeBase, MergeTranscriptsChangeDetails {
14
+ }
15
+ interface SerializedMergeTranscriptsChangeMultiple extends SerializedMergeTranscriptsChangeBase {
16
+ changes: MergeTranscriptsChangeDetails[];
17
+ }
18
+ export type SerializedMergeTranscriptsChange = SerializedMergeTranscriptsChangeSingle | SerializedMergeTranscriptsChangeMultiple;
19
+ export declare class MergeTranscriptsChange extends FeatureChange {
20
+ typeName: "MergeTranscriptsChange";
21
+ changes: MergeTranscriptsChangeDetails[];
22
+ constructor(json: SerializedMergeTranscriptsChange, options?: ChangeOptions);
23
+ get notification(): string;
24
+ toJSON(): SerializedMergeTranscriptsChange;
25
+ executeOnServer(backend: ServerDataStore): Promise<void>;
26
+ mergeTranscriptsOnServer(firstTranscript: Feature, secondTranscript: AnnotationFeatureSnapshot): void;
27
+ mergeFeatureIntoTranscriptOnServer(secondFeatureChild: AnnotationFeatureSnapshot, firstTranscript: Feature): void;
28
+ executeOnClient(dataStore: ClientDataStore): Promise<void>;
29
+ mergeTranscriptsOnClient(firstTranscript: AnnotationFeature, secondTranscript: AnnotationFeatureSnapshot): void;
30
+ mergeFeatureIntoTranscriptOnClient(secondFeatureChild: AnnotationFeatureSnapshot, firstTranscript: AnnotationFeature): void;
31
+ executeOnLocalGFF3(_backend: LocalGFF3DataStore): Promise<void>;
32
+ getInverse(): UndoMergeTranscriptsChange;
33
+ }
34
+ export {};