MCPcopy
hub / github.com/webpack/webpack / getModulesInOrder

Method getModulesInOrder

lib/css/CssModulesPlugin.js:696–834  ·  view source on GitHub ↗

* Gets modules in order. * @param {Chunk} chunk chunk * @param {Iterable<Module> | undefined} modules unordered modules * @param {Compilation} compilation compilation * @returns {Module[]} ordered modules

(chunk, modules, compilation)

Source from the content-addressed store, hash-verified

694 * @returns {Module[]} ordered modules
695 */
696 getModulesInOrder(chunk, modules, compilation) {
697 if (!modules) return [];
698
699 /** @type {Module[]} */
700 const modulesList = [...modules];
701
702 // Get ordered list of modules per chunk group
703 // Lists are in reverse order to allow to use Array.pop()
704 const modulesByChunkGroup = Array.from(
705 chunk.groupsIterable,
706 (chunkGroup) => {
707 const sortedModules = modulesList
708 .map((module) => ({
709 module,
710 index: chunkGroup.getModulePostOrderIndex(module)
711 }))
712 .filter((item) => item.index !== undefined)
713 .sort(
714 (a, b) =>
715 /** @type {number} */ (b.index) - /** @type {number} */ (a.index)
716 )
717 .map((item) => item.module);
718
719 return { list: sortedModules, set: new Set(sortedModules) };
720 }
721 );
722
723 if (modulesByChunkGroup.length === 1) {
724 return modulesByChunkGroup[0].list.reverse();
725 }
726
727 const boundCompareModulesByFullName = compareModulesByFullName(
728 compilation.compiler
729 );
730
731 /**
732 * Compares module lists.
733 * @param {{ list: Module[] }} a a
734 * @param {{ list: Module[] }} b b
735 * @returns {-1 | 0 | 1} result
736 */
737 const compareModuleLists = ({ list: a }, { list: b }) => {
738 if (a.length === 0) {
739 return b.length === 0 ? 0 : 1;
740 }
741 if (b.length === 0) return -1;
742 return boundCompareModulesByFullName(a[a.length - 1], b[b.length - 1]);
743 };
744
745 modulesByChunkGroup.sort(compareModuleLists);
746
747 /** @type {Module[]} */
748 const finalModules = [];
749
750 for (;;) {
751 /** @type {Set<Module>} */
752 const failedModules = new Set();
753 const list = modulesByChunkGroup[0].list;

Callers 1

orderModulesMethod · 0.95

Calls 10

compareModulesByFullNameFunction · 0.85
sortMethod · 0.80
popMethod · 0.80
keysMethod · 0.65
hasMethod · 0.45
addMethod · 0.45
readableIdentifierMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected