| 
									
										
										
										
											2017-04-05 21:38:15 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | const path = require("path"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 21:37:38 +08:00
										 |  |  | const looksLikeAbsolutePath = (maybeAbsolutePath) => { | 
					
						
							| 
									
										
										
										
											2017-04-05 21:38:15 +08:00
										 |  |  | 	return /^(?:[a-z]:\\|\/)/i.test(maybeAbsolutePath); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-07 21:37:38 +08:00
										 |  |  | const normalizePathSeparator = (p) => p.replace(/\\/g, "/"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 04:30:29 +08:00
										 |  |  | const _makePathsRelative = (context, identifier) => { | 
					
						
							|  |  |  | 	return identifier | 
					
						
							|  |  |  | 		.split(/([|! ])/) | 
					
						
							|  |  |  | 		.map(str => looksLikeAbsolutePath(str) ? | 
					
						
							|  |  |  | 			normalizePathSeparator(path.relative(context, str)) : str) | 
					
						
							|  |  |  | 		.join(""); | 
					
						
							| 
									
										
										
										
											2017-07-18 04:47:18 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-07-12 07:19:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 04:30:29 +08:00
										 |  |  | exports.makePathsRelative = (context, identifier, cache) => { | 
					
						
							|  |  |  | 	if(!cache) return _makePathsRelative(context, identifier); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const relativePaths = cache.relativePaths || (cache.relativePaths = new Map()); | 
					
						
							| 
									
										
										
										
											2017-07-12 07:19:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 14:48:39 +08:00
										 |  |  | 	let cachedResult; | 
					
						
							| 
									
										
										
										
											2017-07-18 15:10:00 +08:00
										 |  |  | 	let contextCache = relativePaths.get(context); | 
					
						
							| 
									
										
										
										
											2017-07-18 14:48:39 +08:00
										 |  |  | 	if(typeof contextCache === "undefined") { | 
					
						
							|  |  |  | 		relativePaths.set(context, contextCache = new Map()); | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2017-07-18 15:10:00 +08:00
										 |  |  | 		cachedResult = contextCache.get(identifier); | 
					
						
							| 
									
										
										
										
											2017-07-18 14:48:39 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-07-12 07:19:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-18 14:48:39 +08:00
										 |  |  | 	if(typeof cachedResult !== "undefined") { | 
					
						
							|  |  |  | 		return cachedResult; | 
					
						
							| 
									
										
										
										
											2017-07-12 07:19:37 +08:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2017-07-18 14:48:39 +08:00
										 |  |  | 		const relativePath = _makePathsRelative(context, identifier); | 
					
						
							| 
									
										
										
										
											2017-07-12 07:19:37 +08:00
										 |  |  | 		contextCache.set(identifier, relativePath); | 
					
						
							|  |  |  | 		return relativePath; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-04-05 21:38:15 +08:00
										 |  |  | }; |