UNPKG

rcs-data

Version:

RCS消息数据结构

98 lines 3.28 kB
"use strict"; 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