nav tabs on admin dashboard
This commit is contained in:
212
node_modules/webpack/lib/FlagDependencyExportsPlugin.js
generated
vendored
212
node_modules/webpack/lib/FlagDependencyExportsPlugin.js
generated
vendored
@@ -4,97 +4,151 @@
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const Queue = require("./util/Queue");
|
||||
|
||||
const addToSet = (a, b) => {
|
||||
let changed = false;
|
||||
for (const item of b) {
|
||||
if (!a.has(item)) {
|
||||
a.add(item);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
return changed;
|
||||
};
|
||||
|
||||
class FlagDependencyExportsPlugin {
|
||||
|
||||
apply(compiler) {
|
||||
compiler.plugin("compilation", (compilation) => {
|
||||
compilation.plugin("finish-modules", (modules) => {
|
||||
const dependencies = Object.create(null);
|
||||
compiler.hooks.compilation.tap(
|
||||
"FlagDependencyExportsPlugin",
|
||||
compilation => {
|
||||
compilation.hooks.finishModules.tap(
|
||||
"FlagDependencyExportsPlugin",
|
||||
modules => {
|
||||
const dependencies = new Map();
|
||||
|
||||
let module;
|
||||
let moduleWithExports;
|
||||
let moduleProvidedExports;
|
||||
const queue = modules.filter((m) => !m.providedExports);
|
||||
for(let i = 0; i < queue.length; i++) {
|
||||
module = queue[i];
|
||||
const queue = new Queue();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
let module;
|
||||
let moduleWithExports;
|
||||
let moduleProvidedExports;
|
||||
let providedExportsAreTemporary;
|
||||
|
||||
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;
|
||||
const processDependenciesBlock = depBlock => {
|
||||
for (const dep of depBlock.dependencies) {
|
||||
if (processDependency(dep)) return true;
|
||||
}
|
||||
for (const variable of depBlock.variables) {
|
||||
for (const dep of variable.dependencies) {
|
||||
if (processDependency(dep)) return true;
|
||||
}
|
||||
}
|
||||
for (const block of depBlock.blocks) {
|
||||
if (processDependenciesBlock(block)) return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 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);
|
||||
const processDependency = dep => {
|
||||
const exportDesc = dep.getExports && dep.getExports();
|
||||
if (!exportDesc) return;
|
||||
moduleWithExports = true;
|
||||
const exports = exportDesc.exports;
|
||||
// break early if it's only in the worst state
|
||||
if (module.buildMeta.providedExports === true) {
|
||||
return true;
|
||||
}
|
||||
// break if it should move to the worst state
|
||||
if (exports === true) {
|
||||
module.buildMeta.providedExports = true;
|
||||
notifyDependencies();
|
||||
return true;
|
||||
}
|
||||
// merge in new exports
|
||||
if (Array.isArray(exports)) {
|
||||
if (addToSet(moduleProvidedExports, exports)) {
|
||||
notifyDependencies();
|
||||
}
|
||||
}
|
||||
// store dependencies
|
||||
const exportDeps = exportDesc.dependencies;
|
||||
if (exportDeps) {
|
||||
providedExportsAreTemporary = true;
|
||||
for (const exportDependency of exportDeps) {
|
||||
// add dependency for this module
|
||||
const set = dependencies.get(exportDependency);
|
||||
if (set === undefined) {
|
||||
dependencies.set(exportDependency, new Set([module]));
|
||||
} else {
|
||||
set.add(module);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
const notifyDependencies = () => {
|
||||
const deps = dependencies.get(module);
|
||||
if (deps !== undefined) {
|
||||
for (const dep of deps) {
|
||||
queue.enqueue(dep);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Start with all modules without provided exports
|
||||
for (const module of modules) {
|
||||
if (module.buildInfo.temporaryProvidedExports) {
|
||||
// Clear exports when they are temporary
|
||||
// and recreate them
|
||||
module.buildMeta.providedExports = null;
|
||||
queue.enqueue(module);
|
||||
} else if (!module.buildMeta.providedExports) {
|
||||
queue.enqueue(module);
|
||||
}
|
||||
}
|
||||
|
||||
while (queue.length > 0) {
|
||||
module = queue.dequeue();
|
||||
|
||||
if (module.buildMeta.providedExports !== true) {
|
||||
moduleWithExports =
|
||||
module.buildMeta && module.buildMeta.exportsType;
|
||||
moduleProvidedExports = Array.isArray(
|
||||
module.buildMeta.providedExports
|
||||
)
|
||||
? new Set(module.buildMeta.providedExports)
|
||||
: new Set();
|
||||
providedExportsAreTemporary = false;
|
||||
processDependenciesBlock(module);
|
||||
module.buildInfo.temporaryProvidedExports = providedExportsAreTemporary;
|
||||
if (!moduleWithExports) {
|
||||
module.buildMeta.providedExports = true;
|
||||
notifyDependencies();
|
||||
} else if (module.buildMeta.providedExports !== true) {
|
||||
module.buildMeta.providedExports = Array.from(
|
||||
moduleProvidedExports
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(changed) {
|
||||
notifyDependencies();
|
||||
);
|
||||
const providedExportsCache = new WeakMap();
|
||||
compilation.hooks.rebuildModule.tap(
|
||||
"FlagDependencyExportsPlugin",
|
||||
module => {
|
||||
providedExportsCache.set(module, module.buildMeta.providedExports);
|
||||
}
|
||||
}
|
||||
|
||||
function notifyDependencies() {
|
||||
const deps = dependencies[module.identifier()];
|
||||
if(deps) {
|
||||
deps.forEach((dep) => queue.push(dep));
|
||||
);
|
||||
compilation.hooks.finishRebuildingModule.tap(
|
||||
"FlagDependencyExportsPlugin",
|
||||
module => {
|
||||
module.buildMeta.providedExports = providedExportsCache.get(module);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function addToSet(a, b) {
|
||||
let changed = false;
|
||||
b.forEach((item) => {
|
||||
if(!a.has(item)) {
|
||||
a.add(item);
|
||||
changed = true;
|
||||
}
|
||||
});
|
||||
return changed;
|
||||
);
|
||||
}
|
||||
});
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user