You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							49 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							49 lines
						
					
					
						
							2.0 KiB
						
					
					
				| import { SCHEMES } from "../uri";
 | |
| const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})";
 | |
| const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})";
 | |
| const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]";
 | |
| const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)";
 | |
| const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$");
 | |
| const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$");
 | |
| const URN_PARSE = /^([^\:]+)\:(.*)/;
 | |
| const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g;
 | |
| //RFC 2141
 | |
| const handler = {
 | |
|     scheme: "urn",
 | |
|     parse: function (components, options) {
 | |
|         const matches = components.path && components.path.match(URN_PARSE);
 | |
|         let urnComponents = components;
 | |
|         if (matches) {
 | |
|             const scheme = options.scheme || urnComponents.scheme || "urn";
 | |
|             const nid = matches[1].toLowerCase();
 | |
|             const nss = matches[2];
 | |
|             const urnScheme = `${scheme}:${options.nid || nid}`;
 | |
|             const schemeHandler = SCHEMES[urnScheme];
 | |
|             urnComponents.nid = nid;
 | |
|             urnComponents.nss = nss;
 | |
|             urnComponents.path = undefined;
 | |
|             if (schemeHandler) {
 | |
|                 urnComponents = schemeHandler.parse(urnComponents, options);
 | |
|             }
 | |
|         }
 | |
|         else {
 | |
|             urnComponents.error = urnComponents.error || "URN can not be parsed.";
 | |
|         }
 | |
|         return urnComponents;
 | |
|     },
 | |
|     serialize: function (urnComponents, options) {
 | |
|         const scheme = options.scheme || urnComponents.scheme || "urn";
 | |
|         const nid = urnComponents.nid;
 | |
|         const urnScheme = `${scheme}:${options.nid || nid}`;
 | |
|         const schemeHandler = SCHEMES[urnScheme];
 | |
|         if (schemeHandler) {
 | |
|             urnComponents = schemeHandler.serialize(urnComponents, options);
 | |
|         }
 | |
|         const uriComponents = urnComponents;
 | |
|         const nss = urnComponents.nss;
 | |
|         uriComponents.path = `${nid || options.nid}:${nss}`;
 | |
|         return uriComponents;
 | |
|     },
 | |
| };
 | |
| export default handler;
 | |
| //# sourceMappingURL=urn.js.map
 |