UNPKG

3.29 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 { ConcatSource } = require("webpack-sources");
8const Template = require("./Template");
9
10class 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 source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
45 source.add(" !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
46 source.add(" \\****" + req.replace(/./g, "*") + "****/\n");
47 if (
48 Array.isArray(module.buildMeta.providedExports) &&
49 module.buildMeta.providedExports.length === 0
50 ) {
51 source.add(Template.toComment("no exports provided") + "\n");
52 } else if (Array.isArray(module.buildMeta.providedExports)) {
53 source.add(
54 Template.toComment(
55 "exports provided: " +
56 module.buildMeta.providedExports.join(", ")
57 ) + "\n"
58 );
59 } else if (module.buildMeta.providedExports) {
60 source.add(Template.toComment("no static exports found") + "\n");
61 }
62 if (
63 Array.isArray(module.usedExports) &&
64 module.usedExports.length === 0
65 ) {
66 source.add(Template.toComment("no exports used") + "\n");
67 } else if (Array.isArray(module.usedExports)) {
68 source.add(
69 Template.toComment(
70 "exports used: " + module.usedExports.join(", ")
71 ) + "\n"
72 );
73 } else if (module.usedExports) {
74 source.add(Template.toComment("all exports used") + "\n");
75 }
76 if (module.optimizationBailout) {
77 for (const text of module.optimizationBailout) {
78 let code;
79 if (typeof text === "function") {
80 code = text(moduleTemplate.runtimeTemplate.requestShortener);
81 } else {
82 code = text;
83 }
84 source.add(Template.toComment(`${code}`) + "\n");
85 }
86 }
87 source.add(moduleSource);
88 return source;
89 }
90 return moduleSource;
91 }
92 );
93
94 moduleTemplate.hooks.hash.tap("FunctionModuleTemplatePlugin", hash => {
95 hash.update("FunctionModuleTemplatePlugin");
96 hash.update("2");
97 });
98 }
99}
100module.exports = FunctionModuleTemplatePlugin;