* Returns the target, undefined when there is no target, false when no target is valid. * @param {ModuleGraph} moduleGraph the module graph * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited
(moduleGraph, validTargetModuleFilter, alreadyVisited)
| 1589 | * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid |
| 1590 | */ |
| 1591 | _findTarget(moduleGraph, validTargetModuleFilter, alreadyVisited) { |
| 1592 | if (!this._target || this._target.size === 0) return; |
| 1593 | const rawTarget = |
| 1594 | /** @type {Target} */ |
| 1595 | (this._getMaxTarget()).values().next().value; |
| 1596 | if (!rawTarget) return; |
| 1597 | /** @type {TargetItemWithoutConnection} */ |
| 1598 | let target = { |
| 1599 | module: rawTarget.connection.module, |
| 1600 | export: rawTarget.export, |
| 1601 | deferred: Boolean( |
| 1602 | rawTarget.connection.dependency && |
| 1603 | ImportPhaseUtils.isDefer( |
| 1604 | /** @type {HarmonyImportDependency} */ ( |
| 1605 | rawTarget.connection.dependency |
| 1606 | ).phase |
| 1607 | ) |
| 1608 | ) |
| 1609 | }; |
| 1610 | for (;;) { |
| 1611 | if (validTargetModuleFilter(target.module)) return target; |
| 1612 | const exportsInfo = moduleGraph.getExportsInfo(target.module); |
| 1613 | const exportInfo = exportsInfo.getExportInfo(target.export[0]); |
| 1614 | if (alreadyVisited.has(exportInfo)) return null; |
| 1615 | const newTarget = exportInfo._findTarget( |
| 1616 | moduleGraph, |
| 1617 | validTargetModuleFilter, |
| 1618 | alreadyVisited |
| 1619 | ); |
| 1620 | if (!newTarget) return false; |
| 1621 | if (target.export.length === 1) { |
| 1622 | target = newTarget; |
| 1623 | } else { |
| 1624 | target = { |
| 1625 | module: newTarget.module, |
| 1626 | export: newTarget.export |
| 1627 | ? [...newTarget.export, ...target.export.slice(1)] |
| 1628 | : target.export.slice(1), |
| 1629 | deferred: newTarget.deferred |
| 1630 | }; |
| 1631 | } |
| 1632 | } |
| 1633 | } |
| 1634 | |
| 1635 | /** |
| 1636 | * Returns the target. |
no test coverage detected