@teselagen/sequence-utils 0.3.7 → 0.3.9

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 (108) hide show
  1. package/README.md +89 -0
  2. package/bioData.d.ts +1 -339
  3. package/filterSequenceString.d.ts +26 -1
  4. package/index.d.ts +7 -8
  5. package/index.js +329 -413
  6. package/index.mjs +329 -413
  7. package/index.umd.js +329 -413
  8. package/package.json +1 -2
  9. package/src/addGapsToSeqReads.js +2 -2
  10. package/src/adjustAnnotationsToInsert.js +3 -3
  11. package/src/adjustBpsToReplaceOrInsert.js +3 -3
  12. package/src/adjustBpsToReplaceOrInsert.test.js +0 -1
  13. package/src/aminoAcidToDnaRna.test.js +1 -1
  14. package/src/annotateSingleSeq.js +1 -1
  15. package/src/annotateSingleSeq.test.js +1 -4
  16. package/src/autoAnnotate.js +5 -2
  17. package/src/autoAnnotate.test.js +6 -30
  18. package/src/bioData.js +1 -366
  19. package/src/calculateNebTa.js +1 -1
  20. package/src/calculateNebTm.js +1 -1
  21. package/src/calculatePercentGC.js +2 -2
  22. package/src/calculateTm.js +19 -102
  23. package/src/computeDigestFragments.js +7 -4
  24. package/src/computeDigestFragments.test.js +1 -1
  25. package/src/condensePairwiseAlignmentDifferences.js +1 -1
  26. package/src/convertAACaretPositionOrRangeToDna.js +1 -1
  27. package/src/convertDnaCaretPositionOrRangeToAA.js +1 -1
  28. package/src/cutSequenceByRestrictionEnzyme.js +3 -3
  29. package/src/cutSequenceByRestrictionEnzyme.test.js +0 -1
  30. package/src/degenerateDnaToAminoAcidMap.js +1 -1
  31. package/src/degenerateRnaToAminoAcidMap.js +1 -1
  32. package/src/deleteSequenceDataAtRange.js +1 -1
  33. package/src/deleteSequenceDataAtRange.test.js +23 -9
  34. package/src/diffUtils.js +4 -4
  35. package/src/diffUtils.test.js +2 -2
  36. package/src/doesEnzymeChopOutsideOfRecognitionSite.js +1 -1
  37. package/src/doesEnzymeChopOutsideOfRecognitionSite.test.js +0 -2
  38. package/src/featureTypesAndColors.js +5 -5
  39. package/src/featureTypesAndColors.test.js +1 -1
  40. package/src/filterSequenceString.js +111 -16
  41. package/src/filterSequenceString.test.js +62 -3
  42. package/src/findNearestRangeOfSequenceOverlapToPosition.js +1 -1
  43. package/src/findOrfsInPlasmid.js +1 -1
  44. package/src/findSequenceMatches.js +9 -10
  45. package/src/generateAnnotations.js +1 -1
  46. package/src/generateSequenceData.js +1 -1
  47. package/src/generateSequenceData.test.js +1 -1
  48. package/src/getAllInsertionsInSeqReads.js +1 -1
  49. package/src/getAminoAcidDataForEachBaseOfDna.js +2 -2
  50. package/src/getAminoAcidDataForEachBaseOfDna.test.js +0 -2
  51. package/src/getAminoAcidFromSequenceTriplet.js +1 -1
  52. package/src/getAminoAcidStringFromSequenceString.js +1 -1
  53. package/src/getCodonRangeForAASliver.js +1 -1
  54. package/src/getComplementAminoAcidStringFromSequenceString.js +2 -5
  55. package/src/getComplementSequenceAndAnnotations.js +1 -2
  56. package/src/getComplementSequenceString.js +5 -3
  57. package/src/getComplementSequenceString.test.js +6 -6
  58. package/src/getCutsiteType.js +1 -1
  59. package/src/getCutsitesFromSequence.js +1 -1
  60. package/src/getDegenerateDnaStringFromAAString.js +1 -1
  61. package/src/getDegenerateRnaStringFromAAString.js +1 -1
  62. package/src/getDigestFragmentsForCutsites.js +5 -2
  63. package/src/getDigestFragmentsForRestrictionEnzymes.js +2 -2
  64. package/src/getInsertBetweenVals.js +2 -2
  65. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.js +2 -2
  66. package/src/getLeftAndRightOfSequenceInRangeGivenPosition.test.js +0 -2
  67. package/src/getMassOfAaString.js +4 -1
  68. package/src/getMassofAaString.test.js +9 -8
  69. package/src/getOrfsFromSequence.js +1 -2
  70. package/src/getOrfsFromSequence.test.js +1 -3
  71. package/src/getOverlapBetweenTwoSequences.js +3 -3
  72. package/src/getOverlapBetweenTwoSequences.test.js +1 -1
  73. package/src/getPossiblePartsFromSequenceAndEnzymes.js +2 -2
  74. package/src/getReverseAminoAcidStringFromSequenceString.js +1 -1
  75. package/src/getReverseComplementAminoAcidStringFromSequenceString.js +9 -6
  76. package/src/getReverseComplementAnnotation.js +1 -1
  77. package/src/getReverseComplementSequenceAndAnnotations.js +2 -3
  78. package/src/getReverseComplementSequenceString.js +1 -2
  79. package/src/getReverseSequenceString.js +1 -1
  80. package/src/getSequenceDataBetweenRange.js +7 -4
  81. package/src/getSequenceDataBetweenRange.test.js +0 -1
  82. package/src/getVirtualDigest.js +6 -3
  83. package/src/guessIfSequenceIsDnaAndNotProtein.js +2 -2
  84. package/src/index.js +79 -80
  85. package/src/index.test.js +5 -4
  86. package/src/insertGapsIntoRefSeq.js +1 -1
  87. package/src/insertSequenceDataAtPosition.test.js +4 -2
  88. package/src/insertSequenceDataAtPositionOrRange.js +5 -5
  89. package/src/insertSequenceDataAtPositionOrRange.test.js +3 -17
  90. package/src/isEnzymeType2S.js +1 -1
  91. package/src/mapAnnotationsToRows.js +3 -3
  92. package/src/mapAnnotationsToRows.test.js +1 -3
  93. package/src/prepareCircularViewData.js +5 -5
  94. package/src/prepareCircularViewData.test.js +1 -1
  95. package/src/prepareRowData.js +1 -2
  96. package/src/prepareRowData.test.js +1 -3
  97. package/src/prepareRowData_output1.json +381 -381
  98. package/src/proteinAlphabet.js +31 -26
  99. package/src/rotateBpsToPosition.js +7 -11
  100. package/src/rotateBpsToPosition.test.js +6 -6
  101. package/src/rotateSequenceDataToPosition.js +4 -4
  102. package/src/shiftAnnotationsByLen.js +2 -2
  103. package/src/tidyUpAnnotation.js +8 -7
  104. package/src/tidyUpSequenceData.js +15 -18
  105. package/filterAminoAcidSequenceString.d.ts +0 -1
  106. package/filterAminoAcidSequenceString.test.d.ts +0 -1
  107. package/src/filterAminoAcidSequenceString.js +0 -13
  108. package/src/filterAminoAcidSequenceString.test.js +0 -22
