保誠-保戶業務員媒合平台
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const WebpackError = require('webpack/lib/WebpackError');
const ModuleError = require('webpack/lib/ModuleError');
const ModuleWarning = require('webpack/lib/ModuleWarning');
 
const pluginCompat = require('./util/plugin-compat');
 
class TransformModuleErrorsPlugin {
  apply(compiler) {
    let freeze;
    let thaw;
    let mapFreeze;
    let mapThaw;
 
    pluginCompat.tap(
      compiler,
      '_hardSourceMethods',
      'TransformModuleErrorsPlugin',
      methods => {
        // store = methods.store;
        // fetch = methods.fetch;
        freeze = methods.freeze;
        thaw = methods.thaw;
        mapFreeze = methods.mapFreeze;
        mapThaw = methods.mapThaw;
      },
    );
 
    function freezeErrorWarning(
      frozen,
      { message, details, originLoc, dependencies, name, loc, constructor },
      extra,
    ) {
      return {
        constructor: constructor.name,
        message: message,
        details: details,
        originLoc: originLoc,
        dependencies:
          dependencies && mapFreeze('Dependency', null, dependencies, extra),
        name: name,
        loc: loc,
      };
    }
 
    pluginCompat.tap(
      compiler,
      '_hardSourceFreezeModuleError',
      'TransformModuleErrorsPlugin',
      freezeErrorWarning,
    );
    pluginCompat.tap(
      compiler,
      '_hardSourceFreezeModuleWarning',
      'TransformModuleErrorsPlugin',
      freezeErrorWarning,
    );
 
    function thawError(
      ErrorClass,
      error,
      { constructor, message, details, originLoc, dependencies, name, loc },
      extra,
    ) {
      const module = extra.module;
      error = new ErrorClass(module, message);
      if (constructor === 'SystemImportDeprecationWarning') {
        error = new WebpackError(message);
        error.module = module;
      }
      if (details) {
        error.details = details;
      }
 
      if (extra.origin) {
        error.origin = extra.origin;
      }
      if (originLoc) {
        error.originLoc = originLoc;
      }
      if (dependencies) {
        error.dependencies = mapThaw('Dependency', null, dependencies, extra);
      }
      if (name) {
        error.name = name;
      }
      if (loc) {
        error.loc = loc;
      }
      return error;
    }
 
    pluginCompat.tap(
      compiler,
      '_hardSourceThawModuleError',
      'TransformModuleErrorsPlugin',
      (error, frozen, extra) => thawError(ModuleError, error, frozen, extra),
    );
 
    pluginCompat.tap(
      compiler,
      '_hardSourceThawModuleWarning',
      'TransformModuleErrorsPlugin',
      (warning, frozen, extra) =>
        thawError(ModuleWarning, warning, frozen, extra),
    );
  }
}
 
module.exports = TransformModuleErrorsPlugin;