@teselagen/sequence-utils 0.3.12 → 0.3.14

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.
@@ -1,4 +1,4 @@
1
- export default function filterSequenceString(sequenceString: any, { additionalValidChars, isOligo, name, isProtein, isRna, isMixedRnaAndDna }?: {
1
+ export default function filterSequenceString(sequenceString?: string, { additionalValidChars, isOligo, name, isProtein, isRna, isMixedRnaAndDna }?: {
2
2
  additionalValidChars?: string | undefined;
3
3
  isOligo: any;
4
4
  name: any;
@@ -22,3 +22,4 @@ export function getReplaceChars({ isOligo, isProtein, isRna, isMixedRnaAndDna }?
22
22
  } | {
23
23
  t: string;
24
24
  };
25
+ export function filterRnaString(s: any, o: any): string | string[];
package/index.d.ts CHANGED
@@ -20,7 +20,6 @@ export { default as aliasedEnzymesByName } from "./aliasedEnzymesByName";
20
20
  export { default as defaultEnzymesByName } from "./defaultEnzymesByName";
21
21
  export { default as generateSequenceData } from "./generateSequenceData";
22
22
  export { default as generateAnnotations } from "./generateAnnotations";
23
- export { default as filterSequenceString } from "./filterSequenceString";
24
23
  export { default as findNearestRangeOfSequenceOverlapToPosition } from "./findNearestRangeOfSequenceOverlapToPosition";
25
24
  export { default as findOrfsInPlasmid } from "./findOrfsInPlasmid";
26
25
  export { default as findSequenceMatches } from "./findSequenceMatches";
@@ -82,3 +81,4 @@ import { autoAnnotate } from "./autoAnnotate";
82
81
  import { convertApELikeRegexToRegex } from "./autoAnnotate";
83
82
  import { convertProteinSeqToDNAIupac } from "./autoAnnotate";
84
83
  export { getFeatureToColorMap, getFeatureTypes, genbankFeatureTypes, getMergedFeatureMap, autoAnnotate, convertApELikeRegexToRegex, convertProteinSeqToDNAIupac };
84
+ export { default as filterSequenceString, filterRnaString } from "./filterSequenceString";
package/index.js CHANGED
@@ -12323,7 +12323,7 @@ const modifiableTypes = [
12323
12323
  "primers",
12324
12324
  "guides"
12325
12325
  ];
12326
- function filterSequenceString(sequenceString, {
12326
+ function filterSequenceString(sequenceString = "", {
12327
12327
  additionalValidChars = "",
12328
12328
  isOligo,
12329
12329
  name,
@@ -12408,6 +12408,7 @@ function getReplaceChars({
12408
12408
  );
12409
12409
  }
12410
12410
  __name(getReplaceChars, "getReplaceChars");
12411
+ const filterRnaString = /* @__PURE__ */ __name((s, o) => filterSequenceString(s, __spreadProps(__spreadValues({}, o), { isRna: true }))[0], "filterRnaString");
12411
12412
  function tidyUpAnnotation(_annotation, {
12412
12413
  sequenceData = {},
12413
12414
  convertAnnotationsFromAAIndices,
@@ -13328,11 +13329,12 @@ function adjustAnnotationsToInsert(annotationsToBeAdjusted, insertStart, insertL
13328
13329
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13329
13330
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13330
13331
  const { maintainOriginSplit } = options;
13331
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13332
- const sequenceDataToInsert = tidyUpSequenceData(
13333
- _sequenceDataToInsert,
13334
- options
13335
- );
13332
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({
13333
+ doNotRemoveInvalidChars: true
13334
+ }, options));
13335
+ const sequenceDataToInsert = tidyUpSequenceData(_sequenceDataToInsert, __spreadValues({
13336
+ topLevelSeqData: existingSequenceData
13337
+ }, options));
13336
13338
  const newSequenceData = lodashExports.cloneDeep(existingSequenceData);
13337
13339
  const insertLength = sequenceDataToInsert.proteinSequence ? sequenceDataToInsert.proteinSequence.length * 3 : sequenceDataToInsert.sequence.length;
13338
13340
  let caretPosition = caretPositionOrRange;
@@ -21354,10 +21356,13 @@ function getAminoAcidStringFromSequenceString(sequenceString) {
21354
21356
  );
21355
21357
  const aaArray = [];
21356
21358
  let aaString = "";
21357
- aminoAcidsPerBase.forEach((aa) => {
21359
+ aminoAcidsPerBase.forEach((aa, index) => {
21358
21360
  if (!aa.fullCodon) {
21359
21361
  return;
21360
21362
  }
21363
+ if (index === aminoAcidsPerBase.length - 1 && aa.aminoAcid.value === "*") {
21364
+ return;
21365
+ }
21361
21366
  aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
21362
21367
  });
21363
21368
  aaString = aaArray.join("");
@@ -21541,7 +21546,9 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21541
21546
  if (!range)
21542
21547
  return seqData;
21543
21548
  const { exclude = {}, excludePartial = {} } = options;
21544
- const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21549
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({
21550
+ doNotRemoveInvalidChars: true
21551
+ }, options));
21545
21552
  annotationTypes.forEach((type) => {
21546
21553
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21547
21554
  });
@@ -21592,9 +21599,13 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21592
21599
  }
21593
21600
  });
21594
21601
  });
21595
- return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21602
+ return tidyUpSequenceData(toRet, __spreadValues({
21603
+ doNotRemoveInvalidChars: true
21604
+ }, options));
21596
21605
  }
21597
- return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21606
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({
21607
+ doNotRemoveInvalidChars: true
21608
+ }, options));
21598
21609
  }
21599
21610
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21600
21611
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21641,7 +21652,9 @@ function getComplementSequenceAndAnnotations(pSeqObj, options = {}) {
21641
21652
  const newSeqObj = Object.assign({}, seqObj, {
21642
21653
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21643
21654
  });
21644
- return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21655
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21656
+ doNotRemoveInvalidChars: true
21657
+ }, options));
21645
21658
  }
