1 import { SCHEMES } from "../uri";
\r
2 const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})";
\r
3 const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})";
\r
4 const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]";
\r
5 const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)";
\r
6 const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$");
\r
7 const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$");
\r
8 const URN_PARSE = /^([^\:]+)\:(.*)/;
\r
9 const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g;
\r
13 parse: function (components, options) {
\r
14 const matches = components.path && components.path.match(URN_PARSE);
\r
15 let urnComponents = components;
\r
17 const scheme = options.scheme || urnComponents.scheme || "urn";
\r
18 const nid = matches[1].toLowerCase();
\r
19 const nss = matches[2];
\r
20 const urnScheme = `${scheme}:${options.nid || nid}`;
\r
21 const schemeHandler = SCHEMES[urnScheme];
\r
22 urnComponents.nid = nid;
\r
23 urnComponents.nss = nss;
\r
24 urnComponents.path = undefined;
\r
25 if (schemeHandler) {
\r
26 urnComponents = schemeHandler.parse(urnComponents, options);
\r
30 urnComponents.error = urnComponents.error || "URN can not be parsed.";
\r
32 return urnComponents;
\r
34 serialize: function (urnComponents, options) {
\r
35 const scheme = options.scheme || urnComponents.scheme || "urn";
\r
36 const nid = urnComponents.nid;
\r
37 const urnScheme = `${scheme}:${options.nid || nid}`;
\r
38 const schemeHandler = SCHEMES[urnScheme];
\r
39 if (schemeHandler) {
\r
40 urnComponents = schemeHandler.serialize(urnComponents, options);
\r
42 const uriComponents = urnComponents;
\r
43 const nss = urnComponents.nss;
\r
44 uriComponents.path = `${nid || options.nid}:${nss}`;
\r
45 return uriComponents;
\r
48 export default handler;
\r
49 //# sourceMappingURL=urn.js.map