(sourceTypesByModule)
| 106 | * @returns {ModulesBySourceType} modules by source type |
| 107 | */ |
| 108 | const modulesBySourceType = (sourceTypesByModule) => (set) => { |
| 109 | /** @typedef {SortableSet<Module>} ModuleSortableSet */ |
| 110 | /** @type {Map<SourceType, ModuleSortableSet>} */ |
| 111 | const map = new Map(); |
| 112 | for (const module of set) { |
| 113 | const sourceTypes = |
| 114 | (sourceTypesByModule && sourceTypesByModule.get(module)) || |
| 115 | module.getSourceTypes(); |
| 116 | for (const sourceType of sourceTypes) { |
| 117 | let innerSet = map.get(sourceType); |
| 118 | if (innerSet === undefined) { |
| 119 | /** @type {ModuleSortableSet} */ |
| 120 | innerSet = new SortableSet(); |
| 121 | map.set(sourceType, innerSet); |
| 122 | } |
| 123 | innerSet.add(module); |
| 124 | } |
| 125 | } |
| 126 | for (const [key, innerSet] of map) { |
| 127 | // When all modules have the source type, we reuse the original SortableSet |
| 128 | // to benefit from the shared cache (especially for sorting) |
| 129 | if (innerSet.size === set.size) { |
| 130 | map.set(key, set); |
| 131 | } |
| 132 | } |
| 133 | return map; |
| 134 | }; |
| 135 | |
| 136 | /** @typedef {(set: SortableSet<Module>) => Map<string, SortableSet<Module>>} ModulesBySourceType */ |
| 137 |
no test coverage detected