21646
21659
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21647
21660
  function getCutsiteType(restrictionEnzyme) {
@@ -22736,6 +22749,7 @@ exports.degenerateRnaToAminoAcidMap = degenerateRnaToAminoAcidMap;
22736
22749
  exports.deleteSequenceDataAtRange = deleteSequenceDataAtRange;
22737
22750
  exports.doesEnzymeChopOutsideOfRecognitionSite = doesEnzymeChopOutsideOfRecognitionSite;
22738
22751
  exports.featureColors = featureColors;
22752
+ exports.filterRnaString = filterRnaString;
22739
22753
  exports.filterSequenceString = filterSequenceString;
22740
22754
  exports.findNearestRangeOfSequenceOverlapToPosition = findNearestRangeOfSequenceOverlapToPosition;
22741
22755
  exports.findOrfsInPlasmid = findOrfsInPlasmid;
package/index.mjs CHANGED
@@ -12321,7 +12321,7 @@ const modifiableTypes = [
12321
12321
  "primers",
12322
12322
  "guides"
12323
12323
  ];
12324
- function filterSequenceString(sequenceString, {
12324
+ function filterSequenceString(sequenceString = "", {
12325
12325
  additionalValidChars = "",
12326
12326
  isOligo,
12327
12327
  name,
@@ -12406,6 +12406,7 @@ function getReplaceChars({
12406
12406
  );
12407
12407
  }
12408
12408
  __name(getReplaceChars, "getReplaceChars");
12409
+ const filterRnaString = /* @__PURE__ */ __name((s, o) => filterSequenceString(s, __spreadProps(__spreadValues({}, o), { isRna: true }))[0], "filterRnaString");
12409
12410
  function tidyUpAnnotation(_annotation, {
12410
12411
  sequenceData = {},
12411
12412
  convertAnnotationsFromAAIndices,
@@ -13326,11 +13327,12 @@ function adjustAnnotationsToInsert(annotationsToBeAdjusted, insertStart, insertL
13326
13327
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13327
13328
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13328
13329
  const { maintainOriginSplit } = options;
13329
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13330
- const sequenceDataToInsert = tidyUpSequenceData(
13331
- _sequenceDataToInsert,
13332
- options
13333
- );
13330
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({
13331
+ doNotRemoveInvalidChars: true
13332
+ }, options));
13333
+ const sequenceDataToInsert = tidyUpSequenceData(_sequenceDataToInsert, __spreadValues({
13334
+ topLevelSeqData: existingSequenceData
13335
+ }, options));
13334
13336
  const newSequenceData = lodashExports.cloneDeep(existingSequenceData);
13335
13337
  const insertLength = sequenceDataToInsert.proteinSequence ? sequenceDataToInsert.proteinSequence.length * 3 : sequenceDataToInsert.sequence.length;
13336
13338
  let caretPosition = caretPositionOrRange;
@@ -21352,10 +21354,13 @@ function getAminoAcidStringFromSequenceString(sequenceString) {
21352
21354
  );
21353
21355
  const aaArray = [];
21354
21356
  let aaString = "";
21355
- aminoAcidsPerBase.forEach((aa) => {
21357
+ aminoAcidsPerBase.forEach((aa, index) => {
21356
21358
  if (!aa.fullCodon) {
21357
21359
  return;
21358
21360
  }
21361
+ if (index === aminoAcidsPerBase.length - 1 && aa.aminoAcid.value === "*") {
21362
+ return;
21363
+ }
21359
21364
  aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
21360
21365
  });
21361
21366
  aaString = aaArray.join("");
@@ -21539,7 +21544,9 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21539
21544
  if (!range)
21540
21545
  return seqData;
21541
21546
  const { exclude = {}, excludePartial = {} } = options;
21542
- const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21547
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({
21548
+ doNotRemoveInvalidChars: true
21549
+ }, options));
21543
21550
  annotationTypes.forEach((type) => {
21544
21551
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21545
21552
  });
@@ -21590,9 +21597,13 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21590
21597
  }
21591
21598
  });
21592
21599
  });
21593
- return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21600
+ return tidyUpSequenceData(toRet, __spreadValues({
21601
+ doNotRemoveInvalidChars: true
21602
+ }, options));
21594
21603
  }
21595
- return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21604
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({
21605
+ doNotRemoveInvalidChars: true
21606
+ }, options));
21596
21607
  }
