UNPKG

1.91 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const WebpackError = require("./WebpackError");
8
9/** @typedef {import("./Module")} Module */
10
11/**
12 * @param {Module[]} modules the modules to be sorted
13 * @returns {Module[]} sorted version of original modules
14 */
15const sortModules = modules => {
16 return modules.slice().sort((a, b) => {
17 const aIdent = a.identifier();
18 const bIdent = b.identifier();
19 /* istanbul ignore next */
20 if (aIdent < bIdent) return -1;
21 /* istanbul ignore next */
22 if (aIdent > bIdent) return 1;
23 /* istanbul ignore next */
24 return 0;
25 });
26};
27
28/**
29 * @param {Module[]} modules each module from throw
30 * @returns {string} each message from provided moduels
31 */
32const createModulesListMessage = modules => {
33 return modules
34 .map(m => {
35 let message = `* ${m.identifier()}`;
36 const validReasons = m.reasons.filter(reason => reason.module);
37
38 if (validReasons.length > 0) {
39 message += `\n Used by ${validReasons.length} module(s), i. e.`;
40 message += `\n ${validReasons[0].module.identifier()}`;
41 }
42 return message;
43 })
44 .join("\n");
45};
46
47class CaseSensitiveModulesWarning extends WebpackError {
48 /**
49 * Creates an instance of CaseSensitiveModulesWarning.
50 * @param {Module[]} modules modules that were detected
51 */
52 constructor(modules) {
53 const sortedModules = sortModules(modules);
54 const modulesList = createModulesListMessage(sortedModules);
55 super(`There are multiple modules with names that only differ in casing.
56This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
57Use equal casing. Compare these module identifiers:
58${modulesList}`);
59
60 this.name = "CaseSensitiveModulesWarning";
61 this.origin = this.module = sortedModules[0];
62
63 Error.captureStackTrace(this, this.constructor);
64 }
65}
66
67module.exports = CaseSensitiveModulesWarning;