保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
    MIT License http://www.opensource.org/licenses/mit-license.php
    Author Tobias Koppers @sokra
*/
"use strict";
 
const { ConcatSource } = require("webpack-sources");
 
/** @typedef {import("./Compilation")} Compilation */
 
/**
 * @param {string[]} accessor the accessor to convert to path
 * @returns {string} the path
 */
const accessorToObjectAccess = accessor => {
    return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
};
 
class ExportPropertyMainTemplatePlugin {
    /**
     * @param {string|string[]} property the name of the property to export
     */
    constructor(property) {
        this.property = property;
    }
 
    /**
     * @param {Compilation} compilation the compilation instance
     * @returns {void}
     */
    apply(compilation) {
        const { mainTemplate, chunkTemplate } = compilation;
 
        const onRenderWithEntry = (source, chunk, hash) => {
            const postfix = `${accessorToObjectAccess([].concat(this.property))}`;
            return new ConcatSource(source, postfix);
        };
 
        for (const template of [mainTemplate, chunkTemplate]) {
            template.hooks.renderWithEntry.tap(
                "ExportPropertyMainTemplatePlugin",
                onRenderWithEntry
            );
        }
 
        mainTemplate.hooks.hash.tap("ExportPropertyMainTemplatePlugin", hash => {
            hash.update("export property");
            hash.update(`${this.property}`);
        });
    }
}
 
module.exports = ExportPropertyMainTemplatePlugin;