21597
21608
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21598
21609
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21639,7 +21650,9 @@ function getComplementSequenceAndAnnotations(pSeqObj, options = {}) {
21639
21650
  const newSeqObj = Object.assign({}, seqObj, {
21640
21651
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21641
21652
  });
21642
- return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21653
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21654
+ doNotRemoveInvalidChars: true
21655
+ }, options));
21643
21656
  }
21644
21657
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21645
21658
  function getCutsiteType(restrictionEnzyme) {
@@ -22735,6 +22748,7 @@ export {
22735
22748
  deleteSequenceDataAtRange,
22736
22749
  doesEnzymeChopOutsideOfRecognitionSite,
22737
22750
  featureColors,
22751
+ filterRnaString,
22738
22752
  filterSequenceString,
22739
22753
  findNearestRangeOfSequenceOverlapToPosition,
22740
22754
  findOrfsInPlasmid,
package/index.umd.js CHANGED
@@ -12325,7 +12325,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
12325
12325
  "primers",
12326
12326
  "guides"
12327
12327
  ];
12328
- function filterSequenceString(sequenceString, {
12328
+ function filterSequenceString(sequenceString = "", {
12329
12329
  additionalValidChars = "",
12330
12330
  isOligo,
12331
12331
  name,
@@ -12410,6 +12410,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
12410
12410
  );
12411
12411
  }
12412
12412
  __name(getReplaceChars, "getReplaceChars");
12413
+ const filterRnaString = /* @__PURE__ */ __name((s, o) => filterSequenceString(s, __spreadProps(__spreadValues({}, o), { isRna: true }))[0], "filterRnaString");
12413
12414
  function tidyUpAnnotation(_annotation, {
12414
12415
  sequenceData = {},
12415
12416
  convertAnnotationsFromAAIndices,
@@ -13330,11 +13331,12 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
13330
13331
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13331
13332
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13332
13333
  const { maintainOriginSplit } = options;
13333
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13334
- const sequenceDataToInsert = tidyUpSequenceData(
13335
- _sequenceDataToInsert,
13336
- options
13337
- );
13334
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({
13335
+ doNotRemoveInvalidChars: true
13336
+ }, options));
13337
+ const sequenceDataToInsert = tidyUpSequenceData(_sequenceDataToInsert, __spreadValues({
13338
+ topLevelSeqData: existingSequenceData
13339
+ }, options));
13338
13340
  const newSequenceData = lodashExports.cloneDeep(existingSequenceData);
13339
13341
  const insertLength = sequenceDataToInsert.proteinSequence ? sequenceDataToInsert.proteinSequence.length * 3 : sequenceDataToInsert.sequence.length;
13340
13342
  let caretPosition = caretPositionOrRange;
@@ -21356,10 +21358,13 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21356
21358
  );
21357
21359
  const aaArray = [];
21358
21360
  let aaString = "";
21359
- aminoAcidsPerBase.forEach((aa) => {
21361
+ aminoAcidsPerBase.forEach((aa, index) => {
21360
21362
  if (!aa.fullCodon) {
21361
21363
  return;
21362
21364
  }
21365
+ if (index === aminoAcidsPerBase.length - 1 && aa.aminoAcid.value === "*") {
21366
+ return;
21367
+ }
21363
21368
  aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
21364
21369
  });
21365
21370
  aaString = aaArray.join("");
@@ -21543,7 +21548,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21543
21548
  if (!range)
21544
21549
  return seqData;
21545
21550
  const { exclude = {}, excludePartial = {} } = options;
21546
- const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21551
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({
21552
+ doNotRemoveInvalidChars: true
21553
+ }, options));
21547
21554
  annotationTypes.forEach((type) => {
21548
21555
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21549
21556
  });
@@ -21594,9 +21601,13 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21594
21601
  }
21595
21602
  });
21596
21603
  });
