@teselagen/sequence-utils 0.3.10 → 0.3.12

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.
package/bioData.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export const protein_letters: "ACDEFGHIKLMNPQRSTVWY";
2
2
  export const protein_letters_withUandX: "ACDEFGHIKLMNPQRSTVWYUX";
3
- export const extended_protein_letters: "ACDEFGHIKLMNPQRSTVWYBXZJUO*";
3
+ export const extended_protein_letters: "ACDEFGHIKLMNPQRSTVWYBXZJUO";
4
4
  export const ambiguous_dna_letters: "GATCRYWSMKHBVDN";
5
5
  export const unambiguous_dna_letters: "GATC";
6
6
  export const ambiguous_rna_letters: "GAUCRYWSMKHBVDN";
@@ -1,4 +1,4 @@
1
- export default function filterSequenceString(sequenceString: any, { additionalValidChars, isOligo, name, isProtein, isRna, isMixedRnaAndDna, }?: {
1
+ export default function filterSequenceString(sequenceString: any, { additionalValidChars, isOligo, name, isProtein, isRna, isMixedRnaAndDna }?: {
2
2
  additionalValidChars?: string | undefined;
3
3
  isOligo: any;
4
4
  name: any;
@@ -6,7 +6,7 @@ export default function filterSequenceString(sequenceString: any, { additionalVa
6
6
  isRna: any;
7
7
  isMixedRnaAndDna: any;
8
8
  }): (string | string[])[];
9
- export function getAcceptedChars({ isOligo, isProtein, isRna, isMixedRnaAndDna, }?: {
9
+ export function getAcceptedChars({ isOligo, isProtein, isRna, isMixedRnaAndDna }?: {
10
10
  isOligo: any;
11
11
  isProtein: any;
12
12
  isRna: any;
package/index.js CHANGED
@@ -6000,7 +6000,7 @@ lodash.exports;
6000
6000
  var lodashExports = lodash.exports;
6001
6001
  const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
6002
6002
  const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
6003
- const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO*";
6003
+ const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO";
6004
6004
  const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
6005
6005
  const unambiguous_dna_letters = "GATC";
6006
6006
  const ambiguous_rna_letters = "GAUCRYWSMKHBVDN";
@@ -6056,7 +6056,7 @@ const extended_protein_values = {
6056
6056
  Y: "Y",
6057
6057
  Z: "QE",
6058
6058
  "*": "\\*\\.",
6059
- ".": "\\.\\.",
6059
+ ".": "\\.",
6060
6060
  "-": "\\-"
6061
6061
  };
6062
6062
  const bioData = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -12399,9 +12399,12 @@ function getReplaceChars({
12399
12399
  isRna,
12400
12400
  isMixedRnaAndDna
12401
12401
  } = {}) {
12402
- return isProtein ? {} : isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12403
- //just plain old dna
12404
- {}
12402
+ return isProtein ? {} : (
12403
+ // {".": "*"}
12404
+ isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12405
+ //just plain old dna
12406
+ {}
12407
+ )
12405
12408
  );
12406
12409
  }
12407
12410
  __name(getReplaceChars, "getReplaceChars");
@@ -12672,11 +12675,13 @@ __name(tidyUpSequenceData, "tidyUpSequenceData");
12672
12675
  const getDiffFromSeqs = /* @__PURE__ */ __name((oldData, newData, { ignoreKeys = [] } = {}) => {
12673
12676
  oldData = tidyUpSequenceData(oldData, {
12674
12677
  annotationsAsObjects: true,
12675
- noTranslationData: true
12678
+ noTranslationData: true,
12679
+ doNotRemoveInvalidChars: true
12676
12680
  });
12677
12681
  newData = tidyUpSequenceData(newData, {
12678
12682
  annotationsAsObjects: true,
12679
- noTranslationData: true
12683
+ noTranslationData: true,
12684
+ doNotRemoveInvalidChars: true
12680
12685
  });
12681
12686
  [oldData, newData].forEach((d) => {
12682
12687
  [
@@ -12708,7 +12713,10 @@ const patchSeqWithDiff = /* @__PURE__ */ __name((oldData, diff, { ignoreKeys = [
12708
12713
  delete diff[k];
12709
12714
  });
12710
12715
  return jsondiffpatch_umdExports.patch(
12711
- tidyUpSequenceData(lodashExports.cloneDeep(oldData), { annotationsAsObjects: true }),
12716
+ tidyUpSequenceData(lodashExports.cloneDeep(oldData), {
12717
+ annotationsAsObjects: true,
12718
+ doNotRemoveInvalidChars: true
12719
+ }),
12712
12720
  diff
12713
12721
  );
12714
12722
  }, "patchSeqWithDiff");
@@ -13281,7 +13289,9 @@ function arrayRotate(arr, count) {
13281
13289
  }
13282
13290
  __name(arrayRotate, "arrayRotate");
13283
13291
  function rotateSequenceDataToPosition(sequenceData, caretPosition, options) {
13284
- const newSequenceData = tidyUpSequenceData(sequenceData, options);
13292
+ const newSequenceData = tidyUpSequenceData(sequenceData, __spreadValues({
13293
+ doNotRemoveInvalidChars: true
13294
+ }, options));
13285
13295
  newSequenceData.sequence = rotateBpsToPosition(
13286
13296
  newSequenceData.sequence,
13287
13297
  caretPosition
@@ -13318,7 +13328,7 @@ function adjustAnnotationsToInsert(annotationsToBeAdjusted, insertStart, insertL
13318
13328
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13319
13329
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13320
13330
  const { maintainOriginSplit } = options;
13321
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, options);
13331
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13322
13332
  const sequenceDataToInsert = tidyUpSequenceData(
13323
13333
  _sequenceDataToInsert,
13324
13334
  options
@@ -13336,6 +13346,7 @@ function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSeq
13336
13346
  return acc[type] = [];
13337
13347
  }, {})), {
13338
13348
  sequence: "",
13349
+ doNotRemoveInvalidChars: true,
13339
13350
  proteinSequence: "",
13340
13351
  chromatogramData: void 0
13341
13352
  }),
@@ -21530,7 +21541,7 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21530
21541
  if (!range)
21531
21542
  return seqData;
21532
21543
  const { exclude = {}, excludePartial = {} } = options;
21533
- const seqDataToUse = tidyUpSequenceData(seqData, options);
21544
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21534
21545
  annotationTypes.forEach((type) => {
21535
21546
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21536
21547
  });
@@ -21581,9 +21592,9 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21581
21592
  }
21582
21593
  });
21583
21594
  });
21584
- return tidyUpSequenceData(toRet, options);
21595
+ return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21585
21596
  }
21586
- return tidyUpSequenceData(seqDataToReturn, options);
21597
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21587
21598
  }
21588
21599
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21589
21600
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21630,7 +21641,7 @@ function getComplementSequenceAndAnnotations(pSeqObj, options = {}) {
21630
21641
  const newSeqObj = Object.assign({}, seqObj, {
21631
21642
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21632
21643
  });
21633
- return tidyUpSequenceData(newSeqObj, options);
21644
+ return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21634
21645
  }
21635
21646
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21636
21647
  function getCutsiteType(restrictionEnzyme) {
@@ -21836,7 +21847,7 @@ __name(getReverseComplementAnnotation, "getReverseComplementAnnotation");
21836
21847
  function getReverseComplementSequenceAndAnnoations(pSeqObj, options = {}) {
21837
21848
  const seqObj = tidyUpSequenceData(
21838
21849
  getSequenceDataBetweenRange(pSeqObj, options.range),
21839
- options
21850
+ __spreadValues({ doNotRemoveInvalidChars: true }, options)
21840
21851
  );
21841
21852
  const newSeqObj = Object.assign(
21842
21853
  {},
@@ -21856,7 +21867,9 @@ function getReverseComplementSequenceAndAnnoations(pSeqObj, options = {}) {
21856
21867
  return acc;
21857
21868
  }, {})
21858
21869
  );
21859
- return tidyUpSequenceData(newSeqObj, options);
21870
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21871
+ doNotRemoveInvalidChars: true
21872
+ }, options));
21860
21873
  }
21861
21874
  __name(getReverseComplementSequenceAndAnnoations, "getReverseComplementSequenceAndAnnoations");
21862
21875
  function getReverseSequenceString(sequence) {
package/index.mjs CHANGED
@@ -5998,7 +5998,7 @@ lodash.exports;
5998
5998
  var lodashExports = lodash.exports;
5999
5999
  const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
6000
6000
  const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
6001
- const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO*";
6001
+ const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO";
6002
6002
  const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
6003
6003
  const unambiguous_dna_letters = "GATC";
6004
6004
  const ambiguous_rna_letters = "GAUCRYWSMKHBVDN";
@@ -6054,7 +6054,7 @@ const extended_protein_values = {
6054
6054
  Y: "Y",
6055
6055
  Z: "QE",
6056
6056
  "*": "\\*\\.",
6057
- ".": "\\.\\.",
6057
+ ".": "\\.",
6058
6058
  "-": "\\-"
6059
6059
  };
6060
6060
  const bioData = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -12397,9 +12397,12 @@ function getReplaceChars({
12397
12397
  isRna,
12398
12398
  isMixedRnaAndDna
12399
12399
  } = {}) {
12400
- return isProtein ? {} : isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12401
- //just plain old dna
12402
- {}
12400
+ return isProtein ? {} : (
12401
+ // {".": "*"}
12402
+ isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12403
+ //just plain old dna
12404
+ {}
12405
+ )
12403
12406
  );
12404
12407
  }
12405
12408
  __name(getReplaceChars, "getReplaceChars");
@@ -12670,11 +12673,13 @@ __name(tidyUpSequenceData, "tidyUpSequenceData");
12670
12673
  const getDiffFromSeqs = /* @__PURE__ */ __name((oldData, newData, { ignoreKeys = [] } = {}) => {
12671
12674
  oldData = tidyUpSequenceData(oldData, {
12672
12675
  annotationsAsObjects: true,
12673
- noTranslationData: true
12676
+ noTranslationData: true,
12677
+ doNotRemoveInvalidChars: true
12674
12678
  });
12675
12679
  newData = tidyUpSequenceData(newData, {
12676
12680
  annotationsAsObjects: true,
12677
- noTranslationData: true
12681
+ noTranslationData: true,
12682
+ doNotRemoveInvalidChars: true
12678
12683
  });
12679
12684
  [oldData, newData].forEach((d) => {
12680
12685
  [
@@ -12706,7 +12711,10 @@ const patchSeqWithDiff = /* @__PURE__ */ __name((oldData, diff, { ignoreKeys = [
12706
12711
  delete diff[k];
12707
12712
  });
12708
12713
  return jsondiffpatch_umdExports.patch(
12709
- tidyUpSequenceData(lodashExports.cloneDeep(oldData), { annotationsAsObjects: true }),
12714
+ tidyUpSequenceData(lodashExports.cloneDeep(oldData), {
12715
+ annotationsAsObjects: true,
12716
+ doNotRemoveInvalidChars: true
12717
+ }),
12710
12718
  diff
12711
12719
  );
12712
12720
  }, "patchSeqWithDiff");
@@ -13279,7 +13287,9 @@ function arrayRotate(arr, count) {
13279
13287
  }
13280
13288
  __name(arrayRotate, "arrayRotate");
13281
13289
  function rotateSequenceDataToPosition(sequenceData, caretPosition, options) {
13282
- const newSequenceData = tidyUpSequenceData(sequenceData, options);
13290
+ const newSequenceData = tidyUpSequenceData(sequenceData, __spreadValues({
13291
+ doNotRemoveInvalidChars: true
13292
+ }, options));
13283
13293
  newSequenceData.sequence = rotateBpsToPosition(
13284
13294
  newSequenceData.sequence,
13285
13295
  caretPosition
@@ -13316,7 +13326,7 @@ function adjustAnnotationsToInsert(annotationsToBeAdjusted, insertStart, insertL
13316
13326
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13317
13327
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13318
13328
  const { maintainOriginSplit } = options;
13319
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, options);
13329
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13320
13330
  const sequenceDataToInsert = tidyUpSequenceData(
13321
13331
  _sequenceDataToInsert,
13322
13332
  options
@@ -13334,6 +13344,7 @@ function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSeq
13334
13344
  return acc[type] = [];
13335
13345
  }, {})), {
13336
13346
  sequence: "",
13347
+ doNotRemoveInvalidChars: true,
13337
13348
  proteinSequence: "",
13338
13349
  chromatogramData: void 0
13339
13350
  }),
@@ -21528,7 +21539,7 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21528
21539
  if (!range)
21529
21540
  return seqData;
21530
21541
  const { exclude = {}, excludePartial = {} } = options;
21531
- const seqDataToUse = tidyUpSequenceData(seqData, options);
21542
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21532
21543
  annotationTypes.forEach((type) => {
21533
21544
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21534
21545
  });
@@ -21579,9 +21590,9 @@ function getSequenceDataBetweenRange(seqData, range, options = {}) {
21579
21590
  }
21580
21591
  });
21581
21592
  });
21582
- return tidyUpSequenceData(toRet, options);
21593
+ return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21583
21594
  }
