保誠-保戶業務員媒合平台
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
const pluginCompat = require('./util/plugin-compat');
 
const matchTest = (test, source) => {
  if (Array.isArray(test)) {
    return test.some(subtest => matchTest(subtest, source));
  } else if (test instanceof RegExp) {
    return test.test(source);
  } else if (typeof test === 'string') {
    return source.startsWith(test);
  } else if (typeof test === 'function') {
    return test(source);
  }
  return false;
};
 
const matchOne = ({ test, include, exclude }, source) => {
  return (
    (test ? matchTest(test, source) : true) &&
    (include ? matchTest(include, source) : true) &&
    (exclude ? !matchTest(exclude, source) : true)
  );
};
 
const matchAny = (test, source) => {
  if (Array.isArray(test)) {
    return test.some(subtest => matchOne(subtest, source));
  }
  return matchOne(test, source);
};
 
class ExcludeModulePlugin {
  constructor(match) {
    this.match = match;
  }
 
  apply(compiler) {
    const compilerHooks = pluginCompat.hooks(compiler);
 
    compilerHooks.afterPlugins.tap('HardSource - ExcludeModulePlugin', () => {
      compilerHooks._hardSourceAfterFreezeModule.tap(
        'HardSource - ExcludeModulePlugin',
        (frozen, module, extra) => {
          if (matchAny(this.match, module.identifier())) {
            return null;
          }
          return frozen;
        },
      );
    });
  }
}
 
module.exports = ExcludeModulePlugin;