Files
pnpm/exec/build-commands/test/ignoredBuilds.test.ts

86 lines
2.4 KiB
TypeScript

import path from 'path'
import fs from 'fs'
import { ignoredBuilds } from '@pnpm/exec.build-commands'
import { tempDir } from '@pnpm/prepare-temp-dir'
import { writeModulesManifest } from '@pnpm/modules-yaml'
import { type DepPath } from '@pnpm/types'
const DEFAULT_MODULES_MANIFEST = {
hoistedDependencies: {},
layoutVersion: 4,
packageManager: '',
included: {
optionalDependencies: true,
dependencies: true,
devDependencies: true,
},
pendingBuilds: [],
prunedAt: '',
skipped: [],
storeDir: '',
virtualStoreDir: '',
virtualStoreDirMaxLength: 90,
registries: {
default: '',
},
}
test('ignoredBuilds lists automatically ignored dependencies', async () => {
const dir = tempDir()
const modulesDir = path.join(dir, 'node_modules')
fs.mkdirSync(modulesDir, { recursive: true })
await writeModulesManifest(modulesDir, {
...DEFAULT_MODULES_MANIFEST,
ignoredBuilds: new Set(['foo@1.0.0' as DepPath]),
})
const output = await ignoredBuilds.handler({
dir,
modulesDir,
allowBuilds: {},
})
expect(output).toMatchSnapshot()
})
test('ignoredBuilds lists explicitly ignored dependencies', async () => {
const dir = tempDir()
const modulesDir = path.join(dir, 'node_modules')
fs.mkdirSync(modulesDir, { recursive: true })
await writeModulesManifest(modulesDir, {
...DEFAULT_MODULES_MANIFEST,
ignoredBuilds: new Set(),
})
const output = await ignoredBuilds.handler({
dir,
modulesDir,
allowBuilds: { bar: false },
})
expect(output).toMatchSnapshot()
})
test('ignoredBuilds lists both automatically and explicitly ignored dependencies', async () => {
const dir = tempDir()
const modulesDir = path.join(dir, 'node_modules')
fs.mkdirSync(modulesDir, { recursive: true })
await writeModulesManifest(modulesDir, {
...DEFAULT_MODULES_MANIFEST,
ignoredBuilds: new Set(['foo@1.0.0', 'bar@1.0.0'] as DepPath[]),
})
const output = await ignoredBuilds.handler({
dir,
modulesDir,
allowBuilds: { qar: false, zoo: false },
})
expect(output).toMatchSnapshot()
})
test('ignoredBuilds prints an info message when there is no node_modules', async () => {
const dir = tempDir()
const modulesDir = path.join(dir, 'node_modules')
const output = await ignoredBuilds.handler({
dir,
modulesDir,
allowBuilds: { qar: false, zoo: false },
})
expect(output).toMatchSnapshot()
})