Projekt

Obecné

Profil

Stáhnout (1.87 KB) Statistiky
| Větev: | Revize:
1
/*
2
	MIT License http://www.opensource.org/licenses/mit-license.php
3
	Author Tobias Koppers @sokra
4
*/
5
"use strict";
6

    
7
const 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
 */
15
const 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
 */
32
const 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

    
47
class 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.
56
This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
57
Use 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

    
67
module.exports = CaseSensitiveModulesWarning;
(9-9/144)