Projekt

Obecné

Profil

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

    
10
class FunctionModuleTemplatePlugin {
11
	apply(moduleTemplate) {
12
		moduleTemplate.hooks.render.tap(
13
			"FunctionModuleTemplatePlugin",
14
			(moduleSource, module) => {
15
				const source = new ConcatSource();
16
				const args = [module.moduleArgument];
17
				// TODO remove HACK checking type for javascript
18
				if (module.type && module.type.startsWith("javascript")) {
19
					args.push(module.exportsArgument);
20
					if (module.hasDependencies(d => d.requireWebpackRequire !== false)) {
21
						args.push("__webpack_require__");
22
					}
23
				} else if (module.type && module.type.startsWith("json")) {
24
					// no additional arguments needed
25
				} else {
26
					args.push(module.exportsArgument, "__webpack_require__");
27
				}
28
				source.add("/***/ (function(" + args.join(", ") + ") {\n\n");
29
				if (module.buildInfo.strict) source.add('"use strict";\n');
30
				source.add(moduleSource);
31
				source.add("\n\n/***/ })");
32
				return source;
33
			}
34
		);
35

    
36
		moduleTemplate.hooks.package.tap(
37
			"FunctionModuleTemplatePlugin",
38
			(moduleSource, module) => {
39
				if (moduleTemplate.runtimeTemplate.outputOptions.pathinfo) {
40
					const source = new ConcatSource();
41
					const req = module.readableIdentifier(
42
						moduleTemplate.runtimeTemplate.requestShortener
43
					);
44
					const reqStr = req.replace(/\*\//g, "*_/");
45
					const reqStrStar = "*".repeat(reqStr.length);
46
					source.add("/*!****" + reqStrStar + "****!*\\\n");
47
					source.add("  !*** " + reqStr + " ***!\n");
48
					source.add("  \\****" + reqStrStar + "****/\n");
49
					if (
50
						Array.isArray(module.buildMeta.providedExports) &&
51
						module.buildMeta.providedExports.length === 0
52
					) {
53
						source.add(Template.toComment("no exports provided") + "\n");
54
					} else if (Array.isArray(module.buildMeta.providedExports)) {
55
						source.add(
56
							Template.toComment(
57
								"exports provided: " +
58
									module.buildMeta.providedExports.join(", ")
59
							) + "\n"
60
						);
61
					} else if (module.buildMeta.providedExports) {
62
						source.add(Template.toComment("no static exports found") + "\n");
63
					}
64
					if (
65
						Array.isArray(module.usedExports) &&
66
						module.usedExports.length === 0
67
					) {
68
						source.add(Template.toComment("no exports used") + "\n");
69
					} else if (Array.isArray(module.usedExports)) {
70
						source.add(
71
							Template.toComment(
72
								"exports used: " + module.usedExports.join(", ")
73
							) + "\n"
74
						);
75
					} else if (module.usedExports) {
76
						source.add(Template.toComment("all exports used") + "\n");
77
					}
78
					if (module.optimizationBailout) {
79
						for (const text of module.optimizationBailout) {
80
							let code;
81
							if (typeof text === "function") {
82
								code = text(moduleTemplate.runtimeTemplate.requestShortener);
83
							} else {
84
								code = text;
85
							}
86
							source.add(Template.toComment(`${code}`) + "\n");
87
						}
88
					}
89
					source.add(moduleSource);
90
					return source;
91
				}
92
				return moduleSource;
93
			}
94
		);
95

    
96
		moduleTemplate.hooks.hash.tap("FunctionModuleTemplatePlugin", hash => {
97
			hash.update("FunctionModuleTemplatePlugin");
98
			hash.update("2");
99
		});
100
	}
101
}
102
module.exports = FunctionModuleTemplatePlugin;
(57-57/144)