UNPKG

rcs-data

Version:

RCS消息数据结构

63 lines 1.97 kB
"use strict"; 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