21597
- return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21604
+ return tidyUpSequenceData(toRet, __spreadValues({
21605
+ doNotRemoveInvalidChars: true
21606
+ }, options));
21598
21607
  }
21599
- return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21608
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({
21609
+ doNotRemoveInvalidChars: true
21610
+ }, options));
21600
21611
  }
21601
21612
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21602
21613
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21643,7 +21654,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21643
21654
  const newSeqObj = Object.assign({}, seqObj, {
21644
21655
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21645
21656
  });
21646
- return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21657
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21658
+ doNotRemoveInvalidChars: true
21659
+ }, options));
21647
21660
  }
21648
21661
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21649
21662
  function getCutsiteType(restrictionEnzyme) {
@@ -22738,6 +22751,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
22738
22751
  exports2.deleteSequenceDataAtRange = deleteSequenceDataAtRange;
22739
22752
  exports2.doesEnzymeChopOutsideOfRecognitionSite = doesEnzymeChopOutsideOfRecognitionSite;
22740
22753
  exports2.featureColors = featureColors;
22754
+ exports2.filterRnaString = filterRnaString;
22741
22755
  exports2.filterSequenceString = filterSequenceString;
22742
22756
  exports2.findNearestRangeOfSequenceOverlapToPosition = findNearestRangeOfSequenceOverlapToPosition;
22743
22757
  exports2.findOrfsInPlasmid = findOrfsInPlasmid;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/sequence-utils",
3
- "version": "0.3.12",
3
+ "version": "0.3.14",
4
4
  "dependencies": {
5
5
  "@teselagen/range-utils": "0.3.7",
6
6
  "bson-objectid": "^2.0.4",
@@ -5,7 +5,7 @@ import {
5
5
  } from "./bioData";
6
6
 
7
7
  export default function filterSequenceString(
8
- sequenceString,
8
+ sequenceString = "",
9
9
  {
10
10
  additionalValidChars = "",
11
11
  isOligo,
@@ -111,3 +111,6 @@ export function getReplaceChars({
111
111
  : //just plain old dna
112
112
  {};
113
113
  }
114
+
115
+ export const filterRnaString = (s, o) =>
116
+ filterSequenceString(s, { ...o, isRna: true })[0];
@@ -7,10 +7,14 @@ export default function getAminoAcidStringFromSequenceString(sequenceString) {
7
7
  );
8
8
  const aaArray = [];
9
9
  let aaString = "";
10
- aminoAcidsPerBase.forEach(aa => {
10
+ aminoAcidsPerBase.forEach((aa, index) => {
11
11
  if (!aa.fullCodon) {
12
12
  return;
13
13
  }
14
+ // Check if the current amino acid is the last in the sequence and is a stop codon
15
+ if (index === aminoAcidsPerBase.length - 1 && aa.aminoAcid.value === '*') {
16
+ return;
17
+ }
14
18
  aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
15
19
  });
16
20
  aaString = aaArray.join("");
@@ -14,5 +14,6 @@ describe("getAminoAcidStringFromSequenceString", () => {
14
14
  assert.equal("MM", getAminoAcidStringFromSequenceString("atgatg"));
15
15
  assert.equal("M--", getAminoAcidStringFromSequenceString("atg------"));
16
16
  assert.equal("", getAminoAcidStringFromSequenceString("at"));
17
+ assert.equal("MTNYNQKNEN", getAminoAcidStringFromSequenceString("atgactaattataatcaaaaaaatgaaaattaa"));
17
18
  });
18
19
  });
@@ -15,5 +15,8 @@ export default function getComplementSequenceAndAnnotations(
15
15
  const newSeqObj = Object.assign({}, seqObj, {
16
16
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
17
17
  });
18
- return tidyUpSequenceData(newSeqObj, {doNotRemoveInvalidChars: true,...options});
18
+ return tidyUpSequenceData(newSeqObj, {
19
+ doNotRemoveInvalidChars: true,
20
+ ...options
21
+ });
19
22
  }
@@ -16,7 +16,10 @@ export default function getSequenceDataBetweenRange(
16
16
  ) {
17
17
  if (!range) return seqData;
18
18
  const { exclude = {}, excludePartial = {} } = options;
19
- const seqDataToUse = tidyUpSequenceData(seqData, {doNotRemoveInvalidChars: true,...options});
19
+ const seqDataToUse = tidyUpSequenceData(seqData, {
20
+ doNotRemoveInvalidChars: true,
21
+ ...options
22
+ });
20
23
  annotationTypes.forEach(type => {
21
24
  delete seqDataToUse[`filtered${startCase(type)}`];
22
25
  });
@@ -78,10 +81,16 @@ export default function getSequenceDataBetweenRange(
78
81
  }
79
82
  });
80
83
  });
81
- return tidyUpSequenceData(toRet, {doNotRemoveInvalidChars: true,...options});
84
+ return tidyUpSequenceData(toRet, {
85
+ doNotRemoveInvalidChars: true,
86
+ ...options
87
+ });
82
88
  }
83
89
 
84
- return tidyUpSequenceData(seqDataToReturn, {doNotRemoveInvalidChars: true,...options});
90
+ return tidyUpSequenceData(seqDataToReturn, {
91
+ doNotRemoveInvalidChars: true,
92
+ ...options
93
+ });
85
94
  }
