drptranslator
Version:
A DNA-RNA-Protein translator library
162 lines (149 loc) • 4.35 kB
text/typescript
import { DNA } from "../symbols/dna";
import { RNA } from "../symbols/rna";
import { RNATranslator } from "./rna.translator";
/**
* Specialized class that allows to translate and transcript DNA sequences
*/
export class DNATranslator {
/**
* @param {string} DNA sequence to be translated into a complementary chain of DNA.
* @returns {string} The string returned is a complementary sequence of the provided in the parameter.
*
* ```
* ATGCTA
*
* TACGAT
* ```
*/
public transDNAtoOpositeDNA(dna: string): string {
const dnaArr = dna
// get uppercase string
.toUpperCase()
.split("")
// convert each letter in the string to RNA
.map((base) => this.matchOpositeDnaBase(this.matchDnaBase(base)));
return this.dnaToString(dnaArr);
}
/**
* @param {string} dna sequence to be translated into a complementary chain of RNA
* @returns {string} The string returned is a complementary sequence of the provided in the parameter
*
* ```
* ATGCTA
*
* UACGAU
* ```
*/
public transDNAtoRNA(dna: string): string {
const rnaArr = dna
// get uppercase string
.toUpperCase()
.split("")
// convert each letter in the string to RNA
.map((base) => this.matchOpositeRnaBase(this.matchDnaBase(base)));
return this.rnaToString(rnaArr);
}
/**
* @param {string} dna sequence to be translated into a complementary chain of Aminoacids
* @returns {string} The string returned is a complementary sequence of the provided in the parameter
*
* ```
* ATGCTA
*
* Tyr-Asp
* ```
*/
public transDNAtoAA(dna: string): string {
const rnaTrans = new RNATranslator();
const rnaSeq = this.transDNAtoRNA(dna);
return rnaTrans.transRNAtoAA(rnaSeq);
}
/**
* @param {string} base digit string (character) that is the base to be converted into the RNA enum.
* @returns {RNA} Returns the corresponding RNA base.
*
*/
public matchRnaBase(base: string): RNA {
switch (base) {
case "A":
return RNA.A;
case "T":
return RNA.U;
case "G":
return RNA.G;
case "C":
return RNA.C;
default:
throw new TypeError(`Invalid character: ${base}`);
}
}
/**
* @param {DNA} base base which needs to be replaced.
* @returns {RNA} Returns a RNA base which is the oposite base of the DNA base provided.
*/
public matchOpositeRnaBase(base: DNA): RNA {
switch (base) {
case DNA.A:
return RNA.U;
case DNA.T:
return RNA.A;
case DNA.G:
return RNA.C;
case DNA.C:
return RNA.G;
default:
throw new TypeError(`Invalid character: ${base}`);
}
}
/**
* @param {DNA} base base which needs to be replaced
* @returns {RNA} Returns a RNA base which is the oposite base of the DNA base provided
*/
public matchOpositeDnaBase(base: DNA): DNA {
switch (base) {
case DNA.A:
return DNA.T;
case DNA.T:
return DNA.A;
case DNA.G:
return DNA.C;
case DNA.C:
return DNA.G;
default:
throw new TypeError(`Invalid character: ${base}`);
}
}
/**
* @param {string} base digit string (character) that is the base to be converted into the DNA enum
* @returns {DNA} Returns the corresponding DNA base
*
*/
public matchDnaBase(base: string): DNA {
switch (base) {
case "A":
return DNA.A;
case "T":
return DNA.T;
case "G":
return DNA.G;
case "C":
return DNA.C;
default:
throw new TypeError(`Invalid character: ${base}`);
}
}
/**
* @param {RNA[]} rnaArray array containing the sequence to be parsed into a string.
* @returns {string} string containing the RNA sequence provided.
*/
public rnaToString(rnaArray: RNA[]): string {
return rnaArray.join("");
}
/**
* @param {DNA[]} dnaArray array containing the sequence to be parsed into a string.
* @returns {string} string containing the DNA sequence provided.
*/
public dnaToString(dnaArray: DNA[]): string {
return dnaArray.join("");
}
}