21584
- return tidyUpSequenceData(seqDataToReturn, options);
21595
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21585
21596
  }
21586
21597
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21587
21598
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21628,7 +21639,7 @@ function getComplementSequenceAndAnnotations(pSeqObj, options = {}) {
21628
21639
  const newSeqObj = Object.assign({}, seqObj, {
21629
21640
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21630
21641
  });
21631
- return tidyUpSequenceData(newSeqObj, options);
21642
+ return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21632
21643
  }
21633
21644
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21634
21645
  function getCutsiteType(restrictionEnzyme) {
@@ -21834,7 +21845,7 @@ __name(getReverseComplementAnnotation, "getReverseComplementAnnotation");
21834
21845
  function getReverseComplementSequenceAndAnnoations(pSeqObj, options = {}) {
21835
21846
  const seqObj = tidyUpSequenceData(
21836
21847
  getSequenceDataBetweenRange(pSeqObj, options.range),
21837
- options
21848
+ __spreadValues({ doNotRemoveInvalidChars: true }, options)
21838
21849
  );
21839
21850
  const newSeqObj = Object.assign(
21840
21851
  {},
@@ -21854,7 +21865,9 @@ function getReverseComplementSequenceAndAnnoations(pSeqObj, options = {}) {
21854
21865
  return acc;
21855
21866
  }, {})
21856
21867
  );
21857
- return tidyUpSequenceData(newSeqObj, options);
21868
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21869
+ doNotRemoveInvalidChars: true
21870
+ }, options));
21858
21871
  }
