rcs-data
Version:
RCS消息数据结构
98 lines • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NameAddrHeader = void 0;
const URI_1 = require("./URI");
class NameAddrHeader {
constructor(uri, display_name, parameters = null) {
if (!uri || !(uri instanceof URI_1.URI)) {
throw new TypeError('missing or invalid "uri" parameter');
}
this._uri = uri;
this._parameters = {};
this.display_name = display_name;
for (const param in parameters) {
if (Object.prototype.hasOwnProperty.call(parameters, param)) {
this.setParam(param, parameters[param]);
}
}
}
static parse(raw) {
if (raw.indexOf('<') === -1) {
let uri = raw.trim();
if (!uri || typeof uri !== 'string')
throw Error('要解析的数据为空或类型不对');
return new NameAddrHeader(URI_1.URI.parse(uri));
}
else {
let matched = raw.match(new RegExp(/^([^<].*[^\s])?[ ]*<(.*)>$/));
if (!matched)
throw Error(`传入的数据[${raw}]不符合格式要求`);
let [, name, uri] = matched;
if (name)
name = name.replace(/"/g, '');
if (uri)
uri = uri.trim();
return new NameAddrHeader(URI_1.URI.parse(uri), name);
}
}
get uri() {
return this._uri;
}
get display_name() {
return this._display_name;
}
set display_name(value) {
this._display_name = value === 0 ? '0' : value;
}
get value() {
return this.toString();
}
setParam(key, value) {
if (key) {
this._parameters[key.toLowerCase()] =
typeof value === 'undefined' || value === null ? null : value.toString();
}
}
getParam(key) {
if (key) {
return this._parameters[key.toLowerCase()];
}
}
hasParam(key) {
if (key) {
return ((this._parameters.hasOwnProperty(key.toLowerCase()) && true) || false);
}
}
deleteParam(parameter) {
parameter = parameter.toLowerCase();
if (this._parameters.hasOwnProperty(parameter)) {
const value = this._parameters[parameter];
delete this._parameters[parameter];
return value;
}
}
clearParams() {
this._parameters = {};
}
clone() {
return new NameAddrHeader(this._uri.clone(), this._display_name, JSON.parse(JSON.stringify(this._parameters)));
}
_quote(str) {
return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
}
toString() {
let body = this._display_name ? `"${this._quote(this._display_name)}" ` : '';
body += `<${this._uri.toString()}>`;
for (const parameter in this._parameters) {
if (Object.prototype.hasOwnProperty.call(this._parameters, parameter)) {
body += `;${parameter}`;
if (this._parameters[parameter] !== null) {
body += `=${this._parameters[parameter]}`;
}
}
}
return body;
}
}
exports.NameAddrHeader = NameAddrHeader;
//# sourceMappingURL=NameAddrHeader.js.map