refactor: pass whole registries to the resolver (#9375)

This commit is contained in:
Khải
2025-04-04 06:20:16 +07:00
committed by GitHub
parent 01f2bcfa9b
commit 72cff38486
45 changed files with 300 additions and 314 deletions

View File

@@ -0,0 +1,17 @@
---
"@pnpm/store-controller-types": major
"@pnpm/resolver-base": major
"@pnpm/npm-resolver": major
"@pnpm/plugin-commands-publishing": patch
"@pnpm/resolve-dependencies": patch
"@pnpm/package-store": major
"@pnpm/package-requester": major
"@pnpm/plugin-commands-store": patch
"@pnpm/outdated": patch
"@pnpm/server": major
"@pnpm/store-connection-manager": major
"@pnpm/core": major
"@pnpm/headless": major
---
The resolving function now takes a `registries` object, so it finds the required registry itself instead of receiving it from package requester.

View File

@@ -47,7 +47,6 @@
"@pnpm/log.group": "catalog:",
"@pnpm/package-bins": "workspace:*",
"@pnpm/parse-wanted-dependency": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/plugin-commands-env": "workspace:*",
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/read-package-json": "workspace:*",

View File

@@ -11,7 +11,6 @@ import { PnpmError } from '@pnpm/error'
import { add } from '@pnpm/plugin-commands-installation'
import { readPackageJsonFromDir } from '@pnpm/read-package-json'
import { getBinsFromPackageManifest } from '@pnpm/package-bins'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { type PnpmSettings } from '@pnpm/types'
import execa from 'execa'
import pick from 'ramda/src/pick'
@@ -95,7 +94,6 @@ export async function handler (
lockfileDir: opts.lockfileDir ?? opts.dir,
preferredVersions: {},
projectDir: opts.dir,
registry: pickRegistryForPackage(opts.registries, alias, pref),
})
return resolved.id
}))

View File

@@ -27,9 +27,6 @@
{
"path": "../../config/config"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../crypto/hash"
},

View File

@@ -45,7 +45,6 @@
"@pnpm/parse-wanted-dependency": "workspace:*",
"@pnpm/patching.apply-patch": "workspace:*",
"@pnpm/pick-fetcher": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/plugin-commands-installation": "workspace:*",
"@pnpm/read-package-json": "workspace:*",
"@pnpm/read-project-manifest": "workspace:*",

View File

@@ -3,7 +3,6 @@ import {
createOrConnectStoreController,
type CreateStoreControllerOptions,
} from '@pnpm/store-connection-manager'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import type { ParseWantedDependencyResult } from '@pnpm/parse-wanted-dependency'
export type WritePackageOptions = CreateStoreControllerOptions & Pick<Config, 'registries'>
@@ -18,7 +17,6 @@ export async function writePackage (dep: ParseWantedDependencyResult, dest: stri
lockfileDir: opts.dir,
preferredVersions: {},
projectDir: opts.dir,
registry: (dep.alias && pickRegistryForPackage(opts.registries, dep.alias)) ?? opts.registries.default,
})
const { files } = await pkgResponse.fetching!()
await store.ctrl.importPackage(dest, {

View File

@@ -24,9 +24,6 @@
{
"path": "../../config/config-writer"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../crypto/hash"
},

View File

@@ -6,6 +6,9 @@ test('createClient()', () => {
authConfig: { registry: 'https://registry.npmjs.org/' },
cacheDir: '',
rawConfig: {},
registries: {
default: 'https://reigstry.npmjs.org/',
},
})
expect(typeof client === 'object').toBeTruthy()
})
@@ -15,6 +18,9 @@ test('createResolver()', () => {
authConfig: { registry: 'https://registry.npmjs.org/' },
cacheDir: '',
rawConfig: {},
registries: {
default: 'https://reigstry.npmjs.org/',
},
})
expect(typeof resolve === 'function').toBeTruthy()
})

View File

