UNPKG

rcs-data

Version:

RCS消息数据结构

234 lines 6.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Message = void 0; const grammar_1 = require("./grammar"); const parse_1 = require("./parse"); const common_1 = require("../common"); class Message { constructor() { this._headers = {}; this._mime = null; this._nsUris = {}; this._orderedHeaderNames = []; } get from() { return this._headers['From'] ? this._headers['From'][0] : undefined; } set from(value) { if (value) { this._headers['From'] = [ typeof value === 'string' ? common_1.NameAddrHeader.parse(value) : value, ]; } else { delete this._headers['From']; } } get to() { return this._headers['To'] ? this._headers['To'][0] : undefined; } set to(value) { if (value) { this._headers['To'] = [ typeof value === 'string' ? common_1.NameAddrHeader.parse(value) : value, ]; } else { delete this._headers['To']; } } get dateTime() { return this._headers['DateTime'] ? this._headers['DateTime'][0] : undefined; } set dateTime(date) { if (date) { this._headers['DateTime'] = [ date === true ? new common_1.DateTime() : typeof date === 'string' ? new common_1.DateTime(date) : date instanceof Date ? new common_1.DateTime(date) : date, ]; } else { delete this._headers['DateTime']; } } get orderedHeaderNames() { return this._orderedHeaderNames; } tos(values) { if (!values) { return this._headers['To'] || []; } else { this._headers['To'] = []; values.forEach(function (value) { this._headers.To.push((0, parse_1.parseHeaderValue)(grammar_1.grammar.headerRules['To'], value)); }, this); } } cc(value) { if (!value && value !== null) { if (this._headers['CC']) { return this._headers['CC'][0]; } } else if (value) { this._headers['CC'] = [(0, parse_1.parseHeaderValue)(grammar_1.grammar.headerRules['CC'], value)]; } else { delete this._headers['CC']; } } ccs(values) { if (!values) { return this._headers['CC'] || []; } else { this._headers['CC'] = []; values.forEach(function (value) { this._headers.CC.push((0, parse_1.parseHeaderValue)(grammar_1.grammar.headerRules['CC'], value)); }, this); } } subject(value) { if (!value && value !== null) { if (this._headers['Subject']) { return this._headers['Subject'][0].value; } } else if (value) { this._headers['Subject'] = [ { value: value, }, ]; } else { delete this._headers['Subject']; } } subjects(values) { if (!values) { if (this._headers['Subject']) { return this._headers['Subject'].map(function (data) { return data.value; }); } else { return []; } } else { this._headers['Subject'] = []; values.forEach(function (value) { this._headers.Subject.push({ value: value }); }, this); } } header(nsUri, name, value) { if (nsUri) { nsUri = nsUri.toLowerCase(); name = nsUri + '@' + name; } if (!value && value !== null) { if (this._headers[name]) { return this._headers[name][0].value; } } else if (value) { this.addNS(nsUri); this._headers[name] = [ { value, }, ]; } else { delete this._headers[name]; } } headers(nsUri, name, values) { if (nsUri) { nsUri = nsUri.toLowerCase(); name = nsUri + '@' + name; } if (!values) { if (this._headers[name]) { return this._headers[name].map((data) => data.value); } else { return []; } } else { this.addNS(nsUri); this._headers[name] = []; values.forEach(function (value) { this._headers[name].push({ value: value, }); }, this); } } get mime() { return this._mime; } set mime(mime) { if (mime) { this._mime = mime; } else { delete this._mime; } } toString() { let raw = ''; Object.keys(this._nsUris).forEach((uri) => { if (this._nsUris.hasOwnProperty(uri)) { raw += 'NS: ' + this._nsUris[uri] + ' <' + uri + '>\r\n'; } }); let keys = Object.keys(this._headers); keys.sort((a, b) => { let i = this.orderedHeaderNames.indexOf(a); let j = this.orderedHeaderNames.indexOf(b); if (i === -1) return 1; if (j === -1) return -1; return i - j; }); keys.forEach((key) => { let value = this._headers[key]; if (key === 'NS') return; let [uri, name] = key.indexOf('@') !== -1 ? key.split('@') : [, key]; if (value && Array.isArray(value) && value.length) value.forEach((item) => { if (uri) raw += `${this._nsUris[uri]}.`; raw += `${name}: ${item.value}\r\n`; }); }); raw += '\r\n'; if (this._mime) raw += this._mime.toString(); return raw; } addNS(uri, prefix = null) { if (typeof uri !== 'string' || !uri) { throw new Error('argument must be a non empty String'); } if (this._nsUris[uri] || uri === grammar_1.grammar.NS_PREFIX_CORE) { return; } prefix = prefix || 'Prefix' + (Object.keys(this._nsUris).length + 1); this._nsUris[uri] = prefix; } } exports.Message = Message; //# sourceMappingURL=message.js.map