libdom-http
Version:
Http support for libdom
75 lines (57 loc) • 2.37 kB
JavaScript
;
import { string } from "libcore";
var MIME_TYPE_RE =
/^([a-z0-9\-\_]+)\/([a-z\-\_0-9]+)(([ \s\t]*\;([^\;]+))*)$/,
MIME_TYPE_PARAMS_RE =
/^[ \t\s]*([a-z0-9\-\_]+)\=(\"([^\"]+)\"|[a-z0-9\-\_]+)[ \t\s]*$/,
QUOTED_RE = /^\"[^\"]+\"/,
exported = {
parse: parseType
};
function parseType(type) {
var mtypeRe = MIME_TYPE_RE,
paramRe = MIME_TYPE_PARAMS_RE,
quotedRe = QUOTED_RE,
paramGlue = "; ",
parameterObject = null;
var match, subtype, parameters, name, value, l, defaultType;
if (string(type) && mtypeRe.test(type)) {
match = type.match(mtypeRe);
type = match[1].toLowerCase();
subtype = match[2].toLowerCase();
parameters = match[3] || '';
if (parameters) {
parameterObject = {};
parameters = parameters.split(';');
l = parameters.length;
for (; l--;) {
match = parameters[l].match(paramRe);
if (match) {
name = match[1].toLowerCase();
value = match[2];
// create parameters string
parameters[l] = name + '=' + value;
// register
parameterObject[name] = quotedRe.test(value) ?
value.substring(1,
value.length -1) :
value;
}
}
parameters = parameters.join(paramGlue);
}
defaultType = type + '/' + subtype;
return {
string: defaultType +
(parameters ?
paramGlue + parameters : ''),
root: defaultType,
type: type,
subtype: subtype,
params: parameterObject
};
}
return void(0);
}
export { parseType as parse };
export default exported;