mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-28 02:53:15 -04:00
6
.changeset/strange-ants-remain.md
Normal file
6
.changeset/strange-ants-remain.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"pnpm": patch
|
||||
"@pnpm/resolve-dependencies": patch
|
||||
---
|
||||
|
||||
When the same package is found several times in the dependency graph, correctly autoinstall its missing peer dependencies at all times [#4820](https://github.com/pnpm/pnpm/issues/4820).
|
||||
@@ -7,7 +7,8 @@
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"prepare": "husky install",
|
||||
"pretest": "pnpm run compile-only && pnpm --dir=fixtures run prepareFixtures",
|
||||
"lint": "pnpm lint:meta && syncpack list-mismatches && eslint **/src/**/*.ts **/test/**/*.ts",
|
||||
"lint": "pnpm lint:meta && syncpack list-mismatches && pnpm run lint:ts",
|
||||
"lint:ts": "eslint **/src/**/*.ts **/test/**/*.ts",
|
||||
"test-main": "pnpm pretest && pnpm lint --quiet && run-p -r verdaccio test-pkgs-main",
|
||||
"remove-temp-dir": "shx rm -rf ../pnpm_tmp",
|
||||
"test-pkgs-main": "pnpm remove-temp-dir && cross-env PNPM_REGISTRY_MOCK_UPLINK=http://localhost:7348 pnpm --filter=./packages/** --filter=./privatePackages/** run --no-sort --workspace-concurrency=2 _test",
|
||||
@@ -38,7 +39,7 @@
|
||||
"@commitlint/prompt-cli": "^16.0.0",
|
||||
"@pnpm/eslint-config": "workspace:*",
|
||||
"@pnpm/meta-updater": "0.0.6",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/tsconfig": "workspace:*",
|
||||
"@types/jest": "^27.4.0",
|
||||
"@types/node": "^14.17.32",
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/package-store": "workspace:13.0.6",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/store-path": "workspace:6.0.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { addDependenciesToPackage } from '@pnpm/core'
|
||||
import { prepareEmpty, preparePackages } from '@pnpm/prepare'
|
||||
import { addDistTag } from '@pnpm/registry-mock'
|
||||
import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { testDefaults } from '../utils'
|
||||
|
||||
test('auto install non-optional peer dependencies', async () => {
|
||||
@@ -61,3 +61,80 @@ test('don\'t fail on linked package, when peers are auto installed', async () =>
|
||||
const updatedManifest = await addDependenciesToPackage(pkgManifest, ['peer-b'], await testDefaults({ autoInstallPeers: true }))
|
||||
expect(Object.keys(updatedManifest.dependencies ?? {})).toStrictEqual(['linked', 'peer-b'])
|
||||
})
|
||||
|
||||
test('hoist a peer dependency in order to reuse it by other dependencies, when it satisfies them', async () => {
|
||||
const project = prepareEmpty()
|
||||
await addDependenciesToPackage({}, ['@pnpm/xyz-parent-parent-parent-parent', '@pnpm/xyz-parent-parent-with-xyz'], await testDefaults({ autoInstallPeers: true }))
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(Object.keys(lockfile.packages)).toStrictEqual([
|
||||
'/@pnpm/x/1.0.0',
|
||||
'/@pnpm/xyz-parent-parent-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/xyz-parent-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/xyz-parent-parent-with-xyz/1.0.0',
|
||||
'/@pnpm/xyz-parent-parent/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/xyz-parent/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/xyz/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/y/1.0.0',
|
||||
'/@pnpm/z/1.0.0',
|
||||
])
|
||||
})
|
||||
|
||||
test('don\'t hoist a peer dependency when there is a root dependency by that name', async () => {
|
||||
const project = prepareEmpty()
|
||||
await addDependenciesToPackage({}, [
|
||||
'@pnpm/xyz-parent-parent-parent-parent',
|
||||
'@pnpm/xyz-parent-parent-with-xyz',
|
||||
'@pnpm/x@npm:peer-a@1.0.0',
|
||||
`http://localhost:${REGISTRY_MOCK_PORT}/@pnpm/y/-/y-2.0.0.tgz`,
|
||||
], await testDefaults({ autoInstallPeers: true }))
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(Object.keys(lockfile.packages)).toStrictEqual([
|
||||
'/@pnpm/x/1.0.0',
|
||||
'/@pnpm/xyz-parent-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent-parent-with-xyz/1.0.0',
|
||||
'/@pnpm/xyz-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/xyz/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz/1.0.0_e5suan7fvtov6fikg25btc2odi',
|
||||
'/@pnpm/y/1.0.0',
|
||||
'/@pnpm/y/2.0.0',
|
||||
'/@pnpm/z/1.0.0',
|
||||
'/peer-a/1.0.0',
|
||||
])
|
||||
})
|
||||
|
||||
test('don\'t auto-install a peer dependency, when that dependency is in the root', async () => {
|
||||
const project = prepareEmpty()
|
||||
await addDependenciesToPackage({}, [
|
||||
'@pnpm/xyz-parent-parent-parent-parent',
|
||||
'@pnpm/x@npm:peer-a@1.0.0',
|
||||
`http://localhost:${REGISTRY_MOCK_PORT}/@pnpm/y/-/y-2.0.0.tgz`,
|
||||
], await testDefaults({ autoInstallPeers: true }))
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(Object.keys(lockfile.packages)).toStrictEqual([
|
||||
'/@pnpm/xyz-parent-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz-parent/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/xyz/1.0.0_c3hmehglzcfufab5hu6m6d76li',
|
||||
'/@pnpm/y/2.0.0',
|
||||
'/@pnpm/z/1.0.0',
|
||||
'/peer-a/1.0.0',
|
||||
])
|
||||
})
|
||||
|
||||
test('don\'t install the same missing peer dependency twice', async () => {
|
||||
await addDistTag({ package: '@pnpm/y', version: '2.0.0', distTag: 'latest' })
|
||||
const project = prepareEmpty()
|
||||
await addDependenciesToPackage({}, [
|
||||
'has-has-y-peer-peer',
|
||||
], await testDefaults({ autoInstallPeers: true }))
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(Object.keys(lockfile.packages)).toStrictEqual([
|
||||
'/@pnpm/y/1.0.0',
|
||||
'/has-has-y-peer-peer/1.0.0_c7ewbmm644hn6ztbh6kbjiyhkq',
|
||||
'/has-y-peer/1.0.0_@pnpm+y@1.0.0',
|
||||
])
|
||||
})
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"@pnpm/package-store": "workspace:13.0.6",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-projects-context": "workspace:6.0.3",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/store-path": "workspace:6.0.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"@pnpm/create-cafs-store": "workspace:1.0.2",
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/package-requester": "workspace:18.0.6",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/normalize-path": "^3.0.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"@pnpm/modules-yaml": "workspace:10.0.1",
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.0.11",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/is-ci": "^3.0.0",
|
||||
"@types/proxyquire": "^1.3.28",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.0.11",
|
||||
"@pnpm/plugin-commands-listing": "workspace:5.0.10",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"execa": "npm:safe-execa@^0.1.1",
|
||||
"strip-ansi": "^6.0.0",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/plugin-commands-installation": "workspace:10.0.11",
|
||||
"@pnpm/plugin-commands-outdated": "workspace:6.0.10",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@types/lru-cache": "^5.1.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/wrap-ansi": "^3.0.0",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-publishing": "workspace:5.0.11",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@types/cross-spawn": "^6.0.2",
|
||||
"@types/is-ci": "^3.0.0",
|
||||
"@types/is-windows": "^1.0.0",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-rebuild": "workspace:6.1.9",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/semver": "^7.3.4",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-script-runners": "workspace:5.0.12",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@types/is-windows": "^1.0.0",
|
||||
"@types/ramda": "0.27.39",
|
||||
"is-windows": "^1.0.2",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"@pnpm/logger": "^4.0.0",
|
||||
"@pnpm/plugin-commands-store": "workspace:5.1.9",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@types/archy": "0.0.31",
|
||||
"@types/ramda": "0.27.39",
|
||||
"@types/ssri": "^7.1.0",
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/read-package-json": "workspace:6.0.2",
|
||||
"@pnpm/read-project-manifest": "workspace:3.0.2",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/run-npm": "workspace:4.0.1",
|
||||
"@pnpm/tabtab": "^0.1.2",
|
||||
"@pnpm/types": "workspace:8.0.1",
|
||||
|
||||
@@ -148,6 +148,10 @@ export interface ResolutionContext {
|
||||
updateMatching?: (pkgName: string) => boolean
|
||||
}
|
||||
|
||||
export type MissingPeers = Record<string, string>
|
||||
|
||||
export type ResolvedPeers = Record<string, PkgAddress>
|
||||
|
||||
export type PkgAddress = {
|
||||
alias: string
|
||||
depIsLinked: boolean
|
||||
@@ -162,7 +166,8 @@ export type PkgAddress = {
|
||||
version?: string
|
||||
updated: boolean
|
||||
rootDir: string
|
||||
missingPeers: Record<string, string>
|
||||
missingPeers: MissingPeers
|
||||
resolvedPeers: ResolvedPeers
|
||||
} & ({
|
||||
isLinkedDependency: true
|
||||
version: string
|
||||
@@ -206,7 +211,7 @@ export interface ResolvedPackage {
|
||||
|
||||
type ParentPkg = Pick<PkgAddress, 'nodeId' | 'installable' | 'depPath' | 'rootDir'>
|
||||
|
||||
type ParentPkgAliases = Record<string, true>
|
||||
type ParentPkgAliases = Record<string, PkgAddress | true>
|
||||
|
||||
interface ResolvedDependenciesOptions {
|
||||
currentDepth: number
|
||||
@@ -222,47 +227,88 @@ interface ResolvedDependenciesOptions {
|
||||
workspacePackages?: WorkspacePackages
|
||||
}
|
||||
|
||||
type PostponedResolutionFunction = (preferredVersions: PreferredVersions, parentPkgAliases: ParentPkgAliases) => Promise<void>
|
||||
type PostponedResolutionFunction = (preferredVersions: PreferredVersions, parentPkgAliases: ParentPkgAliases) => Promise<{
|
||||
missingPeers: MissingPeers
|
||||
resolvedPeers: ResolvedPeers
|
||||
}>
|
||||
|
||||
export default async function resolveDependencies (
|
||||
export async function resolveRootDependencies (
|
||||
ctx: ResolutionContext,
|
||||
preferredVersions: PreferredVersions,
|
||||
wantedDependencies: Array<WantedDependency & { updateDepth?: number }>,
|
||||
options: ResolvedDependenciesOptions
|
||||
): Promise<Array<PkgAddress | LinkedDependency>> {
|
||||
let extendedWantedDeps: ExtendedWantedDependency[] = []
|
||||
const postponedResolutionsQueue: PostponedResolutionFunction[] = []
|
||||
const pkgAddresses: PkgAddress[] = []
|
||||
while (true) {
|
||||
extendedWantedDeps = getDepsToResolve(wantedDependencies, ctx.wantedLockfile, {
|
||||
preferredDependencies: options.preferredDependencies,
|
||||
prefix: ctx.prefix,
|
||||
proceed: options.proceed || ctx.forceFullResolution,
|
||||
registries: ctx.registries,
|
||||
resolvedDependencies: options.resolvedDependencies,
|
||||
})
|
||||
const newPkgAddresses = (
|
||||
await Promise.all(
|
||||
extendedWantedDeps.map(async (extendedWantedDep) => resolveDependenciesOfDependency(
|
||||
postponedResolutionsQueue,
|
||||
ctx,
|
||||
preferredVersions,
|
||||
options,
|
||||
extendedWantedDep
|
||||
))
|
||||
)
|
||||
).filter(Boolean) as PkgAddress[]
|
||||
pkgAddresses.push(...newPkgAddresses)
|
||||
if (!ctx.autoInstallPeers) break
|
||||
const allMissingPeers = mergePkgsDeps(newPkgAddresses.map(({ missingPeers }) => missingPeers).filter(Boolean))
|
||||
if (!Object.keys(allMissingPeers).length) break
|
||||
wantedDependencies = getNonDevWantedDependencies({ dependencies: allMissingPeers })
|
||||
const pkgAddresses: Array<PkgAddress | LinkedDependency> = []
|
||||
const parentPkgAliases: ParentPkgAliases = {}
|
||||
for (const wantedDep of wantedDependencies) {
|
||||
if (wantedDep.alias) {
|
||||
parentPkgAliases[wantedDep.alias] = true
|
||||
}
|
||||
}
|
||||
while (true) {
|
||||
const result = await resolveDependencies(ctx, preferredVersions, wantedDependencies, {
|
||||
...options,
|
||||
parentPkgAliases,
|
||||
})
|
||||
pkgAddresses.push(...result.pkgAddresses)
|
||||
if (!ctx.autoInstallPeers) break
|
||||
for (const pkgAddress of result.pkgAddresses) {
|
||||
parentPkgAliases[pkgAddress.alias] = true
|
||||
}
|
||||
for (const missingPeerName of Object.keys(result.missingPeers ?? {})) {
|
||||
parentPkgAliases[missingPeerName] = true
|
||||
}
|
||||
// All the missing peers should get installed in the root.
|
||||
// Otherwise, pending nodes will not work.
|
||||
// even those peers should be hoisted that are not autoinstalled
|
||||
for (const [resolvedPeerName, resolvedPeerAddress] of Object.entries(result.resolvedPeers ?? {})) {
|
||||
if (!parentPkgAliases[resolvedPeerName]) {
|
||||
pkgAddresses.push(resolvedPeerAddress)
|
||||
}
|
||||
}
|
||||
if (!Object.keys(result.missingPeers).length) break
|
||||
wantedDependencies = getNonDevWantedDependencies({ dependencies: result.missingPeers })
|
||||
}
|
||||
return pkgAddresses
|
||||
}
|
||||
|
||||
interface ResolvedDependenciesResult {
|
||||
pkgAddresses: Array<PkgAddress | LinkedDependency>
|
||||
missingPeers: MissingPeers
|
||||
resolvedPeers: ResolvedPeers
|
||||
}
|
||||
|
||||
export async function resolveDependencies (
|
||||
ctx: ResolutionContext,
|
||||
preferredVersions: PreferredVersions,
|
||||
wantedDependencies: Array<WantedDependency & { updateDepth?: number }>,
|
||||
options: ResolvedDependenciesOptions
|
||||
): Promise<ResolvedDependenciesResult> {
|
||||
const postponedResolutionsQueue: PostponedResolutionFunction[] = []
|
||||
const extendedWantedDeps = getDepsToResolve(wantedDependencies, ctx.wantedLockfile, {
|
||||
preferredDependencies: options.preferredDependencies,
|
||||
prefix: ctx.prefix,
|
||||
proceed: options.proceed || ctx.forceFullResolution,
|
||||
registries: ctx.registries,
|
||||
resolvedDependencies: options.resolvedDependencies,
|
||||
})
|
||||
const pkgAddresses = (
|
||||
await Promise.all(
|
||||
extendedWantedDeps.map(async (extendedWantedDep) => resolveDependenciesOfDependency(
|
||||
postponedResolutionsQueue,
|
||||
ctx,
|
||||
preferredVersions,
|
||||
options,
|
||||
extendedWantedDep
|
||||
))
|
||||
)
|
||||
).filter(Boolean) as PkgAddress[]
|
||||
const newPreferredVersions = { ...preferredVersions }
|
||||
const newParentPkgAliases = { ...options.parentPkgAliases }
|
||||
for (const pkgAddress of pkgAddresses) {
|
||||
newParentPkgAliases[pkgAddress.alias] = true
|
||||
if (newParentPkgAliases[pkgAddress.alias] !== true) {
|
||||
newParentPkgAliases[pkgAddress.alias] = pkgAddress
|
||||
}
|
||||
if (pkgAddress.updated) {
|
||||
ctx.updatedSet.add(pkgAddress.alias)
|
||||
}
|
||||
@@ -273,9 +319,25 @@ export default async function resolveDependencies (
|
||||
}
|
||||
newPreferredVersions[resolvedPackage.name][resolvedPackage.version] = 'version'
|
||||
}
|
||||
await Promise.all(postponedResolutionsQueue.map(async (postponedResolution) => postponedResolution(newPreferredVersions, newParentPkgAliases)))
|
||||
|
||||
return pkgAddresses
|
||||
const childrenResults = await Promise.all(postponedResolutionsQueue.map(async (postponedResolution) => postponedResolution(newPreferredVersions, newParentPkgAliases)))
|
||||
if (!ctx.autoInstallPeers) {
|
||||
return {
|
||||
missingPeers: {},
|
||||
pkgAddresses,
|
||||
resolvedPeers: {},
|
||||
}
|
||||
}
|
||||
const allMissingPeers = mergePkgsDeps(
|
||||
[
|
||||
...pkgAddresses,
|
||||
...childrenResults,
|
||||
].map(({ missingPeers }) => missingPeers).filter(Boolean)
|
||||
)
|
||||
return {
|
||||
missingPeers: allMissingPeers,
|
||||
pkgAddresses,
|
||||
resolvedPeers: [...pkgAddresses, ...childrenResults].reduce((acc, { resolvedPeers }) => Object.assign(acc, resolvedPeers), {}),
|
||||
}
|
||||
}
|
||||
|
||||
function mergePkgsDeps (pkgsDeps: Array<Record<string, string>>): Record<string, string> {
|
||||
@@ -402,7 +464,11 @@ async function resolveChildren (
|
||||
).length
|
||||
)
|
||||
const wantedDependencies = getNonDevWantedDependencies(parentPkg.pkg)
|
||||
const children = await resolveDependencies(ctx, preferredVersions, wantedDependencies,
|
||||
const {
|
||||
pkgAddresses,
|
||||
missingPeers,
|
||||
resolvedPeers,
|
||||
} = await resolveDependencies(ctx, preferredVersions, wantedDependencies,
|
||||
{
|
||||
currentDepth: parentDepth + 1,
|
||||
parentPkg,
|
||||
@@ -416,12 +482,12 @@ async function resolveChildren (
|
||||
workspacePackages,
|
||||
}
|
||||
)
|
||||
ctx.childrenByParentDepPath[parentPkg.depPath] = children.map((child) => ({
|
||||
ctx.childrenByParentDepPath[parentPkg.depPath] = pkgAddresses.map((child) => ({
|
||||
alias: child.alias,
|
||||
depPath: child.depPath,
|
||||
}))
|
||||
ctx.dependenciesTree[parentPkg.nodeId] = {
|
||||
children: children.reduce((chn, child) => {
|
||||
children: pkgAddresses.reduce((chn, child) => {
|
||||
chn[child.alias] = child['nodeId'] ?? child.pkgId
|
||||
return chn
|
||||
}, {}),
|
||||
@@ -429,6 +495,10 @@ async function resolveChildren (
|
||||
installable: parentPkg.installable,
|
||||
resolvedPackage: ctx.resolvedPackagesByDepPath[parentPkg.depPath],
|
||||
}
|
||||
return {
|
||||
missingPeers,
|
||||
resolvedPeers,
|
||||
}
|
||||
}
|
||||
|
||||
function getDepsToResolve (
|
||||
@@ -885,7 +955,7 @@ async function resolveDependency (
|
||||
normalizedPref: options.currentDepth === 0 ? pkgResponse.body.normalizedPref : undefined,
|
||||
pkgId: pkgResponse.body.id,
|
||||
rootDir,
|
||||
missingPeers: getMissingPeers(pkg, options.parentPkgAliases),
|
||||
...getMissingPeers(pkg, options.parentPkgAliases),
|
||||
|
||||
// Next fields are actually only needed when isNew = true
|
||||
installable,
|
||||
@@ -907,14 +977,19 @@ async function getManifestFromResponse (
|
||||
}
|
||||
}
|
||||
|
||||
function getMissingPeers (pkg: PackageManifest, parentPkgAliases: ParentPkgAliases): Record<string, string> {
|
||||
const missingPeers = {} as Record<string, string>
|
||||
function getMissingPeers (pkg: PackageManifest, parentPkgAliases: ParentPkgAliases) {
|
||||
const missingPeers = {} as MissingPeers
|
||||
const resolvedPeers = {} as ResolvedPeers
|
||||
for (const [peerName, peerVersion] of Object.entries(pkg.peerDependencies ?? {})) {
|
||||
if (!parentPkgAliases[peerName] && !pkg.peerDependenciesMeta?.[peerName]?.optional) {
|
||||
if (parentPkgAliases[peerName]) {
|
||||
if (parentPkgAliases[peerName] !== true) {
|
||||
resolvedPeers[peerName] = parentPkgAliases[peerName] as PkgAddress
|
||||
}
|
||||
} else if (!pkg.peerDependenciesMeta?.[peerName]?.optional) {
|
||||
missingPeers[peerName] = peerVersion
|
||||
}
|
||||
}
|
||||
return missingPeers
|
||||
return { missingPeers, resolvedPeers }
|
||||
}
|
||||
|
||||
function pkgIsLeaf (pkg: PackageManifest) {
|
||||
|
||||
@@ -12,12 +12,13 @@ import {
|
||||
createNodeId,
|
||||
nodeIdContainsSequence,
|
||||
} from './nodeIdUtils'
|
||||
import resolveDependencies, {
|
||||
import {
|
||||
ChildrenByParentDepPath,
|
||||
DependenciesTree,
|
||||
LinkedDependency,
|
||||
PendingNode,
|
||||
PkgAddress,
|
||||
resolveRootDependencies,
|
||||
ResolvedPackage,
|
||||
ResolvedPackagesByDepPath,
|
||||
} from './resolveDependencies'
|
||||
@@ -147,7 +148,7 @@ export default async function<T> (
|
||||
updateDepth: -1,
|
||||
workspacePackages: opts.workspacePackages,
|
||||
}
|
||||
directDepsByImporterId[importer.id] = await resolveDependencies(
|
||||
directDepsByImporterId[importer.id] = await resolveRootDependencies(
|
||||
resolveCtx,
|
||||
importer.preferredVersions ?? {},
|
||||
importer.wantedDependencies,
|
||||
|
||||
129
pnpm-lock.yaml
generated
129
pnpm-lock.yaml
generated
@@ -41,7 +41,7 @@ importers:
|
||||
'@commitlint/prompt-cli': ^16.0.0
|
||||
'@pnpm/eslint-config': workspace:*
|
||||
'@pnpm/meta-updater': 0.0.6
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/tsconfig': workspace:*
|
||||
'@types/jest': ^27.4.0
|
||||
'@types/node': ^14.17.32
|
||||
@@ -72,7 +72,7 @@ importers:
|
||||
'@commitlint/prompt-cli': 16.3.0
|
||||
'@pnpm/eslint-config': link:utils/eslint-config
|
||||
'@pnpm/meta-updater': 0.0.6
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/tsconfig': link:utils/tsconfig
|
||||
'@types/jest': 27.5.1
|
||||
'@types/node': 14.18.20
|
||||
@@ -426,7 +426,7 @@ importers:
|
||||
'@pnpm/read-modules-dir': workspace:4.0.0
|
||||
'@pnpm/read-package-json': workspace:6.0.2
|
||||
'@pnpm/read-project-manifest': workspace:3.0.2
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/remove-bins': workspace:3.0.2
|
||||
'@pnpm/resolve-dependencies': workspace:27.1.3
|
||||
'@pnpm/resolver-base': workspace:9.0.1
|
||||
@@ -531,7 +531,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/package-store': link:../package-store
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/store-path': link:../store-path
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/fs-extra': 9.0.13
|
||||
@@ -1117,7 +1117,7 @@ importers:
|
||||
'@pnpm/read-project-manifest': workspace:3.0.2
|
||||
'@pnpm/read-projects-context': workspace:6.0.3
|
||||
'@pnpm/real-hoist': workspace:0.2.3
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/store-controller-types': workspace:13.0.2
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/symlink-dependency': workspace:5.0.1
|
||||
@@ -1178,7 +1178,7 @@ importers:
|
||||
'@pnpm/package-store': link:../package-store
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/read-projects-context': link:../read-projects-context
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/store-path': link:../store-path
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/fs-extra': 9.0.13
|
||||
@@ -1871,7 +1871,7 @@ importers:
|
||||
'@pnpm/package-is-installable': workspace:6.0.3
|
||||
'@pnpm/package-requester': workspace:18.0.6
|
||||
'@pnpm/read-package-json': workspace:6.0.2
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/resolver-base': workspace:9.0.1
|
||||
'@pnpm/store-controller-types': workspace:13.0.2
|
||||
'@pnpm/test-fixtures': workspace:*
|
||||
@@ -1922,7 +1922,7 @@ importers:
|
||||
'@pnpm/create-cafs-store': link:../create-cafs-store
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/package-requester': 'link:'
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/normalize-path': 3.0.0
|
||||
'@types/ramda': 0.27.39
|
||||
@@ -2194,7 +2194,7 @@ importers:
|
||||
'@pnpm/pnpmfile': workspace:2.0.2
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-project-manifest': workspace:3.0.2
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/resolver-base': workspace:9.0.1
|
||||
'@pnpm/semver-diff': ^1.0.2
|
||||
'@pnpm/sort-packages': workspace:3.0.2
|
||||
@@ -2291,7 +2291,7 @@ importers:
|
||||
'@pnpm/modules-yaml': link:../modules-yaml
|
||||
'@pnpm/plugin-commands-installation': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/is-ci': 3.0.0
|
||||
'@types/proxyquire': 1.3.28
|
||||
@@ -2322,7 +2322,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': workspace:10.0.11
|
||||
'@pnpm/plugin-commands-listing': workspace:5.0.10
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/types': workspace:8.0.1
|
||||
'@types/ramda': 0.27.39
|
||||
execa: npm:safe-execa@^0.1.1
|
||||
@@ -2346,7 +2346,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': link:../plugin-commands-installation
|
||||
'@pnpm/plugin-commands-listing': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@types/ramda': 0.27.39
|
||||
execa: /safe-execa/0.1.1
|
||||
strip-ansi: 6.0.1
|
||||
@@ -2370,7 +2370,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': workspace:10.0.11
|
||||
'@pnpm/plugin-commands-outdated': workspace:6.0.10
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/semver-diff': ^1.0.2
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/types': workspace:8.0.1
|
||||
@@ -2413,7 +2413,7 @@ importers:
|
||||
'@pnpm/plugin-commands-installation': link:../plugin-commands-installation
|
||||
'@pnpm/plugin-commands-outdated': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@types/lru-cache': 5.1.1
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/wrap-ansi': 3.0.0
|
||||
@@ -2433,7 +2433,7 @@ importers:
|
||||
'@pnpm/pick-registry-for-package': workspace:3.0.1
|
||||
'@pnpm/plugin-commands-publishing': workspace:5.0.11
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/resolver-base': workspace:9.0.1
|
||||
'@pnpm/run-npm': workspace:4.0.1
|
||||
'@pnpm/sort-packages': workspace:3.0.2
|
||||
@@ -2496,7 +2496,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-publishing': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@types/cross-spawn': 6.0.2
|
||||
'@types/is-ci': 3.0.0
|
||||
'@types/is-windows': 1.0.0
|
||||
@@ -2534,7 +2534,7 @@ importers:
|
||||
'@pnpm/normalize-registries': workspace:3.0.1
|
||||
'@pnpm/plugin-commands-rebuild': workspace:6.1.9
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/sort-packages': workspace:3.0.2
|
||||
'@pnpm/store-connection-manager': workspace:4.1.8
|
||||
'@pnpm/store-controller-types': workspace:13.0.2
|
||||
@@ -2593,7 +2593,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-rebuild': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/test-fixtures': link:../../privatePackages/test-fixtures
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/semver': 7.3.9
|
||||
@@ -2619,7 +2619,7 @@ importers:
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-package-json': workspace:6.0.2
|
||||
'@pnpm/read-project-manifest': workspace:3.0.2
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/sort-packages': workspace:3.0.2
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
'@pnpm/types': workspace:8.0.1
|
||||
@@ -2662,7 +2662,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-script-runners': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@types/is-windows': 1.0.0
|
||||
'@types/ramda': 0.27.39
|
||||
is-windows: 1.0.2
|
||||
@@ -2752,7 +2752,7 @@ importers:
|
||||
'@pnpm/pick-registry-for-package': workspace:3.0.1
|
||||
'@pnpm/plugin-commands-store': workspace:5.1.9
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/store-connection-manager': workspace:4.1.8
|
||||
'@pnpm/store-controller-types': workspace:13.0.2
|
||||
'@pnpm/store-path': workspace:6.0.0
|
||||
@@ -2799,7 +2799,7 @@ importers:
|
||||
'@pnpm/logger': 4.0.0
|
||||
'@pnpm/plugin-commands-store': 'link:'
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@types/archy': 0.0.31
|
||||
'@types/ramda': 0.27.39
|
||||
'@types/ssri': 7.1.1
|
||||
@@ -2847,7 +2847,7 @@ importers:
|
||||
'@pnpm/prepare': workspace:*
|
||||
'@pnpm/read-package-json': workspace:6.0.2
|
||||
'@pnpm/read-project-manifest': workspace:3.0.2
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/run-npm': workspace:4.0.1
|
||||
'@pnpm/tabtab': ^0.1.2
|
||||
'@pnpm/types': workspace:8.0.1
|
||||
@@ -2935,7 +2935,7 @@ importers:
|
||||
'@pnpm/prepare': link:../../privatePackages/prepare
|
||||
'@pnpm/read-package-json': link:../read-package-json
|
||||
'@pnpm/read-project-manifest': link:../read-project-manifest
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/run-npm': link:../run-npm
|
||||
'@pnpm/tabtab': 0.1.2
|
||||
'@pnpm/types': link:../types
|
||||
@@ -3533,7 +3533,7 @@ importers:
|
||||
'@pnpm/constants': workspace:6.1.0
|
||||
'@pnpm/lockfile-types': workspace:4.0.1
|
||||
'@pnpm/modules-yaml': workspace:10.0.1
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/types': workspace:8.0.1
|
||||
'@types/is-windows': ^1.0.0
|
||||
'@types/isexe': 2.0.0
|
||||
@@ -3548,7 +3548,7 @@ importers:
|
||||
'@pnpm/constants': link:../../packages/constants
|
||||
'@pnpm/lockfile-types': link:../../packages/lockfile-types
|
||||
'@pnpm/modules-yaml': link:../../packages/modules-yaml
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
'@pnpm/types': link:../../packages/types
|
||||
is-windows: 1.0.2
|
||||
isexe: 2.0.0
|
||||
@@ -3565,11 +3565,11 @@ importers:
|
||||
specifiers:
|
||||
'@pnpm/assert-store': workspace:*
|
||||
'@pnpm/cafs': workspace:4.0.3
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
path-exists: ^4.0.0
|
||||
dependencies:
|
||||
'@pnpm/cafs': link:../../packages/cafs
|
||||
'@pnpm/registry-mock': 2.17.0
|
||||
'@pnpm/registry-mock': 2.19.0
|
||||
path-exists: 4.0.0
|
||||
devDependencies:
|
||||
'@pnpm/assert-store': 'link:'
|
||||
@@ -5183,8 +5183,8 @@ packages:
|
||||
strip-bom: 4.0.0
|
||||
dev: true
|
||||
|
||||
/@pnpm/registry-mock/2.17.0:
|
||||
resolution: {integrity: sha512-vZuWSJaixugxz0Y39VIEKeyYm69TG3/8qXkgMXjLjRWtE/4EezKKGfiAEhuJasSdvVoYUQWY2Ng0nEkWihTN9w==}
|
||||
/@pnpm/registry-mock/2.19.0:
|
||||
resolution: {integrity: sha512-nPrpSr6PWl150NIY26FsXKqlk4NL6dR29HC+4H4pVUS6GZloQU/NUlwvLCJ6FrV16YyV6cOvbDMCxVjri1rltg==}
|
||||
engines: {node: '>=10.13'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@@ -5194,7 +5194,7 @@ packages:
|
||||
read-yaml-file: 2.1.0
|
||||
rimraf: 3.0.2
|
||||
tempy: 1.0.1
|
||||
verdaccio: 5.10.3
|
||||
verdaccio: 5.11.0
|
||||
write-yaml-file: 4.2.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
@@ -5366,7 +5366,7 @@ packages:
|
||||
/@types/byline/4.2.33:
|
||||
resolution: {integrity: sha512-LJYez7wrWcJQQDknqZtrZuExMGP0IXmPl1rOOGDqLbu+H7UNNRfKNuSxCBcQMLH1EfjeWidLedC/hCc5dDfBog==}
|
||||
dependencies:
|
||||
'@types/node': 17.0.38
|
||||
'@types/node': 17.0.40
|
||||
dev: true
|
||||
|
||||
/@types/cacheable-request/6.0.2:
|
||||
@@ -5540,6 +5540,10 @@ packages:
|
||||
/@types/node/17.0.38:
|
||||
resolution: {integrity: sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g==}
|
||||
|
||||
/@types/node/17.0.40:
|
||||
resolution: {integrity: sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg==}
|
||||
dev: true
|
||||
|
||||
/@types/normalize-package-data/2.4.1:
|
||||
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
||||
dev: true
|
||||
@@ -11735,6 +11739,7 @@ packages:
|
||||
resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==}
|
||||
engines: {node: '>= 10.12.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
env-paths: 2.2.1
|
||||
glob: 7.2.3
|
||||
@@ -11876,6 +11881,7 @@ packages:
|
||||
|
||||
/npmlog/4.1.2:
|
||||
resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
are-we-there-yet: 1.1.7
|
||||
console-control-strings: 1.1.0
|
||||
@@ -12340,7 +12346,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
/performance-now/2.1.0:
|
||||
resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=}
|
||||
resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
|
||||
|
||||
/picocolors/1.0.0:
|
||||
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
||||
@@ -14776,6 +14782,61 @@ packages:
|
||||
- encoding
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: true
|
||||
|
||||
/verdaccio/5.11.0:
|
||||
resolution: {integrity: sha512-wKQ4dVBuUm+sHTakxlGPyOQSvJtpkzk7FTUKfGP92LV8AdQSyNflXomiP3KK7WfoG6Er18+aC+sDhosTs02l6g==}
|
||||
engines: {node: '>=12', npm: '>=6'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@verdaccio/commons-api': 10.2.0
|
||||
'@verdaccio/local-storage': 10.2.1
|
||||
'@verdaccio/readme': 10.3.4
|
||||
'@verdaccio/streams': 10.2.0
|
||||
'@verdaccio/ui-theme': 6.0.0-6-next.24
|
||||
async: 3.2.3
|
||||
body-parser: 1.20.0
|
||||
clipanion: 3.2.0-rc.6
|
||||
compression: 1.7.4
|
||||
cookies: 0.8.0
|
||||
cors: 2.8.5
|
||||
dayjs: 1.11.2
|
||||
debug: 4.3.4
|
||||
envinfo: 7.8.1
|
||||
eslint-import-resolver-node: 0.3.6
|
||||
express: 4.18.1
|
||||
express-rate-limit: 5.5.1
|
||||
fast-safe-stringify: 2.1.1
|
||||
handlebars: 4.7.7
|
||||
http-errors: 1.8.1
|
||||
js-yaml: /@zkochan/js-yaml/0.0.6
|
||||
JSONStream: 1.3.5
|
||||
jsonwebtoken: 8.5.1
|
||||
kleur: 4.1.4
|
||||
lodash: 4.17.21
|
||||
lru-cache: 7.9.0
|
||||
lunr-mutable-indexes: 2.3.2
|
||||
marked: 4.0.16
|
||||
memoizee: 0.4.15
|
||||
mime: 3.0.0
|
||||
minimatch: 5.0.1
|
||||
mkdirp: 1.0.4
|
||||
mv: 2.1.1
|
||||
pino: 6.14.0
|
||||
pkginfo: 0.4.1
|
||||
prettier-bytes: 1.0.4
|
||||
pretty-ms: 7.0.1
|
||||
request: 2.88.0
|
||||
semver: 7.3.7
|
||||
validator: 13.7.0
|
||||
verdaccio-audit: 10.2.2
|
||||
verdaccio-htpasswd: 10.3.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- canvas
|
||||
- encoding
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
|
||||
/verror/1.10.0:
|
||||
resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=}
|
||||
@@ -14963,7 +15024,7 @@ packages:
|
||||
/wide-align/1.1.5:
|
||||
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
string-width: 1.0.2
|
||||
|
||||
/widest-line/3.1.0:
|
||||
resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"@pnpm/constants": "workspace:6.1.0",
|
||||
"@pnpm/lockfile-types": "workspace:4.0.1",
|
||||
"@pnpm/modules-yaml": "workspace:10.0.1",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"@pnpm/types": "workspace:8.0.1",
|
||||
"is-windows": "^1.0.2",
|
||||
"isexe": "2.0.0",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@pnpm/cafs": "workspace:4.0.3",
|
||||
"@pnpm/registry-mock": "2.17.0",
|
||||
"@pnpm/registry-mock": "2.19.0",
|
||||
"path-exists": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
Reference in New Issue
Block a user