Project rename
This commit is contained in:
+86
@@ -0,0 +1,86 @@
|
||||
(function () {
|
||||
var URI_NS = require("../uri"),
|
||||
URI = URI_NS.URI,
|
||||
pctEncChar = URI_NS.pctEncChar,
|
||||
NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})",
|
||||
PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})",
|
||||
TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]",
|
||||
NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)",
|
||||
URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"),
|
||||
URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"),
|
||||
URN_PARSE = /^([^\:]+)\:(.*)/,
|
||||
URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g,
|
||||
UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/;
|
||||
|
||||
//RFC 2141
|
||||
URI.SCHEMES["urn"] = {
|
||||
parse : function (components, options) {
|
||||
var matches = components.path.match(URN_PATH),
|
||||
scheme, schemeHandler;
|
||||
|
||||
if (!matches) {
|
||||
if (!options.tolerant) {
|
||||
components.errors.push("URN is not strictly valid.");
|
||||
}
|
||||
|
||||
matches = components.path.match(URN_PARSE);
|
||||
}
|
||||
|
||||
if (matches) {
|
||||
scheme = "urn:" + matches[1].toLowerCase();
|
||||
schemeHandler = URI.SCHEMES[scheme];
|
||||
|
||||
//in order to serialize properly,
|
||||
//every URN must have a serializer that calls the URN serializer
|
||||
if (!schemeHandler) {
|
||||
schemeHandler = URI.SCHEMES[scheme] = {};
|
||||
}
|
||||
if (!schemeHandler.serialize) {
|
||||
schemeHandler.serialize = URI.SCHEMES["urn"].serialize;
|
||||
}
|
||||
|
||||
components.scheme = scheme;
|
||||
components.path = matches[2];
|
||||
|
||||
if (schemeHandler.parse) {
|
||||
schemeHandler.parse(components, options);
|
||||
}
|
||||
} else {
|
||||
components.errors.push("URN can not be parsed.");
|
||||
}
|
||||
|
||||
return components;
|
||||
},
|
||||
|
||||
serialize : function (components, options) {
|
||||
var scheme = components.scheme || options.scheme,
|
||||
matches;
|
||||
|
||||
if (scheme && scheme !== "urn") {
|
||||
var matches = scheme.match(URN_SCHEME);
|
||||
|
||||
if (!matches) {
|
||||
matches = ["urn:" + scheme, scheme];
|
||||
}
|
||||
|
||||
components.scheme = "urn";
|
||||
components.path = matches[1] + ":" + (components.path ? components.path.replace(URN_EXCLUDED, pctEncChar) : "");
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
};
|
||||
|
||||
//RFC 4122
|
||||
URI.SCHEMES["urn:uuid"] = {
|
||||
serialize : function (components, options) {
|
||||
//ensure UUID is valid
|
||||
if (!options.tolerant && (!components.path || !components.path.match(UUID))) {
|
||||
//invalid UUIDs can not have this scheme
|
||||
components.scheme = undefined;
|
||||
}
|
||||
|
||||
return URI.SCHEMES["urn"].serialize(components, options);
|
||||
}
|
||||
};
|
||||
}());
|
||||
Reference in New Issue
Block a user