保誠-保戶業務員媒合平台
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
54
55
56
57
58
59
60
61
/*
    MIT License http://www.opensource.org/licenses/mit-license.php
    Author Tobias Koppers @sokra
*/
"use strict";
 
const { RawSource } = require("webpack-sources");
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
 
const cache = new WeakMap();
 
class EvalDevToolModuleTemplatePlugin {
    constructor(options) {
        this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]";
        this.moduleFilenameTemplate =
            options.moduleFilenameTemplate ||
            "webpack://[namespace]/[resourcePath]?[loaders]";
        this.namespace = options.namespace || "";
    }
 
    apply(moduleTemplate) {
        moduleTemplate.hooks.module.tap(
            "EvalDevToolModuleTemplatePlugin",
            (source, module) => {
                const cacheEntry = cache.get(source);
                if (cacheEntry !== undefined) return cacheEntry;
                const content = source.source();
                const str = ModuleFilenameHelpers.createFilename(
                    module,
                    {
                        moduleFilenameTemplate: this.moduleFilenameTemplate,
                        namespace: this.namespace
                    },
                    moduleTemplate.runtimeTemplate.requestShortener
                );
                const footer =
                    "\n" +
                    this.sourceUrlComment.replace(
                        /\[url\]/g,
                        encodeURI(str)
                            .replace(/%2F/g, "/")
                            .replace(/%20/g, "_")
                            .replace(/%5E/g, "^")
                            .replace(/%5C/g, "\\")
                            .replace(/^\//, "")
                    );
                const result = new RawSource(
                    `eval(${JSON.stringify(content + footer)});`
                );
                cache.set(source, result);
                return result;
            }
        );
        moduleTemplate.hooks.hash.tap("EvalDevToolModuleTemplatePlugin", hash => {
            hash.update("EvalDevToolModuleTemplatePlugin");
            hash.update("2");
        });
    }
}
 
module.exports = EvalDevToolModuleTemplatePlugin;