21859
21872
  __name(getReverseComplementSequenceAndAnnoations, "getReverseComplementSequenceAndAnnoations");
21860
21873
  function getReverseSequenceString(sequence) {
package/index.umd.js CHANGED
@@ -6002,7 +6002,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
6002
6002
  var lodashExports = lodash.exports;
6003
6003
  const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
6004
6004
  const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
6005
- const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO*";
6005
+ const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO";
6006
6006
  const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
6007
6007
  const unambiguous_dna_letters = "GATC";
6008
6008
  const ambiguous_rna_letters = "GAUCRYWSMKHBVDN";
@@ -6058,7 +6058,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
6058
6058
  Y: "Y",
6059
6059
  Z: "QE",
6060
6060
  "*": "\\*\\.",
6061
- ".": "\\.\\.",
6061
+ ".": "\\.",
6062
6062
  "-": "\\-"
6063
6063
  };
6064
6064
  const bioData = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -12401,9 +12401,12 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
12401
12401
  isRna,
12402
12402
  isMixedRnaAndDna
12403
12403
  } = {}) {
12404
- return isProtein ? {} : isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12405
- //just plain old dna
12406
- {}
12404
+ return isProtein ? {} : (
12405
+ // {".": "*"}
12406
+ isOligo ? {} : isRna ? { t: "u" } : isMixedRnaAndDna ? {} : (
12407
+ //just plain old dna
12408
+ {}
12409
+ )
12407
12410
  );
12408
12411
  }
