rcs-data
Version:
RCS消息数据结构
234 lines • 6.82 kB
JavaScript
"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