@@ -6,16 +6,18 @@ import { testDefaults } from '../utils'
test('a package with a huge amount of circular dependencies and many peer dependencies should successfully be resolved', async () => {
prepareEmpty()
const registries = {
default: 'https://registry.npmjs.org/',
'@teambit': 'https://node-registry.bit.cloud/',
}
await addDependenciesToPackage({},
['@teambit/bit@0.0.745'],
testDefaults({
fastUnpack: true,
lockfileOnly: true,
registries: {
'@teambit': 'https://node-registry.bit.cloud/',
},
registries,
strictPeerDependencies: false,
})
}, { registries })
)
expect(fs.existsSync('pnpm-lock.yaml')).toBeTruthy()

View File

@@ -1208,6 +1208,7 @@ test('two dependencies have the same version and name. The only difference is th
rootDir: process.cwd() as ProjectRootDir,
}, testDefaults({
fastUnpack: false,
}, {
registries: {
default: 'https://registry.npmjs.org/',
},

View File

@@ -450,11 +450,12 @@ test('package is not marked optional if it is also a subdep of a regular depende
test('scoped module from different registry', async () => {
const project = prepareEmpty()
const opts = testDefaults()
opts.registries!.default = 'https://registry.npmjs.org/'
opts.registries!['@zkochan'] = `http://localhost:${REGISTRY_MOCK_PORT}`
opts.registries!['@foo'] = `http://localhost:${REGISTRY_MOCK_PORT}`
await addDependenciesToPackage({}, ['@zkochan/foo', '@foo/has-dep-from-same-scope', 'is-positive'], opts)
const registries = {
default: 'https://registry.npmjs.org/',
'@zkochan': `http://localhost:${REGISTRY_MOCK_PORT}`,
'@foo': `http://localhost:${REGISTRY_MOCK_PORT}`,
}
await addDependenciesToPackage({}, ['@zkochan/foo', '@foo/has-dep-from-same-scope', 'is-positive'], testDefaults({ registries }, { registries }))
project.has('@zkochan/foo')
@@ -1081,10 +1082,11 @@ test('tarball domain differs from registry domain', async () => {
], testDefaults({
fastUnpack: false,
lockfileOnly: true,
save: true,
}, {
registries: {
default: 'https://registry.example.com',
},
save: true,
})
)

View File

@@ -185,7 +185,6 @@ async function resolveAndFetch (
preferredVersions: options.preferredVersions,
preferWorkspacePackages: options.preferWorkspacePackages,
projectDir: options.projectDir,
registry: options.registry,
workspacePackages: options.workspacePackages,
updateToLatest: options.update === 'latest',
injectWorkspacePackages: options.injectWorkspacePackages,

View File

@@ -21,12 +21,15 @@ const registry = `http://localhost:${REGISTRY_MOCK_PORT}`
const f = fixtures(__dirname)
const IS_POSITIVE_TARBALL = f.find('is-positive-1.0.0.tgz')
const registries = { default: registry }
const authConfig = { registry }
const { resolve, fetchers } = createClient({
authConfig,
cacheDir: '.store',
rawConfig: {},
registries,
})
test('request package', async () => {
@@ -49,7 +52,6 @@ test('request package', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
})
expect(pkgResponse).toBeTruthy()
@@ -91,7 +93,6 @@ test('request package but skip fetching', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
skipFetch: true,
})
@@ -138,7 +139,6 @@ test('request package but skip fetching, when resolution is already available',
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
skipFetch: true,
update: false,
}) as PackageResponse & {
@@ -179,7 +179,6 @@ test('refetch local tarball if its integrity has changed', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
skipFetch: true,
update: false,
} satisfies RequestPackageOptions
@@ -286,7 +285,6 @@ test('refetch local tarball if its integrity has changed. The requester does not
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
update: false,
} satisfies RequestPackageOptions
@@ -504,6 +502,7 @@ test('fetchPackageToStore() does not cache errors', async () => {
rawConfig: {},
retry: { retries: 0 },
cacheDir: '.pnpm',
registries,
})
const storeDir = tempy.directory()
@@ -578,7 +577,6 @@ test('always return a package manifest in the response', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
}) as PackageResponse & { body: { manifest: { name: string } } }
expect(pkgResponse.body).toBeTruthy()
@@ -598,7 +596,6 @@ test('always return a package manifest in the response', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
}) as PackageResponse & { fetching: () => Promise<PkgRequestFetchResult> }
expect(pkgResponse.body).toBeTruthy()
@@ -774,7 +771,6 @@ test('do not fetch an optional package that is not installable', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
})
expect(pkgResponse).toBeTruthy()
@@ -813,7 +809,6 @@ test('fetch a git package without a package.json', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
}) as PackageResponse & { body: { manifest: { name: string } } }
expect(pkgResponse.body).toBeTruthy()
@@ -845,7 +840,6 @@ test('throw exception if the package data in the store differs from the expected
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
})
await pkgResponse.fetching!()
}
@@ -982,7 +976,6 @@ test("don't throw an error if the package was updated, so the expectedPkg has a
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
})
await pkgResponse.fetching!()
}
@@ -1001,7 +994,6 @@ test("don't throw an error if the package was updated, so the expectedPkg has a
lockfileDir: tempy.directory(),
preferredVersions: {},
projectDir,
registry,
expectedPkg: {
name: 'is-positive',
version: '3.0.0',
@@ -1029,7 +1021,6 @@ test('the version in the bundled manifest should be normalized', async () => {
lockfileDir: tempy.directory(),
preferredVersions: {},
projectDir: tempy.directory(),
registry,
})
expect((await pkgResponse.fetching!()).bundledManifest).toStrictEqual(expect.objectContaining({
version: '1.2.1',
@@ -1060,7 +1051,6 @@ test('should skip store integrity check and resolve manifest if fetchRawManifest
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
})
await pkgResponse.fetching!()

View File

@@ -46,7 +46,6 @@
"@pnpm/patching.config": "workspace:*",
"@pnpm/patching.types": "workspace:*",
"@pnpm/pick-fetcher": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/read-package-json": "workspace:*",
"@pnpm/resolver-base": "workspace:*",
"@pnpm/semver.peer-range": "workspace:*",

View File

@@ -17,7 +17,6 @@ import {
} from '@pnpm/lockfile.utils'
import { logger } from '@pnpm/logger'
import { type PatchGroupRecord, getPatchInfo } from '@pnpm/patching.config'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import {
type DirectoryResolution,
DIRECT_DEP_SELECTOR_WEIGHT,
@@ -1279,7 +1278,6 @@ async function resolveDependency (
)
? ctx.lockfileDir
: options.parentPkg.rootDir,
registry: wantedDependency.alias && pickRegistryForPackage(ctx.registries, wantedDependency.alias, wantedDependency.pref) || ctx.registries.default,
skipFetch: ctx.dryRun,
update: options.update,
workspacePackages: ctx.workspacePackages,

View File

@@ -15,9 +15,6 @@
{
"path": "../../catalogs/types"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../fetching/pick-fetcher"
},

24
pnpm-lock.yaml generated
View File

@@ -2619,9 +2619,6 @@ importers:
'@pnpm/parse-wanted-dependency':
specifier: workspace:*
version: link:../../packages/parse-wanted-dependency
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/plugin-commands-env':
specifier: workspace:*
version: link:../../env/plugin-commands-env
@@ -4327,9 +4324,6 @@ importers:
'@pnpm/pick-fetcher':
specifier: workspace:*
version: link:../../fetching/pick-fetcher
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/plugin-commands-installation':
specifier: workspace:*
version: link:../../pkg-manager/plugin-commands-installation
@@ -5750,9 +5744,6 @@ importers:
'@pnpm/pick-fetcher':
specifier: workspace:*
version: link:../../fetching/pick-fetcher
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/read-package-json':
specifier: workspace:*
version: link:../../pkg-manifest/read-package-json
@@ -6081,9 +6072,6 @@ importers:
'@pnpm/parse-cli-args':
specifier: workspace:*
version: link:../cli/parse-cli-args
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../config/pick-registry-for-package
'@pnpm/plugin-commands-audit':
specifier: workspace:*
version: link:../lockfile/plugin-commands-audit
@@ -6755,6 +6743,9 @@ importers:
'@pnpm/graceful-fs':
specifier: workspace:*
version: link:../../fs/graceful-fs
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/resolve-workspace-range':
specifier: workspace:*
version: link:../../workspace/resolve-workspace-range
@@ -7625,9 +7616,6 @@ importers:
'@pnpm/parse-wanted-dependency':
specifier: workspace:*
version: link:../../packages/parse-wanted-dependency
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/store-connection-manager':
specifier: workspace:*
version: link:../store-connection-manager
@@ -7731,9 +7719,6 @@ importers:
'@pnpm/parse-wanted-dependency':
specifier: workspace:*
version: link:../../packages/parse-wanted-dependency
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/store-path':
specifier: workspace:*
version: link:../store-path
@@ -7993,9 +7978,6 @@ importers:
'@pnpm/logger':
specifier: '>=5.1.0 <1001.0.0'
version: 1000.0.0
'@pnpm/pick-registry-for-package':
specifier: workspace:*
version: link:../../config/pick-registry-for-package
'@pnpm/read-project-manifest':
specifier: workspace:*
version: link:../../pkg-manifest/read-project-manifest

View File

@@ -99,7 +99,6 @@
"@pnpm/modules-yaml": "workspace:*",
"@pnpm/nopt": "catalog:",
"@pnpm/parse-cli-args": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/plugin-commands-audit": "workspace:*",
"@pnpm/plugin-commands-completion": "workspace:*",
"@pnpm/plugin-commands-config": "workspace:*",

View File

@@ -2,7 +2,6 @@ import path from 'path'
import { packageManager } from '@pnpm/cli-meta'
import { type Config } from '@pnpm/config'
import { createResolver } from '@pnpm/client'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { updateCheckLogger } from '@pnpm/core-loggers'
import loadJsonFile from 'load-json-file'
import writeJsonFile from 'write-json-file'
@@ -36,7 +35,6 @@ export async function checkForUpdates (config: Config): Promise<void> {
lockfileDir: config.lockfileDir ?? config.dir,
preferredVersions: {},
projectDir: config.dir,
registry: pickRegistryForPackage(config.registries, packageManager.name, 'latest'),
})
if (resolution?.manifest?.version) {
updateCheckLogger.debug({

View File

@@ -51,9 +51,6 @@
{
"path": "../config/config"
},
{
"path": "../config/pick-registry-for-package"
},
{
"path": "../config/plugin-commands-config"
},

View File

@@ -158,7 +158,6 @@ async function isAlreadyPublished (
lockfileDir: opts.lockfileDir,
preferredVersions: {},
projectDir: opts.dir,
registry: pickRegistryForPackage(opts.registries, pkgName, pkgVersion),
})
return true
} catch (err: any) { // eslint-disable-line

View File

@@ -6,6 +6,9 @@ test('createResolver()', () => {
const getAuthHeader = () => undefined
const { resolve } = createResolver(createFetchFromRegistry({}), getAuthHeader, {
cacheDir: '.cache',
registries: {
default: 'https://registry.npmjs.org/',
},
})
expect(typeof resolve).toEqual('function')
})

View File

@@ -38,6 +38,7 @@
"@pnpm/error": "workspace:*",
"@pnpm/fetching-types": "workspace:*",
"@pnpm/graceful-fs": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/resolve-workspace-range": "workspace:*",
"@pnpm/resolver-base": "workspace:*",
"@pnpm/types": "workspace:*",

View File

@@ -6,6 +6,7 @@ import {
type GetAuthHeader,
type RetryTimeoutOptions,
} from '@pnpm/fetching-types'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { resolveWorkspaceRange } from '@pnpm/resolve-workspace-range'
import {
type PkgResolutionId,
@@ -17,6 +18,7 @@ import {
type WorkspacePackagesByVersion,
type WorkspaceResolveResult,
} from '@pnpm/resolver-base'
import { type Registries } from '@pnpm/types'
import { LRUCache } from 'lru-cache'
import normalize from 'normalize-path'
import pMemoize from 'p-memoize'
@@ -65,6 +67,7 @@ export interface ResolverFactoryOptions {
preferOffline?: boolean
retry?: RetryTimeoutOptions
timeout?: number
registries: Registries
}
export type NpmResolver = (wantedDependency: WantedDependency, opts: ResolveFromNpmOptions) => Promise<ResolveResult | null>
@@ -101,6 +104,7 @@ export function createNpmResolver (
preferOffline: opts.preferOffline,
cacheDir: opts.cacheDir,
}),
registries: opts.registries,
}),
clearCache: () => {
metaCache.clear()
@@ -115,7 +119,6 @@ export type ResolveFromNpmOptions = {
pickLowestVersion?: boolean
dryRun?: boolean
lockfileDir?: string
registry: string
preferredVersions?: PreferredVersions
preferWorkspacePackages?: boolean
updateToLatest?: boolean
@@ -132,18 +135,22 @@ async function resolveNpm (
ctx: {
pickPackage: (spec: RegistryPackageSpec, opts: PickPackageOptions) => ReturnType<typeof pickPackage>
getAuthHeaderValueByURI: (registry: string) => string | undefined
registries: Registries
},
wantedDependency: WantedDependency,
opts: ResolveFromNpmOptions
): Promise<ResolveResult | null> {
const defaultTag = opts.defaultTag ?? 'latest'
const registry = wantedDependency.alias
? pickRegistryForPackage(ctx.registries, wantedDependency.alias, wantedDependency.pref)
: ctx.registries.default
if (wantedDependency.pref?.startsWith('workspace:')) {
if (wantedDependency.pref.startsWith('workspace:.')) return null
const resolvedFromWorkspace = tryResolveFromWorkspace(wantedDependency, {
defaultTag,
lockfileDir: opts.lockfileDir,
projectDir: opts.projectDir,
registry: opts.registry,
registry,
workspacePackages: opts.workspacePackages,
injectWorkspacePackages: opts.injectWorkspacePackages,
})
@@ -153,11 +160,11 @@ async function resolveNpm (
}
const workspacePackages = opts.alwaysTryWorkspacePackages !== false ? opts.workspacePackages : undefined
const spec = wantedDependency.pref
? parsePref(wantedDependency.pref, wantedDependency.alias, defaultTag, opts.registry)
? parsePref(wantedDependency.pref, wantedDependency.alias, defaultTag, registry)
: defaultTagForAlias(wantedDependency.alias!, defaultTag)
if (spec == null) return null
const authHeaderValue = ctx.getAuthHeaderValueByURI(opts.registry)
const authHeaderValue = ctx.getAuthHeaderValueByURI(registry)
let pickResult!: { meta: PackageMeta, pickedPackage: PackageInRegistry | null }
try {
pickResult = await ctx.pickPackage(spec, {
@@ -166,7 +173,7 @@ async function resolveNpm (
authHeaderValue,
dryRun: opts.dryRun === true,
preferredVersionSelectors: opts.preferredVersions?.[spec.name],
registry: opts.registry,
registry,
updateToLatest: opts.updateToLatest,
})
} catch (err: any) { // eslint-disable-line
@@ -199,7 +206,7 @@ async function resolveNpm (
// ignore
}
}
throw new NoMatchingVersionError({ wantedDependency, packageMeta: meta, registry: opts.registry })
throw new NoMatchingVersionError({ wantedDependency, packageMeta: meta, registry })
}
const workspacePkgsMatchingName = workspacePackages?.get(pickedPackage.name)

View File

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,17 @@ import path from 'path'
import { FULL_FILTERED_META_DIR } from '@pnpm/constants'
import { createFetchFromRegistry } from '@pnpm/fetch'
import { createNpmResolver } from '@pnpm/npm-resolver'
import { type Registries } from '@pnpm/types'
import { fixtures } from '@pnpm/test-fixtures'
import loadJsonFile from 'load-json-file'
import nock from 'nock'
import tempy from 'tempy'
const f = fixtures(__dirname)
const registry = 'https://registry.npmjs.org/'
const registries: Registries = {
default: 'https://registry.npmjs.org/',
}
/* eslint-disable @typescript-eslint/no-explicit-any */
const badDatesMeta = loadJsonFile.sync<any>(f.find('bad-dates.json'))
@@ -29,7 +33,7 @@ beforeEach(() => {
})
test('fall back to a newer version if there is no version published by the given date', async () => {
nock(registry)
nock(registries.default)
.get('/bad-dates')
.reply(200, badDatesMeta)
@@ -38,9 +42,9 @@ test('fall back to a newer version if there is no version published by the given
cacheDir,
filterMetadata: true,
fullMetadata: true,
registries,
})
const resolveResult = await resolveFromNpm({ alias: 'bad-dates', pref: '^1.0.0' }, {
registry,
publishedBy: new Date('2015-08-17T19:26:00.508Z'),
})
@@ -59,7 +63,7 @@ test('request metadata when the one in cache does not have a version satisfying
fs.mkdirSync(path.join(cacheDir, `${FULL_FILTERED_META_DIR}/registry.npmjs.org`), { recursive: true })
fs.writeFileSync(path.join(cacheDir, `${FULL_FILTERED_META_DIR}/registry.npmjs.org/bad-dates.json`), JSON.stringify(cachedMeta), 'utf8')
nock(registry)
nock(registries.default)
.get('/bad-dates')
.reply(200, badDatesMeta)
@@ -67,9 +71,9 @@ test('request metadata when the one in cache does not have a version satisfying
cacheDir,
filterMetadata: true,
fullMetadata: true,
registries,
})
const resolveResult = await resolveFromNpm({ alias: 'bad-dates', pref: '^1.0.0' }, {
registry,
publishedBy: new Date('2015-08-17T19:26:00.508Z'),
})

View File

@@ -12,6 +12,9 @@
{
"path": "../../__utils__/test-fixtures"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../crypto/hash"
},

View File

@@ -1,4 +1,8 @@
import { type ProjectRootDir, type DependencyManifest, type PkgResolutionId } from '@pnpm/types'
import {
type ProjectRootDir,
type DependencyManifest,
type PkgResolutionId,
} from '@pnpm/types'
export { type PkgResolutionId }
@@ -92,7 +96,6 @@ export interface ResolveOptions {
lockfileDir: string
preferredVersions: PreferredVersions
preferWorkspacePackages?: boolean
registry: string
workspacePackages?: WorkspacePackages
updateToLatest?: boolean
injectWorkspacePackages?: boolean

View File

@@ -3,14 +3,12 @@ import {
createResolver,
type ResolveFunction,
} from '@pnpm/client'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { type DependencyManifest, type Registries } from '@pnpm/types'
import { type DependencyManifest } from '@pnpm/types'
interface GetManifestOpts {
dir: string
lockfileDir: string
rawConfig: object
registries: Registries
}
export type ManifestGetterOptions = Omit<ClientOptions, 'authConfig'>
@@ -34,7 +32,6 @@ export async function getManifest (
lockfileDir: opts.lockfileDir,
preferredVersions: {},
projectDir: opts.dir,
registry: pickRegistryForPackage(opts.registries, packageName, pref),
})
return resolution?.manifest ?? null
}

View File

@@ -7,14 +7,9 @@ test('getManifest()', async () => {
dir: '',
lockfileDir: '',
rawConfig: {},
registries: {
'@scope': 'https://pnpm.io/',
default: 'https://registry.npmjs.org/',
},
}
const resolve: ResolveFunction = async function (wantedPackage, opts) {
expect(opts.registry).toEqual('https://registry.npmjs.org/')
return {
id: 'foo/1.0.0' as PkgResolutionId,
latest: '1.0.0',
@@ -35,7 +30,6 @@ test('getManifest()', async () => {
})
const resolve2: ResolveFunction = async function (wantedPackage, opts) {
expect(opts.registry).toEqual('https://pnpm.io/')
return {
id: 'foo/2.0.0' as PkgResolutionId,
latest: '2.0.0',

View File

@@ -16,6 +16,9 @@ describe('store.importPackage()', () => {
authConfig,
cacheDir: path.join(tmp, 'cache'),
rawConfig: {},
registries: {
default: registry,
},
})
const storeController = createPackageStore(resolve, fetchers, {
storeDir,
@@ -55,6 +58,9 @@ describe('store.importPackage()', () => {
authConfig,
cacheDir: path.join(tmp, 'cache'),
rawConfig: {},
registries: {
default: registry,
},
})
const storeController = createPackageStore(resolve, fetchers, {
packageImportMethod: 'copy',

View File

@@ -37,7 +37,6 @@
"@pnpm/lockfile.types": "workspace:*",
"@pnpm/object.key-sorting": "workspace:*",
"@pnpm/parse-wanted-dependency": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/store-path": "workspace:*",
"@pnpm/store.cafs": "workspace:*",
"@pnpm/types": "workspace:*",

View File

@@ -6,7 +6,6 @@ import { PnpmError } from '@pnpm/error'
import { sortDeepKeys } from '@pnpm/object.key-sorting'
import { getStorePath } from '@pnpm/store-path'
import { getIndexFilePathInCafs, type PackageFilesIndex } from '@pnpm/store.cafs'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { parseWantedDependency } from '@pnpm/parse-wanted-dependency'
import loadJsonFile from 'load-json-file'
@@ -78,7 +77,6 @@ export async function handler (opts: CatIndexCommandOptions, params: string[]):
lockfileDir: opts.lockfileDir ?? opts.dir,
preferredVersions: {},
projectDir: opts.dir,
registry: pickRegistryForPackage(opts.registries, alias, pref),
}
)

View File

@@ -15,9 +15,6 @@
{
"path": "../../config/config"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../fs/graceful-fs"
},

View File

@@ -39,7 +39,6 @@
"@pnpm/lockfile.utils": "workspace:*",
"@pnpm/normalize-registries": "workspace:*",
"@pnpm/parse-wanted-dependency": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/store-connection-manager": "workspace:*",
"@pnpm/store-controller-types": "workspace:*",
"@pnpm/store-path": "workspace:*",

View File

@@ -104,7 +104,6 @@ export async function handler (opts: StoreCommandOptions, params: string[]): Pro
store = await createOrConnectStoreController(opts)
return storeAdd(params.slice(1), {
prefix: opts.dir,
registries: opts.registries,
reporter: opts.reporter,
storeController: store.ctrl,
tag: opts.tag,

View File

@@ -1,16 +1,14 @@
import { PnpmError } from '@pnpm/error'
import { logger, globalInfo, streamParser } from '@pnpm/logger'
import { parseWantedDependency } from '@pnpm/parse-wanted-dependency'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { type StoreController } from '@pnpm/store-controller-types'
import { type SupportedArchitectures, type Registries } from '@pnpm/types'
import { type SupportedArchitectures } from '@pnpm/types'
import { type ReporterFunction } from './types'
export async function storeAdd (
fuzzyDeps: string[],
opts: {
prefix?: string
registries?: Registries
reporter?: ReporterFunction
storeController: StoreController
tag?: string
@@ -26,9 +24,6 @@ export async function storeAdd (
let hasFailures = false
const prefix = opts.prefix ?? process.cwd()
const registries = opts.registries ?? {
default: 'https://registry.npmjs.org/',
}
await Promise.all(deps.map(async (dep) => {
try {
const pkgResponse = await opts.storeController.requestPackage(dep, {
@@ -36,7 +31,6 @@ export async function storeAdd (
lockfileDir: prefix,
preferredVersions: {},
projectDir: prefix,
registry: (dep.alias && pickRegistryForPackage(registries, dep.alias)) ?? registries.default,
supportedArchitectures: opts.supportedArchitectures,
})
await pkgResponse.fetching!()

View File

@@ -24,9 +24,6 @@
{
"path": "../../config/normalize-registries"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../exec/plugin-commands-script-runners"
},

View File

@@ -5,6 +5,7 @@ import getPort from 'get-port'
import { createClient } from '@pnpm/client'
import { createPackageStore } from '@pnpm/package-store'
import { connectStoreController, createServer } from '@pnpm/server'
import { type Registries } from '@pnpm/types'
import fetch from 'node-fetch'
import { sync as rimraf } from '@zkochan/rimraf'
import loadJsonFile from 'load-json-file'
@@ -13,6 +14,8 @@ import isPortReachable from 'is-port-reachable'
const registry = 'https://registry.npmjs.org/'
const registries: Registries = { default: registry }
async function createStoreController (storeDir?: string) {
const tmp = tempy.directory()
if (!storeDir) {
@@ -24,6 +27,7 @@ async function createStoreController (storeDir?: string) {
authConfig,
cacheDir,
rawConfig: {},
registries,
})
return createPackageStore(resolve, fetchers, {
networkConcurrency: 1,
@@ -53,7 +57,6 @@ test('server', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
sideEffectsCache: false,
}
)
@@ -131,7 +134,6 @@ test('server errors should arrive to the client', async () => {
lockfileDir: projectDir,
preferredVersions: {},
projectDir,
registry,
sideEffectsCache: false,
}
)

View File

@@ -34,7 +34,7 @@ export type CreateNewStoreControllerOptions = CreateResolverOptions & Pick<Confi
| 'offline'
| 'packageImportMethod'
| 'preferOffline'
| 'registry'
| 'registries'
| 'registrySupportsTimeField'
| 'resolutionMode'
| 'strictSsl'
@@ -72,6 +72,7 @@ export async function createNewStoreController (
preferOffline: opts.preferOffline,
rawConfig: opts.rawConfig,
sslConfigs: opts.sslConfigs,
registries: opts.registries,
retry: {
factor: opts.fetchRetryFactor,
maxTimeout: opts.fetchRetryMaxtimeout,

View File

@@ -123,7 +123,6 @@ export interface RequestPackageOptions {
lockfileDir: string
preferredVersions: PreferredVersions
preferWorkspacePackages?: boolean
registry: string
sideEffectsCache?: boolean
skipFetch?: boolean
update?: false | 'compatible' | 'latest'

View File

@@ -30,6 +30,9 @@ export function createTempStore (opts?: {
minTimeout: 10_000,
},
cacheDir,
registries: {
default: registry,
},
...opts?.clientOptions,
})
const storeDir = opts?.storeDir ?? path.resolve('.store')

View File

@@ -37,7 +37,6 @@
"@pnpm/error": "workspace:*",
"@pnpm/exec.pnpm-cli-runner": "workspace:*",
"@pnpm/link-bins": "workspace:*",
"@pnpm/pick-registry-for-package": "workspace:*",
"@pnpm/read-project-manifest": "workspace:*",
"@pnpm/tools.path": "workspace:*",
"@zkochan/rimraf": "catalog:",

View File

@@ -2,7 +2,6 @@ import path from 'path'
import { docsUrl } from '@pnpm/cli-utils'
import { packageManager, isExecutedByCorepack } from '@pnpm/cli-meta'
import { createResolver } from '@pnpm/client'
import { pickRegistryForPackage } from '@pnpm/pick-registry-for-package'
import { type Config, types as allTypes } from '@pnpm/config'
import { PnpmError } from '@pnpm/error'
import { globalWarn } from '@pnpm/logger'
@@ -65,7 +64,6 @@ export async function handler (
lockfileDir: opts.lockfileDir ?? opts.dir,
preferredVersions: {},
projectDir: opts.dir,
registry: pickRegistryForPackage(opts.registries, pkgName, pref),
})
if (!resolution?.manifest) {
throw new PnpmError('CANNOT_RESOLVE_PNPM', `Cannot find "${pref}" version of pnpm`)

View File

@@ -21,9 +21,6 @@
{
"path": "../../config/config"
},
{
"path": "../../config/pick-registry-for-package"
},
{
"path": "../../env/path"
},