12409
12412
  __name(getReplaceChars, "getReplaceChars");
@@ -12674,11 +12677,13 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
12674
12677
  const getDiffFromSeqs = /* @__PURE__ */ __name((oldData, newData, { ignoreKeys = [] } = {}) => {
12675
12678
  oldData = tidyUpSequenceData(oldData, {
12676
12679
  annotationsAsObjects: true,
12677
- noTranslationData: true
12680
+ noTranslationData: true,
12681
+ doNotRemoveInvalidChars: true
12678
12682
  });
12679
12683
  newData = tidyUpSequenceData(newData, {
12680
12684
  annotationsAsObjects: true,
12681
- noTranslationData: true
12685
+ noTranslationData: true,
12686
+ doNotRemoveInvalidChars: true
12682
12687
  });
12683
12688
  [oldData, newData].forEach((d) => {
12684
12689
  [
@@ -12710,7 +12715,10 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
12710
12715
  delete diff[k];
12711
12716
  });
12712
12717
  return jsondiffpatch_umdExports.patch(
12713
- tidyUpSequenceData(lodashExports.cloneDeep(oldData), { annotationsAsObjects: true }),
12718
+ tidyUpSequenceData(lodashExports.cloneDeep(oldData), {
12719
+ annotationsAsObjects: true,
12720
+ doNotRemoveInvalidChars: true
12721
+ }),
12714
12722
  diff
12715
12723
  );
12716
12724
  }, "patchSeqWithDiff");
@@ -13283,7 +13291,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
13283
13291
  }
13284
13292
  __name(arrayRotate, "arrayRotate");
