1import { ModuleDescriptor, ResolveOptions, SearchResults } from '../types';
2
3/**
4 * Resolves search results to a list of platform-specific configuration.
5 */
6export async function resolveModulesAsync(
7  searchResults: SearchResults,
8  options: ResolveOptions
9): Promise<ModuleDescriptor[]> {
10  const platformLinking = require(`../platforms/${options.platform}`);
11
12  return (
13    await Promise.all(
14      Object.entries(searchResults).map(async ([packageName, revision]) => {
15        const resolvedModule = await platformLinking.resolveModuleAsync(
16          packageName,
17          revision,
18          options
19        );
20        return resolvedModule
21          ? {
22              packageName,
23              packageVersion: revision.version,
24              ...resolvedModule,
25            }
26          : null;
27      })
28    )
29  )
30    .filter(Boolean)
31    .sort((a, b) => a.packageName.localeCompare(b.packageName));
32}
33