60 lines
No EOL
2.1 KiB
JavaScript
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; |