13285
13293
  function rotateSequenceDataToPosition(sequenceData, caretPosition, options) {
13286
- const newSequenceData = tidyUpSequenceData(sequenceData, options);
13294
+ const newSequenceData = tidyUpSequenceData(sequenceData, __spreadValues({
13295
+ doNotRemoveInvalidChars: true
13296
+ }, options));
13287
13297
  newSequenceData.sequence = rotateBpsToPosition(
13288
13298
  newSequenceData.sequence,
13289
13299
  caretPosition
@@ -13320,7 +13330,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
13320
13330
  __name(adjustAnnotationsToInsert, "adjustAnnotationsToInsert");
13321
13331
  function insertSequenceDataAtPositionOrRange(_sequenceDataToInsert, _existingSequenceData, caretPositionOrRange, options = {}) {
13322
13332
  const { maintainOriginSplit } = options;
13323
- let existingSequenceData = tidyUpSequenceData(_existingSequenceData, options);
13333
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
13324
13334
  const sequenceDataToInsert = tidyUpSequenceData(
13325
13335
  _sequenceDataToInsert,
13326
13336
  options
@@ -13338,6 +13348,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
13338
13348
  return acc[type] = [];
13339
13349
  }, {})), {
13340
13350
  sequence: "",
13351
+ doNotRemoveInvalidChars: true,
13341
13352
  proteinSequence: "",
13342
13353
  chromatogramData: void 0
13343
13354
  }),
@@ -21532,7 +21543,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21532
21543
  if (!range)
21533
21544
  return seqData;
21534
21545
  const { exclude = {}, excludePartial = {} } = options;
21535
- const seqDataToUse = tidyUpSequenceData(seqData, options);
21546
+ const seqDataToUse = tidyUpSequenceData(seqData, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21536
21547
  annotationTypes.forEach((type) => {
21537
21548
  delete seqDataToUse[`filtered${lodashExports.startCase(type)}`];
21538
21549
  });
@@ -21583,9 +21594,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21583
21594
  }
21584
21595
  });
21585
21596
  });
21586
- return tidyUpSequenceData(toRet, options);
21597
+ return tidyUpSequenceData(toRet, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21587
21598
  }
21588
- return tidyUpSequenceData(seqDataToReturn, options);
21599
+ return tidyUpSequenceData(seqDataToReturn, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21589
21600
  }
21590
21601
  __name(getSequenceDataBetweenRange, "getSequenceDataBetweenRange");
21591
21602
  function getAnnotationsBetweenRange(annotationsToBeAdjusted, range, maxLength, shouldExcludePartial) {
@@ -21632,7 +21643,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21632
21643
  const newSeqObj = Object.assign({}, seqObj, {
21633
21644
  sequence: getComplementSequenceString(seqObj.sequence, seqObj.isRna)
21634
21645
  });
21635
- return tidyUpSequenceData(newSeqObj, options);
21646
+ return tidyUpSequenceData(newSeqObj, __spreadValues({ doNotRemoveInvalidChars: true }, options));
21636
21647
  }
21637
21648
  __name(getComplementSequenceAndAnnotations, "getComplementSequenceAndAnnotations");
21638
21649
  function getCutsiteType(restrictionEnzyme) {
@@ -21838,7 +21849,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21838
21849
  function getReverseComplementSequenceAndAnnoations(pSeqObj, options = {}) {
21839
21850
  const seqObj = tidyUpSequenceData(
21840
21851
  getSequenceDataBetweenRange(pSeqObj, options.range),
21841
- options
21852
+ __spreadValues({ doNotRemoveInvalidChars: true }, options)
21842
21853
  );
21843
21854
  const newSeqObj = Object.assign(
21844
21855
  {},
@@ -21858,7 +21869,9 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
21858
21869
  return acc;
21859
21870
  }, {})
21860
21871
  );
21861
- return tidyUpSequenceData(newSeqObj, options);
21872
+ return tidyUpSequenceData(newSeqObj, __spreadValues({
21873
+ doNotRemoveInvalidChars: true
21874
+ }, options));
21862
21875
  }
21863
21876
  __name(getReverseComplementSequenceAndAnnoations, "getReverseComplementSequenceAndAnnoations");
21864
21877
  function getReverseSequenceString(sequence) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/sequence-utils",
