rcs-data
Version:
RCS消息数据结构
63 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContentTypeHeader = void 0;
const REGEXP_CONTENT_TYPE = new RegExp(/^([^\t \/]+)\/([^\t ;]+)(.*)$/);
const REGEXP_PARAM = new RegExp(/^[ \t]*([^\t =]+)[ \t]*=[ \t]*([^"\t =]+|"([^"]*)")[ \t]*$/);
function parseParams(rawParams) {
let splittedParams, i, len, paramMatch;
let params = {};
if (rawParams === '' || rawParams === undefined || rawParams === null) {
return params;
}
splittedParams = rawParams.split(';');
if (splittedParams.length === 0) {
return undefined;
}
for (i = 1, len = splittedParams.length; i < len; i++) {
paramMatch = splittedParams[i].match(REGEXP_PARAM);
if (!paramMatch) {
return undefined;
}
params[paramMatch[1].toLowerCase()] = paramMatch[3] || paramMatch[2];
}
return params;
}
class ContentTypeHeader {
constructor(type, subtype, params, raw) {
this._type = type;
this._subtype = subtype;
this._fulltype = `${type}/${subtype}`;
this._params = params;
this._raw = raw;
}
static parse(value) {
let match = value.match(REGEXP_CONTENT_TYPE);
if (!match)
return undefined;
let [, type, subtype, params] = match;
let oParams = {};
if (params) {
oParams = parseParams(params);
if (!oParams)
throw Error(`参数[${params}]无法解析`);
}
return new ContentTypeHeader(type.toLowerCase(), subtype.toLowerCase(), oParams, value);
}
get type() {
return this._type;
}
get subtype() {
return this._subtype;
}
get fulltype() {
return this._fulltype;
}
get params() {
return this._params;
}
get value() {
return this._raw;
}
}
exports.ContentTypeHeader = ContentTypeHeader;
//# sourceMappingURL=ContentTypeHeader.js.map