保誠-保戶業務員媒合平台
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
const pluginCompat = require('./util/plugin-compat');
 
function freezeDependency(dependency, extra, methods) {
  if (extra.schemas.map.has(dependency.constructor)) {
    return extra.schemas.map
      .get(dependency.constructor)
      .freeze(dependency, dependency, extra, methods);
  }
  if (extra.schemas[dependency.constructor.name]) {
    return extra.schemas[dependency.constructor.name].freeze(
      dependency,
      dependency,
      extra,
      methods,
    );
  }
}
 
function thawDependency(frozen, extra, methods) {
  if (extra.schemas[frozen.type]) {
    return extra.schemas[frozen.type].thaw(null, frozen, extra, methods);
  }
}
 
class TransformBasicDependencyPlugin {
  constructor(options) {
    this.options = options;
  }
 
  apply(compiler) {
    if (this.options.schema < 4) {
      const TransformBasicDependencyPluginLegacy = require('./TransformBasicDependencyPluginLegacy');
      new TransformBasicDependencyPluginLegacy(this.options).apply(compiler);
    } else {
      const schemas = require('./schema-4');
 
      let methods;
 
      pluginCompat.tap(
        compiler,
        '_hardSourceMethods',
        'TransformBasicDependencyPlugin methods',
        _methods => {
          methods = _methods;
        },
      );
 
      pluginCompat.tap(
        compiler,
        '_hardSourceFreezeDependency',
        'TransformBasicDependencyPlugin freeze',
        (frozen, dependency, extra) => {
          extra.schemas = schemas;
          const _frozen = freezeDependency(dependency, extra, methods);
          if (_frozen) {
            return _frozen;
          }
          return frozen;
        },
      );
 
      pluginCompat.tap(
        compiler,
        '_hardSourceThawDependency',
        'TransformBasicDependencyPlugin',
        (dependency, frozen, extra) => {
          extra.schemas = schemas;
          const _thawed = thawDependency(frozen, extra, methods);
          if (_thawed) {
            return _thawed;
          }
          return dependency;
        },
      );
    }
  }
}
 
module.exports = TransformBasicDependencyPlugin;