From de98e0b232509d5f40c135d540a70e415272ff85 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 3 May 2017 15:35:00 +0200 Subject: node_modules --- .../webpack/lib/FlagDependencyUsagePlugin.js | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 node_modules/webpack/lib/FlagDependencyUsagePlugin.js (limited to 'node_modules/webpack/lib/FlagDependencyUsagePlugin.js') diff --git a/node_modules/webpack/lib/FlagDependencyUsagePlugin.js b/node_modules/webpack/lib/FlagDependencyUsagePlugin.js new file mode 100644 index 000000000..0be9d54b2 --- /dev/null +++ b/node_modules/webpack/lib/FlagDependencyUsagePlugin.js @@ -0,0 +1,81 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +class FlagDependencyUsagePlugin { + apply(compiler) { + compiler.plugin("compilation", compilation => { + compilation.plugin("optimize-modules-advanced", modules => { + + modules.forEach(module => module.used = false); + + const queue = []; + compilation.chunks.forEach(chunk => { + if(chunk.entryModule) { + processModule(chunk.entryModule, true); + } + }); + + while(queue.length) { + const queueItem = queue.pop(); + processDependenciesBlock(queueItem[0], queueItem[1]); + } + + function processModule(module, usedExports) { + module.used = true; + if(module.usedExports === true) + return; + else if(usedExports === true) + module.usedExports = true; + else if(Array.isArray(usedExports)) { + var old = module.usedExports ? module.usedExports.length : -1; + module.usedExports = addToSet(module.usedExports || [], usedExports); + if(module.usedExports.length === old) + return; + } else if(Array.isArray(module.usedExports)) + return; + else + module.usedExports = false; + + queue.push([module, module.usedExports]); + } + + function processDependenciesBlock(depBlock, usedExports) { + depBlock.dependencies.forEach(dep => processDependency(dep)); + depBlock.variables.forEach(variable => variable.dependencies.forEach(dep => processDependency(dep))); + depBlock.blocks.forEach(block => queue.push([block, usedExports])); + } + + function processDependency(dep) { + const reference = dep.getReference && dep.getReference(); + if(!reference) return; + const module = reference.module; + const importedNames = reference.importedNames; + const oldUsed = module.used; + const oldUsedExports = module.usedExports; + if(!oldUsed || (importedNames && (!oldUsedExports || !isSubset(oldUsedExports, importedNames)))) { + processModule(module, importedNames); + } + } + + }); + + function addToSet(a, b) { + b.forEach(item => { + if(a.indexOf(item) < 0) + a.push(item); + }); + return a; + } + + function isSubset(biggerSet, subset) { + if(biggerSet === true) return true; + if(subset === true) return false; + return subset.every(item => biggerSet.indexOf(item) >= 0); + } + }); + } +} +module.exports = FlagDependencyUsagePlugin; -- cgit v1.2.3