@pnpm/pkg-manifest.utils 1100.2.7 → 1100.2.8

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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # @pnpm/manifest-utils
2
2
 
3
+ ## 1100.2.8
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies:
8
+ - @pnpm/core-loggers@1100.2.3
9
+
3
10
  ## 1100.2.7
4
11
 
5
12
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/pkg-manifest.utils",
3
- "version": "1100.2.7",
3
+ "version": "1100.2.8",
4
4
  "description": "Utils for dealing with package manifest",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -27,7 +27,7 @@
27
27
  "!*.map"
28
28
  ],
29
29
  "dependencies": {
30
- "@pnpm/core-loggers": "1100.2.2",
30
+ "@pnpm/core-loggers": "1100.2.3",
31
31
  "@pnpm/deps.peer-range": "1100.0.2",
32
32
  "@pnpm/error": "1100.0.1",
33
33
  "@pnpm/types": "1101.4.0",
@@ -39,7 +39,7 @@
39
39
  "devDependencies": {
40
40
  "@jest/globals": "30.4.1",
41
41
  "@pnpm/logger": "1100.0.0",
42
- "@pnpm/pkg-manifest.utils": "1100.2.7",
42
+ "@pnpm/pkg-manifest.utils": "1100.2.8",
43
43
  "@types/semver": "7.7.1"
44
44
  },
45
45
  "engines": {
@@ -1,3 +0,0 @@
1
- import { type DependenciesField, type ProjectManifest } from '@pnpm/types';
2
- export declare function convertEnginesRuntimeToDependencies(manifest: ProjectManifest, enginesFieldName: 'devEngines' | 'engines', dependenciesFieldName: DependenciesField): void;
3
- export declare function applyRuntimeOnFailOverride(manifest: ProjectManifest, onFailOverride: 'ignore' | 'warn' | 'error' | 'download'): void;
@@ -1,64 +0,0 @@
1
- import { globalWarn } from '@pnpm/logger';
2
- import { RUNTIME_NAMES, } from '@pnpm/types';
3
- export function convertEnginesRuntimeToDependencies(manifest, enginesFieldName, dependenciesFieldName) {
4
- for (const runtimeName of RUNTIME_NAMES) {
5
- const enginesFieldRuntime = manifest[enginesFieldName]?.runtime;
6
- if (enginesFieldRuntime == null || manifest[dependenciesFieldName]?.[runtimeName]) {
7
- continue;
8
- }
9
- const runtimes = Array.isArray(enginesFieldRuntime) ? enginesFieldRuntime : [enginesFieldRuntime];
10
- const runtime = runtimes.find((runtime) => runtime.name === runtimeName);
11
- if (runtime?.onFail !== 'download') {
12
- continue;
13
- }
14
- if (typeof runtime.version !== 'string') {
15
- globalWarn(`Cannot download ${runtimeName} because no version is specified in ${enginesFieldName}.runtime`);
16
- continue;
17
- }
18
- const version = runtime.version.trim();
19
- if ('webcontainer' in process.versions) {
20
- globalWarn(`Installation of ${runtimeName} versions is not supported in WebContainer`);
21
- }
22
- else {
23
- const deps = (manifest[dependenciesFieldName] ??= {});
24
- // Use Object.defineProperty so a future RUNTIME_NAMES entry that
25
- // happens to match an inherited property name (`__proto__`,
26
- // `constructor`, `prototype`) becomes a regular own data property
27
- // instead of altering Object.prototype.
28
- Object.defineProperty(deps, runtimeName, {
29
- value: `runtime:${version}`,
30
- enumerable: true,
31
- writable: true,
32
- configurable: true,
33
- });
34
- }
35
- }
36
- }
37
- export function applyRuntimeOnFailOverride(manifest, onFailOverride) {
38
- for (const [enginesFieldName, dependenciesFieldName] of [
39
- ['devEngines', 'devDependencies'],
40
- ['engines', 'dependencies'],
41
- ]) {
42
- const enginesFieldRuntime = manifest[enginesFieldName]?.runtime;
43
- if (enginesFieldRuntime == null)
44
- continue;
45
- const runtimes = Array.isArray(enginesFieldRuntime) ? enginesFieldRuntime : [enginesFieldRuntime];
46
- for (const runtime of runtimes) {
47
- runtime.onFail = onFailOverride;
48
- }
49
- if (onFailOverride !== 'download') {
50
- const deps = manifest[dependenciesFieldName];
51
- if (deps) {
52
- for (const runtimeName of RUNTIME_NAMES) {
53
- if (typeof deps[runtimeName] === 'string' && deps[runtimeName].startsWith('runtime:')) {
54
- delete deps[runtimeName];
55
- }
56
- }
57
- }
58
- }
59
- else {
60
- convertEnginesRuntimeToDependencies(manifest, enginesFieldName, dependenciesFieldName);
61
- }
62
- }
63
- }
64
- //# sourceMappingURL=convertEnginesRuntimeToDependencies.js.map
@@ -1,2 +0,0 @@
1
- import type { Dependencies, IncludedDependencies, ProjectManifest } from '@pnpm/types';
2
- export declare function filterDependenciesByType(manifest: ProjectManifest, include: IncludedDependencies): Dependencies;
@@ -1,8 +0,0 @@
1
- export function filterDependenciesByType(manifest, include) {
2
- return {
3
- ...(include.dependencies ? manifest.dependencies : {}),
4
- ...(include.devDependencies ? manifest.devDependencies : {}),
5
- ...(include.optionalDependencies ? manifest.optionalDependencies : {}),
6
- };
7
- }
8
- //# sourceMappingURL=filterDependenciesByType.js.map
@@ -1,4 +0,0 @@
1
- import type { Dependencies, DependenciesField, ProjectManifest } from '@pnpm/types';
2
- export declare function getAllDependenciesFromManifest(pkg: Pick<ProjectManifest, DependenciesField | 'peerDependencies'>, opts?: {
3
- autoInstallPeers?: boolean;
4
- }): Dependencies;
@@ -1,9 +0,0 @@
1
- export function getAllDependenciesFromManifest(pkg, opts) {
2
- return {
3
- ...pkg.devDependencies,
4
- ...pkg.dependencies,
5
- ...pkg.optionalDependencies,
6
- ...(opts?.autoInstallPeers ? pkg.peerDependencies : {}),
7
- };
8
- }
9
- //# sourceMappingURL=getAllDependenciesFromManifest.js.map
@@ -1,2 +0,0 @@
1
- import type { DependencyManifest } from '@pnpm/types';
2
- export declare function getAllUniqueSpecs(manifests: DependencyManifest[]): Record<string, string>;
@@ -1,20 +0,0 @@
1
- import { getAllDependenciesFromManifest } from './getAllDependenciesFromManifest.js';
2
- export function getAllUniqueSpecs(manifests) {
3
- const allSpecs = {};
4
- const ignored = new Set();
5
- for (const manifest of manifests) {
6
- const specs = getAllDependenciesFromManifest(manifest);
7
- for (const [name, spec] of Object.entries(specs)) {
8
- if (ignored.has(name))
9
- continue;
10
- if (allSpecs[name] != null && allSpecs[name] !== spec || spec.includes(':')) {
11
- ignored.add(name);
12
- delete allSpecs[name];
13
- continue;
14
- }
15
- allSpecs[name] = spec;
16
- }
17
- }
18
- return allSpecs;
19
- }
20
- //# sourceMappingURL=getAllUniqueSpecs.js.map
@@ -1,2 +0,0 @@
1
- import type { DependenciesOrPeersField, ProjectManifest } from '@pnpm/types';
2
- export declare function getDependencyTypeFromManifest(manifest: Pick<ProjectManifest, DependenciesOrPeersField>, depName: string): DependenciesOrPeersField | null;
@@ -1,12 +0,0 @@
1
- export function getDependencyTypeFromManifest(manifest, depName) {
2
- if (manifest.optionalDependencies?.[depName])
3
- return 'optionalDependencies';
4
- if (manifest.dependencies?.[depName])
5
- return 'dependencies';
6
- if (manifest.devDependencies?.[depName])
7
- return 'devDependencies';
8
- if (manifest.peerDependencies?.[depName])
9
- return 'peerDependencies';
10
- return null;
11
- }
12
- //# sourceMappingURL=getDependencyTypeFromManifest.js.map
@@ -1,2 +0,0 @@
1
- import type { DependenciesOrPeersField, ProjectManifest } from '@pnpm/types';
2
- export declare function getSpecFromPackageManifest(manifest: Pick<ProjectManifest, DependenciesOrPeersField>, depName: string): string;
@@ -1,8 +0,0 @@
1
- export function getSpecFromPackageManifest(manifest, depName) {
2
- return manifest.optionalDependencies?.[depName] ??
3
- manifest.dependencies?.[depName] ??
4
- manifest.devDependencies?.[depName] ??
5
- manifest.peerDependencies?.[depName] ??
6
- '';
7
- }
8
- //# sourceMappingURL=getSpecFromPackageManifest.js.map
package/lib/index.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import type { Dependencies, IncludedDependencies, ProjectManifest } from '@pnpm/types';
2
- import { getAllUniqueSpecs } from './getAllUniqueSpecs.js';
3
- import { getSpecFromPackageManifest } from './getSpecFromPackageManifest.js';
4
- export * from './convertEnginesRuntimeToDependencies.js';
5
- export * from './getDependencyTypeFromManifest.js';
6
- export * from './updateProjectManifestObject.js';
7
- export { getAllUniqueSpecs, getSpecFromPackageManifest };
8
- export declare function filterDependenciesByType(manifest: ProjectManifest, include: IncludedDependencies): Dependencies;
9
- export declare function getAllDependenciesFromManifest(manifest: Pick<ProjectManifest, 'devDependencies' | 'dependencies' | 'optionalDependencies' | 'peerDependencies'>, opts?: {
10
- autoInstallPeers?: boolean;
11
- }): Dependencies;
@@ -1,12 +0,0 @@
1
- import { type DependenciesField, type DependenciesOrPeersField, type PinnedVersion, type ProjectManifest } from '@pnpm/types';
2
- export interface PackageSpecObject {
3
- alias: string;
4
- peer?: boolean;
5
- bareSpecifier?: string;
6
- resolvedVersion?: string;
7
- pinnedVersion?: PinnedVersion;
8
- saveType?: DependenciesField;
9
- }
10
- export declare function createVersionSpecFromResolvedVersion(resolvedVersion: string, pinnedVersion?: PinnedVersion): string | null;
11
- export declare function updateProjectManifestObject(prefix: string, packageManifest: ProjectManifest, packageSpecs: PackageSpecObject[]): Promise<ProjectManifest>;
12
- export declare function guessDependencyType(alias: string, manifest: ProjectManifest): DependenciesOrPeersField | undefined;
@@ -1,99 +0,0 @@
1
- import { packageManifestLogger } from '@pnpm/core-loggers';
2
- import { isValidPeerRange } from '@pnpm/deps.peer-range';
3
- import { DEPENDENCIES_FIELDS, DEPENDENCIES_OR_PEER_FIELDS, } from '@pnpm/types';
4
- import semver from 'semver';
5
- function getPeerSpecifier(spec, resolvedVersion, pinnedVersion) {
6
- if (isValidPeerRange(spec))
7
- return spec;
8
- const rangeFromResolved = resolvedVersion ? createVersionSpecFromResolvedVersion(resolvedVersion, pinnedVersion) : null;
9
- return rangeFromResolved ?? '*';
10
- }
11
- export function createVersionSpecFromResolvedVersion(resolvedVersion, pinnedVersion) {
12
- const parsed = semver.parse(resolvedVersion);
13
- if (!parsed)
14
- return null;
15
- if (parsed.prerelease.length)
16
- return resolvedVersion;
17
- switch (pinnedVersion ?? 'major') {
18
- case 'none':
19
- case 'major':
20
- return `^${resolvedVersion}`;
21
- case 'minor':
22
- return `~${resolvedVersion}`;
23
- case 'patch':
24
- return resolvedVersion;
25
- default:
26
- return `^${resolvedVersion}`;
27
- }
28
- }
29
- export async function updateProjectManifestObject(prefix, packageManifest, packageSpecs) {
30
- for (const packageSpec of packageSpecs) {
31
- if (packageSpec.saveType) {
32
- const spec = packageSpec.bareSpecifier ?? findSpec(packageSpec.alias, packageManifest);
33
- if (spec) {
34
- packageManifest[packageSpec.saveType] = packageManifest[packageSpec.saveType] ?? {};
35
- defineDepEntry(packageManifest[packageSpec.saveType], packageSpec.alias, spec);
36
- for (const deptype of DEPENDENCIES_FIELDS) {
37
- if (deptype !== packageSpec.saveType) {
38
- deleteDepEntry(packageManifest[deptype], packageSpec.alias);
39
- }
40
- }
41
- if (packageSpec.peer === true) {
42
- packageManifest.peerDependencies = packageManifest.peerDependencies ?? {};
43
- defineDepEntry(packageManifest.peerDependencies, packageSpec.alias, getPeerSpecifier(spec, packageSpec.resolvedVersion, packageSpec.pinnedVersion));
44
- }
45
- }
46
- }
47
- else if (packageSpec.bareSpecifier) {
48
- const usedDepType = guessDependencyType(packageSpec.alias, packageManifest) ?? 'dependencies';
49
- if (usedDepType !== 'peerDependencies') {
50
- packageManifest[usedDepType] = packageManifest[usedDepType] ?? {};
51
- defineDepEntry(packageManifest[usedDepType], packageSpec.alias, packageSpec.bareSpecifier);
52
- }
53
- }
54
- }
55
- packageManifestLogger.debug({
56
- prefix,
57
- updated: packageManifest,
58
- });
59
- return packageManifest;
60
- }
61
- function findSpec(alias, manifest) {
62
- const foundDepType = guessDependencyType(alias, manifest);
63
- if (foundDepType == null)
64
- return undefined;
65
- const deps = manifest[foundDepType];
66
- return Object.hasOwn(deps, alias) ? deps[alias] : undefined;
67
- }
68
- export function guessDependencyType(alias, manifest) {
69
- return DEPENDENCIES_OR_PEER_FIELDS.find((depField) => {
70
- const deps = manifest[depField];
71
- if (deps == null || !Object.hasOwn(deps, alias))
72
- return false;
73
- return deps[alias] === '' || Boolean(deps[alias]);
74
- });
75
- }
76
- /**
77
- * Write a dependency entry without risking prototype pollution: even when the
78
- * alias matches a name like `__proto__`, `Object.defineProperty` creates a
79
- * regular own data property rather than reaching through the setter.
80
- */
81
- function defineDepEntry(target, alias, value) {
82
- Object.defineProperty(target, alias, {
83
- value,
84
- enumerable: true,
85
- writable: true,
86
- configurable: true,
87
- });
88
- }
89
- /**
90
- * Mirror of `defineDepEntry` for deletes. The `Object.hasOwn` guard keeps the
91
- * `delete` from reaching into the prototype chain when the alias matches an
92
- * inherited property like `constructor`.
93
- */
94
- function deleteDepEntry(target, alias) {
95
- if (target != null && Object.hasOwn(target, alias)) {
96
- delete target[alias];
97
- }
98
- }
99
- //# sourceMappingURL=updateProjectManifestObject.js.map