@teselagen/sequence-utils 0.3.14 → 0.3.17
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/getAminoAcidStringFromSequenceString.d.ts +3 -1
- package/index.js +26 -12
- package/index.mjs +26 -12
- package/index.umd.js +26 -12
- package/package.json +1 -1
- package/src/filterSequenceString.js +37 -21
- package/src/findSequenceMatches.js +7 -3
- package/src/findSequenceMatches.test.js +6 -6
- package/src/getAminoAcidStringFromSequenceString.js +9 -2
package/index.js
CHANGED
|
@@ -12323,6 +12323,20 @@ const modifiableTypes = [
|
|
|
12323
12323
|
"primers",
|
|
12324
12324
|
"guides"
|
|
12325
12325
|
];
|
|
12326
|
+
let allWarnings = [];
|
|
12327
|
+
let makeToast = /* @__PURE__ */ __name(() => {
|
|
12328
|
+
if (typeof window !== "undefined" && window.toastr && allWarnings.length) {
|
|
12329
|
+
window.toastr.warning(allWarnings.join("\n"));
|
|
12330
|
+
}
|
|
12331
|
+
allWarnings = [];
|
|
12332
|
+
}, "makeToast");
|
|
12333
|
+
makeToast = lodashExports.debounce(makeToast, 200);
|
|
12334
|
+
function showWarnings(warnings) {
|
|
12335
|
+
allWarnings = allWarnings.concat(warnings);
|
|
12336
|
+
makeToast.cancel();
|
|
12337
|
+
makeToast();
|
|
12338
|
+
}
|
|
12339
|
+
__name(showWarnings, "showWarnings");
|
|
12326
12340
|
function filterSequenceString(sequenceString = "", {
|
|
12327
12341
|
additionalValidChars = "",
|
|
12328
12342
|
isOligo,
|
|
@@ -12370,14 +12384,10 @@ function filterSequenceString(sequenceString = "", {
|
|
|
12370
12384
|
});
|
|
12371
12385
|
if (sequenceString.length !== sanitizedVal.length) {
|
|
12372
12386
|
warnings.push(
|
|
12373
|
-
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${invalidChars.slice(0, 100).join(", ")} `
|
|
12387
|
+
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${lodashExports.uniq(invalidChars).slice(0, 100).join(", ")} `
|
|
12374
12388
|
);
|
|
12375
12389
|
}
|
|
12376
|
-
|
|
12377
|
-
warnings.forEach((warning) => {
|
|
12378
|
-
window.toastr.warning(warning);
|
|
12379
|
-
});
|
|
12380
|
-
}
|
|
12390
|
+
showWarnings(warnings);
|
|
12381
12391
|
return [sanitizedVal, warnings];
|
|
12382
12392
|
}
|
|
12383
12393
|
__name(filterSequenceString, "filterSequenceString");
|
|
@@ -21349,7 +21359,7 @@ function escapeStringRegexp(string) {
|
|
|
21349
21359
|
return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
|
|
21350
21360
|
}
|
|
21351
21361
|
__name(escapeStringRegexp, "escapeStringRegexp");
|
|
21352
|
-
function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
21362
|
+
function getAminoAcidStringFromSequenceString(sequenceString, { doNotExcludeAsterisk } = {}) {
|
|
21353
21363
|
const aminoAcidsPerBase = getAminoAcidDataForEachBaseOfDna(
|
|
21354
21364
|
sequenceString,
|
|
21355
21365
|
true
|
|
@@ -21360,7 +21370,7 @@ function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
|
21360
21370
|
if (!aa.fullCodon) {
|
|
21361
21371
|
return;
|
|
21362
21372
|
}
|
|
21363
|
-
if (index
|
|
21373
|
+
if (!doNotExcludeAsterisk && index >= aminoAcidsPerBase.length - 3 && aa.aminoAcid.value === "*") {
|
|
21364
21374
|
return;
|
|
21365
21375
|
}
|
|
21366
21376
|
aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
|
|
@@ -21417,18 +21427,22 @@ function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
|
|
|
21417
21427
|
if (isProteinSearch) {
|
|
21418
21428
|
sequencesToCheck = [
|
|
21419
21429
|
{
|
|
21420
|
-
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse
|
|
21430
|
+
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse, {
|
|
21431
|
+
doNotExcludeAsterisk: true
|
|
21432
|
+
}),
|
|
21421
21433
|
offset: 0
|
|
21422
21434
|
},
|
|
21423
21435
|
{
|
|
21424
21436
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21425
|
-
sequenceToUse.substr(1)
|
|
21437
|
+
sequenceToUse.substr(1),
|
|
21438
|
+
{ doNotExcludeAsterisk: true }
|
|
21426
21439
|
),
|
|
21427
21440
|
offset: 1
|
|
21428
21441
|
},
|
|
21429
21442
|
{
|
|
21430
21443
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21431
|
-
sequenceToUse.substr(2)
|
|
21444
|
+
sequenceToUse.substr(2),
|
|
21445
|
+
{ doNotExcludeAsterisk: true }
|
|
21432
21446
|
),
|
|
21433
21447
|
offset: 2
|
|
21434
21448
|
}
|
|
@@ -21522,7 +21536,7 @@ function getCodonRangeForAASliver(aminoAcidPositionInSequence, aminoAcidSliver,
|
|
|
21522
21536
|
}
|
|
21523
21537
|
__name(getCodonRangeForAASliver, "getCodonRangeForAASliver");
|
|
21524
21538
|
function getComplementAminoAcidStringFromSequenceString(sequenceString) {
|
|
21525
|
-
const aaString = getAminoAcidStringFromSequenceString(sequenceString);
|
|
21539
|
+
const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
|
|
21526
21540
|
return aaString.split("").reverse().join("");
|
|
21527
21541
|
}
|
|
21528
21542
|
__name(getComplementAminoAcidStringFromSequenceString, "getComplementAminoAcidStringFromSequenceString");
|
package/index.mjs
CHANGED
|
@@ -12321,6 +12321,20 @@ const modifiableTypes = [
|
|
|
12321
12321
|
"primers",
|
|
12322
12322
|
"guides"
|
|
12323
12323
|
];
|
|
12324
|
+
let allWarnings = [];
|
|
12325
|
+
let makeToast = /* @__PURE__ */ __name(() => {
|
|
12326
|
+
if (typeof window !== "undefined" && window.toastr && allWarnings.length) {
|
|
12327
|
+
window.toastr.warning(allWarnings.join("\n"));
|
|
12328
|
+
}
|
|
12329
|
+
allWarnings = [];
|
|
12330
|
+
}, "makeToast");
|
|
12331
|
+
makeToast = lodashExports.debounce(makeToast, 200);
|
|
12332
|
+
function showWarnings(warnings) {
|
|
12333
|
+
allWarnings = allWarnings.concat(warnings);
|
|
12334
|
+
makeToast.cancel();
|
|
12335
|
+
makeToast();
|
|
12336
|
+
}
|
|
12337
|
+
__name(showWarnings, "showWarnings");
|
|
12324
12338
|
function filterSequenceString(sequenceString = "", {
|
|
12325
12339
|
additionalValidChars = "",
|
|
12326
12340
|
isOligo,
|
|
@@ -12368,14 +12382,10 @@ function filterSequenceString(sequenceString = "", {
|
|
|
12368
12382
|
});
|
|
12369
12383
|
if (sequenceString.length !== sanitizedVal.length) {
|
|
12370
12384
|
warnings.push(
|
|
12371
|
-
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${invalidChars.slice(0, 100).join(", ")} `
|
|
12385
|
+
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${lodashExports.uniq(invalidChars).slice(0, 100).join(", ")} `
|
|
12372
12386
|
);
|
|
12373
12387
|
}
|
|
12374
|
-
|
|
12375
|
-
warnings.forEach((warning) => {
|
|
12376
|
-
window.toastr.warning(warning);
|
|
12377
|
-
});
|
|
12378
|
-
}
|
|
12388
|
+
showWarnings(warnings);
|
|
12379
12389
|
return [sanitizedVal, warnings];
|
|
12380
12390
|
}
|
|
12381
12391
|
__name(filterSequenceString, "filterSequenceString");
|
|
@@ -21347,7 +21357,7 @@ function escapeStringRegexp(string) {
|
|
|
21347
21357
|
return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
|
|
21348
21358
|
}
|
|
21349
21359
|
__name(escapeStringRegexp, "escapeStringRegexp");
|
|
21350
|
-
function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
21360
|
+
function getAminoAcidStringFromSequenceString(sequenceString, { doNotExcludeAsterisk } = {}) {
|
|
21351
21361
|
const aminoAcidsPerBase = getAminoAcidDataForEachBaseOfDna(
|
|
21352
21362
|
sequenceString,
|
|
21353
21363
|
true
|
|
@@ -21358,7 +21368,7 @@ function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
|
21358
21368
|
if (!aa.fullCodon) {
|
|
21359
21369
|
return;
|
|
21360
21370
|
}
|
|
21361
|
-
if (index
|
|
21371
|
+
if (!doNotExcludeAsterisk && index >= aminoAcidsPerBase.length - 3 && aa.aminoAcid.value === "*") {
|
|
21362
21372
|
return;
|
|
21363
21373
|
}
|
|
21364
21374
|
aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
|
|
@@ -21415,18 +21425,22 @@ function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
|
|
|
21415
21425
|
if (isProteinSearch) {
|
|
21416
21426
|
sequencesToCheck = [
|
|
21417
21427
|
{
|
|
21418
|
-
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse
|
|
21428
|
+
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse, {
|
|
21429
|
+
doNotExcludeAsterisk: true
|
|
21430
|
+
}),
|
|
21419
21431
|
offset: 0
|
|
21420
21432
|
},
|
|
21421
21433
|
{
|
|
21422
21434
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21423
|
-
sequenceToUse.substr(1)
|
|
21435
|
+
sequenceToUse.substr(1),
|
|
21436
|
+
{ doNotExcludeAsterisk: true }
|
|
21424
21437
|
),
|
|
21425
21438
|
offset: 1
|
|
21426
21439
|
},
|
|
21427
21440
|
{
|
|
21428
21441
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21429
|
-
sequenceToUse.substr(2)
|
|
21442
|
+
sequenceToUse.substr(2),
|
|
21443
|
+
{ doNotExcludeAsterisk: true }
|
|
21430
21444
|
),
|
|
21431
21445
|
offset: 2
|
|
21432
21446
|
}
|
|
@@ -21520,7 +21534,7 @@ function getCodonRangeForAASliver(aminoAcidPositionInSequence, aminoAcidSliver,
|
|
|
21520
21534
|
}
|
|
21521
21535
|
__name(getCodonRangeForAASliver, "getCodonRangeForAASliver");
|
|
21522
21536
|
function getComplementAminoAcidStringFromSequenceString(sequenceString) {
|
|
21523
|
-
const aaString = getAminoAcidStringFromSequenceString(sequenceString);
|
|
21537
|
+
const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
|
|
21524
21538
|
return aaString.split("").reverse().join("");
|
|
21525
21539
|
}
|
|
21526
21540
|
__name(getComplementAminoAcidStringFromSequenceString, "getComplementAminoAcidStringFromSequenceString");
|
package/index.umd.js
CHANGED
|
@@ -12325,6 +12325,20 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
12325
12325
|
"primers",
|
|
12326
12326
|
"guides"
|
|
12327
12327
|
];
|
|
12328
|
+
let allWarnings = [];
|
|
12329
|
+
let makeToast = /* @__PURE__ */ __name(() => {
|
|
12330
|
+
if (typeof window !== "undefined" && window.toastr && allWarnings.length) {
|
|
12331
|
+
window.toastr.warning(allWarnings.join("\n"));
|
|
12332
|
+
}
|
|
12333
|
+
allWarnings = [];
|
|
12334
|
+
}, "makeToast");
|
|
12335
|
+
makeToast = lodashExports.debounce(makeToast, 200);
|
|
12336
|
+
function showWarnings(warnings) {
|
|
12337
|
+
allWarnings = allWarnings.concat(warnings);
|
|
12338
|
+
makeToast.cancel();
|
|
12339
|
+
makeToast();
|
|
12340
|
+
}
|
|
12341
|
+
__name(showWarnings, "showWarnings");
|
|
12328
12342
|
function filterSequenceString(sequenceString = "", {
|
|
12329
12343
|
additionalValidChars = "",
|
|
12330
12344
|
isOligo,
|
|
@@ -12372,14 +12386,10 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
12372
12386
|
});
|
|
12373
12387
|
if (sequenceString.length !== sanitizedVal.length) {
|
|
12374
12388
|
warnings.push(
|
|
12375
|
-
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${invalidChars.slice(0, 100).join(", ")} `
|
|
12389
|
+
`${name ? `Sequence ${name}: ` : ""}Invalid character(s) detected and removed: ${lodashExports.uniq(invalidChars).slice(0, 100).join(", ")} `
|
|
12376
12390
|
);
|
|
12377
12391
|
}
|
|
12378
|
-
|
|
12379
|
-
warnings.forEach((warning) => {
|
|
12380
|
-
window.toastr.warning(warning);
|
|
12381
|
-
});
|
|
12382
|
-
}
|
|
12392
|
+
showWarnings(warnings);
|
|
12383
12393
|
return [sanitizedVal, warnings];
|
|
12384
12394
|
}
|
|
12385
12395
|
__name(filterSequenceString, "filterSequenceString");
|
|
@@ -21351,7 +21361,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
21351
21361
|
return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
|
|
21352
21362
|
}
|
|
21353
21363
|
__name(escapeStringRegexp, "escapeStringRegexp");
|
|
21354
|
-
function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
21364
|
+
function getAminoAcidStringFromSequenceString(sequenceString, { doNotExcludeAsterisk } = {}) {
|
|
21355
21365
|
const aminoAcidsPerBase = getAminoAcidDataForEachBaseOfDna(
|
|
21356
21366
|
sequenceString,
|
|
21357
21367
|
true
|
|
@@ -21362,7 +21372,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
21362
21372
|
if (!aa.fullCodon) {
|
|
21363
21373
|
return;
|
|
21364
21374
|
}
|
|
21365
|
-
if (index
|
|
21375
|
+
if (!doNotExcludeAsterisk && index >= aminoAcidsPerBase.length - 3 && aa.aminoAcid.value === "*") {
|
|
21366
21376
|
return;
|
|
21367
21377
|
}
|
|
21368
21378
|
aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
|
|
@@ -21419,18 +21429,22 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
21419
21429
|
if (isProteinSearch) {
|
|
21420
21430
|
sequencesToCheck = [
|
|
21421
21431
|
{
|
|
21422
|
-
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse
|
|
21432
|
+
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse, {
|
|
21433
|
+
doNotExcludeAsterisk: true
|
|
21434
|
+
}),
|
|
21423
21435
|
offset: 0
|
|
21424
21436
|
},
|
|
21425
21437
|
{
|
|
21426
21438
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21427
|
-
sequenceToUse.substr(1)
|
|
21439
|
+
sequenceToUse.substr(1),
|
|
21440
|
+
{ doNotExcludeAsterisk: true }
|
|
21428
21441
|
),
|
|
21429
21442
|
offset: 1
|
|
21430
21443
|
},
|
|
21431
21444
|
{
|
|
21432
21445
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
21433
|
-
sequenceToUse.substr(2)
|
|
21446
|
+
sequenceToUse.substr(2),
|
|
21447
|
+
{ doNotExcludeAsterisk: true }
|
|
21434
21448
|
),
|
|
21435
21449
|
offset: 2
|
|
21436
21450
|
}
|
|
@@ -21524,7 +21538,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
21524
21538
|
}
|
|
21525
21539
|
__name(getCodonRangeForAASliver, "getCodonRangeForAASliver");
|
|
21526
21540
|
function getComplementAminoAcidStringFromSequenceString(sequenceString) {
|
|
21527
|
-
const aaString = getAminoAcidStringFromSequenceString(sequenceString);
|
|
21541
|
+
const aaString = getAminoAcidStringFromSequenceString(sequenceString, true);
|
|
21528
21542
|
return aaString.split("").reverse().join("");
|
|
21529
21543
|
}
|
|
21530
21544
|
__name(getComplementAminoAcidStringFromSequenceString, "getComplementAminoAcidStringFromSequenceString");
|
package/package.json
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
import { debounce, uniq } from "lodash";
|
|
1
2
|
import {
|
|
2
3
|
ambiguous_dna_letters,
|
|
3
4
|
ambiguous_rna_letters,
|
|
4
5
|
extended_protein_letters
|
|
5
6
|
} from "./bioData";
|
|
6
7
|
|
|
8
|
+
let allWarnings = [];
|
|
9
|
+
|
|
10
|
+
let makeToast = () => {
|
|
11
|
+
if (typeof window !== "undefined" && window.toastr && allWarnings.length) {
|
|
12
|
+
window.toastr.warning(allWarnings.join("\n"));
|
|
13
|
+
}
|
|
14
|
+
allWarnings = [];
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
makeToast = debounce(makeToast, 200);
|
|
18
|
+
|
|
19
|
+
function showWarnings(warnings) {
|
|
20
|
+
allWarnings = allWarnings.concat(warnings);
|
|
21
|
+
makeToast.cancel();
|
|
22
|
+
makeToast();
|
|
23
|
+
}
|
|
24
|
+
|
|
7
25
|
export default function filterSequenceString(
|
|
8
26
|
sequenceString = "",
|
|
9
27
|
{
|
|
@@ -62,16 +80,12 @@ export default function filterSequenceString(
|
|
|
62
80
|
warnings.push(
|
|
63
81
|
`${
|
|
64
82
|
name ? `Sequence ${name}: ` : ""
|
|
65
|
-
}Invalid character(s) detected and removed: ${invalidChars
|
|
83
|
+
}Invalid character(s) detected and removed: ${uniq(invalidChars)
|
|
66
84
|
.slice(0, 100)
|
|
67
85
|
.join(", ")} `
|
|
68
86
|
);
|
|
69
87
|
}
|
|
70
|
-
|
|
71
|
-
warnings.forEach(warning => {
|
|
72
|
-
window.toastr.warning(warning);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
88
|
+
showWarnings(warnings);
|
|
75
89
|
|
|
76
90
|
return [sanitizedVal, warnings];
|
|
77
91
|
}
|
|
@@ -85,13 +99,15 @@ export function getAcceptedChars({
|
|
|
85
99
|
return isProtein
|
|
86
100
|
? `${extended_protein_letters.toLowerCase()}}`
|
|
87
101
|
: isOligo
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
102
|
+
? ambiguous_rna_letters.toLowerCase() + "t"
|
|
103
|
+
: isRna
|
|
104
|
+
? ambiguous_rna_letters.toLowerCase() + "t"
|
|
105
|
+
: isMixedRnaAndDna
|
|
106
|
+
? ambiguous_rna_letters.toLowerCase() +
|
|
107
|
+
ambiguous_dna_letters.toLowerCase()
|
|
108
|
+
: //just plain old dna
|
|
109
|
+
ambiguous_rna_letters.toLowerCase() +
|
|
110
|
+
ambiguous_dna_letters.toLowerCase();
|
|
95
111
|
}
|
|
96
112
|
export function getReplaceChars({
|
|
97
113
|
isOligo,
|
|
@@ -102,14 +118,14 @@ export function getReplaceChars({
|
|
|
102
118
|
return isProtein
|
|
103
119
|
? {}
|
|
104
120
|
: // {".": "*"}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
121
|
+
isOligo
|
|
122
|
+
? {}
|
|
123
|
+
: isRna
|
|
124
|
+
? { t: "u" }
|
|
125
|
+
: isMixedRnaAndDna
|
|
126
|
+
? {}
|
|
127
|
+
: //just plain old dna
|
|
128
|
+
{};
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
export const filterRnaString = (s, o) =>
|
|
@@ -64,18 +64,22 @@ function findSequenceMatchesTopStrand(sequence, searchString, options = {}) {
|
|
|
64
64
|
if (isProteinSearch) {
|
|
65
65
|
sequencesToCheck = [
|
|
66
66
|
{
|
|
67
|
-
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse
|
|
67
|
+
seqToCheck: getAminoAcidStringFromSequenceString(sequenceToUse, {
|
|
68
|
+
doNotExcludeAsterisk: true
|
|
69
|
+
}),
|
|
68
70
|
offset: 0
|
|
69
71
|
},
|
|
70
72
|
{
|
|
71
73
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
72
|
-
sequenceToUse.substr(1)
|
|
74
|
+
sequenceToUse.substr(1),
|
|
75
|
+
{ doNotExcludeAsterisk: true }
|
|
73
76
|
),
|
|
74
77
|
offset: 1
|
|
75
78
|
},
|
|
76
79
|
{
|
|
77
80
|
seqToCheck: getAminoAcidStringFromSequenceString(
|
|
78
|
-
sequenceToUse.substr(2)
|
|
81
|
+
sequenceToUse.substr(2),
|
|
82
|
+
{ doNotExcludeAsterisk: true }
|
|
79
83
|
),
|
|
80
84
|
offset: 2
|
|
81
85
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import findSequenceMatches from "./findSequenceMatches";
|
|
2
2
|
|
|
3
3
|
describe("findSequenceMatches", () => {
|
|
4
|
-
it("ambiguous protein sequence with
|
|
4
|
+
it("ambiguous protein sequence with asterisk as stop codon", () => {
|
|
5
5
|
expect(
|
|
6
6
|
findSequenceMatches("mmhlrl*", "Mxxlrl*", {
|
|
7
7
|
isAmbiguous: true,
|
|
@@ -29,7 +29,7 @@ describe("findSequenceMatches", () => {
|
|
|
29
29
|
}
|
|
30
30
|
]);
|
|
31
31
|
});
|
|
32
|
-
it("protein sequence with
|
|
32
|
+
it("protein sequence with asterisk as stop codon", () => {
|
|
33
33
|
expect(
|
|
34
34
|
findSequenceMatches("mmhlrl*", "mMh", {
|
|
35
35
|
isProteinSequence: true /* isProteinSearch: true */
|
|
@@ -132,11 +132,11 @@ describe("findSequenceMatches", () => {
|
|
|
132
132
|
const matches = findSequenceMatches("atg", "*", { isAmbiguous: true });
|
|
133
133
|
expect(matches).toEqual([]);
|
|
134
134
|
});
|
|
135
|
-
it("ambiguous, dna searches with
|
|
135
|
+
it("ambiguous, dna searches with asterisk", () => {
|
|
136
136
|
const matches = findSequenceMatches("atg", "", { isAmbiguous: true });
|
|
137
137
|
expect(matches).toEqual([]);
|
|
138
138
|
});
|
|
139
|
-
it("
|
|
139
|
+
it("AA with asterisk as stop codon in atgtaa", () => {
|
|
140
140
|
expect(
|
|
141
141
|
findSequenceMatches("atgtaa", "M*", { isProteinSearch: true })
|
|
142
142
|
).toEqual([
|
|
@@ -146,7 +146,7 @@ describe("findSequenceMatches", () => {
|
|
|
146
146
|
}
|
|
147
147
|
]);
|
|
148
148
|
});
|
|
149
|
-
it("
|
|
149
|
+
it("AA with asterisk as stop codon in atgtaaccc", () => {
|
|
150
150
|
expect(
|
|
151
151
|
findSequenceMatches("atgtaaccc", "M**", { isProteinSearch: true })
|
|
152
152
|
).toEqual([]);
|
|
@@ -164,7 +164,7 @@ describe("findSequenceMatches", () => {
|
|
|
164
164
|
}
|
|
165
165
|
]);
|
|
166
166
|
});
|
|
167
|
-
it("works with ambiguous AA with
|
|
167
|
+
it("works with ambiguous AA with asterisk in search string", () => {
|
|
168
168
|
expect(
|
|
169
169
|
findSequenceMatches("atgtaa", "M*", {
|
|
170
170
|
isProteinSearch: true,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import getAminoAcidDataForEachBaseOfDna from "./getAminoAcidDataForEachBaseOfDna";
|
|
2
2
|
|
|
3
|
-
export default function getAminoAcidStringFromSequenceString(
|
|
3
|
+
export default function getAminoAcidStringFromSequenceString(
|
|
4
|
+
sequenceString,
|
|
5
|
+
{ doNotExcludeAsterisk } = {}
|
|
6
|
+
) {
|
|
4
7
|
const aminoAcidsPerBase = getAminoAcidDataForEachBaseOfDna(
|
|
5
8
|
sequenceString,
|
|
6
9
|
true
|
|
@@ -12,7 +15,11 @@ export default function getAminoAcidStringFromSequenceString(sequenceString) {
|
|
|
12
15
|
return;
|
|
13
16
|
}
|
|
14
17
|
// Check if the current amino acid is the last in the sequence and is a stop codon
|
|
15
|
-
if (
|
|
18
|
+
if (
|
|
19
|
+
!doNotExcludeAsterisk &&
|
|
20
|
+
index >= aminoAcidsPerBase.length - 3 &&
|
|
21
|
+
aa.aminoAcid.value === "*"
|
|
22
|
+
) {
|
|
16
23
|
return;
|
|
17
24
|
}
|
|
18
25
|
aaArray[aa.aminoAcidIndex] = aa.aminoAcid.value;
|