andrewpietiladotcom/lib/MimeMessage.js

60 lines
No EOL
2.1 KiB
JavaScript

import MimeHeader from "./MimeHeader.js";
class MimeMessage {
constructor(message) {
this.headers = [];
this.body = "";
let messageLines = message.split('\r\n');
let inHeaders = true;
let currentMessageLine = 0;
let currentHeader = messageLines[currentMessageLine];
currentMessageLine++;
while (inHeaders) {
if (messageLines[currentMessageLine] === "") {
inHeaders = false;
this.headers.push(new MimeHeader(currentHeader));
} else if (messageLines[currentMessageLine].match(/^\s/)) {
currentHeader = `${currentHeader}\r\n${messageLines[currentMessageLine]}`;
} else {
this.headers.push(new MimeHeader(currentHeader));
currentHeader = `${messageLines[currentMessageLine]}`;
}
currentMessageLine++;
}
this.body = messageLines.slice(currentMessageLine).join("\r\n");
}
prependHeader(header) {
if ( header instanceof MimeHeader ) {
this.headers.unshift(header);
} else if ( typeof header === "string" ) {
this.headers.unshift(new MimeHeader(header) );
} else {
throw new TypeError("Invalid object passed to prependHeader");
}
}
getFirstHeaderOf(key) {
return this.headers.find((header) => header.key.toLowerCase() === key.toLowerCase());
}
getAllHeaderOf(key) {
return this.headers.filter((header) => header.key.toLowerCase() === key.toLowerCase());
}
removeFirstHeaderOf(key) {
let indexOfFirst = this.headers.findIndex((header) => header.key.toLowerCase() === key.toLowerCase());
this.headers = [...this.headers.slice(0, indexOfFirst), ...this.headers.slice(indexOfFirst+1)];
}
removeAllHeaderOf(key) {
this.headers = this.headers.filter((header) => header.key.toLowerCase() !== key.toLowerCase());
}
toString() {
return `${this.headers.map((header) => header.toString()).join("\r\n")}\r\n\r\n${this.body}`;
}
}
export default MimeMessage;