mirror of
https://github.com/pnpm/pnpm.git
synced 2025-12-23 23:29:17 -05:00
* fix: check for both bundleDependencies and bundledDependencies (#7411) update to code that didn't correctly check both bundleDependencies and bundledDependencies * fix: support boolean value for bundleDependencies (#7411) fix so that a 'true' value in the bundleDependencies field is correctly interpreted (as meaning all dependencies are bundled) close #7411 * fix: allow saving of boolean bundledDependencies values updates prior fix to allow saving booleans to bundledDependencies field. * fix: add test coverage for bundledDependencies fixes (#7411) add local tarball test and bundledDependencies=true test update existing tests to confirm that bundled dependencies aren't installed * fix: update registry-mock * docs: update changeset * fix: update bundleDependencies tests * Revert "fix: update registry-mock" This reverts commit0c4b7ede21. * Revert "Revert "fix: update registry-mock"" This reverts commit9828dfce91. * test: update integrities in test lockfiles * test: retry twice * test: move bundle deps test to separate file --------- Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
8
.changeset/olive-files-admire.md
Normal file
8
.changeset/olive-files-admire.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
"@pnpm/resolve-dependencies": patch
|
||||
"@pnpm/lockfile-types": patch
|
||||
"@pnpm/types": patch
|
||||
"pnpm": patch
|
||||
---
|
||||
|
||||
Added support for boolean values in 'bundleDependencies' package.json fields when installing a dependency. Fix to properly handle 'bundledDependencies' alias [#7411](https://github.com/pnpm/pnpm/issues/7411).
|
||||
@@ -116,7 +116,7 @@ export interface PackageSnapshot {
|
||||
}
|
||||
}
|
||||
transitivePeerDependencies?: string[]
|
||||
bundledDependencies?: string[]
|
||||
bundledDependencies?: string[] | boolean
|
||||
engines?: Record<string, string> & {
|
||||
node: string
|
||||
}
|
||||
|
||||
@@ -82,8 +82,8 @@ export interface BaseManifest {
|
||||
peerDependencies?: Dependencies
|
||||
peerDependenciesMeta?: PeerDependenciesMeta
|
||||
dependenciesMeta?: DependenciesMeta
|
||||
bundleDependencies?: string[]
|
||||
bundledDependencies?: string[]
|
||||
bundleDependencies?: string[] | boolean
|
||||
bundledDependencies?: string[] | boolean
|
||||
homepage?: string
|
||||
repository?: string | { url: string }
|
||||
scripts?: PackageScripts
|
||||
|
||||
Binary file not shown.
BIN
pkg-manager/core/test/fixtures/pkg-with-bundled-dependencies/pkg-with-bundled-dependencies-1.0.0.tgz
vendored
Normal file
BIN
pkg-manager/core/test/fixtures/pkg-with-bundled-dependencies/pkg-with-bundled-dependencies-1.0.0.tgz
vendored
Normal file
Binary file not shown.
101
pkg-manager/core/test/install/bundledDependencies.ts
Normal file
101
pkg-manager/core/test/install/bundledDependencies.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import { prepareEmpty } from '@pnpm/prepare'
|
||||
import { fixtures } from '@pnpm/test-fixtures'
|
||||
import { addDependenciesToPackage } from '@pnpm/core'
|
||||
import { testDefaults } from '../utils'
|
||||
|
||||
const f = fixtures(__dirname)
|
||||
|
||||
test('bundledDependencies (pkg-with-bundled-dependencies@1.0.0)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
await project.isExecutable('@pnpm.e2e/pkg-with-bundled-dependencies/node_modules/.bin/hello-world-js-bin')
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
['@pnpm.e2e/hello-world-js-bin']
|
||||
)
|
||||
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/hello-world-js-bin@1.0.0']
|
||||
).toBeUndefined()
|
||||
})
|
||||
|
||||
// covers https://github.com/pnpm/pnpm/issues/7411
|
||||
test('local tarball with bundledDependencies', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
f.copy('pkg-with-bundled-dependencies/pkg-with-bundled-dependencies-1.0.0.tgz', 'pkg.tgz')
|
||||
await addDependenciesToPackage({}, ['file:pkg.tgz'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['file:pkg.tgz'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
['@pnpm.e2e/hello-world-js-bin']
|
||||
)
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/hello-world-js-bin@1.0.0']
|
||||
).toBeUndefined()
|
||||
})
|
||||
|
||||
test('local tarball with bundledDependencies true', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
f.copy('pkg-with-bundle-dependencies-true/pkg-with-bundle-dependencies-true-1.0.0.tgz', 'pkg.tgz')
|
||||
await addDependenciesToPackage({}, ['file:pkg.tgz'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['file:pkg.tgz'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
true
|
||||
)
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/hello-world-js-bin@1.0.0']
|
||||
).toBeUndefined()
|
||||
})
|
||||
|
||||
test('bundleDependencies (pkg-with-bundle-dependencies@1.0.0)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
await project.isExecutable('@pnpm.e2e/pkg-with-bundle-dependencies/node_modules/.bin/hello-world-js-bin')
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
['@pnpm.e2e/hello-world-js-bin']
|
||||
)
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/hello-world-js-bin@1.0.0']
|
||||
).toBeUndefined()
|
||||
})
|
||||
|
||||
test('installing a package with bundleDependencies set to false (pkg-with-bundle-dependencies-false)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies-false'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
typeof lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies-false@1.0.0'].bundledDependencies
|
||||
).toEqual('undefined')
|
||||
})
|
||||
|
||||
test('installing a package with bundleDependencies set to true (pkg-with-bundle-dependencies-true)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies-true@1.0.0'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/hello-world-js-bin@1.0.0']
|
||||
).toBeUndefined()
|
||||
})
|
||||
@@ -510,47 +510,6 @@ test('big with dependencies and circular deps (babel-preset-2015)', async () =>
|
||||
expect(typeof m).toEqual('object')
|
||||
})
|
||||
|
||||
test('bundledDependencies (pkg-with-bundled-dependencies@1.0.0)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
await project.isExecutable('@pnpm.e2e/pkg-with-bundled-dependencies/node_modules/.bin/hello-world-js-bin')
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/pkg-with-bundled-dependencies@1.0.0'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
['@pnpm.e2e/hello-world-js-bin']
|
||||
)
|
||||
})
|
||||
|
||||
test('bundleDependencies (pkg-with-bundle-dependencies@1.0.0)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
await project.isExecutable('@pnpm.e2e/pkg-with-bundle-dependencies/node_modules/.bin/hello-world-js-bin')
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies@1.0.0'].bundledDependencies
|
||||
).toStrictEqual(
|
||||
['@pnpm.e2e/hello-world-js-bin']
|
||||
)
|
||||
})
|
||||
|
||||
test('installing a package with bundleDependencies set to false (pkg-with-bundle-dependencies-false)', async () => {
|
||||
const project = prepareEmpty()
|
||||
|
||||
await addDependenciesToPackage({}, ['@pnpm.e2e/pkg-with-bundle-dependencies-false'], await testDefaults({ fastUnpack: false }))
|
||||
|
||||
const lockfile = await project.readLockfile()
|
||||
expect(
|
||||
typeof lockfile.packages['/@pnpm.e2e/pkg-with-bundle-dependencies-false@1.0.0'].bundledDependencies
|
||||
).toEqual('undefined')
|
||||
})
|
||||
|
||||
test('compiled modules (ursa@0.9.1)', async () => {
|
||||
// TODO: fix this for Node.js v7
|
||||
if (!isCI || IS_WINDOWS || semver.satisfies(process.version, '>=7.0.0')) {
|
||||
|
||||
@@ -9,8 +9,11 @@ export interface WantedDependency {
|
||||
injected?: boolean
|
||||
}
|
||||
|
||||
export function getNonDevWantedDependencies (pkg: Pick<DependencyManifest, 'bundleDependencies' | 'optionalDependencies' | 'dependencies' | 'dependenciesMeta'>) {
|
||||
const bd = pkg.bundleDependencies ?? pkg.bundleDependencies
|
||||
export function getNonDevWantedDependencies (pkg: Pick<DependencyManifest, 'bundleDependencies' | 'bundledDependencies' | 'optionalDependencies' | 'dependencies' | 'dependenciesMeta'>) {
|
||||
let bd = pkg.bundledDependencies ?? pkg.bundleDependencies
|
||||
if (bd === true) {
|
||||
bd = pkg.dependencies != null ? Object.keys(pkg.dependencies) : []
|
||||
}
|
||||
const bundledDeps = new Set(Array.isArray(bd) ? bd : [])
|
||||
const filterDeps = getNotBundledDeps.bind(null, bundledDeps)
|
||||
return getWantedDependenciesFromGivenSet(
|
||||
|
||||
@@ -220,8 +220,8 @@ export interface ResolvedPackage {
|
||||
requiresBuild: boolean | SafePromiseDefer<boolean>
|
||||
additionalInfo: {
|
||||
deprecated?: string
|
||||
bundleDependencies?: string[]
|
||||
bundledDependencies?: string[]
|
||||
bundleDependencies?: string[] | boolean
|
||||
bundledDependencies?: string[] | boolean
|
||||
engines?: {
|
||||
node?: string
|
||||
npm?: string
|
||||
|
||||
@@ -152,7 +152,8 @@ function toLockfileDependency (
|
||||
if (pkg.additionalInfo.libc != null) {
|
||||
result['libc'] = pkg.additionalInfo.libc
|
||||
}
|
||||
if (Array.isArray(pkg.additionalInfo.bundledDependencies) || Array.isArray(pkg.additionalInfo.bundleDependencies)) {
|
||||
if (Array.isArray(pkg.additionalInfo.bundledDependencies) || Array.isArray(pkg.additionalInfo.bundleDependencies) ||
|
||||
typeof pkg.additionalInfo.bundledDependencies === 'boolean' || typeof pkg.additionalInfo.bundleDependencies === 'boolean') {
|
||||
result['bundledDependencies'] = pkg.additionalInfo.bundledDependencies ?? pkg.additionalInfo.bundleDependencies
|
||||
}
|
||||
if (pkg.additionalInfo.deprecated) {
|
||||
|
||||
Reference in New Issue
Block a user