UNPKG

rcs-data

Version:

RCS消息数据结构

165 lines 5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.URI = void 0; const Utils = require('./Utils'); class URI { constructor(scheme, user, host, port, parameters = {}, headers = {}) { this._parameters = {}; this._headers = {}; this._scheme = scheme || 'sip'; this._user = user; this._host = host || ''; this._port = port; for (const param in parameters) { if (Object.prototype.hasOwnProperty.call(parameters, param)) { this.setParam(param, parameters[param]); } } for (const header in headers) { if (Object.prototype.hasOwnProperty.call(headers, header)) { this.setHeader(header, headers[header]); } } } static parse(raw) { if (raw.indexOf('@') === -1) { let matched = raw.match(/^(.*):(.*)$/); if (matched) { let [, scheme, user] = matched; return new URI(scheme, user); } } else { let matched = raw.match(/^(.*):(.*)@(.*)((?:\:).*)?$/); if (matched) { let [, scheme, user, host, port] = matched; return new URI(scheme, user, host, port); } } throw Error(`解析[${raw}]失败`); } get scheme() { return this._scheme; } set scheme(value) { this._scheme = value.toLowerCase(); } get user() { return this._user; } set user(value) { this._user = value; } get host() { return this._host; } set host(value) { this._host = value.toLowerCase(); } get port() { return this._port; } set port(value) { this._port = value === 0 ? value : parseInt(value, 10) || null; } 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 = {}; } setHeader(name, value) { this._headers[Utils.headerize(name)] = Array.isArray(value) ? value : [value]; } getHeader(name) { if (name) { return this._headers[Utils.headerize(name)]; } } hasHeader(name) { if (name) { return ((this._headers.hasOwnProperty(Utils.headerize(name)) && true) || false); } } deleteHeader(header) { header = Utils.headerize(header); if (this._headers.hasOwnProperty(header)) { const value = this._headers[header]; delete this._headers[header]; return value; } } clearHeaders() { this._headers = {}; } clone() { return new URI(this._scheme, this._user, this._host, this._port, JSON.parse(JSON.stringify(this._parameters)), JSON.parse(JSON.stringify(this._headers))); } toString() { const headers = []; let uri = `${this._scheme}:`; if (this._user) { uri += `${Utils.escapeUser(this._user)}`; } if (this._host) uri += `@${this._host}`; if (this._port || this._port === 0) { uri += `:${this._port}`; } for (const parameter in this._parameters) { if (Object.prototype.hasOwnProperty.call(this._parameters, parameter)) { uri += `;${parameter}`; if (this._parameters[parameter] !== null) { uri += `=${this._parameters[parameter]}`; } } } for (const header in this._headers) { if (Object.prototype.hasOwnProperty.call(this._headers, header)) { for (const item of this._headers[header]) { headers.push(`${header}=${item}`); } } } if (headers.length > 0) { uri += `?${headers.join('&')}`; } return uri; } toAor(show_port) { let aor = `${this._scheme}:`; if (this._user) { aor += `${Utils.escapeUser(this._user)}@`; } aor += this._host; if (show_port && (this._port || this._port === 0)) { aor += `:${this._port}`; } return aor; } } exports.URI = URI; //# sourceMappingURL=URI.js.map