@pnpm/npm-resolver
Advanced tools
Comparing version 3.0.16 to 3.1.0
@@ -69,5 +69,15 @@ "use strict"; | ||
async function resolveNpm(ctx, wantedDependency, opts) { | ||
const defaultTag = opts.defaultTag || 'latest'; | ||
const resolvedFromWorkspace = tryResolveFromWorkspace(wantedDependency, { | ||
defaultTag, | ||
localPackages: opts.localPackages, | ||
prefix: opts.prefix, | ||
registry: opts.registry, | ||
}); | ||
if (resolvedFromWorkspace) { | ||
return resolvedFromWorkspace; | ||
} | ||
const spec = wantedDependency.pref | ||
? parsePref_1.default(wantedDependency.pref, wantedDependency.alias, opts.defaultTag || 'latest', opts.registry) | ||
: defaultTagForAlias(wantedDependency.alias, opts.defaultTag || 'latest'); | ||
? parsePref_1.default(wantedDependency.pref, wantedDependency.alias, defaultTag, opts.registry) | ||
: defaultTagForAlias(wantedDependency.alias, defaultTag); | ||
if (!spec) | ||
@@ -127,2 +137,22 @@ return null; | ||
} | ||
function tryResolveFromWorkspace(wantedDependency, opts) { | ||
if (!wantedDependency.pref || !wantedDependency.pref.startsWith('workspace:')) { | ||
return null; | ||
} | ||
const pref = wantedDependency.pref.substr(10); | ||
const spec = parsePref_1.default(pref, wantedDependency.alias, opts.defaultTag, opts.registry); | ||
if (!spec) | ||
throw new Error(`Invalid workspace: spec (${wantedDependency.pref})`); | ||
if (!opts.localPackages) { | ||
throw new Error('Cannot resolve package from workspace because opts.localPackages is not defined'); | ||
} | ||
if (!opts.prefix) { | ||
throw new Error('Cannot resolve package from workspace because opts.prefix is not defined'); | ||
} | ||
const resolvedFromLocal = tryResolveFromLocalPackages(opts.localPackages, spec, opts.prefix); | ||
if (!resolvedFromLocal) { | ||
throw new error_1.default('NO_MATCHING_VERSION_INSIDE_WORKSPACE', `No matching version found for ${wantedDependency.alias}@${pref} inside the workspace`); | ||
} | ||
return resolvedFromLocal; | ||
} | ||
function tryResolveFromLocalPackages(localPackages, spec, prefix) { | ||
@@ -129,0 +159,0 @@ if (!localPackages[spec.name]) |
@@ -24,2 +24,11 @@ import { PackageManifest } from '@pnpm/types'; | ||
}; | ||
export declare type PickPackageOptions = { | ||
auth: object; | ||
preferredVersionSelector: { | ||
selector: string; | ||
type: 'version' | 'range' | 'tag'; | ||
} | undefined; | ||
registry: string; | ||
dryRun: boolean; | ||
}; | ||
declare const _default: (ctx: { | ||
@@ -34,11 +43,3 @@ fetch: (url: string, opts: { | ||
preferOffline?: boolean | undefined; | ||
}, spec: RegistryPackageSpec, opts: { | ||
auth: object; | ||
preferredVersionSelector: { | ||
selector: string; | ||
type: "version" | "range" | "tag"; | ||
} | undefined; | ||
registry: string; | ||
dryRun: boolean; | ||
}) => Promise<{ | ||
}, spec: RegistryPackageSpec, opts: PickPackageOptions) => Promise<{ | ||
meta: PackageMeta; | ||
@@ -45,0 +46,0 @@ pickedPackage: PackageInRegistry | null; |
{ | ||
"name": "@pnpm/npm-resolver", | ||
"version": "3.0.16", | ||
"version": "3.1.0", | ||
"description": "Resolver for npm-hosted packages", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
26024
562