3
- "version": "0.3.10",
3
+ "version": "0.3.12",
4
4
  "dependencies": {
5
5
  "@teselagen/range-utils": "0.3.7",
6
6
  "bson-objectid": "^2.0.4",
package/src/bioData.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  export const protein_letters = "ACDEFGHIKLMNPQRSTVWY";
4
4
  export const protein_letters_withUandX = "ACDEFGHIKLMNPQRSTVWYUX";
5
- export const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO*";
5
+ export const extended_protein_letters = "ACDEFGHIKLMNPQRSTVWYBXZJUO";
6
6
  export const ambiguous_dna_letters = "GATCRYWSMKHBVDN";
7
7
  export const unambiguous_dna_letters = "GATC";
8
8
  export const ambiguous_rna_letters = "GAUCRYWSMKHBVDN";
@@ -60,6 +60,6 @@ export const extended_protein_values = {
60
60
  Y: "Y",
61
61
  Z: "QE",
62
62
  "*": "\\*\\.",
63
- ".": "\\.\\.",
63
+ ".": "\\.",
64
64
  "-": "\\-"
65
65
  };
package/src/diffUtils.js CHANGED
@@ -6,11 +6,13 @@ import tidyUpSequenceData from "./tidyUpSequenceData";
6
6
  const getDiffFromSeqs = (oldData, newData, { ignoreKeys = [] } = {}) => {
7
7
  oldData = tidyUpSequenceData(oldData, {
8
8
  annotationsAsObjects: true,
9
- noTranslationData: true
9
+ noTranslationData: true,
10
+ doNotRemoveInvalidChars: true
10
11
  });
11
12
  newData = tidyUpSequenceData(newData, {
12
13
  annotationsAsObjects: true,
13
- noTranslationData: true
14
+ noTranslationData: true,
15
+ doNotRemoveInvalidChars: true
14
16
  });
15
17
 
16
18
  [oldData, newData].forEach(d => {
@@ -47,7 +49,10 @@ const patchSeqWithDiff = (oldData, diff, { ignoreKeys = [] } = {}) => {
47
49
  delete diff[k];
48
50
  });
49
51
  return patch(
50
- tidyUpSequenceData(cloneDeep(oldData), { annotationsAsObjects: true }),
52
+ tidyUpSequenceData(cloneDeep(oldData), {
53
+ annotationsAsObjects: true,
54
+ doNotRemoveInvalidChars: true
55
+ }),
51
56
  diff
52
57
  );
53
58
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ambiguous_dna_letters,
3
3
  ambiguous_rna_letters,
4
- extended_protein_letters,
4
+ extended_protein_letters
5
5
  } from "./bioData";
6
6
 
7
7
  export default function filterSequenceString(
@@ -12,14 +12,14 @@ export default function filterSequenceString(
12
12
  name,
13
13
  isProtein,
14
14
  isRna,
15
- isMixedRnaAndDna,
15
+ isMixedRnaAndDna
16
16
  } = {}
17
17
  ) {
18
18
  const acceptedChars = getAcceptedChars({
19
19
  isOligo,
20
20
  isProtein,
21
21
  isRna,
22
- isMixedRnaAndDna,
22
+ isMixedRnaAndDna
23
23
  });
24
24
  const replaceChars = getReplaceChars({
25
25
  isOligo,
@@ -80,7 +80,7 @@ export function getAcceptedChars({
80
80
  isOligo,
81
81
  isProtein,
82
82
  isRna,
83
- isMixedRnaAndDna,
83
+ isMixedRnaAndDna
84
84
  } = {}) {
85
85
  return isProtein
86
86
  ? `${extended_protein_letters.toLowerCase()}}`
@@ -101,8 +101,8 @@ export function getReplaceChars({
101
101
  } = {}) {
102
102
  return isProtein
103
103
  ? {}
104
- // {".": "*"}
105
- : isOligo
104
+ : // {".": "*"}
105
+ isOligo
106
106
  ? {}
107
107
  : isRna
108
108
  ? { t: "u" }
@@ -50,7 +50,9 @@ describe("filterSequenceString", () => {
50
50
  }
51
51
  );
52
52
  // expect(warnings[0]).toBe(`Replaced "." with "*" 2 times`);
53
- expect(warnings[0]).toBe( 'Invalid character(s) detected and removed: 3, 4, 2, ", ", ", ,, ,, ., ., / ');
53
+ expect(warnings[0]).toBe(
54
+ 'Invalid character(s) detected and removed: 3, 4, 2, ", ", ", ,, ,, ., ., / '
55
+ );
54
56
  expect(str).toBe("bbbxtgalmfwkqespvicyhrnd");
55
57
  });
56
58
  it("when isProtein: true, should handle upper case letters", () => {
@@ -60,11 +62,27 @@ describe("filterSequenceString", () => {
60
62
  expect(warnings.length).toBe(0);
61
63
  expect(str).toBe("xtgalmfWKQEspvicyhrnd");
62
64
  });
65
+
66
+ it("when isProtein: true it should not filter this aa seq", () => {
67
+ const [str] = filterSequenceString(
68
+ "mhhhhhhgsgsmledlkrqvleanlalpkhnlasgssghvsavdrergvfviapsgvdfrimtaddmvvvsietgevvegekppaedtpthrllyqafpsiggivhthsrhatiwaqagqsipatgtthadhfygtipctrkmtdaeingeyewetgnvivetfekqgidaaqmpgvlvhshgpfawgknaedavhnaivleevaymgifcrqlapqlpdmqqtllnkhylrkhgakayygq",
69
+ {
70
+ isProtein: true
71
+ }
72
+ );
73
+
74
+ expect(str).toBe(
75
+ `mhhhhhhgsgsmledlkrqvleanlalpkhnlasgssghvsavdrergvfviapsgvdfrimtaddmvvvsietgevvegekppaedtpthrllyqafpsiggivhthsrhatiwaqagqsipatgtthadhfygtipctrkmtdaeingeyewetgnvivetfekqgidaaqmpgvlvhshgpfawgknaedavhnaivleevaymgifcrqlapqlpdmqqtllnkhylrkhgakayygq`
76
+ );
77
+ });
63
78
  it("when isProtein: true, it should convert . to *", () => {
64
- const [str] = filterSequenceString('BXZJUO*bbb342"""xtgalbmfwkqespvicyhrnd,,../', {
65
- isProtein: true,
66
- });
79
+ const [str] = filterSequenceString(
80
+ 'BXZJUO*bbb342"""xtgalbmfwkqespvicyhrnd,,../',
81
+ {
82
+ isProtein: true
83
+ }
84
+ );
67
85
 
68
- expect(str).toBe("BXZJUO*bbbxtgalbmfwkqespvicyhrnd");
86
+ expect(str).toBe("BXZJUObbbxtgalbmfwkqespvicyhrnd");
69
87
  });
70
88
  });
@@ -15,5 +15,5 @@ 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, options);
18
+ return tidyUpSequenceData(newSeqObj, {doNotRemoveInvalidChars: true,...options});
19
19
  }
@@ -13,7 +13,7 @@ export default function getReverseComplementSequenceAndAnnoations(
13
13
  ) {
14
14
  const seqObj = tidyUpSequenceData(
15
15
  getSequenceDataBetweenRange(pSeqObj, options.range),
16
- options
16
+ { doNotRemoveInvalidChars: true, ...options }
17
17
  );
18
18
  const newSeqObj = Object.assign(
19
19
  {},
@@ -33,5 +33,8 @@ export default function getReverseComplementSequenceAndAnnoations(
33
33
  return acc;
34
34
  }, {})
35
35
  );
36
- return tidyUpSequenceData(newSeqObj, options);
36
+ return tidyUpSequenceData(newSeqObj, {
37
+ doNotRemoveInvalidChars: true,
38
+ ...options
39
+ });
37
40
  }
@@ -16,7 +16,7 @@ export default function getSequenceDataBetweenRange(
16
16
  ) {
17
17
  if (!range) return seqData;
18
18
  const { exclude = {}, excludePartial = {} } = options;
19
- const seqDataToUse = tidyUpSequenceData(seqData, options);
19
+ const seqDataToUse = tidyUpSequenceData(seqData, {doNotRemoveInvalidChars: true,...options});
20
20
  annotationTypes.forEach(type => {
21
21
  delete seqDataToUse[`filtered${startCase(type)}`];
22
22
  });
@@ -78,10 +78,10 @@ export default function getSequenceDataBetweenRange(
78
78
  }
79
79
  });
80
80
  });
