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;