86
95
 
87
96
  function getAnnotationsBetweenRange(
package/src/index.js CHANGED
@@ -51,7 +51,10 @@ export { default as aliasedEnzymesByName } from "./aliasedEnzymesByName";
51
51
  export { default as defaultEnzymesByName } from "./defaultEnzymesByName";
52
52
  export { default as generateSequenceData } from "./generateSequenceData";
53
53
  export { default as generateAnnotations } from "./generateAnnotations";
54
- export { default as filterSequenceString } from "./filterSequenceString";
54
+ export {
55
+ default as filterSequenceString,
56
+ filterRnaString
57
+ } from "./filterSequenceString";
55
58
  export { default as findNearestRangeOfSequenceOverlapToPosition } from "./findNearestRangeOfSequenceOverlapToPosition";
56
59
  export { default as findOrfsInPlasmid } from "./findOrfsInPlasmid";
57
60
  export { default as findSequenceMatches } from "./findSequenceMatches";
@@ -18,11 +18,14 @@ export default function insertSequenceDataAtPositionOrRange(
18
18
  //when inserting new seq, n bps of the new seq should go in before the origin and the rest should be
19
19
  //inserted at the sequence start
20
20
  const { maintainOriginSplit } = options;
21
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, {doNotRemoveInvalidChars: true,...options});
22
- const sequenceDataToInsert = tidyUpSequenceData(
23
- _sequenceDataToInsert,
24
- options
25
- );
21
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, {
22
+ doNotRemoveInvalidChars: true,
23
+ ...options
24
+ });
25
+ const sequenceDataToInsert = tidyUpSequenceData(_sequenceDataToInsert, {
26
+ topLevelSeqData: existingSequenceData,
27
+ ...options
28
+ });
26
29
  const newSequenceData = cloneDeep(existingSequenceData);
27
30
  const insertLength = sequenceDataToInsert.proteinSequence
28
31
  ? sequenceDataToInsert.proteinSequence.length * 3