@@ -1,10 +1,9 @@
1
1
  //tnr: half finished test.
2
2
 
3
-
4
3
  import chai from "chai";
5
4
 
6
- import {getRangeLength} from "@teselagen/range-utils";
7
- import {cloneDeep} from "lodash";
5
+ import { getRangeLength } from "@teselagen/range-utils";
6
+ import { cloneDeep } from "lodash";
8
7
  import chaiSubset from "chai-subset";
9
8
 
10
9
  import deleteSequenceDataAtRange from "./deleteSequenceDataAtRange";
@@ -18,7 +17,10 @@ describe("deleteSequenceDataAtRange", () => {
18
17
  sequence: "atagatag"
19
18
  };
20
19
  const range = { start: 0, end: 7 };
21
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
20
+ const postDeleteSeqData = deleteSequenceDataAtRange(
21
+ existingSequence,
22
+ range
23
+ );
22
24
  postDeleteSeqData.sequence.length.should.equal(
23
25
  existingSequence.sequence.length - getRangeLength(range)
24
26
  );
@@ -28,7 +30,10 @@ describe("deleteSequenceDataAtRange", () => {
28
30
  sequence: "atagatag"
29
31
  };
30
32
  const range = { start: 4, end: 3 };
31
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
33
+ const postDeleteSeqData = deleteSequenceDataAtRange(
34
+ existingSequence,
35
+ range
36
+ );
32
37
  postDeleteSeqData.sequence.length.should.equal(
33
38
  existingSequence.sequence.length -
34
39
  getRangeLength(range, existingSequence.sequence.length)
@@ -39,7 +44,10 @@ describe("deleteSequenceDataAtRange", () => {
39
44
  sequence: "atagatag"
40
45
  };
41
46
  const range = { start: 3, end: 5 };
42
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
47
+ const postDeleteSeqData = deleteSequenceDataAtRange(
48
+ existingSequence,
49
+ range
50
+ );
43
51
  postDeleteSeqData.sequence.length.should.equal(
44
52
  existingSequence.sequence.length - getRangeLength(range)
45
53
  );
@@ -48,7 +56,7 @@ describe("deleteSequenceDataAtRange", () => {
48
56
  const existingSequence = {
49
57
  sequence: "atagatag",
50
58
  features: {
51
- "1": {
59
+ 1: {
52
60
  start: 7,
53
61
  end: 7
54
62
  }
@@ -56,7 +64,10 @@ describe("deleteSequenceDataAtRange", () => {
56
64
  };
57
65
  const clonedExistingSeq = cloneDeep(existingSequence);
58
66
  const range = { start: 3, end: 5 };
59
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
67
+ const postDeleteSeqData = deleteSequenceDataAtRange(
68
+ existingSequence,
69
+ range
70
+ );
60
71
  existingSequence.should.deep.equal(clonedExistingSeq);
61
72
  postDeleteSeqData.sequence.length.should.equal(
62
73
  existingSequence.sequence.length - getRangeLength(range)
@@ -78,7 +89,10 @@ describe("deleteSequenceDataAtRange", () => {
78
89
  ]
79
90
  };
80
91
  const range = { start: -1, end: -1 };
81
- const postDeleteSeqData = deleteSequenceDataAtRange(existingSequence, range);
92
+ const postDeleteSeqData = deleteSequenceDataAtRange(
93
+ existingSequence,
94
+ range
95
+ );
82
96
  postDeleteSeqData.should.containSubset({
83
97
  sequence: "atgagagaga",
84
98
  features: [
package/src/diffUtils.js CHANGED
@@ -13,7 +13,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
13
13
  noTranslationData: true
14
14
  });
15
15
 
16
- [oldData, newData].forEach((d) => {
16
+ [oldData, newData].forEach(d => {
17
17
  [
18
18
  "cutsites",
19
19
  "orfs",
@@ -23,7 +23,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
23
23
  "description",
24
24
  "materiallyAvailable",
25
25
  ...ignoreKeys
26
- ].forEach((prop) => {
26
+ ].forEach(prop => {
27
27
  delete d[prop];
28
28
  });
29
29
  if (d.translations) {
@@ -43,7 +43,7 @@ const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
43
43
  return diff(oldData, newData);
44
44
  };
45
45
  const patchSeqWithDiff = (oldData, diff, { ignoreKeys = [] } = {}) => {
46
- ignoreKeys.forEach((k) => {
46
+ ignoreKeys.forEach(k => {
47
47
  delete diff[k];
48
48
  });
49
49
  return patch(
@@ -51,7 +51,7 @@ const patchSeqWithDiff = (oldData, diff, { ignoreKeys = [] } = {}) => {
51
51
  diff
52
52
  );
53
53
  };
54
- const reverseSeqDiff = (diff) => {
54
+ const reverseSeqDiff = diff => {
55
55
  return reverse(diff);
56
56
  };
57
57
 
@@ -1,8 +1,8 @@
1
1
  import chai from "chai";
2
2
  import assert from "assert";
3
- import {map} from "lodash";
3
+ import { map } from "lodash";
4
4
  import tidyUpSequenceData from "./tidyUpSequenceData";
5
- import {getDiffFromSeqs, patchSeqWithDiff, reverseSeqDiff} from "./diffUtils";
5
+ import { getDiffFromSeqs, patchSeqWithDiff, reverseSeqDiff } from "./diffUtils";
6
6
  import chaiSubset from "chai-subset";
7
7
 
8
8
  chai.should();
@@ -7,4 +7,4 @@ export default function doesEnzymeChopOutsideOfRecognitionSite(enzyme) {
7
7
  } else {
8
8
  return false;
9
9
  }
10
- };
10
+ }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import chai from "chai";
4
2
  import doesEnzymeChopOutsideOfRecognitionSite from "./doesEnzymeChopOutsideOfRecognitionSite.js";
5
3
  import enzymeList from "./aliasedEnzymesByName";
@@ -1,4 +1,4 @@
1
- import {get, keyBy, filter} from "lodash";
1
+ import { get, keyBy, filter } from "lodash";
2
2
 
3
3
  const genbankFeatureTypes = [
4
4
  { name: "-10_signal", color: "#4ECDC4" },
@@ -137,7 +137,7 @@ const getFeatureTypes = ({ includeHidden } = {}) =>
137
137
  f => f.name
138
138
  );
139
139
 
140
- export {genbankFeatureTypes};
140
+ export { genbankFeatureTypes };
141
141
 
142
142
  export function getGenbankFeatureToColorMap() {
143
143
  const toRet = {};
@@ -147,6 +147,6 @@ export function getGenbankFeatureToColorMap() {
147
147
  return toRet;
148
148
  }
149
149
 
150
- export {getFeatureToColorMap};
151
- export {getFeatureTypes};
152
- export {getMergedFeatureMap};
150
+ export { getFeatureToColorMap };
151
+ export { getFeatureTypes };
152
+ export { getMergedFeatureMap };
@@ -2,7 +2,7 @@ import {
2
2
  getFeatureTypes,
3
3
  getFeatureToColorMap,
4
4
  getMergedFeatureMap,
5
- getGenbankFeatureToColorMap,
5
+ getGenbankFeatureToColorMap
6
6
  } from "./featureTypesAndColors";
7
7
 
8
8
  describe("getFeatureToColorMap", () => {
@@ -1,22 +1,117 @@
1
- // this is throwing a weird eslint error
1
+ import {
2
+ ambiguous_dna_letters,
3
+ ambiguous_rna_letters,
4
+ protein_letters_withUandX
5
+ } from "./bioData";
2
6
 
3
- //
4
7
  export default function filterSequenceString(
5
8
  sequenceString,
6
- additionalValidChars = "",
7
- charOverrides
9
+ {
10
+ additionalValidChars = "",
11
+ isOligo,
12
+ name,
13
+ isProtein,
14
+ isRna,
15
+ isMixedRnaAndDna,
16
+ includeStopCodon
17
+ } = {}
8
18
  ) {
9
- // ac.throw(ac.string,sequenceString);
10
- if (sequenceString) {
11
- return sequenceString.replace(
12
- new RegExp(
13
- `[^${charOverrides ||
14
- `atgcyrswkmbvdhnu${additionalValidChars.split("").join("\\")}`}]`,
15
- "gi"
16
- ),
17
- ""
19
+ const acceptedChars = getAcceptedChars({
20
+ isOligo,
21
+ isProtein,
22
+ isRna,
23
+ isMixedRnaAndDna,
24
+ includeStopCodon
25
+ });
26
+ const replaceChars = getReplaceChars({
27
+ isOligo,
28
+ isProtein,
29
+ isRna,
30
+ isMixedRnaAndDna
31
+ });
32
+
33
+ let sanitizedVal = "";
34
+ const invalidChars = [];
35
+ const chars = `${acceptedChars}${additionalValidChars.split("").join("\\")}`;
36
+ const warnings = [];
37
+ const replaceCount = {};
38
+ sequenceString.split("").forEach(letter => {
39
+ const lowerLetter = letter.toLowerCase();
40
+ if (replaceChars && replaceChars[lowerLetter]) {
41
+ if (!replaceCount[lowerLetter]) {
42
+ replaceCount[lowerLetter] = 0;
43
+ }
44
+ replaceCount[lowerLetter]++;
45
+ const isUpper = lowerLetter !== letter;
46
+ sanitizedVal += isUpper
47
+ ? replaceChars[lowerLetter].toUpperCase()
48
+ : replaceChars[lowerLetter];
49
+ } else if (chars.includes(lowerLetter)) {
50
+ sanitizedVal += letter;
51
+ } else {
52
+ invalidChars.push(letter);
53
+ }
54
+ });
55
+ //add replace count warnings
56
+ Object.keys(replaceCount).forEach(letter => {
57
+ warnings.push(
58
+ `Replaced "${letter}" with "${replaceChars[letter]}"${
59
+ replaceCount[letter] > 1 ? ` ${replaceCount[letter]} times` : ""
60
+ }`
61
+ );
62
+ });
63
+ if (sequenceString.length !== sanitizedVal.length) {
64
+ warnings.push(
65
+ `${
66
+ name ? `Sequence ${name}: ` : ""
67
+ }Invalid character(s) detected and removed: ${invalidChars
68
+ .slice(0, 100)
69
+ .join(", ")} `
18
70
  );
19
- } else {
20
- return sequenceString;
21
71
  }
22
- };
72
+ if (typeof window !== "undefined" && window.toastr && warnings.length) {
73
+ warnings.forEach(warning => {
74
+ window.toastr.warning(warning);
75
+ });
76
+ }
77
+
78
+ return [sanitizedVal, warnings];
79
+ }
80
+
81
+ export function getAcceptedChars({
82
+ isOligo,
83
+ isProtein,
84
+ isRna,
85
+ isMixedRnaAndDna,
86
+ includeStopCodon
87
+ } = {}) {
88
+ return isProtein
89
+ ? `${protein_letters_withUandX.toLowerCase()}${
90
+ includeStopCodon ? "*." : ""
91
+ }}`
92
+ : isOligo
93
+ ? ambiguous_rna_letters.toLowerCase() + "t"
94
+ : isRna
95
+ ? ambiguous_rna_letters.toLowerCase() + "t"
96
+ : isMixedRnaAndDna
97
+ ? ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase()
98
+ : //just plain old dna
99
+ ambiguous_rna_letters.toLowerCase() + ambiguous_dna_letters.toLowerCase();
100
+ }
101
+ export function getReplaceChars({
102
+ isOligo,
103
+ isProtein,
104
+ isRna,
105
+ isMixedRnaAndDna
106
+ } = {}) {
107
+ return isProtein
108
+ ? {}
109
+ : isOligo
110
+ ? {}
111
+ : isRna
112
+ ? { t: "u" }
113
+ : isMixedRnaAndDna
114
+ ? {}
115
+ : //just plain old dna
116
+ {};
117
+ }
@@ -1,13 +1,72 @@
1
1
  import filterSequenceString from "./filterSequenceString";
2
+ import { expect } from "vitest";
2
3
 
3
4
  describe("filterSequenceString", () => {
5
+ it("should not filter u's and should convert t's to u's from isOligo=true seqs", () => {
6
+ const [str, warnings] = filterSequenceString("tatuuag--a", {
7
+ isOligo: true
8
+ });
9
+ expect(str).toBe("tatuuaga");
10
+ // expect(warnings[0]).toBe('Replaced "t" with "u" 2 times');
11
+ expect(warnings[0]).toBe(
12
+ "Invalid character(s) detected and removed: -, - "
13
+ );
14
+ });
15
+ it("should not convert u's to t's for isDna (default isDna=true) seqs", () => {
16
+ const [str, warnings] = filterSequenceString("tatuuag--a", {});
17
+ // expect(warnings[0]).toBe('Replaced "u" with "t" 2 times');
18
+ expect(warnings[0]).toBe(
19
+ "Invalid character(s) detected and removed: -, - "
20
+ );
21
+ expect(str).toBe("tatuuaga");
22
+ });
4
23
  it("should filter out unwanted chars", () => {
5
- expect(filterSequenceString("tatag--a")).toBe("tataga");
24
+ const [str, warnings] = filterSequenceString("tatag--a");
25
+ expect(warnings[0]).toBe(
26
+ "Invalid character(s) detected and removed: -, - "
27
+ );
28
+ expect(str).toBe("tataga");
6
29
  });
7
30
  it("should handle additional chars option", () => {
8
- expect(filterSequenceString("tatag--a", "-")).toBe("tatag--a");
31
+ const [str, warnings] = filterSequenceString("tatag--a", {
32
+ additionalValidChars: "-"
33
+ });
34
+ expect(warnings.length).toBe(0);
35
+ expect(str).toBe("tatag--a");
9
36
  });
10
37
  it("should handle additional chars option", () => {
11
- expect(filterSequenceString("tatag--a", "f-q")).toBe("tatag--a");
38
+ const [str, warnings] = filterSequenceString("tatag--a", {
39
+ additionalValidChars: "f-q"
40
+ });
41
+ expect(warnings.length).toBe(0);
42
+ expect(str).toBe("tatag--a");
43
+ });
44
+
45
+ it("when isProtein: true, should filter only valid amino acids by default", () => {
46
+ const [str, warnings] = filterSequenceString(
47
+ 'bbb342"""xtgalmfwkqespvicyhrnd,,../',
48
+ {
49
+ isProtein: true
50
+ }
51
+ );
52
+ expect(warnings[0]).toBe(
53
+ 'Invalid character(s) detected and removed: b, b, b, 3, 4, 2, ", ", ", ,, ,, ., ., / '
54
+ );
55
+ expect(str).toBe("xtgalmfwkqespvicyhrnd");
56
+ });
57
+ it("when isProtein: true, should handle upper case letters", () => {
58
+ const [str, warnings] = filterSequenceString("xtgalmfWKQEspvicyhrnd", {
59
+ isProtein: true
60
+ });
61
+ expect(warnings.length).toBe(0);
62
+ expect(str).toBe("xtgalmfWKQEspvicyhrnd");
63
+ });
64
+ it("when isProtein: true, should handle the option to includeStopCodon by allowing periods", () => {
65
+ const [str] = filterSequenceString('bbb342"""xtgalmfwkqespvicyhrnd,,../', {
66
+ isProtein: true,
67
+ includeStopCodon: true
68
+ });
69
+
70
+ expect(str).toBe("xtgalmfwkqespvicyhrnd..");
12
71
  });
13
72
  });
@@ -1,4 +1,4 @@
1
- import {normalizeRange} from "@teselagen/range-utils";
1
+ import { normalizeRange } from "@teselagen/range-utils";
2
2
  function findNearestRangeOfSequenceOverlapToPosition(
3
3
  sequenceToSearch,
4
4
  overlapSequence,
@@ -23,4 +23,4 @@ export default function findOrfsInPlasmid(
23
23
  useAdditionalOrfStartCodons
24
24
  });
25
25
  return forwardOrfs.concat(reverseOrfs);
26
- };
26
+ }
@@ -1,8 +1,11 @@
1
- import {modulateRangeBySequenceLength, flipContainedRange} from "@teselagen/range-utils";
2
- import {reduce, uniqBy} from "lodash";
1
+ import {
2
+ modulateRangeBySequenceLength,
3
+ flipContainedRange
4
+ } from "@teselagen/range-utils";
5
+ import { reduce, uniqBy } from "lodash";
3
6
  import escapeStringRegexp from "escape-string-regexp";
4
7
  import getAminoAcidStringFromSequenceString from "./getAminoAcidStringFromSequenceString";
5
- import {ambiguous_dna_values, extended_protein_values} from "./bioData";
8
+ import { ambiguous_dna_values, extended_protein_values } from "./bioData";
6
9
  import getReverseComplementSequenceString from "./getReverseComplementSequenceString";
7
10
 
8
11
  export default function findSequenceMatches(
@@ -34,15 +37,11 @@ export default function findSequenceMatches(
34
37
  matches = [...matches, ...flippedReverseMatches];
35
38
  }
36
39
  return matches;
37
- };
40
+ }
38
41
 
39
42
  function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
40
- const {
41
- isCircular,
42
- isAmbiguous,
43
- isProteinSequence,
44
- isProteinSearch
45
- } = options;
43
+ const { isCircular, isAmbiguous, isProteinSequence, isProteinSearch } =
44
+ options;
46
45
  let searchStringToUse = escapeStringRegexp(searchString);
47
46
  if (isAmbiguous) {
48
47
  if (isProteinSearch || isProteinSequence) {
@@ -1,4 +1,4 @@
1
- import {generateRandomRange} from "@teselagen/range-utils";
1
+ import { generateRandomRange } from "@teselagen/range-utils";
2
2
  import shortid from "shortid";
3
3
 
4
4
  function generateAnnotations(
@@ -46,7 +46,7 @@ export default function generateSequenceData({
46
46
  sequenceLength / 3
47
47
  )
48
48
  };
49
- };
49
+ }
50
50
 
51
51
  // export default tidyUpSequenceData(exampleData)
52
52
 
@@ -1,7 +1,7 @@
1
1
  import generateSequenceData from "./generateSequenceData";
2
2
  import chai from "chai";
3
3
  import chaiSubset from "chai-subset";
4
- import {map} from "lodash";
4
+ import { map } from "lodash";
5
5
 
6
6
  chai.should();
7
7
  chai.use(chaiSubset);
@@ -52,7 +52,7 @@ export default function getAllInsertionsInSeqReads(seqReads) {
52
52
  }
53
53
  // sortedInsertions is an array of objects [{bpPos: bp pos of insertion, number: # of insertions}, {bpPos, number}, ...]
54
54
  return sortedInsertions;
55
- };
55
+ }
56
56
 
57
57
  // function getAllInsertionsInSeqReads(seqReads) {
58
58
  // let allInsertionBpPosInSeqReads = [];
@@ -1,4 +1,4 @@
1
- import {translateRange, getSequenceWithinRange} from "@teselagen/range-utils";
1
+ import { translateRange, getSequenceWithinRange } from "@teselagen/range-utils";
2
2
  import revComp from "./getReverseComplementSequenceString";
3
3
  import getAA from "./getAminoAcidFromSequenceTriplet";
4
4
 
@@ -160,4 +160,4 @@ export default function getAminoAcidDataForEachBaseOfDna(
160
160
  throw new Error("something went wrong!");
161
161
  }
162
162
  return aminoAcidDataForEachBaseOfDNA;
163
- };
163
+ }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  import getAminoAcidDataForEachBaseOfDna from "./getAminoAcidDataForEachBaseOfDna.js";
4
2
 
5
3
  import getAA from "./getAminoAcidFromSequenceTriplet";
@@ -19,4 +19,4 @@ export default function getAminoAcidFromSequenceTriplet(sequenceString) {
19
19
  ] || "x";
20
20
 
21
21
  return proteinAlphabet[letter.toUpperCase()];
22
- };
22
+ }
@@ -15,4 +15,4 @@ export default function getAminoAcidStringFromSequenceString(sequenceString) {
15
15
  });
16
16
  aaString = aaArray.join("");
17
17
  return aaString;
18
- };
18
+ }
@@ -60,4 +60,4 @@ export default function getCodonRangeForAASliver(
60
60
  }
61
61
  }
62
62
  }
63
- };
63
+ }
@@ -4,8 +4,5 @@ export default function getComplementAminoAcidStringFromSequenceString(
4
4
  sequenceString
5
5
  ) {
6
6
  const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
7
- return aaString
8
- .split("")
9
- .reverse()
10
- .join("");
11
- };
7
+ return aaString.split("").reverse().join("");
8
+ }
@@ -1,7 +1,6 @@
1
1
  import getComplementSequenceString from "./getComplementSequenceString";
2
2
  import tidyUpSequenceData from "./tidyUpSequenceData";
3
3
 
4
-
5
4
  import getSequenceDataBetweenRange from "./getSequenceDataBetweenRange";
6
5
 
7
6
  // ac.throw([ac.string,ac.bool],arguments);
@@ -17,4 +16,4 @@ export default function getComplementSequenceAndAnnotations(
17
16
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
18
17
  });
19
18
  return tidyUpSequenceData(newSeqObj, options);
20
- };
19
+ }
@@ -1,12 +1,14 @@
1
1
  import DNAComplementMap from "./DNAComplementMap";
2
2
  import { merge } from "lodash";
3
3
 
4
-
5
4
  // ac.throw([ac.string,ac.bool],arguments);
6
5
  export default function getComplementSequenceString(sequence, isRna) {
7
6
  // ac.throw([ac.string],arguments);
8
7
  let complementSeqString = "";
9
- const complementMap = merge(DNAComplementMap, isRna ? { a: 'u', A: 'U'} : {a: 't', A: 'T'});
8
+ const complementMap = merge(
9
+ DNAComplementMap,
10
+ isRna ? { a: "u", A: "U" } : { a: "t", A: "T" }
11
+ );
10
12
  for (let i = 0; i < sequence.length; i++) {
11
13
  let complementChar = complementMap[sequence[i]];
12
14
  if (!complementChar) {
@@ -16,4 +18,4 @@ export default function getComplementSequenceString(sequence, isRna) {
16
18
  complementSeqString += complementChar;
17
19
  }
18
20
  return complementSeqString;
19
- };
21
+ }
@@ -2,12 +2,12 @@ import getComplementSequenceString from "./getComplementSequenceString";
2
2
 
3
3
  import assert from "assert";
4
4
 
5
- describe('complement base should be shown correctly', () => {
6
- it('complement base should be shown correctly for RNA sequence', () => {
7
- assert.equal('UUA', getComplementSequenceString('AAU', true))
5
+ describe("complement base should be shown correctly", () => {
6
+ it("complement base should be shown correctly for RNA sequence", () => {
7
+ assert.equal("UUA", getComplementSequenceString("AAU", true));
8
8
  });
9
9
 
10
- it('complement base should be shown correctly for DNA sequence', () => {
11
- assert.equal('TTA', getComplementSequenceString('AAT'))
10
+ it("complement base should be shown correctly for DNA sequence", () => {
11
+ assert.equal("TTA", getComplementSequenceString("AAT"));
12
12
  });
13
- });
13
+ });
@@ -7,4 +7,4 @@ export default function getCutsiteType(restrictionEnzyme) {
7
7
  } else {
8
8
  return "3' overhang";
9
9
  }
10
- };
10
+ }
@@ -14,4 +14,4 @@ export default function getCutsitesFromSequence(
14
14
  }
15
15
  }
16
16
  return cutsitesByName;
17
- };
17
+ }
@@ -5,4 +5,4 @@ export default function getDegenerateDnaStringFromAAString(aaString) {
5
5
  .split("")
6
6
  .map(char => aminoAcidToDegenerateDnaMap[char.toLowerCase()] || "nnn")
7
7
  .join("");
8
- };
8
+ }
@@ -5,4 +5,4 @@ export default function getDegenerateRnaStringFromAAString(aaString) {
5
5
  .split("")
6
6
  .map(char => aminoAcidToDegenerateRnaMap[char.toLowerCase()] || "nnn")
7
7
  .join("");
8
- };
8
+ }
@@ -1,4 +1,7 @@
1
- import {normalizePositionByRangeLength, getRangeLength} from "@teselagen/range-utils";
1
+ import {
2
+ normalizePositionByRangeLength,
3
+ getRangeLength
4
+ } from "@teselagen/range-utils";
2
5
 
3
6
  export default function getDigestFragmentsForCutsites(
4
7
  sequenceLength,
@@ -102,4 +105,4 @@ export default function getDigestFragmentsForCutsites(
102
105
  return true;
103
106
  });
104
107
  return fragments;
105
- };
108
+ }
@@ -1,6 +1,6 @@
1
1
  import getDigestFragmentsForCutsites from "./getDigestFragmentsForCutsites";
2
2
  import cutSequenceByRestrictionEnzyme from "./cutSequenceByRestrictionEnzyme";
3
- import {flatMap} from "lodash";
3
+ import { flatMap } from "lodash";
4
4
 
5
5
  export default function getDigestFragmentsForRestrictionEnzymes(
6
6
  sequence,
@@ -24,4 +24,4 @@ export default function getDigestFragmentsForRestrictionEnzymes(
24
24
  cutsites,
25
25
  opts
26
26
  );
27
- };
27
+ }
@@ -1,4 +1,4 @@
1
- import {normalizePositionByRangeLength1Based} from "@teselagen/range-utils";
1
+ import { normalizePositionByRangeLength1Based } from "@teselagen/range-utils";
2
2
 
3
3
  export default function getInsertBetweenVals(
4
4
  caretPosition,
@@ -25,4 +25,4 @@ export default function getInsertBetweenVals(
25
25
  } else {
26
26
  return [sequenceLength, 1];
27
27
  }
28
- };
28
+ }