UNPKG

2.37 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5var path = require("path");
6
7function RequestShortener(directory) {
8 directory = directory.replace(/\\/g, "/");
9 var parentDirectory = path.dirname(directory);
10 if(/[\/\\]$/.test(directory)) directory = directory.substr(0, directory.length - 1);
11 if(directory) {
12 var currentDirectoryRegExp = directory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
13 currentDirectoryRegExp = new RegExp("^" + currentDirectoryRegExp + "|(!)" + currentDirectoryRegExp, "g");
14
15 this.currentDirectoryRegExp = currentDirectoryRegExp;
16 }
17
18 if(/[\/\\]$/.test(parentDirectory)) parentDirectory = parentDirectory.substr(0, parentDirectory.length - 1);
19 if(parentDirectory && parentDirectory !== directory) {
20 var parentDirectoryRegExp = parentDirectory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
21 parentDirectoryRegExp = new RegExp("^" + parentDirectoryRegExp + "|(!)" + parentDirectoryRegExp, "g");
22
23 this.parentDirectoryRegExp = parentDirectoryRegExp;
24 }
25
26 if(__dirname.length >= 2) {
27 var buildins = path.join(__dirname, "..").replace(/\\/g, "/");
28 var buildinsAsModule = currentDirectoryRegExp && currentDirectoryRegExp.test(buildins);
29 var buildinsRegExp = buildins.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
30 buildinsRegExp = new RegExp("^" + buildinsRegExp + "|(!)" + buildinsRegExp, "g");
31
32 this.buildinsAsModule = buildinsAsModule;
33 this.buildinsRegExp = buildinsRegExp;
34 }
35
36 this.nodeModulesRegExp = /\/node_modules\//g;
37 this.indexJsRegExp = /\/index.js(!|\?|\(query\))/g;
38}
39module.exports = RequestShortener;
40
41RequestShortener.prototype.shorten = function(request) {
42 if(!request)
43 return request;
44 request = request.replace(/\\/g, "/");
45 if(this.buildinsAsModule && this.buildinsRegExp)
46 request = request.replace(this.buildinsRegExp, "!(webpack)");
47 if(this.currentDirectoryRegExp)
48 request = request.replace(this.currentDirectoryRegExp, "!.");
49 if(this.parentDirectoryRegExp)
50 request = request.replace(this.parentDirectoryRegExp, "!..");
51 if(!this.buildinsAsModule && this.buildinsRegExp)
52 request = request.replace(this.buildinsRegExp, "!(webpack)");
53 request = request.replace(this.nodeModulesRegExp, "/~/");
54 request = request.replace(this.indexJsRegExp, "$1");
55 return request.replace(/^!|!$/, "");
56};