in packages/metro/src/ModuleGraph/worker/collectDependencies.js [590:620]
function collapseDependencies<TSplitCondition>(
dependency: InternalDependency<TSplitCondition>,
qualifier: ImportQualifier,
): InternalDependency<TSplitCondition> {
let collapsed = dependency;
// A previously optionally required dependency was required non-optionaly.
// Mark it non optional for the whole module
if (collapsed.isOptional && !qualifier.optional) {
collapsed = {
...dependency,
isOptional: false,
};
}
// A previously asynchronously (or prefetch) required module was required synchronously.
// Make the dependency sync.
if (collapsed.asyncType != null && qualifier.asyncType == null) {
collapsed = {...dependency, asyncType: null};
}
// A prefetched dependency was required async in the module. Mark it as async.
if (collapsed.asyncType === 'prefetch' && qualifier.asyncType === 'async') {
collapsed = {
...dependency,
asyncType: 'async',
};
}
return collapsed;
}