81
- return tidyUpSequenceData(toRet, options);
81
+ return tidyUpSequenceData(toRet, {doNotRemoveInvalidChars: true,...options});
82
82
  }
83
83
 
84
- return tidyUpSequenceData(seqDataToReturn, options);
84
+ return tidyUpSequenceData(seqDataToReturn, {doNotRemoveInvalidChars: true,...options});
85
85
  }
86
86
 
87
87
  function getAnnotationsBetweenRange(
@@ -18,7 +18,7 @@ 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, options);
21
+ let existingSequenceData = tidyUpSequenceData(_existingSequenceData, {doNotRemoveInvalidChars: true,...options});
22
22
  const sequenceDataToInsert = tidyUpSequenceData(
23
23
  _sequenceDataToInsert,
24
24
  options
@@ -48,6 +48,7 @@ export default function insertSequenceDataAtPositionOrRange(
48
48
  return (acc[type] = []);
49
49
  }, {}),
50
50
  sequence: "",
51
+ doNotRemoveInvalidChars: true,
51
52
  proteinSequence: "",
52
53
  chromatogramData: undefined
53
54
  },
@@ -135,7 +135,7 @@ describe("insertSequenceData", () => {
135
135
  });
136
136
  it("inserts characters at correct origin spanning range with {maintainOriginSplit: true} option", () => {
137
137
  const sequenceToInsert = {
138
- sequence: "xrrrrry",
138
+ sequence: "crrrrry",
139
139
  // fffffff
140
140
  features: [{ name: "feat1", start: 0, end: 6 }]
141
141
  };
@@ -154,7 +154,7 @@ describe("insertSequenceData", () => {
154
154
  maintainOriginSplit: true
155
155
  }
156
156
  );
157
- postInsertSeq.sequence.should.equal("rrrryagagaxr");
157
+ postInsertSeq.sequence.should.equal("rrrryagagacr");
158
158
  // fffff fff ff
159
159
  postInsertSeq.features.should.containSubset([
160
160
  { name: "feat1", start: 10, end: 4 },
@@ -9,7 +9,10 @@ export default function rotateSequenceDataToPosition(
9
9
  caretPosition,
10
10
  options
11
11
  ) {
12
- const newSequenceData = tidyUpSequenceData(sequenceData, options);
12
+ const newSequenceData = tidyUpSequenceData(sequenceData, {
13
+ doNotRemoveInvalidChars: true,
14
+ ...options
15
+ });
13
16
 
14
17
  //update the sequence
15
18
  newSequenceData.sequence = rotateBpsToPosition(
@@ -6,28 +6,25 @@ chai.use(chaiSubset);
6
6
  chai.should();
7
7
  describe("tidyUpSequenceData", () => {
8
8
  it("should remove invalid chars by default, while handling annotation start,end (and location start,end) truncation correctly", () => {
9
- const res = tidyUpSequenceData(
10
- {
11
- sequence: "http://localhost:3344/Standalone",
12
- features: [
13
- {
14
- start: 3,
15
- end: 20,
16
- locations: [
17
- {
18
- start: "3", //this should be converted to an int :)
19
- end: 5
20
- },
21
- {
22
- start: 10,
23
- end: 20
24
- }
25
- ]
26
- }
27
- ]
28
- },
29
-
30
- );
9
+ const res = tidyUpSequenceData({
10
+ sequence: "http://localhost:3344/Standalone",
11
+ features: [
12
+ {
13
+ start: 3,
14
+ end: 20,
15
+ locations: [
16
+ {
17
+ start: "3", //this should be converted to an int :)
18
+ end: 5
19
+ },
20
+ {
21
+ start: 10,
22
+ end: 20
23
+ }
24
+ ]
25
+ }
26
+ ]
27
+ });
31
28
  res.should.containSubset({
32
29
  sequence: "httcahstStandan",
33
30
  circular: false,
@@ -64,22 +61,22 @@ describe("tidyUpSequenceData", () => {
64
61
  },
65
62
  { convertAnnotationsFromAAIndices: true }
66
63
  );
67
-
64
+
68
65
  res.should.containSubset({
69
66
  aminoAcidDataForEachBaseOfDNA: [],
70
67
  isProtein: true,
71
- size: 57, //size should refer to the DNA length
72
- proteinSize: 19, //proteinSize should refer to the amino acid length
73
- sequence: "ggngcnggnathtgacaytggggngcnggngcnytngcnwsnhtnggnytnhtntrr", //degenerate sequence
74
- proteinSequence: "gagiuhwgagalasjglj*",
68
+ size: 54, //size should refer to the DNA length
69
+ proteinSize: 18, //proteinSize should refer to the amino acid length
70
+ sequence: "ggngcnggnathtgacaytggggngcnggngcnytngcnwsnhtnggnytnhtn", //degenerate sequence
71
+ proteinSequence: "gagiuhwgagalasjglj",
75
72
  circular: false,
76
73
  features: [
77
74
  { start: 9, end: 32, forward: true },
78
- { start: 30, end: 56, forward: true },
75
+ { start: 30, end: 53, forward: true },
79
76
  {
80
77
  name: "iDon'tFit",
81
- start: 54,
82
- end: 56,
78
+ start: 51,
79
+ end: 53,
83
80
  forward: true
84
81
  }
85
82
  ]