1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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;
|