Projekt

Obecné

Profil

Stáhnout (1.64 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 { RawSource } = require("webpack-sources");
8
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
9

    
10
const cache = new WeakMap();
11

    
12
class EvalDevToolModuleTemplatePlugin {
13
	constructor(options) {
14
		this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]";
15
		this.moduleFilenameTemplate =
16
			options.moduleFilenameTemplate ||
17
			"webpack://[namespace]/[resourcePath]?[loaders]";
18
		this.namespace = options.namespace || "";
19
	}
20

    
21
	apply(moduleTemplate) {
22
		moduleTemplate.hooks.module.tap(
23
			"EvalDevToolModuleTemplatePlugin",
24
			(source, module) => {
25
				const cacheEntry = cache.get(source);
26
				if (cacheEntry !== undefined) return cacheEntry;
27
				const content = source.source();
28
				const str = ModuleFilenameHelpers.createFilename(
29
					module,
30
					{
31
						moduleFilenameTemplate: this.moduleFilenameTemplate,
32
						namespace: this.namespace
33
					},
34
					moduleTemplate.runtimeTemplate.requestShortener
35
				);
36
				const footer =
37
					"\n" +
38
					this.sourceUrlComment.replace(
39
						/\[url\]/g,
40
						encodeURI(str)
41
							.replace(/%2F/g, "/")
42
							.replace(/%20/g, "_")
43
							.replace(/%5E/g, "^")
44
							.replace(/%5C/g, "\\")
45
							.replace(/^\//, "")
46
					);
47
				const result = new RawSource(
48
					`eval(${JSON.stringify(content + footer)});`
49
				);
50
				cache.set(source, result);
51
				return result;
52
			}
53
		);
54
		moduleTemplate.hooks.hash.tap("EvalDevToolModuleTemplatePlugin", hash => {
55
			hash.update("EvalDevToolModuleTemplatePlugin");
56
			hash.update("2");
57
		});
58
	}
59
}
60

    
61
module.exports = EvalDevToolModuleTemplatePlugin;
(44-44/144)