| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- class FlagDependencyExportsPlugin {
 
- 	apply(compiler) {
 
- 		compiler.plugin("compilation", (compilation) => {
 
- 			compilation.plugin("finish-modules", (modules) => {
 
- 				const dependencies = Object.create(null);
 
- 				let module;
 
- 				let moduleWithExports;
 
- 				let moduleProvidedExports;
 
- 				const queue = modules.filter((m) => !m.providedExports);
 
- 				for(let i = 0; i < queue.length; i++) {
 
- 					module = queue[i];
 
- 					if(module.providedExports !== true) {
 
- 						moduleWithExports = module.meta && module.meta.harmonyModule;
 
- 						moduleProvidedExports = Array.isArray(module.providedExports) ? new Set(module.providedExports) : new Set();
 
- 						processDependenciesBlock(module);
 
- 						if(!moduleWithExports) {
 
- 							module.providedExports = true;
 
- 							notifyDependencies();
 
- 						} else if(module.providedExports !== true) {
 
- 							module.providedExports = Array.from(moduleProvidedExports);
 
- 						}
 
- 					}
 
- 				}
 
- 				function processDependenciesBlock(depBlock) {
 
- 					depBlock.dependencies.forEach((dep) => processDependency(dep));
 
- 					depBlock.variables.forEach((variable) => {
 
- 						variable.dependencies.forEach((dep) => processDependency(dep));
 
- 					});
 
- 					depBlock.blocks.forEach(processDependenciesBlock);
 
- 				}
 
- 				function processDependency(dep) {
 
- 					const exportDesc = dep.getExports && dep.getExports();
 
- 					if(!exportDesc) return;
 
- 					moduleWithExports = true;
 
- 					const exports = exportDesc.exports;
 
- 					const exportDeps = exportDesc.dependencies;
 
- 					if(exportDeps) {
 
- 						exportDeps.forEach((dep) => {
 
- 							const depIdent = dep.identifier();
 
- 							// if this was not yet initialized
 
- 							// initialize it as an array containing the module and stop
 
- 							const array = dependencies[depIdent];
 
- 							if(!array) {
 
- 								dependencies[depIdent] = [module];
 
- 								return;
 
- 							}
 
- 							// check if this module is known
 
- 							// if not, add it to the dependencies for this identifier
 
- 							if(array.indexOf(module) < 0)
 
- 								array.push(module);
 
- 						});
 
- 					}
 
- 					let changed = false;
 
- 					if(module.providedExports !== true) {
 
- 						if(exports === true) {
 
- 							module.providedExports = true;
 
- 							changed = true;
 
- 						} else if(Array.isArray(exports)) {
 
- 							changed = addToSet(moduleProvidedExports, exports);
 
- 						}
 
- 					}
 
- 					if(changed) {
 
- 						notifyDependencies();
 
- 					}
 
- 				}
 
- 				function notifyDependencies() {
 
- 					const deps = dependencies[module.identifier()];
 
- 					if(deps) {
 
- 						deps.forEach((dep) => queue.push(dep));
 
- 					}
 
- 				}
 
- 			});
 
- 			function addToSet(a, b) {
 
- 				let changed = false;
 
- 				b.forEach((item) => {
 
- 					if(!a.has(item)) {
 
- 						a.add(item);
 
- 						changed = true;
 
- 					}
 
- 				});
 
- 				return changed;
 
- 			}
 
- 		});
 
- 	}
 
- }
 
- module.exports = FlagDependencyExportsPlugin;
 
 
  |