@pnpm/installing.deps-resolver 1008.3.1 → 1100.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/hoistPeers.js +5 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/resolveDependencyTree.js +2 -2
- package/lib/resolvePeers.d.ts +1 -0
- package/lib/resolvePeers.js +29 -12
- package/package.json +34 -34
package/lib/hoistPeers.js
CHANGED
|
@@ -18,7 +18,8 @@ export function hoistPeers(opts, missingRequiredPeers) {
|
|
|
18
18
|
if (opts.allPreferredVersions[peerName]) {
|
|
19
19
|
const versions = [];
|
|
20
20
|
const nonVersions = [];
|
|
21
|
-
for (const [spec,
|
|
21
|
+
for (const [spec, selector] of Object.entries(opts.allPreferredVersions[peerName])) {
|
|
22
|
+
const specType = typeof selector === 'string' ? selector : selector.selectorType;
|
|
22
23
|
if (specType === 'version') {
|
|
23
24
|
versions.push(spec);
|
|
24
25
|
}
|
|
@@ -44,7 +45,9 @@ export function hoistPeers(opts, missingRequiredPeers) {
|
|
|
44
45
|
dependencies[peerName] = range;
|
|
45
46
|
}
|
|
46
47
|
else {
|
|
47
|
-
dependencies[peerName] = [semver.maxSatisfying(versions, '*', { includePrerelease: true }), ...nonVersions]
|
|
48
|
+
dependencies[peerName] = [semver.maxSatisfying(versions, '*', { includePrerelease: true }), ...nonVersions]
|
|
49
|
+
.filter(spec => spec != null)
|
|
50
|
+
.join(' || ');
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
else if (opts.autoInstallPeers) {
|
package/lib/index.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ export interface ResolveDependenciesResult {
|
|
|
41
41
|
export declare function resolveDependencies(importers: ImporterToResolve[], opts: ResolveDependenciesOptions & {
|
|
42
42
|
defaultUpdateDepth: number;
|
|
43
43
|
dedupePeerDependents?: boolean;
|
|
44
|
+
dedupePeers?: boolean;
|
|
44
45
|
dedupeDirectDeps?: boolean;
|
|
45
46
|
dedupeInjectedDeps?: boolean;
|
|
46
47
|
excludeLinksFromLockfile?: boolean;
|
package/lib/index.js
CHANGED
|
@@ -74,6 +74,7 @@ export async function resolveDependencies(importers, opts) {
|
|
|
74
74
|
allPeerDepNames,
|
|
75
75
|
dependenciesTree,
|
|
76
76
|
dedupePeerDependents: opts.dedupePeerDependents,
|
|
77
|
+
dedupePeers: opts.dedupePeers,
|
|
77
78
|
dedupeInjectedDeps: opts.dedupeInjectedDeps,
|
|
78
79
|
lockfileDir: opts.lockfileDir,
|
|
79
80
|
projects: projectsToLink,
|
|
@@ -2,7 +2,7 @@ import { resolveFromCatalog } from '@pnpm/catalogs.resolver';
|
|
|
2
2
|
import { createPackageVersionPolicy } from '@pnpm/config.version-policy';
|
|
3
3
|
import { PnpmError } from '@pnpm/error';
|
|
4
4
|
import { globalWarn } from '@pnpm/logger';
|
|
5
|
-
import { partition
|
|
5
|
+
import { partition } from 'ramda';
|
|
6
6
|
import { nextNodeId } from './nextNodeId.js';
|
|
7
7
|
import { parentIdsContainSequence } from './parentIdsContainSequence.js';
|
|
8
8
|
import { resolveRootDependencies, } from './resolveDependencies.js';
|
|
@@ -104,7 +104,7 @@ export async function resolveDependencyTree(importers, opts) {
|
|
|
104
104
|
};
|
|
105
105
|
});
|
|
106
106
|
const { pkgAddressesByImporters, time } = await resolveRootDependencies(ctx, resolveArgs);
|
|
107
|
-
const directDepsByImporterId =
|
|
107
|
+
const directDepsByImporterId = Object.fromEntries(importers.map(({ id }, i) => [id, pkgAddressesByImporters[i]]));
|
|
108
108
|
for (const directDependencies of pkgAddressesByImporters) {
|
|
109
109
|
for (const directDep of directDependencies) {
|
|
110
110
|
const { alias, normalizedBareSpecifier, version, saveCatalogName } = directDep;
|
package/lib/resolvePeers.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export declare function resolvePeers<T extends PartialResolvedPackage>(opts: {
|
|
|
48
48
|
lockfileDir: string;
|
|
49
49
|
resolvePeersFromWorkspaceRoot?: boolean;
|
|
50
50
|
dedupePeerDependents?: boolean;
|
|
51
|
+
dedupePeers?: boolean;
|
|
51
52
|
dedupeInjectedDeps?: boolean;
|
|
52
53
|
resolvedImporters: ResolvedImporters;
|
|
53
54
|
peersSuffixMaxLength: number;
|
package/lib/resolvePeers.js
CHANGED
|
@@ -45,6 +45,7 @@ export async function resolvePeers(opts) {
|
|
|
45
45
|
peersCache,
|
|
46
46
|
peerDependencyIssues,
|
|
47
47
|
purePkgs,
|
|
48
|
+
dedupePeers: opts.dedupePeers,
|
|
48
49
|
peersSuffixMaxLength: opts.peersSuffixMaxLength,
|
|
49
50
|
rootDir,
|
|
50
51
|
virtualStoreDir: opts.virtualStoreDir,
|
|
@@ -336,20 +337,13 @@ async function resolvePeersOfNode(currentAlias, nodeId, parentParentPkgs, ctx) {
|
|
|
336
337
|
const peerIds = [];
|
|
337
338
|
const pendingPeers = [];
|
|
338
339
|
for (const [alias, peerNodeId] of allResolvedPeers.entries()) {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
peerIds.push(
|
|
342
|
-
name: alias,
|
|
343
|
-
version: filenamify(linkedDir, { replacement: '+' }),
|
|
344
|
-
});
|
|
345
|
-
continue;
|
|
340
|
+
const peerId = peerNodeIdToPeerId(alias, peerNodeId, ctx);
|
|
341
|
+
if (peerId != null) {
|
|
342
|
+
peerIds.push(peerId);
|
|
346
343
|
}
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
peerIds.push(peerDepPath);
|
|
350
|
-
continue;
|
|
344
|
+
else {
|
|
345
|
+
pendingPeers.push({ alias, nodeId: peerNodeId });
|
|
351
346
|
}
|
|
352
|
-
pendingPeers.push({ alias, nodeId: peerNodeId });
|
|
353
347
|
}
|
|
354
348
|
if (pendingPeers.length === 0) {
|
|
355
349
|
const peerDepGraphHash = createPeerDepGraphHash(peerIds, ctx.peersSuffixMaxLength);
|
|
@@ -384,6 +378,12 @@ async function resolvePeersOfNode(currentAlias, nodeId, parentParentPkgs, ctx) {
|
|
|
384
378
|
ctx.pathsByNodeIdPromises.get(pendingPeer.nodeId)?.resolve(id);
|
|
385
379
|
return id;
|
|
386
380
|
}
|
|
381
|
+
if (ctx.dedupePeers) {
|
|
382
|
+
const peerNode = ctx.dependenciesTree.get(pendingPeer.nodeId);
|
|
383
|
+
if (peerNode) {
|
|
384
|
+
return { name: peerNode.resolvedPackage.name, version: peerNode.resolvedPackage.version };
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
387
|
return ctx.pathsByNodeIdPromises.get(pendingPeer.nodeId).promise;
|
|
388
388
|
})),
|
|
389
389
|
], ctx.peersSuffixMaxLength);
|
|
@@ -668,6 +668,23 @@ function getLocationFromParentNodeIds({ dependenciesTree, parentNodeIds, }) {
|
|
|
668
668
|
parents,
|
|
669
669
|
};
|
|
670
670
|
}
|
|
671
|
+
function peerNodeIdToPeerId(alias, peerNodeId, ctx) {
|
|
672
|
+
if (typeof peerNodeId === 'string' && peerNodeId.startsWith('link:')) {
|
|
673
|
+
return {
|
|
674
|
+
name: alias,
|
|
675
|
+
version: filenamify(peerNodeId.slice(5), { replacement: '+' }),
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
if (ctx.dedupePeers) {
|
|
679
|
+
// Use version-only peer identifiers instead of full dep paths.
|
|
680
|
+
// This eliminates nested peer suffixes like (foo@1.0.0(bar@2.0.0)).
|
|
681
|
+
const peerNode = ctx.dependenciesTree.get(peerNodeId);
|
|
682
|
+
if (peerNode) {
|
|
683
|
+
return { name: peerNode.resolvedPackage.name, version: peerNode.resolvedPackage.version };
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return ctx.pathsByNodeId.get(peerNodeId);
|
|
687
|
+
}
|
|
671
688
|
function toPkgByName(nodes) {
|
|
672
689
|
const pkgsByName = {};
|
|
673
690
|
const _updateParentRefs = updateParentRefs.bind(null, pkgsByName);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/installing.deps-resolver",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1100.0.1",
|
|
4
4
|
"description": "Resolves dependency graph of a package",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@pnpm/util.lex-comparator": "^3.0.2",
|
|
28
|
-
"@yarnpkg/core": "4.
|
|
29
|
-
"filenamify": "^
|
|
28
|
+
"@yarnpkg/core": "4.5.0",
|
|
29
|
+
"filenamify": "^7.0.1",
|
|
30
30
|
"graph-cycles": "3.0.0",
|
|
31
31
|
"is-inner-link": "^5.0.0",
|
|
32
32
|
"is-subdir": "^2.0.0",
|
|
@@ -35,45 +35,45 @@
|
|
|
35
35
|
"path-exists": "^5.0.0",
|
|
36
36
|
"promise-share": "^2.0.0",
|
|
37
37
|
"ramda": "npm:@pnpm/ramda@0.28.1",
|
|
38
|
-
"rename-overwrite": "^7.0.
|
|
38
|
+
"rename-overwrite": "^7.0.1",
|
|
39
39
|
"safe-promise-defer": "^2.0.0",
|
|
40
40
|
"semver": "^7.7.2",
|
|
41
41
|
"semver-range-intersect": "^0.3.1",
|
|
42
42
|
"version-selector-type": "^3.0.0",
|
|
43
|
-
"@pnpm/
|
|
44
|
-
"@pnpm/
|
|
45
|
-
"@pnpm/
|
|
46
|
-
"@pnpm/
|
|
47
|
-
"@pnpm/
|
|
48
|
-
"@pnpm/deps.
|
|
49
|
-
"@pnpm/
|
|
50
|
-
"@pnpm/
|
|
51
|
-
"@pnpm/
|
|
52
|
-
"@pnpm/
|
|
53
|
-
"@pnpm/lockfile.preferred-versions": "
|
|
54
|
-
"@pnpm/lockfile.
|
|
55
|
-
"@pnpm/hooks.types": "
|
|
56
|
-
"@pnpm/lockfile.
|
|
57
|
-
"@pnpm/lockfile.utils": "
|
|
58
|
-
"@pnpm/patching.config": "
|
|
59
|
-
"@pnpm/
|
|
60
|
-
"@pnpm/pkg-manifest.utils": "
|
|
61
|
-
"@pnpm/resolving.npm-resolver": "
|
|
62
|
-
"@pnpm/
|
|
63
|
-
"@pnpm/store.controller-types": "
|
|
64
|
-
"@pnpm/types": "
|
|
65
|
-
"@pnpm/workspace.spec-parser": "
|
|
66
|
-
"@pnpm/resolving.resolver-base": "
|
|
43
|
+
"@pnpm/constants": "1100.0.0",
|
|
44
|
+
"@pnpm/config.version-policy": "1100.0.1",
|
|
45
|
+
"@pnpm/catalogs.resolver": "1100.0.0",
|
|
46
|
+
"@pnpm/core-loggers": "1100.0.1",
|
|
47
|
+
"@pnpm/deps.graph-hasher": "1100.0.1",
|
|
48
|
+
"@pnpm/deps.path": "1100.0.1",
|
|
49
|
+
"@pnpm/catalogs.types": "1100.0.0",
|
|
50
|
+
"@pnpm/deps.peer-range": "1100.0.0",
|
|
51
|
+
"@pnpm/error": "1100.0.0",
|
|
52
|
+
"@pnpm/fetching.pick-fetcher": "1100.0.1",
|
|
53
|
+
"@pnpm/lockfile.preferred-versions": "1100.0.1",
|
|
54
|
+
"@pnpm/lockfile.pruner": "1100.0.1",
|
|
55
|
+
"@pnpm/hooks.types": "1100.0.1",
|
|
56
|
+
"@pnpm/lockfile.types": "1100.0.1",
|
|
57
|
+
"@pnpm/lockfile.utils": "1100.0.1",
|
|
58
|
+
"@pnpm/patching.config": "1100.0.1",
|
|
59
|
+
"@pnpm/pkg-manifest.reader": "1100.0.1",
|
|
60
|
+
"@pnpm/pkg-manifest.utils": "1100.0.1",
|
|
61
|
+
"@pnpm/resolving.npm-resolver": "1100.0.1",
|
|
62
|
+
"@pnpm/patching.types": "1100.0.0",
|
|
63
|
+
"@pnpm/store.controller-types": "1100.0.1",
|
|
64
|
+
"@pnpm/types": "1101.0.0",
|
|
65
|
+
"@pnpm/workspace.spec-parser": "1100.0.0",
|
|
66
|
+
"@pnpm/resolving.resolver-base": "1100.0.1"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@pnpm/logger": ">=1001.0.0 <1002.0.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/normalize-path": "^3.0.2",
|
|
73
|
-
"@types/ramda": "0.
|
|
73
|
+
"@types/ramda": "0.31.1",
|
|
74
74
|
"@types/semver": "7.7.1",
|
|
75
|
-
"@pnpm/
|
|
76
|
-
"@pnpm/
|
|
75
|
+
"@pnpm/logger": "1100.0.0",
|
|
76
|
+
"@pnpm/installing.deps-resolver": "1100.0.1"
|
|
77
77
|
},
|
|
78
78
|
"engines": {
|
|
79
79
|
"node": ">=22.13"
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
},
|
|
84
84
|
"scripts": {
|
|
85
85
|
"start": "tsgo --watch",
|
|
86
|
-
"test": "
|
|
86
|
+
"test": "pn compile && pn .test",
|
|
87
87
|
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
88
|
-
"compile": "tsgo --build &&
|
|
89
|
-
"
|
|
88
|
+
"compile": "tsgo --build && pn lint --fix",
|
|
89
|
+
".test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest"
|
|
90
90
|
}
|
|
91
91
|
}
|