/node_modules/webpack/lib/ModuleFilenameHelpers.js

https://gitlab.com/limorelv/trelloApp · JavaScript · 159 lines · 145 code · 10 blank · 4 comment · 24 complexity · 5d4d07e5742495553691b0b586f41aec MD5 · raw file

  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. var ModuleFilenameHelpers = exports;
  6. ModuleFilenameHelpers.ALL_LOADERS_RESOURCE = "[all-loaders][resource]";
  7. ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE = /\[all-?loaders\]\[resource\]/gi;
  8. ModuleFilenameHelpers.LOADERS_RESOURCE = "[loaders][resource]";
  9. ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE = /\[loaders\]\[resource\]/gi;
  10. ModuleFilenameHelpers.RESOURCE = "[resource]";
  11. ModuleFilenameHelpers.REGEXP_RESOURCE = /\[resource\]/gi;
  12. ModuleFilenameHelpers.ABSOLUTE_RESOURCE_PATH = "[absolute-resource-path]";
  13. ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH = /\[abs(olute)?-?resource-?path\]/gi;
  14. ModuleFilenameHelpers.RESOURCE_PATH = "[resource-path]";
  15. ModuleFilenameHelpers.REGEXP_RESOURCE_PATH = /\[resource-?path\]/gi;
  16. ModuleFilenameHelpers.ALL_LOADERS = "[all-loaders]";
  17. ModuleFilenameHelpers.REGEXP_ALL_LOADERS = /\[all-?loaders\]/gi;
  18. ModuleFilenameHelpers.LOADERS = "[loaders]";
  19. ModuleFilenameHelpers.REGEXP_LOADERS = /\[loaders\]/gi;
  20. ModuleFilenameHelpers.QUERY = "[query]";
  21. ModuleFilenameHelpers.REGEXP_QUERY = /\[query\]/gi;
  22. ModuleFilenameHelpers.ID = "[id]";
  23. ModuleFilenameHelpers.REGEXP_ID = /\[id\]/gi;
  24. ModuleFilenameHelpers.HASH = "[hash]";
  25. ModuleFilenameHelpers.REGEXP_HASH = /\[hash\]/gi;
  26. function getAfter(str, token) {
  27. var idx = str.indexOf(token);
  28. return idx < 0 ? "" : str.substr(idx);
  29. }
  30. function getBefore(str, token) {
  31. var idx = str.lastIndexOf(token);
  32. return idx < 0 ? "" : str.substr(0, idx);
  33. }
  34. function getHash(str) {
  35. var hash = require("crypto").createHash("md5");
  36. hash.update(str);
  37. return hash.digest("hex").substr(0, 4);
  38. }
  39. function asRegExp(test) {
  40. if(typeof test === "string") test = new RegExp("^" + test.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
  41. return test;
  42. }
  43. ModuleFilenameHelpers.createFilename = function createFilename(module, moduleFilenameTemplate, requestShortener) {
  44. if(!module) module = "";
  45. if(typeof module === "string") {
  46. var shortIdentifier = requestShortener.shorten(module);
  47. var identifier = shortIdentifier;
  48. var moduleId = "";
  49. var absoluteResourcePath = module.split("!").pop();
  50. var hash = getHash(identifier);
  51. } else {
  52. var shortIdentifier = module.readableIdentifier(requestShortener);
  53. var identifier = requestShortener.shorten(module.identifier());
  54. var moduleId = module.id;
  55. var absoluteResourcePath = module.resourcePath || module.identifier().split("!").pop();
  56. var hash = getHash(identifier);
  57. }
  58. var resource = shortIdentifier.split("!").pop();
  59. var loaders = getBefore(shortIdentifier, "!");
  60. var allLoaders = getBefore(identifier, "!");
  61. var query = getAfter(resource, "?");
  62. var resourcePath = resource.substr(0, resource.length - query.length);
  63. if(typeof moduleFilenameTemplate === "function") {
  64. return moduleFilenameTemplate({
  65. identifier: identifier,
  66. shortIdentifier: shortIdentifier,
  67. resource: resource,
  68. resourcePath: resourcePath,
  69. absoluteResourcePath: absoluteResourcePath,
  70. allLoaders: allLoaders,
  71. query: query,
  72. moduleId: moduleId,
  73. hash: hash
  74. });
  75. }
  76. return moduleFilenameTemplate
  77. .replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE, identifier)
  78. .replace(ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE, shortIdentifier)
  79. .replace(ModuleFilenameHelpers.REGEXP_RESOURCE, resource)
  80. .replace(ModuleFilenameHelpers.REGEXP_RESOURCE_PATH, resourcePath)
  81. .replace(ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH, absoluteResourcePath)
  82. .replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS, allLoaders)
  83. .replace(ModuleFilenameHelpers.REGEXP_LOADERS, loaders)
  84. .replace(ModuleFilenameHelpers.REGEXP_QUERY, query)
  85. .replace(ModuleFilenameHelpers.REGEXP_ID, moduleId)
  86. .replace(ModuleFilenameHelpers.REGEXP_HASH, hash);
  87. };
  88. ModuleFilenameHelpers.createFooter = function createFooter(module, requestShortener) {
  89. if(!module) module = "";
  90. if(typeof module === "string") {
  91. return [
  92. "/** WEBPACK FOOTER **",
  93. " ** " + requestShortener.shorten(module),
  94. " **/"
  95. ].join("\n");
  96. } else {
  97. return [
  98. "/*****************",
  99. " ** WEBPACK FOOTER",
  100. " ** " + module.readableIdentifier(requestShortener),
  101. " ** module id = " + module.id,
  102. " ** module chunks = " + module.chunks.map(function(c) {
  103. return c.id;
  104. }).join(" "),
  105. " **/"
  106. ].join("\n");
  107. }
  108. };
  109. ModuleFilenameHelpers.replaceDuplicates = function replaceDuplicates(array, fn, comparator) {
  110. var countMap = {};
  111. var posMap = {};
  112. array.forEach(function(item, idx) {
  113. countMap[item] = (countMap[item] || []);
  114. countMap[item].push(idx);
  115. posMap[item] = 0;
  116. });
  117. if(comparator) {
  118. Object.keys(countMap).forEach(function(item) {
  119. countMap[item].sort(comparator);
  120. });
  121. }
  122. return array.map(function(item, i) {
  123. if(countMap[item].length > 1) {
  124. if(comparator && countMap[item][0] === i)
  125. return item;
  126. return fn(item, i, posMap[item]++);
  127. } else return item;
  128. });
  129. };
  130. ModuleFilenameHelpers.matchPart = function matchPart(str, test) {
  131. if(!test) return true;
  132. test = asRegExp(test);
  133. if(Array.isArray(test)) {
  134. return test.map(asRegExp).filter(function(regExp) {
  135. return regExp.test(str);
  136. }).length > 0;
  137. } else {
  138. return test.test(str);
  139. }
  140. };
  141. ModuleFilenameHelpers.matchObject = function matchObject(obj, str) {
  142. if(obj.test)
  143. if(!ModuleFilenameHelpers.matchPart(str, obj.test)) return false;
  144. if(obj.include)
  145. if(!ModuleFilenameHelpers.matchPart(str, obj.include)) return false;
  146. if(obj.exclude)
  147. if(ModuleFilenameHelpers.matchPart(str, obj.exclude)) return false;
  148. return true;
  149. };