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
			| 
											3 years ago
										 | 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
 |