1 |
|
2 |
|
3 |
|
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 |
|
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 |
|
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;
|