@pnpm/hooks.read-package-hook 1100.1.1 → 1100.1.3
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/CHANGELOG.md +21 -0
- package/lib/createOptionalDependenciesRemover.d.ts +2 -0
- package/lib/createOptionalDependenciesRemover.js +17 -0
- package/lib/createPackageExtender.d.ts +2 -0
- package/lib/createPackageExtender.js +36 -0
- package/lib/createReadPackageHook.d.ts +15 -0
- package/lib/createReadPackageHook.js +79 -0
- package/lib/createVersionsOverrider.d.ts +14 -0
- package/lib/createVersionsOverrider.js +120 -0
- package/lib/index.d.ts +1 -0
- package/lib/isIntersectingRange.d.ts +1 -0
- package/lib/isIntersectingRange.js +9 -0
- package/lib/isSubRange.d.ts +1 -0
- package/lib/isSubRange.js +9 -0
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @pnpm/hooks.read-package-hook
|
|
2
2
|
|
|
3
|
+
## 1100.1.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Republished every package: the tarballs published by the v11.13.1 through v11.16.0 releases were missing most of their compiled files due to a packing bug [#13164](https://github.com/pnpm/pnpm/issues/13164).
|
|
8
|
+
|
|
9
|
+
- Updated dependencies:
|
|
10
|
+
- @pnpm/config.matcher@1100.0.2
|
|
11
|
+
- @pnpm/config.parse-overrides@1100.1.1
|
|
12
|
+
- @pnpm/deps.peer-range@1100.1.1
|
|
13
|
+
- @pnpm/error@1100.1.0
|
|
14
|
+
- @pnpm/resolving.parse-wanted-dependency@1100.0.2
|
|
15
|
+
- @pnpm/types@1101.6.0
|
|
16
|
+
|
|
17
|
+
## 1100.1.2
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies:
|
|
22
|
+
- @pnpm/types@1101.5.0
|
|
23
|
+
|
|
3
24
|
## 1100.1.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createMatcher } from '@pnpm/config.matcher';
|
|
2
|
+
export function createOptionalDependenciesRemover(toBeRemoved) {
|
|
3
|
+
if (!toBeRemoved.length)
|
|
4
|
+
return (manifest) => manifest;
|
|
5
|
+
const shouldBeRemoved = createMatcher(toBeRemoved);
|
|
6
|
+
return (manifest) => removeOptionalDependencies(manifest, shouldBeRemoved);
|
|
7
|
+
}
|
|
8
|
+
function removeOptionalDependencies(manifest, shouldBeRemoved) {
|
|
9
|
+
for (const optionalDependency in manifest.optionalDependencies) {
|
|
10
|
+
if (shouldBeRemoved(optionalDependency)) {
|
|
11
|
+
delete manifest.optionalDependencies[optionalDependency];
|
|
12
|
+
delete manifest.dependencies?.[optionalDependency];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return manifest;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=createOptionalDependenciesRemover.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { parseWantedDependency } from '@pnpm/resolving.parse-wanted-dependency';
|
|
2
|
+
import semver from 'semver';
|
|
3
|
+
export function createPackageExtender(packageExtensions) {
|
|
4
|
+
const extensionsByPkgName = new Map();
|
|
5
|
+
for (const selector in packageExtensions) {
|
|
6
|
+
const packageExtension = packageExtensions[selector];
|
|
7
|
+
const { alias, bareSpecifier } = parseWantedDependency(selector);
|
|
8
|
+
if (!extensionsByPkgName.has(alias)) {
|
|
9
|
+
extensionsByPkgName.set(alias, []);
|
|
10
|
+
}
|
|
11
|
+
extensionsByPkgName.get(alias).push({ packageExtension, range: bareSpecifier });
|
|
12
|
+
}
|
|
13
|
+
return extendPkgHook.bind(null, extensionsByPkgName);
|
|
14
|
+
}
|
|
15
|
+
function extendPkgHook(extensionsByPkgName, manifest) {
|
|
16
|
+
const extensions = extensionsByPkgName.get(manifest.name);
|
|
17
|
+
if (extensions == null)
|
|
18
|
+
return manifest;
|
|
19
|
+
extendPkg(manifest, extensions);
|
|
20
|
+
return manifest;
|
|
21
|
+
}
|
|
22
|
+
function extendPkg(manifest, extensions) {
|
|
23
|
+
for (const { range, packageExtension } of extensions) {
|
|
24
|
+
if (range != null && !semver.satisfies(manifest.version, range))
|
|
25
|
+
continue;
|
|
26
|
+
for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies', 'peerDependenciesMeta']) {
|
|
27
|
+
if (!packageExtension[field])
|
|
28
|
+
continue;
|
|
29
|
+
manifest[field] = {
|
|
30
|
+
...packageExtension[field],
|
|
31
|
+
...manifest[field],
|
|
32
|
+
}; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=createPackageExtender.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PackageExtension, ReadPackageHook } from '@pnpm/types';
|
|
2
|
+
import { type CreateVersionsOverriderOptions, type VersionOverrideWithoutRawSelector } from './createVersionsOverrider.js';
|
|
3
|
+
export declare function getEffectivePackageExtensions({ ignoreCompatibilityDb, packageExtensions, }: {
|
|
4
|
+
ignoreCompatibilityDb?: boolean;
|
|
5
|
+
packageExtensions?: Record<string, PackageExtension>;
|
|
6
|
+
}): Record<string, PackageExtension> | undefined;
|
|
7
|
+
export declare function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, convergeDeclaredRanges, ignoredOptionalDependencies, packageExtensions, readPackageHook, }: {
|
|
8
|
+
ignoreCompatibilityDb?: boolean;
|
|
9
|
+
lockfileDir: string;
|
|
10
|
+
overrides?: VersionOverrideWithoutRawSelector[];
|
|
11
|
+
convergeDeclaredRanges?: CreateVersionsOverriderOptions['convergeDeclaredRanges'];
|
|
12
|
+
ignoredOptionalDependencies?: string[];
|
|
13
|
+
packageExtensions?: Record<string, PackageExtension>;
|
|
14
|
+
readPackageHook?: ReadPackageHook[] | ReadPackageHook;
|
|
15
|
+
}): ReadPackageHook | undefined;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { packageExtensions as compatPackageExtensions } from '@yarnpkg/extensions';
|
|
2
|
+
import { isEmpty, pipeWith } from 'ramda';
|
|
3
|
+
import { createOptionalDependenciesRemover } from './createOptionalDependenciesRemover.js';
|
|
4
|
+
import { createPackageExtender } from './createPackageExtender.js';
|
|
5
|
+
import { createVersionsOverrider } from './createVersionsOverrider.js';
|
|
6
|
+
const PACKAGE_EXTENSION_FIELDS = [
|
|
7
|
+
'dependencies',
|
|
8
|
+
'optionalDependencies',
|
|
9
|
+
'peerDependencies',
|
|
10
|
+
'peerDependenciesMeta',
|
|
11
|
+
];
|
|
12
|
+
export function getEffectivePackageExtensions({ ignoreCompatibilityDb, packageExtensions, }) {
|
|
13
|
+
const effectivePackageExtensions = {};
|
|
14
|
+
if (!ignoreCompatibilityDb) {
|
|
15
|
+
mergePackageExtensions(effectivePackageExtensions, compatPackageExtensions);
|
|
16
|
+
}
|
|
17
|
+
if (!isEmpty(packageExtensions ?? {})) {
|
|
18
|
+
mergePackageExtensions(effectivePackageExtensions, Object.entries(packageExtensions));
|
|
19
|
+
}
|
|
20
|
+
return isEmpty(effectivePackageExtensions) ? undefined : effectivePackageExtensions;
|
|
21
|
+
}
|
|
22
|
+
export function createReadPackageHook({ ignoreCompatibilityDb, lockfileDir, overrides, convergeDeclaredRanges, ignoredOptionalDependencies, packageExtensions, readPackageHook, }) {
|
|
23
|
+
const hooks = [];
|
|
24
|
+
const effectivePackageExtensions = getEffectivePackageExtensions({
|
|
25
|
+
ignoreCompatibilityDb,
|
|
26
|
+
packageExtensions,
|
|
27
|
+
});
|
|
28
|
+
if (effectivePackageExtensions != null) {
|
|
29
|
+
hooks.push(createPackageExtender(effectivePackageExtensions));
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(readPackageHook)) {
|
|
32
|
+
hooks.push(...readPackageHook);
|
|
33
|
+
}
|
|
34
|
+
else if (readPackageHook) {
|
|
35
|
+
hooks.push(readPackageHook);
|
|
36
|
+
}
|
|
37
|
+
if (!isEmpty(overrides ?? {})) {
|
|
38
|
+
hooks.push(createVersionsOverrider(overrides, lockfileDir, { convergeDeclaredRanges }));
|
|
39
|
+
}
|
|
40
|
+
if (ignoredOptionalDependencies && !isEmpty(ignoredOptionalDependencies)) {
|
|
41
|
+
hooks.push(createOptionalDependenciesRemover(ignoredOptionalDependencies));
|
|
42
|
+
}
|
|
43
|
+
if (hooks.length === 0) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const readPackageAndExtend = hooks.length === 1
|
|
47
|
+
? hooks[0]
|
|
48
|
+
: ((pkg, dir) => pipeWith(async (f, res) => f(await res, dir), hooks)(pkg, dir)); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
49
|
+
return readPackageAndExtend;
|
|
50
|
+
}
|
|
51
|
+
function mergePackageExtensions(target, entries) {
|
|
52
|
+
for (const [selector, packageExtension] of entries) {
|
|
53
|
+
target[selector] = mergePackageExtension(target[selector], packageExtension);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function mergePackageExtension(previous, next) {
|
|
57
|
+
if (previous == null)
|
|
58
|
+
return clonePackageExtension(next);
|
|
59
|
+
const merged = clonePackageExtension(previous);
|
|
60
|
+
for (const field of PACKAGE_EXTENSION_FIELDS) {
|
|
61
|
+
if (next[field] == null)
|
|
62
|
+
continue;
|
|
63
|
+
merged[field] = {
|
|
64
|
+
...next[field],
|
|
65
|
+
...merged[field],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return merged;
|
|
69
|
+
}
|
|
70
|
+
function clonePackageExtension(packageExtension) {
|
|
71
|
+
const cloned = {};
|
|
72
|
+
for (const field of PACKAGE_EXTENSION_FIELDS) {
|
|
73
|
+
if (packageExtension[field] == null)
|
|
74
|
+
continue;
|
|
75
|
+
cloned[field] = { ...packageExtension[field] };
|
|
76
|
+
}
|
|
77
|
+
return cloned;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=createReadPackageHook.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { VersionOverride as VersionOverrideBase } from '@pnpm/config.parse-overrides';
|
|
2
|
+
import type { ReadPackageHook } from '@pnpm/types';
|
|
3
|
+
export type VersionOverrideWithoutRawSelector = Omit<VersionOverrideBase, 'selector'>;
|
|
4
|
+
export interface CreateVersionsOverriderOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Populated with every declared semver range seen for packages that have a
|
|
7
|
+
* convergence override, whether or not the override's version satisfied it.
|
|
8
|
+
* Feeds the staleness check for convergence overrides after a full
|
|
9
|
+
* resolution. Edges claimed by an explicit override are not recorded — the
|
|
10
|
+
* convergence override never governs them.
|
|
11
|
+
*/
|
|
12
|
+
convergeDeclaredRanges?: Map<string, Set<string>>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createVersionsOverrider(overrides: VersionOverrideWithoutRawSelector[], rootDir: string, opts?: CreateVersionsOverriderOptions): ReadPackageHook;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { isValidPeerRange } from '@pnpm/deps.peer-range';
|
|
3
|
+
import normalizePath from 'normalize-path';
|
|
4
|
+
import { partition } from 'ramda';
|
|
5
|
+
import semver from 'semver';
|
|
6
|
+
import { isIntersectingRange } from './isIntersectingRange.js';
|
|
7
|
+
export function createVersionsOverrider(overrides, rootDir, opts) {
|
|
8
|
+
const [convergeOverrides, explicitOverrides] = partition(({ converge }) => converge === true, overrides);
|
|
9
|
+
const [versionOverrides, genericVersionOverrides] = partition(({ parentPkg }) => parentPkg != null, explicitOverrides.map((override) => ({
|
|
10
|
+
...override,
|
|
11
|
+
localTarget: createLocalTarget(override, rootDir),
|
|
12
|
+
})));
|
|
13
|
+
const convergeVersions = new Map(convergeOverrides.map((override) => [override.targetPkg.name, override.newBareSpecifier]));
|
|
14
|
+
return ((manifest, dir) => {
|
|
15
|
+
const versionOverridesWithParent = versionOverrides.filter(({ parentPkg }) => {
|
|
16
|
+
return (parentPkg.name === manifest.name &&
|
|
17
|
+
(!parentPkg.bareSpecifier || semver.satisfies(manifest.version, parentPkg.bareSpecifier)));
|
|
18
|
+
});
|
|
19
|
+
overrideDepsOfPkg({ manifest, dir }, versionOverridesWithParent, genericVersionOverrides, {
|
|
20
|
+
convergeVersions,
|
|
21
|
+
convergeDeclaredRanges: opts?.convergeDeclaredRanges,
|
|
22
|
+
});
|
|
23
|
+
return manifest;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function createLocalTarget(override, rootDir) {
|
|
27
|
+
let protocol;
|
|
28
|
+
if (override.newBareSpecifier.startsWith('file:')) {
|
|
29
|
+
protocol = 'file:';
|
|
30
|
+
}
|
|
31
|
+
else if (override.newBareSpecifier.startsWith('link:')) {
|
|
32
|
+
protocol = 'link:';
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const pkgPath = override.newBareSpecifier.substring(protocol.length);
|
|
38
|
+
const specifiedViaRelativePath = !path.isAbsolute(pkgPath);
|
|
39
|
+
const absolutePath = specifiedViaRelativePath ? path.join(rootDir, pkgPath) : pkgPath;
|
|
40
|
+
return { absolutePath, specifiedViaRelativePath, protocol };
|
|
41
|
+
}
|
|
42
|
+
function overrideDepsOfPkg({ manifest, dir }, versionOverrides, genericVersionOverrides, convergeOpts) {
|
|
43
|
+
const { dependencies, optionalDependencies, devDependencies, peerDependencies } = manifest;
|
|
44
|
+
const _overrideDeps = overrideDeps.bind(null, { versionOverrides, genericVersionOverrides, dir, convergeOpts });
|
|
45
|
+
for (const deps of [dependencies, optionalDependencies, devDependencies]) {
|
|
46
|
+
if (deps) {
|
|
47
|
+
_overrideDeps(deps, undefined);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (peerDependencies) {
|
|
51
|
+
if (!manifest.dependencies)
|
|
52
|
+
manifest.dependencies = {};
|
|
53
|
+
_overrideDeps(manifest.dependencies, peerDependencies);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function overrideDeps({ versionOverrides, genericVersionOverrides, dir, convergeOpts }, deps, peerDeps) {
|
|
57
|
+
for (const [name, bareSpecifier] of Object.entries(peerDeps ?? deps)) {
|
|
58
|
+
const versionOverride = pickMostSpecificVersionOverride(versionOverrides.filter(({ targetPkg }) => targetPkg.name === name && isIntersectingRange(targetPkg.bareSpecifier, bareSpecifier))) ??
|
|
59
|
+
pickMostSpecificVersionOverride(genericVersionOverrides.filter(({ targetPkg }) => targetPkg.name === name && isIntersectingRange(targetPkg.bareSpecifier, bareSpecifier)));
|
|
60
|
+
if (!versionOverride) {
|
|
61
|
+
convergeDep(convergeOpts, { deps, peerDeps }, name, bareSpecifier);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (versionOverride.newBareSpecifier === '-') {
|
|
65
|
+
if (peerDeps) {
|
|
66
|
+
delete peerDeps[versionOverride.targetPkg.name];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
delete deps[versionOverride.targetPkg.name];
|
|
70
|
+
}
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const newBareSpecifier = versionOverride.localTarget
|
|
74
|
+
? `${versionOverride.localTarget.protocol}${resolveLocalOverride(versionOverride.localTarget, dir)}`
|
|
75
|
+
: versionOverride.newBareSpecifier;
|
|
76
|
+
if (peerDeps == null || !isValidPeerRange(newBareSpecifier)) {
|
|
77
|
+
deps[versionOverride.targetPkg.name] = newBareSpecifier;
|
|
78
|
+
}
|
|
79
|
+
else if (isValidPeerRange(newBareSpecifier)) {
|
|
80
|
+
peerDeps[versionOverride.targetPkg.name] = newBareSpecifier;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A convergence override (`"pkg@": "<version>"`) rewrites a dependency edge
|
|
86
|
+
* only when its version satisfies the edge's declared range, so incompatible
|
|
87
|
+
* consumers keep their own resolution. Only plain semver ranges participate:
|
|
88
|
+
* `workspace:`, `catalog:`, `npm:`, git/URL, and dist-tag specifiers have no
|
|
89
|
+
* defined "satisfies" relation and are left untouched.
|
|
90
|
+
*/
|
|
91
|
+
function convergeDep({ convergeVersions, convergeDeclaredRanges }, { deps, peerDeps }, name, bareSpecifier) {
|
|
92
|
+
const convergeVersion = convergeVersions.get(name);
|
|
93
|
+
if (convergeVersion == null || semver.validRange(bareSpecifier, true) == null)
|
|
94
|
+
return;
|
|
95
|
+
if (convergeDeclaredRanges != null) {
|
|
96
|
+
let ranges = convergeDeclaredRanges.get(name);
|
|
97
|
+
if (ranges == null) {
|
|
98
|
+
ranges = new Set();
|
|
99
|
+
convergeDeclaredRanges.set(name, ranges);
|
|
100
|
+
}
|
|
101
|
+
ranges.add(bareSpecifier);
|
|
102
|
+
}
|
|
103
|
+
if (!semver.satisfies(convergeVersion, bareSpecifier, true))
|
|
104
|
+
return;
|
|
105
|
+
if (peerDeps == null) {
|
|
106
|
+
deps[name] = convergeVersion;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
peerDeps[name] = convergeVersion;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function resolveLocalOverride({ specifiedViaRelativePath, absolutePath }, pkgDir) {
|
|
113
|
+
return specifiedViaRelativePath && pkgDir
|
|
114
|
+
? normalizePath(path.relative(pkgDir, absolutePath))
|
|
115
|
+
: absolutePath;
|
|
116
|
+
}
|
|
117
|
+
function pickMostSpecificVersionOverride(versionOverrides) {
|
|
118
|
+
return versionOverrides.sort((a, b) => isIntersectingRange(b.targetPkg.bareSpecifier ?? '', a.targetPkg.bareSpecifier ?? '') ? -1 : 1)[0];
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=createVersionsOverrider.js.map
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createReadPackageHook, getEffectivePackageExtensions } from './createReadPackageHook.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isIntersectingRange(range1: string | undefined, range2: string): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
export function isIntersectingRange(range1, range2) {
|
|
3
|
+
return !range1 ||
|
|
4
|
+
range2 === range1 ||
|
|
5
|
+
semver.validRange(range2) != null &&
|
|
6
|
+
semver.validRange(range1) != null &&
|
|
7
|
+
semver.intersects(range2, range1);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=isIntersectingRange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isSubRange(superRange: string | undefined, subRange: string): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
export function isSubRange(superRange, subRange) {
|
|
3
|
+
return !superRange ||
|
|
4
|
+
subRange === superRange ||
|
|
5
|
+
semver.validRange(subRange) != null &&
|
|
6
|
+
semver.validRange(superRange) != null &&
|
|
7
|
+
semver.subset(subRange, superRange);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=isSubRange.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/hooks.read-package-hook",
|
|
3
|
-
"version": "1100.1.
|
|
3
|
+
"version": "1100.1.3",
|
|
4
4
|
"description": "Creates the default package reader hook used by pnpm",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"!*.map"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@pnpm/config.matcher": "1100.0.
|
|
31
|
-
"@pnpm/config.parse-overrides": "1100.1.
|
|
32
|
-
"@pnpm/deps.peer-range": "1100.1.
|
|
33
|
-
"@pnpm/error": "1100.0
|
|
34
|
-
"@pnpm/resolving.parse-wanted-dependency": "1100.0.
|
|
35
|
-
"@pnpm/types": "1101.
|
|
30
|
+
"@pnpm/config.matcher": "1100.0.2",
|
|
31
|
+
"@pnpm/config.parse-overrides": "1100.1.1",
|
|
32
|
+
"@pnpm/deps.peer-range": "1100.1.1",
|
|
33
|
+
"@pnpm/error": "1100.1.0",
|
|
34
|
+
"@pnpm/resolving.parse-wanted-dependency": "1100.0.2",
|
|
35
|
+
"@pnpm/types": "1101.6.0",
|
|
36
36
|
"@yarnpkg/extensions": "2.0.6",
|
|
37
37
|
"normalize-path": "^3.0.0",
|
|
38
38
|
"ramda": "npm:@pnpm/ramda@0.28.1",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@jest/globals": "30.4.1",
|
|
43
|
-
"@pnpm/hooks.read-package-hook": "1100.1.
|
|
43
|
+
"@pnpm/hooks.read-package-hook": "1100.1.3",
|
|
44
44
|
"@types/normalize-path": "^3.0.2",
|
|
45
45
|
"@types/ramda": "0.31.1",
|
|
46
46
|
"@types/semver": "7.7.1",
|