mirror of
https://github.com/pnpm/pnpm.git
synced 2025-12-23 23:29:17 -05:00
refactor: improve type checking when finding workspace packages (#8214)
--------- Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
"@pnpm/parse-cli-args": "workspace:^",
|
||||
"@pnpm/tabtab": "^0.5.3",
|
||||
"@pnpm/workspace.find-packages": "workspace:^",
|
||||
"@pnpm/workspace.read-manifest": "workspace:^",
|
||||
"ramda": "npm:@pnpm/ramda@0.28.1",
|
||||
"render-help": "^1.0.3",
|
||||
"split-cmd": "^1.1.0"
|
||||
|
||||
@@ -2,6 +2,7 @@ import { type CompletionItem } from '@pnpm/tabtab'
|
||||
import { type CompletionFunc } from '@pnpm/command'
|
||||
import { findWorkspaceDir } from '@pnpm/find-workspace-dir'
|
||||
import { findWorkspacePackages } from '@pnpm/workspace.find-packages'
|
||||
import { readWorkspaceManifest } from '@pnpm/workspace.read-manifest'
|
||||
import { getOptionCompletions } from './getOptionType'
|
||||
import { optionTypesToCompletions } from './optionTypesToCompletions'
|
||||
|
||||
@@ -32,7 +33,9 @@ export async function complete (
|
||||
if (input.currentTypedWordType !== 'option') {
|
||||
if (input.lastOption === '--filter') {
|
||||
const workspaceDir = await findWorkspaceDir(process.cwd()) ?? process.cwd()
|
||||
const workspaceManifest = await readWorkspaceManifest(workspaceDir)
|
||||
const allProjects = await findWorkspacePackages(workspaceDir, {
|
||||
patterns: workspaceManifest?.packages,
|
||||
supportedArchitectures: {
|
||||
os: ['current'],
|
||||
cpu: ['current'],
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/find-workspace-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/read-manifest"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"devDependencies": {
|
||||
"@pnpm/assert-project": "workspace:*",
|
||||
"@pnpm/crypto.object-hasher": "workspace:*",
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@pnpm/plugin-commands-rebuild": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import path from 'path'
|
||||
import { assertProject } from '@pnpm/assert-project'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { rebuild } from '@pnpm/plugin-commands-rebuild'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { createTestIpcServer } from '@pnpm/test-ipc-server'
|
||||
@@ -31,7 +31,7 @@ test('pnpm recursive rebuild', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa('node', [
|
||||
pnpmBin,
|
||||
'install',
|
||||
@@ -101,7 +101,7 @@ test('pnpm recursive rebuild with hoisted node linker', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: ['*'] })
|
||||
await execa('node', [
|
||||
pnpmBin,
|
||||
@@ -193,7 +193,7 @@ test('rebuild multiple packages in correct order', async () => {
|
||||
preparePackages(pkgs)
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: pkgs.map(pkg => pkg.name) })
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa('node', [
|
||||
pnpmBin,
|
||||
'install',
|
||||
@@ -240,7 +240,7 @@ test('never build neverBuiltDependencies', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(
|
||||
process.cwd(),
|
||||
[]
|
||||
)
|
||||
@@ -334,7 +334,7 @@ test('only build onlyBuiltDependencies', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(
|
||||
process.cwd(),
|
||||
[]
|
||||
)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
"path": "../../worker"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/find-packages"
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
"@pnpm/test-ipc-server": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@types/is-windows": "^1.0.2",
|
||||
"@types/ramda": "0.29.12",
|
||||
"@types/which": "^2.0.2",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { exec, run } from '@pnpm/plugin-commands-script-runners'
|
||||
import { prepare, prepareEmpty, preparePackages } from '@pnpm/prepare'
|
||||
import { createTestIpcServer } from '@pnpm/test-ipc-server'
|
||||
@@ -50,7 +50,7 @@ test('pnpm recursive exec', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -90,7 +90,7 @@ test('pnpm recursive exec finds bin files of workspace projects', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -175,7 +175,7 @@ test('pnpm recursive exec sets PNPM_PACKAGE_NAME env var', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await exec.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
@@ -222,7 +222,7 @@ test('testing the bail config with "pnpm recursive exec"', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -293,7 +293,7 @@ test('pnpm recursive exec --no-sort', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -350,7 +350,7 @@ test('pnpm recursive exec --reverse', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -501,7 +501,7 @@ testOnPosixOnly('pnpm recursive exec works with PnP', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -566,7 +566,7 @@ test('pnpm recursive exec --resume-from should work', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -599,7 +599,7 @@ test('should throw error when the package specified by resume-from does not exis
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -634,7 +634,7 @@ test('pnpm exec in directory with path delimiter', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -689,7 +689,7 @@ test('pnpm recursive exec report summary', async () => {
|
||||
},
|
||||
},
|
||||
])
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
let error
|
||||
try {
|
||||
await exec.handler({
|
||||
@@ -747,7 +747,7 @@ test('pnpm recursive exec report summary with --bail', async () => {
|
||||
},
|
||||
},
|
||||
])
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
let error
|
||||
try {
|
||||
await exec.handler({
|
||||
@@ -780,7 +780,7 @@ test('pnpm exec command not found (implicit fallback)', async () => {
|
||||
},
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
let error!: Error & { hint?: string }
|
||||
try {
|
||||
await exec.handler({
|
||||
@@ -805,7 +805,7 @@ test('pnpm exec command not found (explicit call, without near name packages)',
|
||||
},
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
let error!: Error & { hint?: string }
|
||||
try {
|
||||
await exec.handler({
|
||||
@@ -830,7 +830,7 @@ test('pnpm exec command not found (explicit call, with a near name package)', as
|
||||
},
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { logger } from '@pnpm/logger'
|
||||
import { exec } from '@pnpm/plugin-commands-script-runners'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
@@ -37,7 +37,7 @@ test('pnpm exec --recursive --no-reporter-hide-prefix prints prefixes', async ()
|
||||
packages: ['packages/*'],
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
const scriptFile = path.resolve('script.js')
|
||||
fs.writeFileSync(scriptFile, `
|
||||
@@ -100,7 +100,7 @@ test('pnpm exec --recursive --reporter-hide-prefix does not print prefixes', asy
|
||||
packages: ['packages/*'],
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
const scriptFile = path.resolve('script.js')
|
||||
fs.writeFileSync(scriptFile, `
|
||||
@@ -137,7 +137,7 @@ test('pnpm exec --recursive does not print prefixes by default', async () => {
|
||||
packages: ['packages/*'],
|
||||
})
|
||||
|
||||
const { selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
const scriptFile = path.resolve('script.js')
|
||||
fs.writeFileSync(scriptFile, `
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import {
|
||||
restart,
|
||||
run,
|
||||
@@ -304,7 +304,7 @@ test('"pnpm run" prints the list of available commands, including commands of th
|
||||
writeYamlFile('pnpm-workspace.yaml', {})
|
||||
const workspaceDir = process.cwd()
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
{
|
||||
process.chdir('foo')
|
||||
@@ -393,7 +393,7 @@ test('if a script is not found but is present in the root, print an info message
|
||||
'--store-dir',
|
||||
path.resolve(DEFAULT_OPTS.storeDir),
|
||||
])
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
let err!: PnpmError
|
||||
try {
|
||||
|
||||
@@ -2,7 +2,8 @@ import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { run } from '@pnpm/plugin-commands-script-runners'
|
||||
import { filterPkgsBySelectorObjects, readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPkgsBySelectorObjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { createTestIpcServer } from '@pnpm/test-ipc-server'
|
||||
import execa from 'execa'
|
||||
@@ -56,7 +57,7 @@ test('pnpm recursive run', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -123,7 +124,7 @@ test('pnpm recursive run with enable-pre-post-scripts', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -191,7 +192,7 @@ test('pnpm recursive run reversed', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -237,7 +238,7 @@ test('pnpm recursive run concurrently', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -289,7 +290,7 @@ test('`pnpm recursive run` fails when run without filters and no package has the
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -357,7 +358,7 @@ test('`pnpm recursive run` fails when run with a filter that includes all packag
|
||||
console.log('recursive run does not fail when if-present is true')
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
ifPresent: true,
|
||||
recursive: true,
|
||||
@@ -368,7 +369,7 @@ test('`pnpm recursive run` fails when run with a filter that includes all packag
|
||||
try {
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
@@ -407,7 +408,7 @@ test('`pnpm recursive run` succeeds when run against a subset of packages and no
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects } = await readProjects(process.cwd(), [])
|
||||
const { allProjects } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -464,7 +465,7 @@ test('"pnpm run --filter <pkg>" without specifying the script name', async () =>
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects } = await readProjects(process.cwd(), [])
|
||||
const { allProjects } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -562,7 +563,7 @@ test('testing the bail config with "pnpm recursive run"', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa(pnpmBin, [
|
||||
'install',
|
||||
'-r',
|
||||
@@ -634,7 +635,7 @@ test('pnpm recursive run with filtering', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects } = await readProjects(process.cwd(), [])
|
||||
const { allProjects } = await filterPackagesFromDir(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPkgsBySelectorObjects(
|
||||
allProjects,
|
||||
[{ namePattern: 'project-1' }],
|
||||
@@ -688,7 +689,7 @@ test('`pnpm recursive run` should always trust the scripts', async () => {
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
}, ['build'])
|
||||
delete process.env.npm_config_unsafe_perm
|
||||
|
||||
@@ -735,7 +736,7 @@ test('`pnpm run -r` should avoid infinite recursion', async () => {
|
||||
'--store-dir',
|
||||
path.resolve(DEFAULT_OPTS.storeDir),
|
||||
])
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -777,7 +778,7 @@ test('`pnpm recursive run` should fail when no script in package with requiredSc
|
||||
try {
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
rootProjectManifest: {
|
||||
@@ -839,7 +840,7 @@ test('`pnpm -r --resume-from run` should executed from given package', async ()
|
||||
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
resumeFrom: 'project-3',
|
||||
@@ -905,7 +906,7 @@ test('pnpm run with RegExp script selector should work on recursive', async () =
|
||||
])
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
rootProjectManifest: {
|
||||
@@ -974,7 +975,7 @@ test('pnpm recursive run report summary', async () => {
|
||||
try {
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
reportSummary: true,
|
||||
@@ -1036,7 +1037,7 @@ test('pnpm recursive run report summary with --bail', async () => {
|
||||
try {
|
||||
await run.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [{ namePattern: '*' }]),
|
||||
...await filterPackagesFromDir(process.cwd(), [{ namePattern: '*' }]),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
reportSummary: true,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import path from 'path'
|
||||
import { filterPkgsBySelectorObjects, readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPkgsBySelectorObjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { test as testCommand } from '@pnpm/plugin-commands-script-runners'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { createTestIpcServer } from '@pnpm/test-ipc-server'
|
||||
@@ -51,7 +52,7 @@ test('pnpm recursive test', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa('node', [
|
||||
pnpmBin,
|
||||
'install',
|
||||
@@ -104,7 +105,7 @@ test('`pnpm recursive test` does not fail if none of the packages has a test com
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await execa('node', [
|
||||
pnpmBin,
|
||||
'install',
|
||||
@@ -150,7 +151,7 @@ test('pnpm recursive test with filtering', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects } = await readProjects(process.cwd(), [])
|
||||
const { allProjects } = await filterPackagesFromDir(process.cwd(), [])
|
||||
const { selectedProjectsGraph } = await filterPkgsBySelectorObjects(
|
||||
allProjects,
|
||||
[{ namePattern: 'project-1' }],
|
||||
|
||||
@@ -54,6 +54,9 @@
|
||||
{
|
||||
"path": "../../store/store-path"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
},
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
},
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/patching/plugin-commands-patching#readme",
|
||||
"devDependencies": {
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/plugin-commands-patching": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@types/normalize-path": "^3.0.2",
|
||||
"@types/ramda": "0.29.12",
|
||||
"@types/semver": "7.5.3",
|
||||
|
||||
@@ -3,7 +3,7 @@ import os from 'os'
|
||||
import path from 'path'
|
||||
import { prepare, preparePackages, tempDir } from '@pnpm/prepare'
|
||||
import { install } from '@pnpm/plugin-commands-installation'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { sync as writeYamlFile } from 'write-yaml-file'
|
||||
import tempy from 'tempy'
|
||||
import { patch, patchCommit, patchRemove } from '@pnpm/plugin-commands-patching'
|
||||
@@ -545,7 +545,7 @@ describe('patch and commit in workspaces', () => {
|
||||
})
|
||||
|
||||
test('patch commit should work in workspaces', async () => {
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
cacheDir,
|
||||
@@ -599,7 +599,7 @@ describe('patch and commit in workspaces', () => {
|
||||
})
|
||||
|
||||
test('patch and patch-commit should work with shared-workspace-lockfile=false', async () => {
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
cacheDir,
|
||||
@@ -661,7 +661,7 @@ describe('patch and commit in workspaces', () => {
|
||||
})
|
||||
|
||||
test('reusing existing patch file should work with shared-workspace-lockfile=false', async () => {
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
cacheDir,
|
||||
@@ -724,7 +724,7 @@ describe('patch and commit in workspaces', () => {
|
||||
})
|
||||
|
||||
test('patch and patch-commit for git hosted dependency', async () => {
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
cacheDir,
|
||||
@@ -810,7 +810,7 @@ describe('patch with custom modules-dir and virtual-store-dir', () => {
|
||||
test('should work with custom modules-dir and virtual-store-dir', async () => {
|
||||
const manifest = fs.readFileSync(path.join(customModulesDirFixture, 'package.json'), 'utf8')
|
||||
const lockfileYaml = fs.readFileSync(path.join(customModulesDirFixture, 'pnpm-lock.yaml'), 'utf8')
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(customModulesDirFixture, [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(customModulesDirFixture, [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
cacheDir,
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
"path": "../../store/store-connection-manager"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../apply-patch"
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
"@pnpm/test-fixtures": "workspace:*",
|
||||
"@pnpm/test-ipc-server": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@types/proxyquire": "^1.3.31",
|
||||
"@types/ramda": "0.29.12",
|
||||
"@types/sinon": "^10.0.20",
|
||||
|
||||
@@ -295,6 +295,7 @@ export type InstallCommandOptions = Pick<Config,
|
||||
| 'virtualStoreDir'
|
||||
| 'workspaceConcurrency'
|
||||
| 'workspaceDir'
|
||||
| 'workspacePackagePatterns'
|
||||
| 'extraEnv'
|
||||
| 'resolutionMode'
|
||||
| 'ignoreWorkspaceCycles'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import path from 'path'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type Lockfile } from '@pnpm/lockfile-types'
|
||||
import { add } from '@pnpm/plugin-commands-installation'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
@@ -19,7 +19,7 @@ test('recursive add --save-dev, --save-peer on workspace with multiple lockfiles
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
await add.handler({
|
||||
...DEFAULT_OPTS,
|
||||
@@ -109,7 +109,7 @@ test('recursive add --save-dev, --save-peer on workspace with single lockfile',
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
await add.handler({
|
||||
...DEFAULT_OPTS,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { DedupeCheckIssuesError } from '@pnpm/dedupe.check'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type Lockfile } from '@pnpm/lockfile-types'
|
||||
import { dedupe, install } from '@pnpm/plugin-commands-installation'
|
||||
import { prepare } from '@pnpm/prepare'
|
||||
@@ -144,7 +144,7 @@ async function testFixture (fixtureName: string) {
|
||||
const project = prepare(undefined)
|
||||
f.copy(fixtureName, project.dir())
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(project.dir(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(project.dir(), [])
|
||||
|
||||
const opts = {
|
||||
...DEFAULT_OPTS,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { install } from '@pnpm/plugin-commands-installation'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { DEFAULT_OPTS } from './utils'
|
||||
import type { PnpmError } from '@pnpm/error'
|
||||
@@ -18,7 +18,7 @@ test('should error if disallow-workspace-cycles is set', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
let err!: PnpmError
|
||||
try {
|
||||
@@ -51,7 +51,7 @@ test('should not error if disallow-workspace-cycles is not set', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
let err!: PnpmError
|
||||
try {
|
||||
@@ -82,7 +82,7 @@ test('should not error if there are no cyclic dependencies', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
|
||||
let err!: PnpmError
|
||||
try {
|
||||
|
||||
@@ -3,7 +3,7 @@ import path from 'path'
|
||||
import { assertProject } from '@pnpm/assert-project'
|
||||
import { importCommand } from '@pnpm/plugin-commands-installation'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { fixtures } from '@pnpm/test-fixtures'
|
||||
import tempy from 'tempy'
|
||||
|
||||
@@ -43,7 +43,7 @@ const DEFAULT_OPTS = {
|
||||
|
||||
test('import from shared yarn.lock of monorepo', async () => {
|
||||
f.prepare('workspace-has-shared-yarn-lock')
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await importCommand.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects: allProjects as any, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
@@ -67,7 +67,7 @@ test('import from shared yarn.lock of monorepo', async () => {
|
||||
|
||||
test('import from shared package-lock.json of monorepo', async () => {
|
||||
f.prepare('workspace-has-shared-package-lock-json')
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await importCommand.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects: allProjects as any, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
@@ -91,7 +91,7 @@ test('import from shared package-lock.json of monorepo', async () => {
|
||||
|
||||
test('import from shared npm-shrinkwrap.json of monorepo', async () => {
|
||||
f.prepare('workspace-has-shared-npm-shrinkwrap-json')
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await importCommand.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects: allProjects as any, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { LOCKFILE_VERSION } from '@pnpm/constants'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { install, unlink } from '@pnpm/plugin-commands-installation'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { DEFAULT_OPTS } from './utils'
|
||||
@@ -26,7 +26,7 @@ test('recursive linking/unlinking', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -91,7 +91,7 @@ test('recursive unlink specific package', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type LockfileFile } from '@pnpm/lockfile-types'
|
||||
import { add, install, remove, update } from '@pnpm/plugin-commands-installation'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
@@ -34,7 +34,7 @@ test('recursive add/remove', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -95,7 +95,7 @@ test('recursive add/remove in workspace with many lockfiles', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -185,7 +185,7 @@ test('recursive install with package that has link', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
@@ -220,7 +220,7 @@ test('running `pnpm recursive` on a subset of packages', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
@@ -272,7 +272,7 @@ test('running `pnpm recursive` only for packages in subdirectories of cwd', asyn
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
@@ -307,7 +307,7 @@ test('recursive installation fails when installation in one of the packages fail
|
||||
try {
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
@@ -334,7 +334,7 @@ test('second run of `recursive install` after package.json has been edited manua
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -405,7 +405,7 @@ test('recursive --filter ignore excluded packages', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [
|
||||
...await filterPackagesFromDir(process.cwd(), [
|
||||
{ includeDependencies: true, namePattern: 'project-1' },
|
||||
]),
|
||||
dir: process.cwd(),
|
||||
@@ -449,7 +449,7 @@ test('recursive filter multiple times', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [
|
||||
...await filterPackagesFromDir(process.cwd(), [
|
||||
{ namePattern: 'project-1' },
|
||||
{ namePattern: 'project-2' },
|
||||
]),
|
||||
@@ -487,7 +487,7 @@ test('recursive install --no-bail', async () => {
|
||||
try {
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
bail: false,
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
@@ -520,7 +520,7 @@ test('installing with "workspace=true" should work even if link-workspace-packag
|
||||
|
||||
await update.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
linkWorkspacePackages: false,
|
||||
lockfileDir: process.cwd(),
|
||||
@@ -561,7 +561,7 @@ test('installing with "workspace=true" should work even if link-workspace-packag
|
||||
|
||||
await update.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
linkWorkspacePackages: false,
|
||||
lockfileDir: process.cwd(),
|
||||
@@ -605,7 +605,7 @@ test('recursive install on workspace with custom lockfile-dir', async () => {
|
||||
])
|
||||
|
||||
const lockfileDir = path.resolve('_')
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -643,7 +643,7 @@ test('recursive install in a monorepo with different modules directories', async
|
||||
fs.writeFileSync('project-1/.npmrc', 'modules-dir=modules_1', 'utf8')
|
||||
fs.writeFileSync('project-2/.npmrc', 'modules-dir=modules_2', 'utf8')
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -674,7 +674,7 @@ test('recursive install in a monorepo with parsing env variables', async () => {
|
||||
// eslint-disable-next-line no-template-curly-in-string
|
||||
fs.writeFileSync('project/.npmrc', 'modules-dir=${SOME_NAME}_modules', 'utf8')
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -714,7 +714,7 @@ test('prefer-workspace-package', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
linkWorkspacePackages: true,
|
||||
preferWorkspacePackages: true,
|
||||
@@ -742,7 +742,7 @@ test('installing in monorepo with shared lockfile should work on virtual drives'
|
||||
const virtualPath = process.cwd() + '-virtual-disk'
|
||||
// symlink simulates windows' subst
|
||||
await symlinkDir(process.cwd(), virtualPath)
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await readProjects(virtualPath, [])
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } = await filterPackagesFromDir(virtualPath, [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
lockfileDir: virtualPath,
|
||||
@@ -777,7 +777,7 @@ test('pass readPackage with shared lockfile', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
workspaceDir: process.cwd(),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import path from 'path'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type Lockfile } from '@pnpm/lockfile-types'
|
||||
import { add, install, update } from '@pnpm/plugin-commands-installation'
|
||||
import { prepare, preparePackages } from '@pnpm/prepare'
|
||||
@@ -223,7 +223,7 @@ test('interactive update of dev dependencies only', async () => {
|
||||
],
|
||||
})
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(
|
||||
process.cwd(),
|
||||
[]
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { preparePackages } from '@pnpm/prepare'
|
||||
import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock'
|
||||
import { update, install } from '@pnpm/plugin-commands-installation'
|
||||
import * as enquirer from 'enquirer'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
|
||||
jest.mock('enquirer', () => ({ prompt: jest.fn() }))
|
||||
|
||||
@@ -67,7 +67,7 @@ test('interactive recursive should not error on git specifier override', async (
|
||||
updateDependencies: [],
|
||||
})
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
const sharedOptions = {
|
||||
...DEFAULT_OPTIONS,
|
||||
allProjects,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { type Lockfile } from '@pnpm/lockfile-types'
|
||||
import { readModulesManifest } from '@pnpm/modules-yaml'
|
||||
import { install, update } from '@pnpm/plugin-commands-installation'
|
||||
@@ -29,7 +29,7 @@ test('recursive update', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -75,7 +75,7 @@ test('recursive update prod dependencies only', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -144,7 +144,7 @@ test('recursive update with pattern', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -202,7 +202,7 @@ test('recursive update with pattern and name in project', async () => {
|
||||
|
||||
const lockfileDir = process.cwd()
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -289,7 +289,7 @@ test('recursive update --latest foo should only update projects that have foo',
|
||||
|
||||
const lockfileDir = process.cwd()
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -349,7 +349,7 @@ test('recursive update --latest foo should only update packages that have foo',
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -401,7 +401,7 @@ test('recursive update in workspace should not add new dependencies', async () =
|
||||
try {
|
||||
await update.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
depth: 0,
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
@@ -434,7 +434,7 @@ test('recursive update with aliased workspace dependency (#7975)', async () => {
|
||||
|
||||
await update.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
depth: 0,
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { install } from '@pnpm/plugin-commands-installation'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { logger } from '@pnpm/logger'
|
||||
import { DEFAULT_OPTS } from './utils'
|
||||
@@ -26,7 +26,7 @@ test('should warn about cyclic dependencies', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -57,7 +57,7 @@ test('should not warn about cyclic dependencies if ignore-workspace-cycles is se
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -84,7 +84,7 @@ test('should not warn about cyclic dependencies if there are not', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
|
||||
@@ -81,6 +81,9 @@
|
||||
{
|
||||
"path": "../../store/store-connection-manager"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
},
|
||||
|
||||
73
pnpm-lock.yaml
generated
73
pnpm-lock.yaml
generated
@@ -576,6 +576,9 @@ importers:
|
||||
'@pnpm/workspace.find-packages':
|
||||
specifier: workspace:^
|
||||
version: link:../../workspace/find-packages
|
||||
'@pnpm/workspace.read-manifest':
|
||||
specifier: workspace:^
|
||||
version: link:../../workspace/read-manifest
|
||||
ramda:
|
||||
specifier: npm:@pnpm/ramda@0.28.1
|
||||
version: '@pnpm/ramda@0.28.1'
|
||||
@@ -1330,9 +1333,6 @@ importers:
|
||||
'@pnpm/crypto.object-hasher':
|
||||
specifier: workspace:*
|
||||
version: link:../../crypto/object-hasher
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/plugin-commands-rebuild':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
@@ -1348,6 +1348,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/ramda':
|
||||
specifier: 0.29.12
|
||||
version: 0.29.12
|
||||
@@ -1475,6 +1478,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/is-windows':
|
||||
specifier: ^1.0.2
|
||||
version: 1.0.2
|
||||
@@ -2996,9 +3002,6 @@ importers:
|
||||
specifier: ^1.0.1
|
||||
version: 1.0.1
|
||||
devDependencies:
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/plugin-commands-patching':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
@@ -3011,6 +3014,9 @@ importers:
|
||||
'@pnpm/test-fixtures':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-fixtures
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/normalize-path':
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
@@ -4121,6 +4127,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/proxyquire':
|
||||
specifier: ^1.3.31
|
||||
version: 1.3.31
|
||||
@@ -4935,9 +4944,6 @@ importers:
|
||||
'@pnpm/assert-project':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/assert-project
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/lockfile-types':
|
||||
specifier: workspace:*
|
||||
version: link:../../lockfile/lockfile-types
|
||||
@@ -4950,6 +4956,9 @@ importers:
|
||||
'@pnpm/registry-mock':
|
||||
specifier: 3.31.0
|
||||
version: 3.31.0(encoding@0.1.13)(typanion@3.14.0)
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
|
||||
releasing/plugin-commands-publishing:
|
||||
dependencies:
|
||||
@@ -5038,9 +5047,6 @@ importers:
|
||||
specifier: ^4.3.0
|
||||
version: 4.3.0
|
||||
devDependencies:
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/plugin-commands-publishing':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
@@ -5053,6 +5059,9 @@ importers:
|
||||
'@pnpm/test-ipc-server':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-ipc-server
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/cross-spawn':
|
||||
specifier: ^6.0.6
|
||||
version: 6.0.6
|
||||
@@ -5607,9 +5616,6 @@ importers:
|
||||
specifier: ^7.6.2
|
||||
version: 7.6.2
|
||||
devDependencies:
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/plugin-commands-installation':
|
||||
specifier: workspace:*
|
||||
version: link:../../pkg-manager/plugin-commands-installation
|
||||
@@ -5628,6 +5634,9 @@ importers:
|
||||
'@pnpm/test-fixtures':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-fixtures
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/ramda':
|
||||
specifier: 0.29.12
|
||||
version: 0.29.12
|
||||
@@ -5689,6 +5698,9 @@ importers:
|
||||
'@pnpm/registry-mock':
|
||||
specifier: 3.31.0
|
||||
version: 3.31.0(encoding@0.1.13)(typanion@3.14.0)
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/ramda':
|
||||
specifier: 0.29.12
|
||||
version: 0.29.12
|
||||
@@ -5765,9 +5777,6 @@ importers:
|
||||
'@pnpm/constants':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/constants
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-workspace-packages
|
||||
'@pnpm/plugin-commands-installation':
|
||||
specifier: workspace:*
|
||||
version: link:../../pkg-manager/plugin-commands-installation
|
||||
@@ -5783,6 +5792,9 @@ importers:
|
||||
'@pnpm/test-fixtures':
|
||||
specifier: workspace:*
|
||||
version: link:../../__utils__/test-fixtures
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: link:../../workspace/filter-packages-from-dir
|
||||
'@types/ramda':
|
||||
specifier: 0.29.12
|
||||
version: 0.29.12
|
||||
@@ -6417,6 +6429,25 @@ importers:
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
|
||||
workspace/filter-packages-from-dir:
|
||||
dependencies:
|
||||
'@pnpm/filter-workspace-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../filter-workspace-packages
|
||||
'@pnpm/workspace.find-packages':
|
||||
specifier: workspace:*
|
||||
version: link:../find-packages
|
||||
'@pnpm/workspace.read-manifest':
|
||||
specifier: workspace:*
|
||||
version: link:../read-manifest
|
||||
devDependencies:
|
||||
'@pnpm/types':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/types
|
||||
'@pnpm/workspace.filter-packages-from-dir':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
|
||||
workspace/filter-workspace-packages:
|
||||
dependencies:
|
||||
'@pnpm/error':
|
||||
@@ -6495,13 +6526,13 @@ importers:
|
||||
'@pnpm/util.lex-comparator':
|
||||
specifier: 3.0.0
|
||||
version: 3.0.0
|
||||
'@pnpm/workspace.read-manifest':
|
||||
specifier: workspace:*
|
||||
version: link:../read-manifest
|
||||
devDependencies:
|
||||
'@pnpm/workspace.find-packages':
|
||||
specifier: workspace:*
|
||||
version: 'link:'
|
||||
'@pnpm/workspace.read-manifest':
|
||||
specifier: workspace:*
|
||||
version: link:../read-manifest
|
||||
|
||||
workspace/find-workspace-dir:
|
||||
dependencies:
|
||||
|
||||
@@ -1397,8 +1397,9 @@ test('root package is included when not specified', async () => {
|
||||
{ tempDir: `${tempDir}/project` }
|
||||
)
|
||||
)
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: ['project-', '!store/**'] })
|
||||
const workspacePackages = await findWorkspacePackages(tempDir, { engineStrict: false })
|
||||
const workspacePackagePatterns = ['project-', '!store/**']
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: workspacePackagePatterns })
|
||||
const workspacePackages = await findWorkspacePackages(tempDir, { engineStrict: false, patterns: workspacePackagePatterns })
|
||||
|
||||
expect(workspacePackages.some(project => {
|
||||
const relativePath = path.join('.', path.relative(tempDir, project.dir))
|
||||
@@ -1434,8 +1435,9 @@ test("root package can't be ignored using '!.' (or any other such glob)", async
|
||||
{ tempDir: `${tempDir}/project` }
|
||||
)
|
||||
)
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: ['project-', '!.', '!./', '!store/**'] })
|
||||
const workspacePackages = await findWorkspacePackages(tempDir, { engineStrict: false })
|
||||
const workspacePackagePatterns = ['project-', '!.', '!./', '!store/**']
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: workspacePackagePatterns })
|
||||
const workspacePackages = await findWorkspacePackages(tempDir, { engineStrict: false, patterns: workspacePackagePatterns })
|
||||
|
||||
expect(workspacePackages.some(project => {
|
||||
const relativePath = path.join('.', path.relative(tempDir, project.dir))
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/releasing/plugin-commands-deploy#readme",
|
||||
"devDependencies": {
|
||||
"@pnpm/assert-project": "workspace:*",
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@pnpm/lockfile-types": "workspace:*",
|
||||
"@pnpm/plugin-commands-deploy": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
|
||||
@@ -4,7 +4,7 @@ import { deploy } from '@pnpm/plugin-commands-deploy'
|
||||
import { assertProject } from '@pnpm/assert-project'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
import { logger } from '@pnpm/logger'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { DEFAULT_OPTS } from './utils'
|
||||
|
||||
test('deploy', async () => {
|
||||
@@ -47,7 +47,7 @@ test('deploy', async () => {
|
||||
fs.writeFileSync(`${name}/index.js`, '', 'utf8')
|
||||
})
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
|
||||
await deploy.handler({
|
||||
...DEFAULT_OPTS,
|
||||
@@ -92,7 +92,7 @@ test('deploy fails when the destination directory exists and is not empty', asyn
|
||||
fs.writeFileSync(deployPath, 'aaa', 'utf8')
|
||||
const deployFullPath = path.resolve(deployPath)
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [{ namePattern: 'project' }])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [{ namePattern: 'project' }])
|
||||
|
||||
await expect(() =>
|
||||
deploy.handler({
|
||||
@@ -134,7 +134,7 @@ test('forced deploy succeeds with a warning when destination directory exists an
|
||||
fs.writeFileSync(deployPath, 'aaa', 'utf8')
|
||||
const deployFullPath = path.resolve(deployPath)
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [{ namePattern: 'project' }])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [{ namePattern: 'project' }])
|
||||
|
||||
await deploy.handler({
|
||||
...DEFAULT_OPTS,
|
||||
@@ -193,7 +193,7 @@ test('deploy with dedupePeerDependents=true ignores the value of dedupePeerDepen
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph, allProjectsGraph } = await readProjects(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
const { allProjects, selectedProjectsGraph, allProjectsGraph } = await filterPackagesFromDir(process.cwd(), [{ namePattern: 'project-1' }])
|
||||
|
||||
await deploy.handler({
|
||||
...DEFAULT_OPTS,
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
"path": "../../pkg-manager/plugin-commands-installation"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/releasing/plugin-commands-publishing#readme",
|
||||
"devDependencies": {
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@pnpm/plugin-commands-publishing": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { streamParser } from '@pnpm/logger'
|
||||
import { publish } from '@pnpm/plugin-commands-publishing'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
@@ -74,7 +74,7 @@ test('recursive publish', async () => {
|
||||
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
dryRun: true,
|
||||
recursive: true,
|
||||
@@ -92,7 +92,7 @@ test('recursive publish', async () => {
|
||||
process.env.npm_config_userconfig = path.join('.npmrc')
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
}, [])
|
||||
@@ -110,7 +110,7 @@ test('recursive publish', async () => {
|
||||
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
tag: 'next',
|
||||
@@ -161,7 +161,7 @@ test('print info when no packages are published', async () => {
|
||||
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
dryRun: true,
|
||||
recursive: true,
|
||||
@@ -193,7 +193,7 @@ test('packages are released even if their current version is published, when for
|
||||
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
force: true,
|
||||
dir: process.cwd(),
|
||||
dryRun: true,
|
||||
@@ -257,7 +257,7 @@ test('recursive publish writes publish summary', async () => {
|
||||
process.env.npm_config_userconfig = path.join('.npmrc')
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
reportSummary: true,
|
||||
@@ -271,7 +271,7 @@ test('recursive publish writes publish summary', async () => {
|
||||
|
||||
await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
reportSummary: true,
|
||||
@@ -302,7 +302,7 @@ test('when publish some package throws an error, exit code should be non-zero',
|
||||
|
||||
const result = await publish.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
force: true,
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
"path": "../../resolving/resolver-base"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/sort-packages"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/reviewing/plugin-commands-licenses#readme",
|
||||
"devDependencies": {
|
||||
"@pnpm/constants": "workspace:*",
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@pnpm/plugin-commands-installation": "workspace:*",
|
||||
"@pnpm/plugin-commands-licenses": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
|
||||
@@ -7,7 +7,7 @@ import { tempDir } from '@pnpm/prepare'
|
||||
import { fixtures } from '@pnpm/test-fixtures'
|
||||
import stripAnsi from 'strip-ansi'
|
||||
import { DEFAULT_OPTS } from './utils'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
|
||||
const f = fixtures(__dirname)
|
||||
|
||||
@@ -123,7 +123,7 @@ test('pnpm licenses: path should be correct for workspaces', async () => {
|
||||
f.copy('workspace-licenses', workspaceDir)
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } =
|
||||
await readProjects(workspaceDir, [])
|
||||
await filterPackagesFromDir(workspaceDir, [])
|
||||
|
||||
const storeDir = path.join(workspaceDir, 'store')
|
||||
await install.handler({
|
||||
@@ -173,7 +173,7 @@ test('pnpm licenses: filter outputs', async () => {
|
||||
f.copy('workspace-licenses', workspaceDir)
|
||||
|
||||
const { allProjects, allProjectsGraph, selectedProjectsGraph } =
|
||||
await readProjects(workspaceDir, [])
|
||||
await filterPackagesFromDir(workspaceDir, [])
|
||||
|
||||
const storeDir = path.join(workspaceDir, 'store')
|
||||
await install.handler({
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"path": "../../store/store-path"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../license-scanner"
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
"@pnpm/plugin-commands-listing": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
"@pnpm/registry-mock": "3.31.0",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@types/ramda": "0.29.12",
|
||||
"execa": "npm:safe-execa@0.1.2",
|
||||
"strip-ansi": "^6.0.1",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { type PnpmError } from '@pnpm/error'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { install } from '@pnpm/plugin-commands-installation'
|
||||
import { list, why } from '@pnpm/plugin-commands-listing'
|
||||
import { prepare, preparePackages } from '@pnpm/prepare'
|
||||
@@ -34,7 +34,7 @@ test('recursive list', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -96,7 +96,7 @@ test('recursive list with shared-workspace-lockfile', async () => {
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
|
||||
fs.writeFileSync('.npmrc', 'shared-workspace-lockfile = true', 'utf8')
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -164,7 +164,7 @@ test('recursive list --filter', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
cacheDir: path.resolve('cache'),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
@@ -175,7 +175,7 @@ test('recursive list --filter', async () => {
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
...await readProjects(process.cwd(), [
|
||||
...await filterPackagesFromDir(process.cwd(), [
|
||||
{ includeDependencies: true, namePattern: 'project-1' },
|
||||
]),
|
||||
}, [])
|
||||
@@ -218,7 +218,7 @@ test('recursive list --filter link-workspace-packages=false', async () => {
|
||||
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), [], { linkWorkspacePackages: false }),
|
||||
...await filterPackagesFromDir(process.cwd(), [], { linkWorkspacePackages: false }),
|
||||
cacheDir: path.resolve('cache'),
|
||||
dir: process.cwd(),
|
||||
linkWorkspacePackages: false,
|
||||
@@ -230,7 +230,7 @@ test('recursive list --filter link-workspace-packages=false', async () => {
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
...await readProjects(process.cwd(), [
|
||||
...await filterPackagesFromDir(process.cwd(), [
|
||||
{ includeDependencies: true, namePattern: 'project-1' },
|
||||
], { linkWorkspacePackages: false }),
|
||||
}, [])
|
||||
@@ -251,7 +251,7 @@ test('`pnpm recursive why` should fail if no package name was provided', async (
|
||||
try {
|
||||
await why.handler({
|
||||
...DEFAULT_OPTS,
|
||||
...await readProjects(process.cwd(), []),
|
||||
...await filterPackagesFromDir(process.cwd(), []),
|
||||
dir: process.cwd(),
|
||||
recursive: true,
|
||||
}, [])
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
{
|
||||
"path": "../../pkg-manager/plugin-commands-installation"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
},
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/reviewing/plugin-commands-outdated#readme",
|
||||
"devDependencies": {
|
||||
"@pnpm/constants": "workspace:*",
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*",
|
||||
"@pnpm/plugin-commands-installation": "workspace:*",
|
||||
"@pnpm/plugin-commands-outdated": "workspace:*",
|
||||
"@pnpm/prepare": "workspace:*",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import path from 'path'
|
||||
import { readProjects } from '@pnpm/filter-workspace-packages'
|
||||
import { filterPackagesFromDir } from '@pnpm/workspace.filter-packages-from-dir'
|
||||
import { install } from '@pnpm/plugin-commands-installation'
|
||||
import { outdated } from '@pnpm/plugin-commands-outdated'
|
||||
import { preparePackages } from '@pnpm/prepare'
|
||||
@@ -38,7 +38,7 @@ test('pnpm recursive outdated', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -263,7 +263,7 @@ test('pnpm recursive outdated: format json when there are no outdated dependenci
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
const { output, exitCode } = await outdated.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
@@ -308,7 +308,7 @@ test('pnpm recursive outdated in workspace with shared lockfile', async () => {
|
||||
},
|
||||
])
|
||||
|
||||
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
||||
const { allProjects, selectedProjectsGraph } = await filterPackagesFromDir(process.cwd(), [])
|
||||
await install.handler({
|
||||
...DEFAULT_OPTS,
|
||||
allProjects,
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
"path": "../../store/store-path"
|
||||
},
|
||||
{
|
||||
"path": "../../workspace/filter-workspace-packages"
|
||||
"path": "../../workspace/filter-packages-from-dir"
|
||||
},
|
||||
{
|
||||
"path": "../outdated"
|
||||
|
||||
15
workspace/filter-packages-from-dir/README.md
Normal file
15
workspace/filter-packages-from-dir/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# @pnpm/workspace.filter-packages-from-dir
|
||||
|
||||
> Filters packages in a directory
|
||||
|
||||
[](https://www.npmjs.com/package/@pnpm/workspace.filter-packages-from-dir)
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
pnpm add @pnpm/workspace.filter-packages-from-dir
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
43
workspace/filter-packages-from-dir/package.json
Normal file
43
workspace/filter-packages-from-dir/package.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "@pnpm/workspace.filter-packages-from-dir",
|
||||
"version": "0.0.0",
|
||||
"description": "Filters packages in a directory",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"files": [
|
||||
"lib",
|
||||
"!*.map"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18.12"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint \"src/**/*.ts\"",
|
||||
"test": "pnpm run compile",
|
||||
"prepublishOnly": "pnpm run compile",
|
||||
"compile": "tsc --build && pnpm run lint --fix"
|
||||
},
|
||||
"repository": "https://github.com/pnpm/pnpm/blob/main/workspace/filter-packages-from-dir",
|
||||
"keywords": [
|
||||
"pnpm9",
|
||||
"pnpm"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pnpm/pnpm/issues"
|
||||
},
|
||||
"homepage": "https://github.com/pnpm/pnpm/blob/main/workspace/filter-packages-from-dir#readme",
|
||||
"dependencies": {
|
||||
"@pnpm/filter-workspace-packages": "workspace:*",
|
||||
"@pnpm/workspace.find-packages": "workspace:*",
|
||||
"@pnpm/workspace.read-manifest": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@pnpm/types": "workspace:*",
|
||||
"@pnpm/workspace.filter-packages-from-dir": "workspace:*"
|
||||
},
|
||||
"funding": "https://opencollective.com/pnpm",
|
||||
"exports": {
|
||||
".": "./lib/index.js"
|
||||
}
|
||||
}
|
||||
36
workspace/filter-packages-from-dir/src/index.ts
Normal file
36
workspace/filter-packages-from-dir/src/index.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { type SupportedArchitectures } from '@pnpm/types'
|
||||
import { findWorkspacePackages } from '@pnpm/workspace.find-packages'
|
||||
import { readWorkspaceManifest } from '@pnpm/workspace.read-manifest'
|
||||
import { filterPkgsBySelectorObjects, type PackageSelector, type ReadProjectsResult } from '@pnpm/filter-workspace-packages'
|
||||
|
||||
export async function filterPackagesFromDir (
|
||||
workspaceDir: string,
|
||||
pkgSelectors: PackageSelector[],
|
||||
opts?: {
|
||||
engineStrict?: boolean
|
||||
linkWorkspacePackages?: boolean
|
||||
changedFilesIgnorePattern?: string[]
|
||||
supportedArchitectures?: SupportedArchitectures
|
||||
}
|
||||
): Promise<ReadProjectsResult> {
|
||||
const workspaceManifest = await readWorkspaceManifest(workspaceDir)
|
||||
const allProjects = await findWorkspacePackages(workspaceDir, {
|
||||
patterns: workspaceManifest?.packages,
|
||||
engineStrict: opts?.engineStrict,
|
||||
supportedArchitectures: opts?.supportedArchitectures ?? {
|
||||
os: ['current'],
|
||||
cpu: ['current'],
|
||||
libc: ['current'],
|
||||
},
|
||||
})
|
||||
const { allProjectsGraph, selectedProjectsGraph } = await filterPkgsBySelectorObjects(
|
||||
allProjects,
|
||||
pkgSelectors,
|
||||
{
|
||||
linkWorkspacePackages: opts?.linkWorkspacePackages,
|
||||
workspaceDir,
|
||||
changedFilesIgnorePattern: opts?.changedFilesIgnorePattern,
|
||||
}
|
||||
)
|
||||
return { allProjects, allProjectsGraph, selectedProjectsGraph }
|
||||
}
|
||||
25
workspace/filter-packages-from-dir/tsconfig.json
Normal file
25
workspace/filter-packages-from-dir/tsconfig.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"extends": "@pnpm/tsconfig",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"rootDir": "src"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"../../__typings__/**/*.d.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../packages/types"
|
||||
},
|
||||
{
|
||||
"path": "../filter-workspace-packages"
|
||||
},
|
||||
{
|
||||
"path": "../find-packages"
|
||||
},
|
||||
{
|
||||
"path": "../read-manifest"
|
||||
}
|
||||
]
|
||||
}
|
||||
8
workspace/filter-packages-from-dir/tsconfig.lint.json
Normal file
8
workspace/filter-packages-from-dir/tsconfig.lint.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"test/**/*.ts",
|
||||
"../../__typings__/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
@@ -36,29 +36,6 @@ export interface ReadProjectsResult {
|
||||
selectedProjectsGraph: PackageGraph<Project>
|
||||
}
|
||||
|
||||
export async function readProjects (
|
||||
workspaceDir: string,
|
||||
pkgSelectors: PackageSelector[],
|
||||
opts?: {
|
||||
engineStrict?: boolean
|
||||
linkWorkspacePackages?: boolean
|
||||
changedFilesIgnorePattern?: string[]
|
||||
supportedArchitectures?: SupportedArchitectures
|
||||
}
|
||||
): Promise<ReadProjectsResult> {
|
||||
const allProjects = await findWorkspacePackages(workspaceDir, { engineStrict: opts?.engineStrict, supportedArchitectures: opts?.supportedArchitectures ?? { os: ['current'], cpu: ['current'], libc: ['current'] } })
|
||||
const { allProjectsGraph, selectedProjectsGraph } = await filterPkgsBySelectorObjects(
|
||||
allProjects,
|
||||
pkgSelectors,
|
||||
{
|
||||
linkWorkspacePackages: opts?.linkWorkspacePackages,
|
||||
workspaceDir,
|
||||
changedFilesIgnorePattern: opts?.changedFilesIgnorePattern,
|
||||
}
|
||||
)
|
||||
return { allProjects, allProjectsGraph, selectedProjectsGraph }
|
||||
}
|
||||
|
||||
export interface FilterPackagesOptions {
|
||||
linkWorkspacePackages?: boolean
|
||||
prefix: string
|
||||
|
||||
@@ -32,12 +32,12 @@
|
||||
"@pnpm/cli-utils": "workspace:*",
|
||||
"@pnpm/fs.find-packages": "workspace:*",
|
||||
"@pnpm/types": "workspace:*",
|
||||
"@pnpm/util.lex-comparator": "3.0.0",
|
||||
"@pnpm/workspace.read-manifest": "workspace:*"
|
||||
"@pnpm/util.lex-comparator": "3.0.0"
|
||||
},
|
||||
"funding": "https://opencollective.com/pnpm",
|
||||
"devDependencies": {
|
||||
"@pnpm/workspace.find-packages": "workspace:*"
|
||||
"@pnpm/workspace.find-packages": "workspace:*",
|
||||
"@pnpm/workspace.read-manifest": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@pnpm/logger": "^5.0.0"
|
||||
|
||||
@@ -1,28 +1,39 @@
|
||||
import { packageIsInstallable } from '@pnpm/cli-utils'
|
||||
import { type ProjectManifest, type Project, type SupportedArchitectures } from '@pnpm/types'
|
||||
import { readWorkspaceManifest } from '@pnpm/workspace.read-manifest'
|
||||
import { lexCompare } from '@pnpm/util.lex-comparator'
|
||||
import { findPackages } from '@pnpm/fs.find-packages'
|
||||
import { logger } from '@pnpm/logger'
|
||||
|
||||
export type { Project }
|
||||
|
||||
export type WorkspacePackagesPatterns = 'all-packages' | string[]
|
||||
|
||||
export interface FindWorkspacePackagesOpts {
|
||||
/**
|
||||
* An array of globs for the packages included in the workspace.
|
||||
*
|
||||
* In most cases, callers should read the pnpm-workspace.yml and pass the
|
||||
* "packages" field.
|
||||
*/
|
||||
patterns?: string[]
|
||||
|
||||
engineStrict?: boolean
|
||||
packageManagerStrict?: boolean
|
||||
packageManagerStrictVersion?: boolean
|
||||
nodeVersion?: string
|
||||
sharedWorkspaceLockfile?: boolean
|
||||
supportedArchitectures?: SupportedArchitectures
|
||||
}
|
||||
|
||||
export async function findWorkspacePackages (
|
||||
workspaceRoot: string,
|
||||
opts?: {
|
||||
engineStrict?: boolean
|
||||
packageManagerStrict?: boolean
|
||||
packageManagerStrictVersion?: boolean
|
||||
nodeVersion?: string
|
||||
patterns?: string[]
|
||||
sharedWorkspaceLockfile?: boolean
|
||||
supportedArchitectures?: SupportedArchitectures
|
||||
}
|
||||
opts?: FindWorkspacePackagesOpts
|
||||
): Promise<Project[]> {
|
||||
const pkgs = await findWorkspacePackagesNoCheck(workspaceRoot, opts)
|
||||
for (const pkg of pkgs) {
|
||||
packageIsInstallable(pkg.dir, pkg.manifest, opts ?? {
|
||||
supportedArchitectures: {
|
||||
packageIsInstallable(pkg.dir, pkg.manifest, {
|
||||
...opts,
|
||||
supportedArchitectures: opts?.supportedArchitectures ?? {
|
||||
os: ['current'],
|
||||
cpu: ['current'],
|
||||
libc: ['current'],
|
||||
@@ -38,18 +49,13 @@ export async function findWorkspacePackages (
|
||||
}
|
||||
|
||||
export async function findWorkspacePackagesNoCheck (workspaceRoot: string, opts?: { patterns?: string[] }): Promise<Project[]> {
|
||||
let patterns = opts?.patterns
|
||||
if (patterns == null) {
|
||||
const workspaceManifest = await readWorkspaceManifest(workspaceRoot)
|
||||
patterns = workspaceManifest?.packages
|
||||
}
|
||||
const pkgs = await findPackages(workspaceRoot, {
|
||||
ignore: [
|
||||
'**/node_modules/**',
|
||||
'**/bower_components/**',
|
||||
],
|
||||
includeRoot: true,
|
||||
patterns,
|
||||
patterns: opts?.patterns,
|
||||
})
|
||||
pkgs.sort((pkg1: { dir: string }, pkg2: { dir: string }) => lexCompare(pkg1.dir, pkg2.dir))
|
||||
return pkgs
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
arrayOfWorkspacePackagesToMap,
|
||||
findWorkspacePackages,
|
||||
} from '@pnpm/workspace.find-packages'
|
||||
import { readWorkspaceManifest } from '@pnpm/workspace.read-manifest'
|
||||
import { logger } from '@pnpm/logger'
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -30,7 +31,16 @@ test('arrayOfWorkspacePackagesToMap() treats private packages with no version as
|
||||
})
|
||||
|
||||
test('findWorkspacePackagesNoCheck() skips engine checks', async () => {
|
||||
const pkgs = await findWorkspacePackagesNoCheck(path.join(__dirname, '__fixtures__/bad-engine'))
|
||||
const fixturePath = path.join(__dirname, '__fixtures__/bad-engine')
|
||||
|
||||
const workspaceManifest = await readWorkspaceManifest(fixturePath)
|
||||
if (workspaceManifest?.packages == null) {
|
||||
throw new Error(`Unexpected test setup failure. No pnpm-workspace.yaml packages were defined at ${fixturePath}`)
|
||||
}
|
||||
|
||||
const pkgs = await findWorkspacePackagesNoCheck(fixturePath, {
|
||||
patterns: workspaceManifest.packages,
|
||||
})
|
||||
expect(pkgs.length).toBe(1)
|
||||
expect(pkgs[0].manifest.name).toBe('pkg')
|
||||
})
|
||||
@@ -38,7 +48,13 @@ test('findWorkspacePackagesNoCheck() skips engine checks', async () => {
|
||||
test('findWorkspacePackages() output warnings for non-root workspace project', async () => {
|
||||
const fixturePath = path.join(__dirname, '__fixtures__/warning-for-non-root-project')
|
||||
|
||||
const workspaceManifest = await readWorkspaceManifest(fixturePath)
|
||||
if (workspaceManifest?.packages == null) {
|
||||
throw new Error(`Unexpected test setup failure. No pnpm-workspace.yaml packages were defined at ${fixturePath}`)
|
||||
}
|
||||
|
||||
const pkgs = await findWorkspacePackages(fixturePath, {
|
||||
patterns: workspaceManifest.packages,
|
||||
sharedWorkspaceLockfile: true,
|
||||
})
|
||||
expect(pkgs.length).toBe(3)
|
||||
|
||||
Reference in New Issue
Block a user