| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const path = require("path"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RequestShortener { | 
					
						
							|  |  |  | 	constructor(directory) { | 
					
						
							|  |  |  | 		directory = directory.replace(/\\/g, "/"); | 
					
						
							|  |  |  | 		if(/[\/\\]$/.test(directory)) directory = directory.substr(0, directory.length - 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(directory) { | 
					
						
							| 
									
										
										
										
											2017-02-05 08:02:48 +08:00
										 |  |  | 			const currentDirectoryRegExpString = directory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | 
					
						
							|  |  |  | 			this.currentDirectoryRegExp = new RegExp("^" + currentDirectoryRegExpString + "|(!)" + currentDirectoryRegExpString, "g"); | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 08:02:48 +08:00
										 |  |  | 		const dirname = path.dirname(directory); | 
					
						
							|  |  |  | 		const endsWithSeperator = /[\/\\]$/.test(dirname); | 
					
						
							|  |  |  | 		const parentDirectory = endsWithSeperator ? dirname.substr(0, dirname.length - 1) : dirname; | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 		if(parentDirectory && parentDirectory !== directory) { | 
					
						
							| 
									
										
										
										
											2017-02-05 08:02:48 +08:00
										 |  |  | 			const parentDirectoryRegExpString = parentDirectory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | 
					
						
							|  |  |  | 			this.parentDirectoryRegExp = new RegExp("^" + parentDirectoryRegExpString + "|(!)" + parentDirectoryRegExpString, "g"); | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(__dirname.length >= 2) { | 
					
						
							| 
									
										
										
										
											2017-02-05 08:02:48 +08:00
										 |  |  | 			const buildins = path.join(__dirname, "..").replace(/\\/g, "/"); | 
					
						
							|  |  |  | 			const buildinsAsModule = this.currentDirectoryRegExp && this.currentDirectoryRegExp.test(buildins); | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 			this.buildinsAsModule = buildinsAsModule; | 
					
						
							| 
									
										
										
										
											2017-02-05 08:02:48 +08:00
										 |  |  | 			const buildinsRegExpString = buildins.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); | 
					
						
							|  |  |  | 			this.buildinsRegExp = new RegExp("^" + buildinsRegExpString + "|(!)" + buildinsRegExpString, "g"); | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		this.nodeModulesRegExp = /\/node_modules\//g; | 
					
						
							|  |  |  | 		this.indexJsRegExp = /\/index.js(!|\?|\(query\))/g; | 
					
						
							| 
									
										
										
										
											2013-07-11 05:20:07 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | 	shorten(request) { | 
					
						
							|  |  |  | 		if(!request) return request; | 
					
						
							|  |  |  | 		request = request.replace(/\\/g, "/"); | 
					
						
							|  |  |  | 		if(this.buildinsAsModule && this.buildinsRegExp) | 
					
						
							|  |  |  | 			request = request.replace(this.buildinsRegExp, "!(webpack)"); | 
					
						
							|  |  |  | 		if(this.currentDirectoryRegExp) | 
					
						
							|  |  |  | 			request = request.replace(this.currentDirectoryRegExp, "!."); | 
					
						
							|  |  |  | 		if(this.parentDirectoryRegExp) | 
					
						
							|  |  |  | 			request = request.replace(this.parentDirectoryRegExp, "!.."); | 
					
						
							|  |  |  | 		if(!this.buildinsAsModule && this.buildinsRegExp) | 
					
						
							|  |  |  | 			request = request.replace(this.buildinsRegExp, "!(webpack)"); | 
					
						
							|  |  |  | 		request = request.replace(this.nodeModulesRegExp, "/~/"); | 
					
						
							|  |  |  | 		request = request.replace(this.indexJsRegExp, "$1"); | 
					
						
							|  |  |  | 		return request.replace(/^!|!$/, ""); | 
					
						
							| 
									
										
										
										
											2013-07-11 05:20:07 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-10 06:28:15 +08:00
										 |  |  | module.exports = RequestShortener; |