diff --git a/packages/npm-resolver/src/pickPackage.ts b/packages/npm-resolver/src/pickPackage.ts index f79a29f9d9c..5e57d5cb14a 100644 --- a/packages/npm-resolver/src/pickPackage.ts +++ b/packages/npm-resolver/src/pickPackage.ts @@ -16,10 +16,8 @@ import pickPackageFromMeta from './pickPackageFromMeta' import { RegistryPackageSpec } from './parsePref' export interface PackageMeta { - 'dist-tag': { [name: string]: string } - versions: { - [name: string]: PackageInRegistry - } + 'dist-tags': Record + versions: Record cachedAt?: number } diff --git a/packages/npm-resolver/src/pickPackageFromMeta.ts b/packages/npm-resolver/src/pickPackageFromMeta.ts index 269e44a1c8e..2a50fe90ee1 100644 --- a/packages/npm-resolver/src/pickPackageFromMeta.ts +++ b/packages/npm-resolver/src/pickPackageFromMeta.ts @@ -8,9 +8,9 @@ export default function ( spec: RegistryPackageSpec, preferredVersionSelectors: VersionSelectors | undefined, meta: PackageMeta -): PackageInRegistry { +): PackageInRegistry | null { try { - let version!: string + let version!: string | null switch (spec.type) { case 'version': version = spec.fetchSpec @@ -22,6 +22,7 @@ export default function ( version = pickVersionByVersionRange(meta, spec.fetchSpec, preferredVersionSelectors) break } + if (!version) return null const manifest = meta.versions[version] if (manifest && meta['name']) { // Packages that are published to the GitHub registry are always published with a scope. @@ -44,7 +45,7 @@ function pickVersionByVersionRange ( meta: PackageMeta, versionRange: string, preferredVerSels?: VersionSelectors -) { +): string | null { let versions: string[] | undefined const latest = meta['dist-tags'].latest